Skip to content

Commit 8335e6e

Browse files
erikjvTheOneRing
authored andcommittedJun 15, 2023
Persist filter settings for Not Synced tab
Fixes: #10884
1 parent 5512d9a commit 8335e6e

File tree

4 files changed

+72
-2
lines changed

4 files changed

+72
-2
lines changed
 

‎changelog/unreleased/10928

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Enhancement: Persist filter settings for Not Synced tab
2+
3+
We now store the filter settings in the Not Synced tab. So after a
4+
restart of the client, the filter will still be the same as the last
5+
time.
6+
7+
https://github.com/owncloud/client/pull/10928
8+
https://github.com/owncloud/client/issues/10884

‎src/gui/issueswidget.cpp

+43-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
5858
explicit SyncFileItemStatusSetSortFilterProxyModel(QObject *parent = nullptr)
5959
: Models::SignalledQSortFilterProxyModel(parent)
6060
{
61-
resetFilter();
61+
restoreFilter();
6262
}
6363

6464
~SyncFileItemStatusSetSortFilterProxyModel() override
@@ -70,10 +70,13 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
7070
return _filter;
7171
}
7272

73-
void setFilter(const StatusSet &newFilter)
73+
void setFilter(const StatusSet &newFilter, bool save = true)
7474
{
7575
if (_filter != newFilter) {
7676
_filter = newFilter;
77+
if (save) {
78+
saveFilter();
79+
}
7780
invalidateFilter();
7881
emit filterChanged();
7982
}
@@ -138,6 +141,44 @@ class SyncFileItemStatusSetSortFilterProxyModel : public Models::SignalledQSortF
138141
return defaultSet;
139142
}
140143

144+
void saveFilter()
145+
{
146+
QStringList checked;
147+
for (uint8_t s = SyncFileItem::NoStatus; s < SyncFileItem::StatusCount; ++s) {
148+
if (_filter[s]) {
149+
checked.append(Utility::enumToString(static_cast<SyncFileItem::Status>(s)));
150+
}
151+
}
152+
ConfigFile().setIssuesWidgetFilter(checked);
153+
}
154+
155+
void restoreFilter()
156+
{
157+
StatusSet filter;
158+
bool filterNeedsReset = true; // If there is no filter, the `true` value will cause a reset.
159+
QStringList checked = ConfigFile().issuesWidgetFilter();
160+
161+
for (const QString &s : checked) {
162+
auto status = Utility::stringToEnum<SyncFileItem::Status>(s);
163+
if (static_cast<int8_t>(status) == -1) {
164+
// The string value is not a valid enum value, so stop processing, and queue a reset.
165+
filterNeedsReset = true;
166+
break;
167+
} else {
168+
filter[status] = true;
169+
filterNeedsReset = false;
170+
}
171+
}
172+
173+
if (filterNeedsReset) {
174+
// If there was no filter in the config file, or if one of the values is invalid, reset the filter.
175+
resetFilter();
176+
} else {
177+
// There is a valid filter, so apply it. Also don't save it, because we just loaded it successfully
178+
setFilter(filter, false);
179+
}
180+
}
181+
141182
private:
142183
StatusSet _filter;
143184
};

‎src/libsync/configfile.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@ const QString newBigFolderSizeLimitC() { return QStringLiteral("newBigFolderSize
9191
const QString useNewBigFolderSizeLimitC() { return QStringLiteral("useNewBigFolderSizeLimit"); }
9292
const QString confirmExternalStorageC() { return QStringLiteral("confirmExternalStorage"); }
9393
const QString moveToTrashC() { return QStringLiteral("moveToTrash"); }
94+
95+
const QString issuesWidgetFilterC()
96+
{
97+
return QStringLiteral("issuesWidgetFilter");
9498
}
99+
} // anonymous namespace
95100

96101
QString ConfigFile::_confDir = QString();
97102
const std::chrono::seconds DefaultRemotePollInterval { 30 };
@@ -146,6 +151,19 @@ void ConfigFile::setShowInExplorerNavigationPane(bool show)
146151
settings.sync();
147152
}
148153

154+
QStringList ConfigFile::issuesWidgetFilter() const
155+
{
156+
auto settings = makeQSettings();
157+
return settings.value(issuesWidgetFilterC()).toStringList();
158+
}
159+
160+
void ConfigFile::setIssuesWidgetFilter(const QStringList &checked)
161+
{
162+
auto settings = makeQSettings();
163+
settings.setValue(issuesWidgetFilterC(), checked);
164+
settings.sync();
165+
}
166+
149167
std::chrono::seconds ConfigFile::timeout() const
150168
{
151169
auto settings = makeQSettings();

‎src/libsync/configfile.h

+3
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ class OWNCLOUDSYNC_EXPORT ConfigFile
158158
bool showInExplorerNavigationPane() const;
159159
void setShowInExplorerNavigationPane(bool show);
160160

161+
QStringList issuesWidgetFilter() const;
162+
void setIssuesWidgetFilter(const QStringList &checked);
163+
161164
std::chrono::seconds timeout() const;
162165
qint64 chunkSize() const;
163166
qint64 maxChunkSize() const;

0 commit comments

Comments
 (0)
Please sign in to comment.