Adds one activity widget for each user.

- ActivityListModel and ActivityWidget stores an AccountState to connect user and widget.

Signed-off-by: Camila San <hello@camila.codes>
This commit is contained in:
Camila San 2018-03-26 21:02:03 +02:00 committed by Roeland Jago Douma
parent 8e0c036fc3
commit b13f77c0fb
No known key found for this signature in database
GPG key ID: F941078878347C0C
5 changed files with 77 additions and 62 deletions

View file

@ -49,10 +49,11 @@
namespace OCC {
ActivityWidget::ActivityWidget(QWidget *parent)
ActivityWidget::ActivityWidget(QWidget *parent, AccountState *account)
: QWidget(parent)
, _ui(new Ui::ActivityWidget)
, _notificationRequestsRunning(0)
, _account(account)
{
_ui->setupUi(this);
@ -497,8 +498,9 @@ void ActivityWidget::slotCheckToCleanWidgets()
/* ==================================================================== */
ActivitySettings::ActivitySettings(QWidget *parent)
ActivitySettings::ActivitySettings(QWidget *parent, AccountState *account)
: QWidget(parent)
, _account(account)
{
QHBoxLayout *hbox = new QHBoxLayout(this);
setLayout(hbox);
@ -506,24 +508,24 @@ ActivitySettings::ActivitySettings(QWidget *parent)
// create a tab widget for the three activity views
_tab = new QTabWidget(this);
hbox->addWidget(_tab);
_activityWidget = new ActivityWidget(this);
_activityWidget = new ActivityWidget(this, _account);
_activityTabId = _tab->addTab(_activityWidget, Theme::instance()->applicationIcon(), tr("Server Activity"));
connect(_activityWidget, &ActivityWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard);
connect(_activityWidget, &ActivityWidget::hideActivityTab, this, &ActivitySettings::setActivityTabHidden);
connect(_activityWidget, &ActivityWidget::guiLog, this, &ActivitySettings::guiLog);
connect(_activityWidget, &ActivityWidget::newNotification, this, &ActivitySettings::slotShowActivityTab);
_protocolWidget = new ProtocolWidget(this);
_protocolTabId = _tab->addTab(_protocolWidget, Theme::instance()->syncStateIcon(SyncResult::Success), tr("Sync Protocol"));
connect(_protocolWidget, &ProtocolWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard);
// _protocolWidget = new ProtocolWidget(this);
// _protocolTabId = _tab->addTab(_protocolWidget, Theme::instance()->syncStateIcon(SyncResult::Success), tr("Sync Protocol"));
// connect(_protocolWidget, &ProtocolWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard);
_issuesWidget = new IssuesWidget(this);
_syncIssueTabId = _tab->addTab(_issuesWidget, Theme::instance()->syncStateIcon(SyncResult::Problem), QString());
slotShowIssueItemCount(0); // to display the label.
connect(_issuesWidget, &IssuesWidget::issueCountUpdated,
this, &ActivitySettings::slotShowIssueItemCount);
connect(_issuesWidget, &IssuesWidget::copyToClipboard,
this, &ActivitySettings::slotCopyToClipboard);
// _issuesWidget = new IssuesWidget(this);
// _syncIssueTabId = _tab->addTab(_issuesWidget, Theme::instance()->syncStateIcon(SyncResult::Problem), QString());
// slotShowIssueItemCount(0); // to display the label.
// connect(_issuesWidget, &IssuesWidget::issueCountUpdated,
// this, &ActivitySettings::slotShowIssueItemCount);
// connect(_issuesWidget, &IssuesWidget::copyToClipboard,
// this, &ActivitySettings::slotCopyToClipboard);
// Add a progress indicator to spin if the acitivity list is updated.
_progressIndicator = new QProgressIndicator(this);
@ -578,14 +580,14 @@ void ActivitySettings::slotShowActivityTab()
}
}
void ActivitySettings::slotShowIssuesTab(const QString &folderAlias)
{
if (_syncIssueTabId == -1)
return;
_tab->setCurrentIndex(_syncIssueTabId);
//void ActivitySettings::slotShowIssuesTab(const QString &folderAlias)
//{
// if (_syncIssueTabId == -1)
// return;
// _tab->setCurrentIndex(_syncIssueTabId);
_issuesWidget->showFolderErrors(folderAlias);
}
// _issuesWidget->showFolderErrors(folderAlias);
//}
void ActivitySettings::slotCopyToClipboard()
{
@ -601,12 +603,12 @@ void ActivitySettings::slotCopyToClipboard()
message = tr("The server activity list has been copied to the clipboard.");
} else if (idx == _protocolTabId) {
// the protocol widget
_protocolWidget->storeSyncActivity(ts);
//_protocolWidget->storeSyncActivity(ts);
message = tr("The sync activity list has been copied to the clipboard.");
} else if (idx == _syncIssueTabId) {
// issues Widget
message = tr("The list of unsynced items has been copied to the clipboard.");
_issuesWidget->storeSyncIssues(ts);
//_issuesWidget->storeSyncIssues(ts);
}
QApplication::clipboard()->setText(text);

View file

@ -25,6 +25,7 @@
#include "owncloudgui.h"
#include "account.h"
#include "activitydata.h"
#include "accountmanager.h"
#include "ui_activitywidget.h"
@ -58,7 +59,8 @@ class ActivityWidget : public QWidget
{
Q_OBJECT
public:
explicit ActivityWidget(QWidget *parent = 0);
explicit ActivityWidget(QWidget *parent = 0,
AccountState *account = AccountManager::instance()->accounts().first().data());
~ActivityWidget();
QSize sizeHint() const Q_DECL_OVERRIDE { return ownCloudGui::settingsDialogSize(); }
void storeActivityList(QTextStream &ts);
@ -117,6 +119,8 @@ private:
ActivityListModel *_model;
QVBoxLayout *_notificationsLayout;
AccountState *_account;
};
@ -131,7 +135,8 @@ class ActivitySettings : public QWidget
{
Q_OBJECT
public:
explicit ActivitySettings(QWidget *parent = 0);
explicit ActivitySettings(QWidget *parent = 0,
AccountState *account = AccountManager::instance()->accounts().first().data());
~ActivitySettings();
QSize sizeHint() const Q_DECL_OVERRIDE { return ownCloudGui::settingsDialogSize(); }
@ -141,7 +146,7 @@ public slots:
void setNotificationRefreshInterval(std::chrono::milliseconds interval);
void slotShowIssuesTab(const QString &folderAlias);
//void slotShowIssuesTab(const QString &folderAlias);
private slots:
void slotCopyToClipboard();
@ -167,6 +172,8 @@ private:
QProgressIndicator *_progressIndicator;
QTimer _notificationCheckTimer;
QHash<AccountState *, QElapsedTimer> _timeSinceLastCheck;
AccountState *_account;
};
}
#endif // ActivityWIDGET_H

