diff --git a/src/readinglistbar.cpp b/src/readinglistbar.cpp index 3e8df047a..a4550ecd6 100644 --- a/src/readinglistbar.cpp +++ b/src/readinglistbar.cpp @@ -41,12 +41,16 @@ void ReadingListBar::setupList() auto library = KiwixApp::instance()->getLibrary(); auto bookmarks = library->getBookmarks(); ui->listWidget->clear(); - for(auto& bookmark:bookmarks) { + for(unsigned i = 0; i < bookmarks.size(); i++) { + auto& bookmark = bookmarks[i]; std::shared_ptr archive; const QString& title = QString::fromStdString(bookmark.getTitle()); try { archive = library->getArchive(QString::fromStdString(bookmark.getBookId())); } catch (std::out_of_range& e) { + /* There can be bookmarks whose information is lost. */ + if (!bookmark.getBookId().empty()) + addItem(title, i); continue; } try { @@ -56,9 +60,9 @@ void ReadingListBar::setupList() QPixmap pixmap; pixmap.loadFromData(reinterpret_cast(content.data()), content.size()); auto icon = QIcon(pixmap); - addItem(title, icon); + addItem(title, i, icon); } catch (zim::EntryNotFound& e) { - addItem(title); + addItem(title, i); } } } @@ -97,16 +101,17 @@ void ReadingListBar::onItemActivated(QListWidgetItem* item, Qt::MouseButtons but } } -void ReadingListBar::addItem(const QString &title, const QIcon &icon) +void ReadingListBar::addItem(const QString &title, unsigned idx, const QIcon &icon) { auto item = new QListWidgetItem(icon, title, ui->listWidget); item->setTextAlignment(Qt::TextWordWrap); + item->setData(Qt::UserRole, idx); } void ReadingListBar::openUrl(QListWidgetItem* item, bool newTab) { - int index = ui->listWidget->row(item); - auto bookmark = KiwixApp::instance()->getLibrary()->getBookmarks(true).at(index); + int index = item->data(Qt::UserRole).toUInt(); + auto bookmark = KiwixApp::instance()->getLibrary()->getBookmarks(false).at(index); QUrl url; url.setScheme("zim"); url.setHost(QString::fromStdString(bookmark.getBookId())+".zim"); diff --git a/src/readinglistbar.h b/src/readinglistbar.h index cfea784d8..ec1c5a87f 100644 --- a/src/readinglistbar.h +++ b/src/readinglistbar.h @@ -22,7 +22,7 @@ public slots: void onItemDoubleClicked(QListWidgetItem *item); void onItemPressed(QListWidgetItem* item, Qt::MouseButtons buttons); void onItemActivated(QListWidgetItem *item, Qt::MouseButtons buttons); - void addItem(const QString& title, const QIcon& icon = QIcon{}); + void addItem(const QString& title, unsigned idx, const QIcon& icon = QIcon{}); private: Ui::readinglistbar *ui; int clickKind;