diff --git a/resources/texts/_contentManager.html b/resources/texts/_contentManager.html
index 7ae1bea..819e04d 100644
--- a/resources/texts/_contentManager.html
+++ b/resources/texts/_contentManager.html
@@ -74,10 +74,31 @@ function init() {
downloadUpdaters[book.id] = setInterval(function() { getDownloadInfo(book.id); }, 1000);
});
},
+ eraseBook : function(book) {
+ contentManager.eraseBook(book.id);
+ },
displayedBooks : function(books, nb) {
var a = books.slice(0, nb);
return a;
},
+ getBookFromMousePosition : function() {
+ var elements = document.elementsFromPoint(mouseX, mouseY);
+ var bookId = null;
+ for(var i = 0; i < elements.length; i++) {
+ if (elements[i].localName == "summary" && elements[i].classList.contains("book-summary")) {
+ bookId = elements[i].id;
+ break;
+ }
+ }
+ var book = null;
+ for(var i = 0; i < app.books.length; i++) {
+ if (app.books[i]["id"] == bookId) {
+ book = app.books[i];
+ break;
+ }
+ }
+ return book;
+ },
niceBytes : niceBytes
}
});
@@ -97,6 +118,39 @@ function scrolled(e) {
app.displayedBooksNb = Math.min(app.displayedBooksNb+20, app.books.length);
}
}
+
+window.addEventListener("click", e => {
+ if (menuVisible)
+ displayMenu(null);
+});
+
+var mouseX, mouseY = 0;
+window.addEventListener("contextmenu", e => {
+ e.preventDefault();
+ mouseX = e.pageX;
+ mouseY = e.pageY;
+ setContextMenuPosition();
+ var book = app.getBookFromMousePosition();
+ displayMenu(book);
+});
+
+var menuVisible = false;
+function displayMenu(book) {
+ var menu = document.getElementById("menu");
+ menu.style.display = (book) ? "block" : "none";
+ menuVisible = (book) ? true : false;
+ if (!book)
+ return;
+ var localElement = document.getElementsByClassName("local-option")[0];
+ localElement.style.display = (book.path) ? "block" : "none";
+};
+
+function setContextMenuPosition() {
+ var menu = document.getElementById("menu");
+ menu.style.left = `${mouseX}px`;
+ menu.style.top = `${mouseY}px`;
+};
+
@@ -223,8 +304,13 @@ details:hover {
+
-
+
diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp
index fc9dc41..dc3da5f 100644
--- a/src/contentmanager.cpp
+++ b/src/contentmanager.cpp
@@ -25,7 +25,6 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader,
connect(this, &ContentManager::filterParamsChanged, this, &ContentManager::updateLibrary);
}
-
void ContentManager::setLocal(bool local) {
if (local == m_local) {
return;
@@ -185,10 +184,23 @@ QString ContentManager::downloadBook(const QString &id)
mp_library->addBookToLibrary(book);
mp_library->save();
emit(mp_library->booksChanged());
- emit(booksChanged());
return QString::fromStdString(download->getDid());
}
+void ContentManager::eraseBook(const QString& id)
+{
+ kiwix::Book book = mp_library->getBookById(id);
+ QString dirName = QString::fromUtf8(getDataDirectory().c_str());
+ QString fileSelection = QString::fromUtf8(getLastPathElement(book.getPath()).c_str()) + "*";
+ QDir dir(dirName, fileSelection);
+ for(const QString& filename: dir.entryList()) {
+ dir.remove(filename);
+ }
+ mp_library->removeBookFromLibraryById(id);
+ mp_library->save();
+ emit(mp_library->booksChanged());
+}
+
QStringList ContentManager::getDownloadIds()
{
QStringList list;
diff --git a/src/contentmanager.h b/src/contentmanager.h
index 4a7324c..64e1f26 100644
--- a/src/contentmanager.h
+++ b/src/contentmanager.h
@@ -51,6 +51,7 @@ public slots:
QString downloadBook(const QString& id);
void updateLibrary();
void setSearch(const QString& search);
+ void eraseBook(const QString& id);
};
#endif // CONTENTMANAGER_H
diff --git a/src/contentmanagerview.cpp b/src/contentmanagerview.cpp
index 5b40249..fbe9119 100644
--- a/src/contentmanagerview.cpp
+++ b/src/contentmanagerview.cpp
@@ -10,6 +10,7 @@ ContentManagerView::ContentManagerView(QWidget *parent)
auto profile = page()->profile();
auto app = KiwixApp::instance();
profile->installUrlSchemeHandler("zim", app->getSchemeHandler());
+ setContextMenuPolicy( Qt::NoContextMenu );
}
diff --git a/src/library.cpp b/src/library.cpp
index 3eb47e9..9c0e989 100644
--- a/src/library.cpp
+++ b/src/library.cpp
@@ -113,6 +113,10 @@ void Library::addBookToLibrary(kiwix::Book &book)
m_library.addBook(book);
}
+void Library::removeBookFromLibraryById(const QString& id) {
+ m_library.removeBookById(id.toStdString());
+}
+
void Library::addBookmark(kiwix::Bookmark &bookmark)
{
m_library.addBookmark(bookmark);
diff --git a/src/library.h b/src/library.h
index 47c33e9..b6705bb 100644
--- a/src/library.h
+++ b/src/library.h
@@ -32,6 +32,7 @@ public:
QStringList listBookIds(const QString& query, const QString &categoryFilter);
const std::vector& getBookmarks() { return m_library.getBookmarks(); }
void addBookToLibrary(kiwix::Book& book);
+ void removeBookFromLibraryById(const QString& id);
void addBookmark(kiwix::Bookmark& bookmark);
void removeBookmark(const QString& zimId, const QString& url);
void save();