View file

@ -1040,7 +1040,7 @@ void ownCloudGui::slotShowSettings()
void ownCloudGui::slotShowSyncProtocol()
{
slotShowSettings();
_settingsDialog->showActivityPage();
//_settingsDialog->showActivityPage();
}

View file

@ -84,19 +84,35 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
setObjectName("Settings"); // required as group for saveGeometry call
setWindowTitle(Theme::instance()->appNameGUI());
connect(AccountManager::instance(), &AccountManager::accountAdded,
this, &SettingsDialog::accountAdded);
connect(AccountManager::instance(), &AccountManager::accountRemoved,
this, &SettingsDialog::accountRemoved);
_actionGroup = new QActionGroup(this);
_actionGroup->setExclusive(true);
// Note: all the actions have a '\n' because the account name is in two lines and
// all buttons must have the same size in order to keep a good layout
_activityAction = createColorAwareAction(QLatin1String(":/client/resources/activity.png"), tr("Activity"));
_actionGroup->addAction(_activityAction);
_toolBar->addAction(_activityAction);
_activitySettings = new ActivitySettings;
_ui->stack->addWidget(_activitySettings);
connect(_activitySettings, &ActivitySettings::guiLog, _gui,
&ownCloudGui::slotShowOptionalTrayMessage);
_activitySettings->setNotificationRefreshInterval(cfg.notificationRefreshInterval());
foreach (auto ai, AccountManager::instance()->accounts()) {
accountAdded(ai.data());
_activitySettings[ai] = new ActivitySettings(this, ai.data());
_ui->stack->addWidget(_activitySettings[ai]);
connect(_activitySettings[ai], &ActivitySettings::guiLog, _gui,
&ownCloudGui::slotShowOptionalTrayMessage);
_activitySettings[ai]->setNotificationRefreshInterval(cfg.notificationRefreshInterval());
// Note: all the actions have a '\n' because the account name is in two lines and
// all buttons must have the same size in order to keep a good layout
QAction *action = createColorAwareAction(QLatin1String(":/client/resources/activity.png"), tr("Activity"));
action->setProperty("account", QVariant::fromValue(ai));
_actionGroup->addAction(action);
_toolBar->addSeparator();
_toolBar->addAction(action);
_actionGroupWidgets.insert(action, _activitySettings[ai]);
connect(action, &QAction::triggered, this, &SettingsDialog::showActivityPage);
slotRefreshActivity(ai.data());
}
// Adds space
QWidget* spacer = new QWidget();
@ -115,20 +131,11 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
NetworkSettings *networkSettings = new NetworkSettings;
_ui->stack->addWidget(networkSettings);
_actionGroupWidgets.insert(_activityAction, _activitySettings);
_actionGroupWidgets.insert(generalAction, generalSettings);
_actionGroupWidgets.insert(networkAction, networkSettings);
connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage);
connect(AccountManager::instance(), &AccountManager::accountAdded,
this, &SettingsDialog::accountAdded);
connect(AccountManager::instance(), &AccountManager::accountRemoved,
this, &SettingsDialog::accountRemoved);
foreach (auto ai, AccountManager::instance()->accounts()) {
accountAdded(ai.data());
}
QTimer::singleShot(1, this, &SettingsDialog::showFirstPage);
QPushButton *closeButton = _ui->buttonBox->button(QDialogButtonBox::Close);
@ -194,18 +201,18 @@ void SettingsDialog::showFirstPage()
void SettingsDialog::showActivityPage()
{
if (_activityAction) {
_activityAction->trigger();
if (auto account = qvariant_cast<AccountStatePtr>(sender()->property("account"))) {
_activitySettings[account]->show();
}
}
void SettingsDialog::showIssuesList(const QString &folderAlias)
{
if (!_activityAction)
return;
_activityAction->trigger();
_activitySettings->slotShowIssuesTab(folderAlias);
}
//void SettingsDialog::showIssuesList(const QString &folderAlias)
//{
// if (!_activityAction)
// return;
// _activityAction->trigger();
// _activitySettings->slotShowIssuesTab(folderAlias);
//}
void SettingsDialog::accountAdded(AccountState *s)
{
@ -228,7 +235,7 @@ void SettingsDialog::accountAdded(AccountState *s)
accountAction->setToolTip(s->account()->displayName());
accountAction->setIconText(SettingsDialogCommon::shortDisplayNameForSettings(s->account().data(), height * buttonSizeRatio));
}
_toolBar->insertAction(_toolBar->actions().at(0), accountAction);
_toolBar->addAction(accountAction);
auto accountSettings = new AccountSettings(s, this);
_ui->stack->insertWidget(0, accountSettings);
_actionGroup->addAction(accountAction);
@ -238,14 +245,14 @@ void SettingsDialog::accountAdded(AccountState *s)
connect(accountSettings, &AccountSettings::folderChanged, _gui, &ownCloudGui::slotFoldersChanged);
connect(accountSettings, &AccountSettings::openFolderAlias,
_gui, &ownCloudGui::slotFolderOpenAction);
connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList);
//connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList);
connect(s->account().data(), &Account::accountChangedAvatar, this, &SettingsDialog::slotAccountAvatarChanged);
connect(s->account().data(), &Account::accountChangedDisplayName, this, &SettingsDialog::slotAccountDisplayNameChanged);
// Refresh immediatly when getting online
connect(s, &AccountState::isConnectedChanged, this, &SettingsDialog::slotRefreshActivityAccountStateSender);
slotRefreshActivity(s);
//slotRefreshActivity(s);
}
void SettingsDialog::slotAccountAvatarChanged()
@ -300,7 +307,7 @@ void SettingsDialog::accountRemoved(AccountState *s)
if (_actionForAccount.contains(s->account().data())) {
_actionForAccount.remove(s->account().data());
}
_activitySettings->slotRemoveAccount(s);
_activitySettings[AccountManager::instance()->account(s->account()->displayName())]->slotRemoveAccount(s);
// Hide when the last account is deleted. We want to enter the same
// state we'd be in the client was started up without an account
@ -395,7 +402,7 @@ void SettingsDialog::slotRefreshActivityAccountStateSender()
void SettingsDialog::slotRefreshActivity(AccountState *accountState)
{
if (accountState) {
_activitySettings->slotRefresh(accountState);
_activitySettings[AccountManager::instance()->account(accountState->account()->displayName())]->slotRefresh(accountState);
}
}

View file

@ -56,7 +56,7 @@ public:
public slots:
void showFirstPage();
void showActivityPage();
void showIssuesList(const QString &folderAlias);
// void showIssuesList(const QString &folderAlias);
void slotSwitchPage(QAction *action);
void slotRefreshActivity(AccountState *accountState);
void slotRefreshActivityAccountStateSender();
@ -91,9 +91,8 @@ private:
QToolBar *_toolBar;
ActivitySettings *_activitySettings;
QMap<AccountStatePtr, ActivitySettings *> _activitySettings;
QAction *_activityAction;
ownCloudGui *_gui;
};
}