diff --git a/src/core/feeddownloader.cpp b/src/core/feeddownloader.cpp index 82e225a21..7c01729ad 100755 --- a/src/core/feeddownloader.cpp +++ b/src/core/feeddownloader.cpp @@ -61,7 +61,7 @@ void FeedDownloader::updateFeeds(const QList &feeds) { m_feedsTotalCount = m_feedsToUpdate; // Job starts now. - emit started(); + emit updateStarted(); for (int i = 0; i < m_feedsTotalCount; i++) { if (m_stopUpdate) { @@ -101,9 +101,8 @@ void FeedDownloader::oneFeedUpdateFinished(const QList &messages) { m_feedsUpdating--; // Now make sure, that messages are actually stored to SQL in a locked state. - qDebug().nospace() << "Saving messages of feed " - << feed->customId() << " in thread: \'" + << feed->id() << " in thread: \'" << QThread::currentThreadId() << "\'."; int updated_messages = messages.isEmpty() ? 0 : feed->updateMessages(messages); @@ -113,7 +112,7 @@ void FeedDownloader::oneFeedUpdateFinished(const QList &messages) { } qDebug("Made progress in feed updates, total feeds count %d/%d (id of feed is %d).", m_feedsUpdated, m_feedsTotalCount, feed->id()); - emit progress(feed, m_feedsUpdated, m_feedsTotalCount); + emit updateProgress(feed, m_feedsUpdated, m_feedsTotalCount); if (m_feedsToUpdate <= 0 && m_feedsUpdating <= 0) { finalizeUpdate(); @@ -132,7 +131,7 @@ void FeedDownloader::finalizeUpdate() { // NOTE: This means that now "update lock" can be unlocked // and feeds can be added/edited/deleted and application // can eventually quit. - emit finished(m_results); + emit updateFinished(m_results); } FeedDownloadResults::FeedDownloadResults() : m_updatedFeeds(QList >()) { diff --git a/src/core/feeddownloader.h b/src/core/feeddownloader.h index d39c8f5b6..fb0a8514f 100755 --- a/src/core/feeddownloader.h +++ b/src/core/feeddownloader.h @@ -76,17 +76,17 @@ class FeedDownloader : public QObject { signals: // Emitted if feed updates started. - void started(); + void updateStarted(); // Emitted if all items from update queue are // processed. - void finished(FeedDownloadResults updated_feeds); + void updateFinished(FeedDownloadResults updated_feeds); // Emitted if any item is processed. // "Current" number indicates count of processed feeds // and "total" number indicates total number of feeds // which were in the initial queue. - void progress(const Feed *feed, int current, int total); + void updateProgress(const Feed *feed, int current, int total); private: void finalizeUpdate(); diff --git a/src/core/feedsmodel.cpp b/src/core/feedsmodel.cpp index cec8e3ed9..9ae8fc752 100755 --- a/src/core/feedsmodel.cpp +++ b/src/core/feedsmodel.cpp @@ -76,12 +76,6 @@ FeedsModel::~FeedsModel() { delete m_rootItem; } -void FeedsModel::quit() { - if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool()) { - markItemCleared(m_rootItem, true); - } -} - /* void FeedsModel::onFeedUpdatesStarted() { //: Text display in status bar when feed update is started. diff --git a/src/core/feedsmodel.h b/src/core/feedsmodel.h index 8fb606d30..f61ea338d 100755 --- a/src/core/feedsmodel.h +++ b/src/core/feedsmodel.h @@ -117,9 +117,6 @@ class FeedsModel : public QAbstractItemModel { // Loads feed/categories from the database. void loadActivatedServiceAccounts(); - // Does necessary job before quitting this component. - void quit(); - // Reloads counts of all feeds/categories/whatever in the model. void reloadCountsOfWholeModel(); diff --git a/src/gui/dialogs/formmain.cpp b/src/gui/dialogs/formmain.cpp index b7fffb6de..70dc364b4 100755 --- a/src/gui/dialogs/formmain.cpp +++ b/src/gui/dialogs/formmain.cpp @@ -31,11 +31,13 @@ #include "gui/systemtrayicon.h" #include "gui/tabbar.h" #include "gui/statusbar.h" +#include "gui/messagesview.h" #include "gui/feedmessageviewer.h" #include "gui/plaintoolbutton.h" #include "gui/dialogs/formabout.h" #include "gui/dialogs/formsettings.h" #include "gui/dialogs/formupdate.h" +#include "gui/dialogs/formdatabasecleanup.h" #include "gui/dialogs/formbackupdatabasesettings.h" #include "gui/dialogs/formrestoredatabasesettings.h" #include "gui/dialogs/formaddaccount.h" @@ -89,6 +91,24 @@ FormMain::~FormMain() { qDebug("Destroying FormMain instance."); } +void FormMain::showDbCleanupAssistant() { + if (qApp->feedUpdateLock()->tryLock()) { + QScopedPointer form_pointer(new FormDatabaseCleanup(this)); + form_pointer.data()->setCleaner(qApp->feedReader()->databaseCleaner()); + form_pointer.data()->exec(); + + qApp->feedUpdateLock()->unlock(); + + tabWidget()->feedMessageViewer()->messagesView()->reloadSelections(false); + qApp->feedReader()->feedsModel()->reloadCountsOfWholeModel(); + } + else { + qApp->showGuiMessage(tr("Cannot cleanup database"), + tr("Cannot cleanup database, because another critical action is running."), + QSystemTrayIcon::Warning, qApp->mainFormWidget(), true); + } +} + QList FormMain::allActions() const { QList actions; @@ -495,6 +515,8 @@ void FormMain::createConnections() { connect(m_ui->m_actionSettings, SIGNAL(triggered()), this, SLOT(showSettings())); connect(m_ui->m_actionDownloadManager, SIGNAL(triggered()), m_ui->m_tabWidget, SLOT(showDownloadManager())); + connect(m_ui->m_actionCleanupDatabase, SIGNAL(triggered()), this, SLOT(showDbCleanupAssistant())); + // Menu "Help" connections. connect(m_ui->m_actionAboutGuard, SIGNAL(triggered()), this, SLOT(showAbout())); connect(m_ui->m_actionCheckForUpdates, SIGNAL(triggered()), this, SLOT(showUpdates())); diff --git a/src/gui/dialogs/formmain.h b/src/gui/dialogs/formmain.h index b0678d128..471dbd7ca 100755 --- a/src/gui/dialogs/formmain.h +++ b/src/gui/dialogs/formmain.h @@ -63,7 +63,7 @@ class FormMain : public QMainWindow { void loadSize(); void saveSize(); - public slots: + public slots: // Displays window on top or switches its visibility. void display(); @@ -86,6 +86,7 @@ class FormMain : public QMainWindow { void showUpdates(); void showWiki(); void showAddAccountDialog(); + void showDbCleanupAssistant(); void reportABug(); void donate(); diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index b8aa4ab7a..8196c061f 100755 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -76,6 +76,26 @@ FeedMessageViewer::~FeedMessageViewer() { qDebug("Destroying FeedMessageViewer instance."); } +WebBrowser *FeedMessageViewer::webBrowser() const { + return m_messagesBrowser; +} + +FeedsView *FeedMessageViewer::feedsView() const { + return m_feedsView; +} + +MessagesView *FeedMessageViewer::messagesView() const { + return m_messagesView; +} + +MessagesToolBar *FeedMessageViewer::messagesToolBar() const { + return m_toolBarMessages; +} + +FeedsToolBar *FeedMessageViewer::feedsToolBar() const { + return m_toolBarFeeds; +} + void FeedMessageViewer::saveSize() { Settings *settings = qApp->settings(); @@ -121,11 +141,6 @@ void FeedMessageViewer::loadMessageViewerFonts() { m_messagesBrowser->reloadFontSettings(); } -void FeedMessageViewer::quit() { - // Quit the feeds model (stops auto-update timer etc.). - m_feedsView->sourceModel()->quit(); -} - bool FeedMessageViewer::areToolBarsEnabled() const { return m_toolBarsEnabled; } @@ -270,8 +285,6 @@ void FeedMessageViewer::createConnections() { m_feedsView, SLOT(addFeedIntoSelectedAccount())); connect(form_main->m_ui->m_actionAddCategoryIntoSelectedAccount, SIGNAL(triggered()), m_feedsView, SLOT(addCategoryIntoSelectedAccount())); - connect(form_main->m_ui->m_actionCleanupDatabase, - SIGNAL(triggered()), this, SLOT(showDbCleanupAssistant())); connect(form_main->m_ui->m_actionSwitchImportanceOfSelectedMessages, SIGNAL(triggered()), m_messagesView, SLOT(switchSelectedMessagesImportance())); connect(form_main->m_ui->m_actionDeleteSelectedMessages, @@ -414,24 +427,6 @@ void FeedMessageViewer::initializeViews() { updateFeedButtonsAvailability(); } -void FeedMessageViewer::showDbCleanupAssistant() { - if (qApp->feedUpdateLock()->tryLock()) { - QScopedPointer form_pointer(new FormDatabaseCleanup(this)); - form_pointer.data()->setCleaner(qApp->feedReader()->databaseCleaner()); - form_pointer.data()->exec(); - - qApp->feedUpdateLock()->unlock(); - - m_messagesView->reloadSelections(false); - m_feedsView->sourceModel()->reloadCountsOfWholeModel(); - } - else { - qApp->showGuiMessage(tr("Cannot cleanup database"), - tr("Cannot cleanup database, because another critical action is running."), - QSystemTrayIcon::Warning, qApp->mainFormWidget(), true); - } -} - void FeedMessageViewer::refreshVisualProperties() { const Qt::ToolButtonStyle button_style = static_cast(qApp->settings()->value(GROUP(GUI), SETTING(GUI::ToolbarStyle)).toInt()); diff --git a/src/gui/feedmessageviewer.h b/src/gui/feedmessageviewer.h index aa3197e45..e057983a4 100755 --- a/src/gui/feedmessageviewer.h +++ b/src/gui/feedmessageviewer.h @@ -21,7 +21,6 @@ #include "gui/tabcontent.h" #include "core/messagesmodel.h" -#include "core/feeddownloader.h" #include @@ -45,28 +44,16 @@ class FeedMessageViewer : public TabContent { explicit FeedMessageViewer(QWidget *parent = 0); virtual ~FeedMessageViewer(); - // WebBrowser getter from TabContent interface. - inline WebBrowser *webBrowser() const { - return m_messagesBrowser; - } + WebBrowser *webBrowser() const; + FeedsView *feedsView() const; + MessagesView *messagesView() const; + MessagesToolBar *messagesToolBar() const; + FeedsToolBar *feedsToolBar() const; - // FeedsView getter. - inline FeedsView *feedsView() const { - return m_feedsView; - } - - inline MessagesView *messagesView() const { - return m_messagesView; - } - - inline MessagesToolBar *messagesToolBar() const { - return m_toolBarMessages; - } - - inline FeedsToolBar *feedsToolBar() const { - return m_toolBarFeeds; - } + bool areToolBarsEnabled() const; + bool areListHeadersEnabled() const; + public slots: // Loads/saves sizes and states of ALL // underlying widgets, this contains primarily // splitters, toolbar and views. @@ -75,14 +62,6 @@ class FeedMessageViewer : public TabContent { void loadMessageViewerFonts(); - // Destroys worker/feed downloader thread and - // stops any child widgets/workers. - void quit(); - - bool areToolBarsEnabled() const; - bool areListHeadersEnabled() const; - - public slots: // Switches orientation horizontal/vertical. void switchMessageSplitterOrientation(); @@ -90,9 +69,6 @@ class FeedMessageViewer : public TabContent { void setToolBarsEnabled(bool enable); void setListHeadersEnabled(bool enable); - // Runs "cleanup" of the database. - void showDbCleanupAssistant(); - // Reloads some changeable visual settings. void refreshVisualProperties(); diff --git a/src/miscellaneous/application.cpp b/src/miscellaneous/application.cpp index 6378dbb66..4647d70f5 100755 --- a/src/miscellaneous/application.cpp +++ b/src/miscellaneous/application.cpp @@ -317,7 +317,8 @@ void Application::onAboutToQuit() { system()->removeTrolltechJunkRegistryKeys(); #endif - mainForm()->tabWidget()->feedMessageViewer()->quit(); + qApp->feedReader()->stop(); + database()->saveDatabase(); mainForm()->saveSize(); diff --git a/src/miscellaneous/feedreader.cpp b/src/miscellaneous/feedreader.cpp index ee8ad06a3..4387590a8 100755 --- a/src/miscellaneous/feedreader.cpp +++ b/src/miscellaneous/feedreader.cpp @@ -232,6 +232,10 @@ void FeedReader::stop() { qDebug("Database cleaner exists. Deleting it from memory."); m_dbCleaner->deleteLater(); } + + if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool()) { + m_feedsModel->markItemCleared(m_feedsModel->rootItem(), true); + } } MessagesProxyModel *FeedReader::messagesProxyModel() const { diff --git a/src/miscellaneous/feedreader.h b/src/miscellaneous/feedreader.h index 43cdfe852..f0f37febb 100755 --- a/src/miscellaneous/feedreader.h +++ b/src/miscellaneous/feedreader.h @@ -61,7 +61,7 @@ class FeedReader : public QObject { // and starts/stop the timer as needed. void updateAutoUpdateStatus(); - public slots: + public slots: // Schedules all feeds from all accounts for update. void updateAllFeeds();