From 898a8eb6f320223167b01d28021d1e5d62bd76e5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 2 Feb 2014 14:44:00 +0100 Subject: [PATCH] Refactoring. --- src/core/feedsmodel.cpp | 26 ++++++++++---- src/core/feedsmodel.h | 4 ++- src/gui/feedmessageviewer.cpp | 44 ++++++++++++------------ src/gui/feedsview.cpp | 6 +++- src/gui/feedsview.h | 1 + src/gui/formmain.cpp | 64 +++++++++++++++++++---------------- src/gui/formmain.ui | 6 ++++ src/gui/messagesview.cpp | 10 ++++-- 8 files changed, 100 insertions(+), 61 deletions(-) diff --git a/src/core/feedsmodel.cpp b/src/core/feedsmodel.cpp index 30169e075..9f17784b9 100644 --- a/src/core/feedsmodel.cpp +++ b/src/core/feedsmodel.cpp @@ -679,8 +679,9 @@ bool FeedsModel::markFeedsRead(const QList &feeds, } } -bool FeedsModel::markFeedsDeleted(const QList &feeds, - int deleted) { +bool FeedsModel::markFeedsDeleted(const QList &feeds, + int deleted, + bool read_only) { QSqlDatabase db_handle = DatabaseFactory::instance()->connection(objectName(), DatabaseFactory::FromSettings); @@ -692,12 +693,23 @@ bool FeedsModel::markFeedsDeleted(const QList &feeds, QSqlQuery query_delete_msg(db_handle); query_delete_msg.setForwardOnly(true); - if (!query_delete_msg.prepare(QString("UPDATE Messages SET deleted = :deleted " - "WHERE feed IN (%1) AND deleted = 0;").arg(textualFeedIds(feeds).join(", ")))) { - qWarning("Query preparation failed for feeds clearing."); + if (read_only) { + if (!query_delete_msg.prepare(QString("UPDATE Messages SET deleted = :deleted " + "WHERE feed IN (%1) AND deleted = 0 AND read = 1;").arg(textualFeedIds(feeds).join(", ")))) { + qWarning("Query preparation failed for feeds clearing."); - db_handle.rollback(); - return false; + db_handle.rollback(); + return false; + } + } + else { + if (!query_delete_msg.prepare(QString("UPDATE Messages SET deleted = :deleted " + "WHERE feed IN (%1) AND deleted = 0;").arg(textualFeedIds(feeds).join(", ")))) { + qWarning("Query preparation failed for feeds clearing."); + + db_handle.rollback(); + return false; + } } query_delete_msg.bindValue(":deleted", deleted); diff --git a/src/core/feedsmodel.h b/src/core/feedsmodel.h index 60ac14b1a..15abb97f3 100644 --- a/src/core/feedsmodel.h +++ b/src/core/feedsmodel.h @@ -117,7 +117,9 @@ class FeedsModel : public QAbstractItemModel { public slots: // Feeds operations. bool markFeedsRead(const QList &feeds, int read); - bool markFeedsDeleted(const QList &feeds, int deleted); + bool markFeedsDeleted(const QList &feeds, + int deleted, + bool read_only); // Signals that properties (probably counts) // of ALL items have changed. diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index 5a2c5cf5c..2d2a6a707 100644 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -128,6 +128,8 @@ void FeedMessageViewer::onFeedUpdatesFinished() { } void FeedMessageViewer::createConnections() { + FormMain *form_main = FormMain::instance(); + // Message changers. connect(m_messagesView, SIGNAL(currentMessagesRemoved()), m_messagesBrowser, SLOT(clear())); @@ -153,13 +155,13 @@ void FeedMessageViewer::createConnections() { // Message openers. connect(m_messagesView, SIGNAL(openMessagesInNewspaperView(QList)), - FormMain::instance()->m_ui->m_tabWidget, + form_main->m_ui->m_tabWidget, SLOT(addBrowserWithMessages(QList))); connect(m_messagesView, SIGNAL(openLinkNewTab(QString)), - FormMain::instance()->m_ui->m_tabWidget, + form_main->m_ui->m_tabWidget, SLOT(addLinkedBrowser(QString))); connect(m_feedsView, SIGNAL(openMessagesInNewspaperView(QList)), - FormMain::instance()->m_ui->m_tabWidget, + form_main->m_ui->m_tabWidget, SLOT(addBrowserWithMessages(QList))); // Downloader connections. @@ -175,41 +177,41 @@ void FeedMessageViewer::createConnections() { this, SLOT(onFeedUpdatesProgress(FeedsModelFeed*,int,int))); // Toolbar forwardings. - connect(FormMain::instance()->m_ui->m_actionSwitchImportanceOfSelectedMessages, + connect(form_main->m_ui->m_actionSwitchImportanceOfSelectedMessages, SIGNAL(triggered()), m_messagesView, SLOT(switchSelectedMessagesImportance())); - connect(FormMain::instance()->m_ui->m_actionDeleteSelectedMessages, + connect(form_main->m_ui->m_actionDeleteSelectedMessages, SIGNAL(triggered()), m_messagesView, SLOT(deleteSelectedMessages())); - connect(FormMain::instance()->m_ui->m_actionMarkSelectedMessagesAsRead, + connect(form_main->m_ui->m_actionMarkSelectedMessagesAsRead, SIGNAL(triggered()), m_messagesView, SLOT(markSelectedMessagesRead())); - connect(FormMain::instance()->m_ui->m_actionMarkSelectedMessagesAsUnread, + connect(form_main->m_ui->m_actionMarkSelectedMessagesAsUnread, SIGNAL(triggered()), m_messagesView, SLOT(markSelectedMessagesUnread())); - connect(FormMain::instance()->m_ui->m_actionOpenSelectedSourceArticlesExternally, + connect(form_main->m_ui->m_actionOpenSelectedSourceArticlesExternally, SIGNAL(triggered()), m_messagesView, SLOT(openSelectedSourceArticlesExternally())); - connect(FormMain::instance()->m_ui->m_actionOpenSelectedSourceArticlesInternally, + connect(form_main->m_ui->m_actionOpenSelectedSourceArticlesInternally, SIGNAL(triggered()), m_messagesView, SLOT(openSelectedSourceMessagesInternally())); - connect(FormMain::instance()->m_ui->m_actionOpenSelectedMessagesInternally, + connect(form_main->m_ui->m_actionOpenSelectedMessagesInternally, SIGNAL(triggered()), m_messagesView, SLOT(openSelectedMessagesInternally())); - connect(FormMain::instance()->m_ui->m_actionMarkAllFeedsRead, + connect(form_main->m_ui->m_actionMarkAllFeedsRead, SIGNAL(triggered()), m_feedsView, SLOT(markAllFeedsRead())); - connect(FormMain::instance()->m_ui->m_actionMarkSelectedFeedsAsRead, + connect(form_main->m_ui->m_actionMarkSelectedFeedsAsRead, SIGNAL(triggered()), m_feedsView, SLOT(markSelectedFeedsRead())); - connect(FormMain::instance()->m_ui->m_actionMarkSelectedFeedsAsUnread, + connect(form_main->m_ui->m_actionMarkSelectedFeedsAsUnread, SIGNAL(triggered()), m_feedsView, SLOT(markSelectedFeedsUnread())); - connect(FormMain::instance()->m_ui->m_actionClearFeeds, + connect(form_main->m_ui->m_actionClearFeeds, SIGNAL(triggered()), m_feedsView, SLOT(clearSelectedFeeds())); - connect(FormMain::instance()->m_ui->m_actionUpdateSelectedFeedsCategories, + connect(form_main->m_ui->m_actionUpdateSelectedFeedsCategories, SIGNAL(triggered()), m_feedsView, SLOT(updateSelectedFeeds())); - connect(FormMain::instance()->m_ui->m_actionUpdateAllFeeds, + connect(form_main->m_ui->m_actionUpdateAllFeeds, SIGNAL(triggered()), m_feedsView, SLOT(updateAllFeeds())); - connect(FormMain::instance()->m_ui->m_actionAddStandardCategory, + connect(form_main->m_ui->m_actionAddStandardCategory, SIGNAL(triggered()), m_feedsView, SLOT(addNewStandardCategory())); - connect(FormMain::instance()->m_ui->m_actionAddStandardFeed, + connect(form_main->m_ui->m_actionAddStandardFeed, SIGNAL(triggered()), m_feedsView, SLOT(addNewStandardFeed())); - connect(FormMain::instance()->m_ui->m_actionEditSelectedFeedCategory, + connect(form_main->m_ui->m_actionEditSelectedFeedCategory, SIGNAL(triggered()), m_feedsView, SLOT(editSelectedItem())); - connect(FormMain::instance()->m_ui->m_actionViewSelectedItemsNewspaperMode, + connect(form_main->m_ui->m_actionViewSelectedItemsNewspaperMode, SIGNAL(triggered()), m_feedsView, SLOT(openSelectedFeedsInNewspaperMode())); - connect(FormMain::instance()->m_ui->m_actionDeleteSelectedFeedCategory, + connect(form_main->m_ui->m_actionDeleteSelectedFeedCategory, SIGNAL(triggered()), m_feedsView, SLOT(deleteSelectedItem())); } diff --git a/src/gui/feedsview.cpp b/src/gui/feedsview.cpp index 52fcc2273..f2974b61c 100644 --- a/src/gui/feedsview.cpp +++ b/src/gui/feedsview.cpp @@ -103,7 +103,7 @@ void FeedsView::updateSelectedFeeds() { } void FeedsView::setSelectedFeedsClearStatus(int clear) { - m_sourceModel->markFeedsDeleted(selectedFeeds(), clear); + m_sourceModel->markFeedsDeleted(selectedFeeds(), clear, 0); updateCountsOfSelectedFeeds(); emit feedsNeedToBeReloaded(1); @@ -326,6 +326,10 @@ void FeedsView::markAllFeedsRead() { markAllFeedsReadStatus(1); } +void FeedsView::clearAllReadMessages() { + m_sourceModel->markFeedsDeleted(allFeeds(), 1, 1); +} + void FeedsView::openSelectedFeedsInNewspaperMode() { QList messages = m_sourceModel->messagesForFeeds(selectedFeeds()); diff --git a/src/gui/feedsview.h b/src/gui/feedsview.h index de28a59e8..83b96ce34 100644 --- a/src/gui/feedsview.h +++ b/src/gui/feedsview.h @@ -59,6 +59,7 @@ class FeedsView : public QTreeView { // Feed clearers. void setSelectedFeedsClearStatus(int clear); void clearSelectedFeeds(); + void clearAllReadMessages(); // Base manipulators. void editSelectedItem(); diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index 68b4b3777..8ff0b8c97 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -6,6 +6,7 @@ #include "core/databasefactory.h" #include "gui/formabout.h" #include "gui/formsettings.h" +#include "gui/feedsview.h" #include "gui/webbrowser.h" #include "gui/iconthemefactory.h" #include "gui/systemtrayicon.h" @@ -189,6 +190,9 @@ void FormMain::onAboutToQuit() { qDebug("Cleaning up resources and saving application state."); m_ui->m_tabWidget->feedMessageViewer()->quitDownloader(); + + // TODO: podle nastaveni + m_ui->m_tabWidget->feedMessageViewer()->feedsView()->clearAllReadMessages(); DatabaseFactory::instance()->saveMemoryDatabase(); saveSize(); } @@ -198,40 +202,42 @@ bool FormMain::event(QEvent *event) { } void FormMain::setupIcons() { + IconThemeFactory *icon_theme_factory = IconThemeFactory::instance(); + // Setup icons of this main window. - m_ui->m_actionSettings->setIcon(IconThemeFactory::instance()->fromTheme("application-settings")); - m_ui->m_actionQuit->setIcon(IconThemeFactory::instance()->fromTheme("application-exit")); - m_ui->m_actionAboutGuard->setIcon(IconThemeFactory::instance()->fromTheme("application-about")); - m_ui->m_actionImport->setIcon(IconThemeFactory::instance()->fromTheme("document-import")); - m_ui->m_actionExport->setIcon(IconThemeFactory::instance()->fromTheme("document-export")); - m_ui->m_actionFullscreen->setIcon(IconThemeFactory::instance()->fromTheme("view-fullscreen")); + m_ui->m_actionSettings->setIcon(icon_theme_factory->fromTheme("application-settings")); + m_ui->m_actionQuit->setIcon(icon_theme_factory->fromTheme("application-exit")); + m_ui->m_actionAboutGuard->setIcon(icon_theme_factory->fromTheme("application-about")); + m_ui->m_actionImport->setIcon(icon_theme_factory->fromTheme("document-import")); + m_ui->m_actionExport->setIcon(icon_theme_factory->fromTheme("document-export")); + m_ui->m_actionFullscreen->setIcon(icon_theme_factory->fromTheme("view-fullscreen")); // Web browser. - m_ui->m_actionAddBrowser->setIcon(IconThemeFactory::instance()->fromTheme("list-add")); - m_ui->m_actionCloseCurrentTab->setIcon(IconThemeFactory::instance()->fromTheme("list-remove")); - m_ui->m_actionCloseAllTabs->setIcon(IconThemeFactory::instance()->fromTheme("list-remove")); - m_ui->m_menuCurrentTab->setIcon(IconThemeFactory::instance()->fromTheme("list-current")); + m_ui->m_actionAddBrowser->setIcon(icon_theme_factory->fromTheme("list-add")); + m_ui->m_actionCloseCurrentTab->setIcon(icon_theme_factory->fromTheme("list-remove")); + m_ui->m_actionCloseAllTabs->setIcon(icon_theme_factory->fromTheme("list-remove")); + m_ui->m_menuCurrentTab->setIcon(icon_theme_factory->fromTheme("list-current")); // Feeds/messages. - m_ui->m_menuAddItem->setIcon(IconThemeFactory::instance()->fromTheme("item-new")); - m_ui->m_actionUpdateAllFeeds->setIcon(IconThemeFactory::instance()->fromTheme("item-update-all")); - m_ui->m_actionUpdateSelectedFeedsCategories->setIcon(IconThemeFactory::instance()->fromTheme("item-update-selected")); - m_ui->m_actionClearFeeds->setIcon(IconThemeFactory::instance()->fromTheme("mail-remove")); - m_ui->m_actionDeleteSelectedFeedCategory->setIcon(IconThemeFactory::instance()->fromTheme("item-remove")); - m_ui->m_actionDeleteSelectedMessages->setIcon(IconThemeFactory::instance()->fromTheme("mail-remove")); - m_ui->m_actionAddStandardCategory->setIcon(IconThemeFactory::instance()->fromTheme("item-new")); - m_ui->m_actionAddStandardFeed->setIcon(IconThemeFactory::instance()->fromTheme("item-new")); - m_ui->m_actionEditSelectedFeedCategory->setIcon(IconThemeFactory::instance()->fromTheme("item-edit")); - m_ui->m_actionMarkAllFeedsRead->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-read")); - m_ui->m_actionMarkSelectedFeedsAsRead->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-read")); - m_ui->m_actionMarkSelectedFeedsAsUnread->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-unread")); - m_ui->m_actionMarkSelectedMessagesAsRead->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-read")); - m_ui->m_actionMarkSelectedMessagesAsUnread->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-unread")); - m_ui->m_actionSwitchImportanceOfSelectedMessages->setIcon(IconThemeFactory::instance()->fromTheme("mail-mark-favorite")); - m_ui->m_actionOpenSelectedSourceArticlesInternally->setIcon(IconThemeFactory::instance()->fromTheme("item-open")); - m_ui->m_actionOpenSelectedSourceArticlesExternally->setIcon(IconThemeFactory::instance()->fromTheme("item-open")); - m_ui->m_actionOpenSelectedMessagesInternally->setIcon(IconThemeFactory::instance()->fromTheme("item-open")); - m_ui->m_actionViewSelectedItemsNewspaperMode->setIcon(IconThemeFactory::instance()->fromTheme("item-newspaper")); + m_ui->m_menuAddItem->setIcon(icon_theme_factory->fromTheme("item-new")); + m_ui->m_actionUpdateAllFeeds->setIcon(icon_theme_factory->fromTheme("item-update-all")); + m_ui->m_actionUpdateSelectedFeedsCategories->setIcon(icon_theme_factory->fromTheme("item-update-selected")); + m_ui->m_actionClearFeeds->setIcon(icon_theme_factory->fromTheme("mail-remove")); + m_ui->m_actionDeleteSelectedFeedCategory->setIcon(icon_theme_factory->fromTheme("item-remove")); + m_ui->m_actionDeleteSelectedMessages->setIcon(icon_theme_factory->fromTheme("mail-remove")); + m_ui->m_actionAddStandardCategory->setIcon(icon_theme_factory->fromTheme("item-new")); + m_ui->m_actionAddStandardFeed->setIcon(icon_theme_factory->fromTheme("item-new")); + m_ui->m_actionEditSelectedFeedCategory->setIcon(icon_theme_factory->fromTheme("item-edit")); + m_ui->m_actionMarkAllFeedsRead->setIcon(icon_theme_factory->fromTheme("mail-mark-read")); + m_ui->m_actionMarkSelectedFeedsAsRead->setIcon(icon_theme_factory->fromTheme("mail-mark-read")); + m_ui->m_actionMarkSelectedFeedsAsUnread->setIcon(icon_theme_factory->fromTheme("mail-mark-unread")); + m_ui->m_actionMarkSelectedMessagesAsRead->setIcon(icon_theme_factory->fromTheme("mail-mark-read")); + m_ui->m_actionMarkSelectedMessagesAsUnread->setIcon(icon_theme_factory->fromTheme("mail-mark-unread")); + m_ui->m_actionSwitchImportanceOfSelectedMessages->setIcon(icon_theme_factory->fromTheme("mail-mark-favorite")); + m_ui->m_actionOpenSelectedSourceArticlesInternally->setIcon(icon_theme_factory->fromTheme("item-open")); + m_ui->m_actionOpenSelectedSourceArticlesExternally->setIcon(icon_theme_factory->fromTheme("item-open")); + m_ui->m_actionOpenSelectedMessagesInternally->setIcon(icon_theme_factory->fromTheme("item-open")); + m_ui->m_actionViewSelectedItemsNewspaperMode->setIcon(icon_theme_factory->fromTheme("item-newspaper")); // Setup icons for underlying components: opened web browsers... foreach (WebBrowser *browser, WebBrowser::runningWebBrowsers()) { diff --git a/src/gui/formmain.ui b/src/gui/formmain.ui index c9318fd41..3cf1782f3 100644 --- a/src/gui/formmain.ui +++ b/src/gui/formmain.ui @@ -163,6 +163,9 @@ Ctrl+Shift+Q + + QAction::QuitRole + @@ -185,6 +188,9 @@ Ctrl+Shift+A + + QAction::AboutRole + diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index 5927f2846..eaa8cfc8d 100644 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -51,6 +51,7 @@ void MessagesView::reloadSelections(int mark_current_index_read) { QModelIndex mapped_current_index = m_proxyModel->mapToSource(current_index); QModelIndexList selected_indexes = selectionModel()->selectedRows(); QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes); + int row_count; // Reload the model now. m_sourceModel->select(); @@ -62,8 +63,6 @@ void MessagesView::reloadSelections(int mark_current_index_read) { current_index = m_proxyModel->mapFromSource(m_sourceModel->index(mapped_current_index.row(), mapped_current_index.column())); - - if (current_index.isValid()) { if (mark_current_index_read == 0) { // User selected to mark some messages as unread, if one @@ -79,6 +78,13 @@ void MessagesView::reloadSelections(int mark_current_index_read) { scrollTo(current_index); reselectIndexes(selected_indexes); } + else if ((row_count = m_proxyModel->rowCount()) > 0) { + current_index = m_proxyModel->index(row_count - 1, 0); + + setCurrentIndex(current_index); + scrollTo(current_index); + reselectIndexes(QModelIndexList() << current_index); + } else { // Messages were probably removed from the model, nothing can // be selected and no message can be displayed.