Skip to content

Commit

Permalink
Persist filter settings for Not Synced tab
Browse files Browse the repository at this point in the history
Fixes: #10884
  • Loading branch information
erikjv committed Jun 14, 2023
1 parent 6088104 commit 419c1ee
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 2 deletions.
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

0 comments on commit 419c1ee

Please sign in to comment.