Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Persist filter settings for Not Synced tab #10928

Merged
merged 1 commit into from
Jun 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions changelog/unreleased/10928
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Enhancement: Persist filter settings for Not Synced tab

We now store the filter settings in the Not Synced tab. So after a
restart of the client, the filter will still be the same as the last
time.

https://github.com/owncloud/client/pull/10928
https://github.com/owncloud/client/issues/10884
45 changes: 43 additions & 2 deletions src/gui/issueswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
explicit SyncFileItemStatusSetSortFilterProxyModel(QObject *parent = nullptr)
: Models::SignalledQSortFilterProxyModel(parent)
{
resetFilter();
restoreFilter();
}

~SyncFileItemStatusSetSortFilterProxyModel() override
Expand All @@ -70,10 +70,13 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
return _filter;
}

void setFilter(const StatusSet &newFilter)
void setFilter(const StatusSet &newFilter, bool save = true)
{
if (_filter != newFilter) {
_filter = newFilter;
if (save) {
saveFilter();
}
invalidateFilter();
emit filterChanged();
}
Expand Down Expand Up @@ -138,6 +141,44 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
return defaultSet;
}

void saveFilter()
{
QStringList checked;
for (uint8_t s = SyncFileItem::NoStatus; s < SyncFileItem::StatusCount; ++s) {
if (_filter[s]) {
checked.append(Utility::enumToString(static_cast<SyncFileItem::Status>(s)));
}
}
ConfigFile().setIssuesWidgetFilter(checked);
}

void restoreFilter()
{
StatusSet filter;
bool filterNeedsReset = true; // If there is no filter, the `true` value will cause a reset.
QStringList checked = ConfigFile().issuesWidgetFilter();

for (const QString &s : checked) {
auto status = Utility::stringToEnum<SyncFileItem::Status>(s);
if (static_cast<int8_t>(status) == -1) {
// The string value is not a valid enum value, so stop processing, and queue a reset.
filterNeedsReset = true;
break;
} else {
filter[status] = true;
filterNeedsReset = false;
}
}

if (filterNeedsReset) {
// If there was no filter in the config file, or if one of the values is invalid, reset the filter.
resetFilter();
} else {
// There is a valid filter, so apply it. Also don't save it, because we just loaded it successfully
setFilter(filter, false);
}
}

private:
StatusSet _filter;
};
Expand Down
18 changes: 18 additions & 0 deletions src/libsync/configfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@ const QString newBigFolderSizeLimitC() { return QStringLiteral("newBigFolderSize
const QString useNewBigFolderSizeLimitC() { return QStringLiteral("useNewBigFolderSizeLimit"); }
const QString confirmExternalStorageC() { return QStringLiteral("confirmExternalStorage"); }
const QString moveToTrashC() { return QStringLiteral("moveToTrash"); }

const QString issuesWidgetFilterC()
{
return QStringLiteral("issuesWidgetFilter");
}
} // anonymous namespace

QString ConfigFile::_confDir = QString();
const std::chrono::seconds DefaultRemotePollInterval { 30 };
Expand Down Expand Up @@ -146,6 +151,19 @@ void ConfigFile::setShowInExplorerNavigationPane(bool show)
settings.sync();
}

QStringList ConfigFile::issuesWidgetFilter() const
{
auto settings = makeQSettings();
return settings.value(issuesWidgetFilterC()).toStringList();
}

void ConfigFile::setIssuesWidgetFilter(const QStringList &checked)
{
auto settings = makeQSettings();
settings.setValue(issuesWidgetFilterC(), checked);
settings.sync();
}

std::chrono::seconds ConfigFile::timeout() const
{
auto settings = makeQSettings();
Expand Down
3 changes: 3 additions & 0 deletions src/libsync/configfile.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@ class OWNCLOUDSYNC_EXPORT ConfigFile
bool showInExplorerNavigationPane() const;
void setShowInExplorerNavigationPane(bool show);

QStringList issuesWidgetFilter() const;
void setIssuesWidgetFilter(const QStringList &checked);

std::chrono::seconds timeout() const;
qint64 chunkSize() const;
qint64 maxChunkSize() const;
Expand Down