Skip to content

Commit 68b1f98

Browse files
author
Julian Thanner
committed
add dir name option
Signed-off-by: Julian Thanner <[email protected]>
1 parent dc7e129 commit 68b1f98

File tree

4 files changed

+106
-0
lines changed

4 files changed

+106
-0
lines changed

src/gui/macOS/fileproviderdomainmanager_mac.mm

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ inline QString uuidDomainIdentifierForAccount(const OCC::AccountPtr account)
7272
inline QString domainDisplayNameForAccount(const OCC::Account * const account)
7373
{
7474
Q_ASSERT(account);
75+
76+
// Check if there's a custom folder name set for this account
77+
const auto accountId = account->userIdAtHostWithPort();
78+
const auto controller = OCC::Mac::FileProviderSettingsController::instance();
79+
const auto customFolderName = controller->customFolderNameForAccount(accountId);
80+
81+
if (!customFolderName.isEmpty()) {
82+
qCDebug(OCC::lcMacFileProviderDomainManager) << "Using custom folder name"
83+
<< customFolderName
84+
<< "for account"
85+
<< accountId;
86+
return customFolderName;
87+
}
88+
7589
return account->displayName();
7690
}
7791

src/gui/macOS/fileprovidersettingscontroller.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,15 @@ class FileProviderSettingsController : public QObject
3737
[[nodiscard]] Q_INVOKABLE float remoteStorageUsageGbForAccount(const QString &userIdAtHost) const;
3838
[[nodiscard]] Q_INVOKABLE bool trashDeletionEnabledForAccount(const QString &userIdAtHost) const;
3939
[[nodiscard]] Q_INVOKABLE bool trashDeletionSetForAccount(const QString &userIdAtHost) const;
40+
[[nodiscard]] Q_INVOKABLE QString customFolderNameForAccount(const QString &userIdAtHost) const;
4041

4142
[[nodiscard]] Q_INVOKABLE QAbstractListModel *materialisedItemsModelForAccount(const QString &userIdAtHost);
4243
[[nodiscard]] Q_INVOKABLE FileProviderDomainSyncStatus *domainSyncStatusForAccount(const QString &userIdAtHost) const;
4344

4445
public slots:
4546
void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled, const bool showInformationDialog = true);
4647
void setTrashDeletionEnabledForAccount(const QString &userIdAtHost, const bool setEnabled);
48+
void setCustomFolderNameForAccount(const QString &userIdAtHost, const QString &folderName);
4749
void resetVfsForAccount(const QString &userIdAtHost);
4850

4951
void createEvictionWindowForAccount(const QString &userIdAtHost);
@@ -57,6 +59,7 @@ public slots:
5759
void materialisedItemsForAccountChanged(const QString &userIdAtHost);
5860
void trashDeletionEnabledForAccountChanged(const QString &userIdAtHost);
5961
void trashDeletionSetForAccountChanged(const QString &userIdAtHost);
62+
void customFolderNameForAccountChanged(const QString &userIdAtHost);
6063

6164
private:
6265
explicit FileProviderSettingsController(QObject *parent = nullptr);

src/gui/macOS/fileprovidersettingscontroller_mac.mm

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
// NSUserDefaults entries
3333
constexpr auto enabledAccountsSettingsKey = "enabledAccounts";
34+
constexpr auto customFolderNamesSettingsKey = "customFolderNames";
3435

3536
float gbFromBytesWithOneDecimal(const unsigned long long bytes)
3637
{
@@ -182,6 +183,48 @@ void signalFileProviderDomain(const QString &userIdAtHost) const
182183
return _fileProviderDomainSyncStatuses.value(userIdAtHost);
183184
}
184185

