-
Notifications
You must be signed in to change notification settings - Fork 976
Expand file tree
/
Copy pathaccountsettings.h
More file actions
180 lines (150 loc) · 5.73 KB
/
Copy pathaccountsettings.h
File metadata and controls
180 lines (150 loc) · 5.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2014 ownCloud GmbH
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef ACCOUNTSETTINGS_H
#define ACCOUNTSETTINGS_H
#include <QWidget>
#include <QUrl>
#include <QPointer>
#include <QHash>
#include <QTimer>
#include "folder.h"
#include "userinfo.h"
#include "progressdispatcher.h"
#include "owncloudgui.h"
#include "folderstatusmodel.h"
#ifdef BUILD_FILE_PROVIDER_MODULE
#include "macOS/fileprovidersettingscontroller.h"
#endif
class QModelIndex;
class QNetworkReply;
class QListWidgetItem;
class QLabel;
class QPushButton;
class QIcon;
class QFrame;
namespace OCC {
namespace Ui {
class AccountSettings;
}
class FolderMan;
class Account;
class AccountState;
class FolderStatusModel;
/**
* @brief The AccountSettings class
* @ingroup gui
*/
class AccountSettings : public QWidget
{
Q_OBJECT
Q_PROPERTY(AccountState* accountState MEMBER _accountState)
public:
explicit AccountSettings(AccountState *accountState, QWidget *parent = nullptr);
~AccountSettings() override;
[[nodiscard]] QSize sizeHint() const override
{
return {
ownCloudGui::settingsDialogSize().width(),
QWidget::sizeHint().height()
};
}
bool canEncryptOrDecrypt(const FolderStatusModel::SubFolderInfo* folderInfo);
[[nodiscard]] OCC::AccountState *accountsState() const { return _accountState; }
signals:
void folderChanged();
void openFolderAlias(const QString &);
void showIssuesList(OCC::AccountState *account);
void requestMnemonic();
void removeAccountFolders(OCC::AccountState *account);
void styleChanged();
public slots:
void slotOpenOC();
void slotUpdateQuota(qint64 total, qint64 used);
void slotAccountStateChanged();
void slotStyleChanged();
void slotHideSelectiveSyncWidget();
protected slots:
void slotAddFolder();
void slotEnableCurrentFolder(bool terminate = false);
#ifdef Q_OS_MACOS
void slotFixSandboxBookmark(OCC::Folder *folder);
#endif
void slotScheduleCurrentFolder();
void slotScheduleCurrentFolderForceRemoteDiscovery();
void slotForceSyncCurrentFolder();
void slotRemoveCurrentFolder();
void slotRemoveAccount();
void slotOpenCurrentFolder(); // sync folder
void slotOpenCurrentLocalSubFolder(); // selected subfolder in sync folder
void slotEditCurrentIgnoredFiles();
void slotOpenMakeFolderDialog();
void slotEditCurrentLocalIgnoredFiles();
void slotEnableVfsCurrentFolder();
void slotDisableVfsCurrentFolder();
void slotSetCurrentFolderAvailability(OCC::PinState state);
void slotSetSubFolderAvailability(OCC::Folder *folder, const QString &path, OCC::PinState state);
void slotFolderWizardAccepted();
void slotFolderWizardRejected();
void slotToggleSignInState();
void refreshSelectiveSyncStatus();
void slotMarkSubfolderEncrypted(OCC::FolderStatusModel::SubFolderInfo *folderInfo);
void slotSubfolderContextMenuRequested(const QModelIndex& idx, const QPoint& point);
void slotCustomContextMenuRequested(const QPoint &);
void slotFolderListClicked(const QModelIndex &indx);
void doExpand();
void slotLinkActivated(const QString &link);
// Encryption Related Stuff.
void slotE2eEncryptionMnemonicReady();
void slotE2eEncryptionGenerateKeys();
void slotE2eEncryptionInitializationFinished(bool isNewMnemonicGenerated);
void slotEncryptFolderFinished(int status);
void slotSelectiveSyncChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
const QVector<int> &roles);
void slotPossiblyUnblacklistE2EeFoldersAndRestartSync();
void slotE2eEncryptionCertificateNeedMigration();
private slots:
void updateBlackListAndScheduleFolderSync(const QStringList &blackList, OCC::Folder *folder, const QStringList &foldersToRemoveFromBlacklist) const;
void folderTerminateSyncAndUpdateBlackList(const QStringList &blackList, OCC::Folder *folder, const QStringList &foldersToRemoveFromBlacklist);
private slots:
void displayMnemonic(const QString &mnemonic);
void forgetEncryptionOnDeviceForAccount(const OCC::AccountPtr &account) const;
void migrateCertificateForAccount(const OCC::AccountPtr &account);
void showConnectionLabel(const QString &message, QStringList errors = QStringList());
void showConnectionSettingsDialog();
void openIgnoredFilesDialog(const QString & absFolderPath);
void customizeStyle();
void setupE2eEncryption();
void forgetE2eEncryption();
void checkClientSideEncryptionState();
void removeActionFromEncryptionMessage(const QString &actionId);
void setEncryptionPanelVisible(bool visible);
void updateSyncFoldersPanelVisibility();
private:
bool event(QEvent *) override;
QAction *addActionToEncryptionMessage(const QString &actionTitle, const QString &actionId);
void setupE2eEncryptionMessage();
void refreshE2eEncryptionMessage();
void setEncryptionMessageIcon(const QIcon &icon);
void updateEncryptionMessageActions();
/// Returns the alias of the selected folder, empty string if none
[[nodiscard]] QString selectedFolderAlias() const;
Ui::AccountSettings *_ui;
FolderStatusModel *_model;
QUrl _OCUrl;
bool _wasDisabledBefore = false;
AccountState *_accountState;
UserInfo _userInfo;
QAction *_toggleSignInOutAction = nullptr;
QAction *_addAccountAction = nullptr;
bool _menuShown = false;
bool _e2eEncryptionSetupDone = false;
QFrame *_encryptionPanel = nullptr;
QHash<QString, QMetaObject::Connection> _folderConnections;
QHash<QAction *, QPushButton *> _encryptionMessageButtons;
QString _spaceUsageText;
};
} // namespace OCC
#endif // ACCOUNTSETTINGS_H