Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2018-02-21 14:18:52 +0300
committerckamm <mail@ckamm.de>2018-03-06 15:02:54 +0300
commitec281654ae165b11cb50d76d8e3dad5578dddb2d (patch)
tree9a1cad89b35e9147d5c889871851d308796503c9 /src/gui/issueswidget.cpp
parent52dfe589bacca6a22a0bf84d1e3a3269d00ed610 (diff)
Issues tab: Invalidate issues selectively #6226
Everything is invalidated later: after discovery, not before. In addition entries that should only be invalidated when new local discovery is done have that behavior now.
Diffstat (limited to 'src/gui/issueswidget.cpp')
-rw-r--r--src/gui/issueswidget.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp
index 93dbe748c..b49afb9c2 100644
--- a/src/gui/issueswidget.cpp
+++ b/src/gui/issueswidget.cpp
@@ -18,6 +18,7 @@
#include "issueswidget.h"
#include "configfile.h"
#include "syncresult.h"
+#include "syncengine.h"
#include "logger.h"
#include "theme.h"
#include "folderman.h"
@@ -145,7 +146,13 @@ void IssuesWidget::hideEvent(QHideEvent *ev)
QWidget::hideEvent(ev);
}
-void IssuesWidget::cleanItems(const QString &folder)
+static bool persistsUntilLocalDiscovery(QTreeWidgetItem *item)
+{
+ const auto status = ProtocolItem::status(item);
+ return status == SyncFileItem::Conflict || status == SyncFileItem::FileIgnored;
+}
+
+void IssuesWidget::cleanItems(const std::function<bool(QTreeWidgetItem *)> &shouldDelete)
{
_ui->_treeWidget->setSortingEnabled(false);
@@ -154,10 +161,8 @@ void IssuesWidget::cleanItems(const QString &folder)
int itemCnt = _ui->_treeWidget->topLevelItemCount();
for (int cnt = itemCnt - 1; cnt >= 0; cnt--) {
QTreeWidgetItem *item = _ui->_treeWidget->topLevelItem(cnt);
- QString itemFolder = ProtocolItem::folderName(item);
- if (itemFolder == folder) {
+ if (shouldDelete(item))
delete item;
- }
}
_ui->_treeWidget->setSortingEnabled(true);
@@ -209,9 +214,35 @@ void IssuesWidget::slotOpenFile(QTreeWidgetItem *item, int)
void IssuesWidget::slotProgressInfo(const QString &folder, const ProgressInfo &progress)
{
- if (progress.status() == ProgressInfo::Starting) {
- // The sync is restarting, clean the old items
- cleanItems(folder);
+ if (progress.status() == ProgressInfo::Reconcile) {
+ // Wipe all non-persistent entries - as well as the persistent ones
+ // in cases where a local discovery was done.
+ auto f = FolderMan::instance()->folder(folder);
+ if (!f)
+ return;
+ const auto &engine = f->syncEngine();
+ const auto style = engine.lastLocalDiscoveryStyle();
+ const auto &discoveryDirs = engine.currentLocalDiscoveryDirs();
+ cleanItems([&](QTreeWidgetItem *item) {
+ if (ProtocolItem::folderName(item) != folder)
+ return false;
+ if (style == LocalDiscoveryStyle::FilesystemOnly)
+ return true;
+ if (!persistsUntilLocalDiscovery(item))
+ return true;
+
+ // Definitely wipe the entry if the file no longer exists
+ if (!QFileInfo(f->path() + ProtocolItem::filePath(item)).exists())
+ return true;
+
+ auto path = QFileInfo(ProtocolItem::filePath(item)).dir().path().toUtf8();
+ if (path == ".")
+ path.clear();
+
+ // TODO: This logic has to match csync_ftw's
+ auto it = discoveryDirs.lower_bound(path);
+ return it != discoveryDirs.end() && it->startsWith(path);
+ });
}
}