From 2370019491d9dbf37045f368e5e361cf3f32acbb Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Thu, 3 Mar 2022 12:26:06 +0530 Subject: [PATCH] Only refresh library if some book has been added/removed in monitor dir This change leads to less refreshes if the monitor directory is same as download directory Earlier, while downloading a file, it would send many refresh signals to file watcher leading to a bad user experience --- src/library.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 13c190d74..2f8478edf 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -157,16 +157,19 @@ void Library::loadMonitorDir(QString monitorDir) QSet oldDir = QSet::fromList(oldDirEntries); QStringList addedZims = (newDir - oldDir).values(); QStringList removedZims = (oldDir - newDir).values(); - setMonitorDirZims(newDir.values()); auto manipulator = LibraryManipulator(this); auto manager = kiwix::Manager(&manipulator); + bool needsRefresh = !removedZims.empty(); for (auto book : addedZims) { - manager.addBookFromPath(book.toStdString()); + needsRefresh |= manager.addBookFromPath(book.toStdString()); } for (auto bookPath : removedZims) { removeBookFromLibraryById(QString::fromStdString(m_library.getBookByPath(bookPath.toStdString()).getId())); } - emit(booksChanged()); + if (needsRefresh) { + setMonitorDirZims(newDir.values()); + emit(booksChanged()); + } } void Library::asyncLoadMonitorDir(QString dir)