186+
[[nodiscard]] QString customFolderNameForAccount(const QString &userIdAtHost) const
187+
{
188+
NSDictionary<NSString *, NSString *> *const customFolderNames = nsCustomFolderNames();
189+
190+
if (customFolderNames == nil) {
191+
return QString();
192+
}
193+
194+
NSString *const folderName = [customFolderNames objectForKey:userIdAtHost.toNSString()];
195+
196+
if (folderName == nil) {
197+
return QString();
198+
}
199+
200+
return QString::fromNSString(folderName);
201+
}
202+
203+
void setCustomFolderNameForAccount(const QString &userIdAtHost, const QString &folderName)
204+
{
205+
qCInfo(lcFileProviderSettingsController) << "Setting custom folder name for account"
206+
<< userIdAtHost
207+
<< "to"
208+
<< folderName;
209+
210+
NSDictionary<NSString *, NSString *> *customFolderNames = nsCustomFolderNames();
211+
212+
if (customFolderNames == nil) {
213+
customFolderNames = @{};
214+
}
215+
216+
NSMutableDictionary<NSString *, NSString *> *const mutableCustomFolderNames = customFolderNames.mutableCopy;
217+
218+
if (folderName.isEmpty()) {
219+
[mutableCustomFolderNames removeObjectForKey:userIdAtHost.toNSString()];
220+
} else {
221+
[mutableCustomFolderNames setObject:folderName.toNSString() forKey:userIdAtHost.toNSString()];
222+
}
223+
224+
[_userDefaults setObject:mutableCustomFolderNames forKey:_customFolderNamesKey];
225+
[_userDefaults synchronize];
226+
}
227+
185228
public slots:
186229
// NOTE: This method will release the provided args so make sure to retain them beforehand
187230
void enumerateMaterialisedFilesForDomainManager(NSFileProviderManager * const managerForDomain,
@@ -253,6 +296,11 @@ void updateDomainSyncStatuses()
253296
{
254297
return (NSArray<NSString *> *)[_userDefaults objectForKey:_accountsKey];
255298
}
299+
300+
[[nodiscard]] NSDictionary<NSString *, NSString *> *nsCustomFolderNames() const
301+
{
302+
return (NSDictionary<NSString *, NSString *> *)[_userDefaults objectForKey:_customFolderNamesKey];
303+
}
256304

257305
void fetchMaterialisedFilesStorageUsage()
258306
{
@@ -313,6 +361,7 @@ void initialCheck()
313361
FileProviderSettingsController *q = nullptr;
314362
NSUserDefaults *_userDefaults = NSUserDefaults.standardUserDefaults;
315363
NSString *_accountsKey = [NSString stringWithUTF8String:enabledAccountsSettingsKey];
364+
NSString *_customFolderNamesKey = [NSString stringWithUTF8String:customFolderNamesSettingsKey];
316365
QHash<QString, QVector<FileProviderItemMetadata>> _materialisedFiles;
317366
QHash<QString, unsigned long long> _storageUsage;
318367
QHash<QString, FileProviderDomainSyncStatus*> _fileProviderDomainSyncStatuses;
@@ -514,6 +563,17 @@ void initialCheck()
514563
return d->domainSyncStatusForAccount(userIdAtHost);
515564
}
516565

566+
QString FileProviderSettingsController::customFolderNameForAccount(const QString &userIdAtHost) const
567+
{
568+
return d->customFolderNameForAccount(userIdAtHost);
569+
}
570+
571+
void FileProviderSettingsController::setCustomFolderNameForAccount(const QString &userIdAtHost, const QString &folderName)
572+
{
573+
d->setCustomFolderNameForAccount(userIdAtHost, folderName);
574+
emit customFolderNameForAccountChanged(userIdAtHost);
575+
}
576+
517577
void FileProviderSettingsController::resetVfsForAccount(const QString &userIdAtHost)
518578
{
519579
qCInfo(lcFileProviderSettingsController) << "Resetting virtual files environment for account" << userIdAtHost;

src/gui/macOS/ui/FileProviderSettings.qml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,35 @@ Page {
5454
onClicked: root.controller.setVfsEnabledForAccount(root.accountUserIdAtHost, checked)
5555
}
5656

57+
RowLayout {
58+
Layout.fillWidth: true
59+
spacing: Style.standardSpacing
60+
61+
EnforcedPlainTextLabel {
62+
text: qsTr("Custom folder name:")
63+
Layout.preferredWidth: 150
64+
}
65+
66+
TextField {
67+
id: customFolderNameField
68+
Layout.fillWidth: true
69+
placeholderText: qsTr("Enter custom folder name (leave empty for default)")
70+
text: root.controller.customFolderNameForAccount(root.accountUserIdAtHost)
71+
onEditingFinished: root.controller.setCustomFolderNameForAccount(root.accountUserIdAtHost, text)
72+
73+
Connections {
74+
target: root.controller
75+
76+
function onCustomFolderNameForAccountChanged(accountUserIdAtHost) {
77+
if (root.accountUserIdAtHost !== accountUserIdAtHost) {
78+
return;
79+
}
80+
customFolderNameField.text = root.controller.customFolderNameForAccount(root.accountUserIdAtHost);
81+
}
82+
}
83+
}
84+
}
85+
5786
Loader {
5887
id: vfsSettingsLoader
5988

0 commit comments

Comments
 (0)