mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-25 05:45:42 +03:00
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:
parent
8e0c036fc3
commit
b13f77c0fb
5 changed files with 77 additions and 62 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1040,7 +1040,7 @@ void ownCloudGui::slotShowSettings()
|
|||
void ownCloudGui::slotShowSyncProtocol()
|
||||
{
|
||||
slotShowSettings();
|
||||
_settingsDialog->showActivityPage();
|
||||
//_settingsDialog->showActivityPage();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
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
|
||||
_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());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue