From b16d14e17592d378f8e53a01ca86e657a5a5662b Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 5 Feb 2014 19:27:06 +0100 Subject: [PATCH] Database defragmentation feature added, this fixed #1. --- .../mini-kfaenza/defragment-database.png | Bin 0 -> 3721 bytes .../icons/mini-kfaenza/view-switch.png | Bin 1160 -> 2541 bytes src/core/databasefactory.cpp | 8 +++ src/core/databasefactory.h | 10 +++ src/gui/feedmessageviewer.cpp | 57 ++++++++++++++++++ src/gui/feedmessageviewer.h | 3 + src/gui/formmain.cpp | 1 + src/gui/formmain.ui | 10 +++ 8 files changed, 89 insertions(+) create mode 100644 resources/graphics/icons/mini-kfaenza/defragment-database.png diff --git a/resources/graphics/icons/mini-kfaenza/defragment-database.png b/resources/graphics/icons/mini-kfaenza/defragment-database.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2b274212f717ec8c1173cfe4e1e4424baff1a6 GIT binary patch literal 3721 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 DFF)*Z literal 1160 zcmV;31b6$1P)pz*bM6&dYyMA!+>Q{!09w3b_XHcLYONgrp|wT`5doe^DW`x(_e|gq zrPMa?i`Kdl5<&>zYboUqN~wpyef#85UDsbih(9G@01xZ!OTpD=$ofF^3o3UJg-;7O zV{viuyUxzehP~(K=XNrgJOG>^!a{%mq*Ch61dfl7qYDcQ-_*hfwARed&gQ7O^P>dn zx+EZ67l;6)t7~g(2kYzW1>3f|4a(;e(?BwL6vbwtZlMgAHo&w9VglU>1TU%RZ zZ*OmhyUuYOmY0`b$6~Q`EEY>oOia9(n3#C6va<5pFbu=p-`m^Uv9+~jnx;8oS(aan zH4wPr0;Lp{N`--efu4hkw^YO;U#`M6zKu@Jop-GOB zw^~4JjeE{dPfy9`^HD(Bw(Tp>T@Q$SJ|8_jJ-yoBKr{`)QmN!DEiL`Jxw)AEiqxanaU90S z$9qOcN1u7ux3{-W#iI991LvEYo3DU~4*|nVz|RdupD}xCYAWqB-mvD{_l=+M>I|9*%hVzs zfXT_pL4duzz25`Mxx%LwBf7i0znYnu`5xf#@bK?Kp->7aqTv`yDFbnksZ{EDI2?|K z!{KNum3mHqpQ!6$4)N^xD6#FL1EKojudc^hP1U|C98{#-&o zsZt_z}ozt^XBnWfMY#fj0c}_UA+ec(1j- a1o#h7gUbQa{o(`w0000m_ui->m_actionDeleteSelectedFeedCategory, SIGNAL(triggered()), m_feedsView, SLOT(deleteSelectedItem())); + connect(form_main->m_ui->m_actionDefragmentDatabase, + SIGNAL(triggered()), this, SLOT(vacuumDatabase())); } void FeedMessageViewer::initialize() { @@ -279,3 +282,57 @@ void FeedMessageViewer::initializeViews() { // Set layout as active. setLayout(central_layout); } + + +void FeedMessageViewer::vacuumDatabase() { + bool is_tray_activated = SystemTrayIcon::isSystemTrayActivated(); + + if (!SystemFactory::instance()->applicationCloseLock()->tryLock()) { + // Lock was not obtained because + // it is used probably by feed updater or application + // is quitting. + if (is_tray_activated) { + SystemTrayIcon::instance()->showMessage(tr("Cannot defragment database"), + tr("Database cannot be defragmented because feed update is ongoing."), + QSystemTrayIcon::Warning); + } + else { + MessageBox::show(this, + QMessageBox::Warning, + tr("Cannot defragment database"), + tr("Database cannot be defragmented because feed update is ongoing.")); + } + + // Thus, cannot delete and quit the method. + return; + } + + if (DatabaseFactory::instance()->vacuumDatabase()) { + if (is_tray_activated) { + SystemTrayIcon::instance()->showMessage(tr("Database defragmented"), + tr("Database was successfully defragmented."), + QSystemTrayIcon::Information); + } + else { + MessageBox::show(this, + QMessageBox::Information, + tr("Database defragmented"), + tr("Database was successfully defragmented.")); + } + } + else { + if (is_tray_activated) { + SystemTrayIcon::instance()->showMessage(tr("Database was not defragmented"), + tr("Database was not defragmented, try again later."), + QSystemTrayIcon::Warning); + } + else { + MessageBox::show(this, + QMessageBox::Warning, + tr("Database was not defragmented"), + tr("Database was not defragmented, try again later.")); + } + } + + SystemFactory::instance()->applicationCloseLock()->unlock(); +} diff --git a/src/gui/feedmessageviewer.h b/src/gui/feedmessageviewer.h index 2436a01e7..d8cae5469 100644 --- a/src/gui/feedmessageviewer.h +++ b/src/gui/feedmessageviewer.h @@ -43,6 +43,9 @@ class FeedMessageViewer : public TabContent { // stops any child widgets/workers. void quit(); + public slots: + void vacuumDatabase(); + protected slots: // Updates counts of messages for example in tray icon. void updateTrayIconStatus(int unread_messages, int total_messages); diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index 1d80151a5..99ee40f7c 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -224,6 +224,7 @@ void FormMain::setupIcons() { m_ui->m_actionExport->setIcon(icon_theme_factory->fromTheme("document-export")); m_ui->m_actionFullscreen->setIcon(icon_theme_factory->fromTheme("view-fullscreen")); m_ui->m_actionSwitchMainWindow->setIcon(icon_theme_factory->fromTheme("view-switch")); + m_ui->m_actionDefragmentDatabase->setIcon(icon_theme_factory->fromTheme("defragment-database")); // Web browser. m_ui->m_actionAddBrowser->setIcon(icon_theme_factory->fromTheme("list-add")); diff --git a/src/gui/formmain.ui b/src/gui/formmain.ui index f0eac861d..f82351698 100644 --- a/src/gui/formmain.ui +++ b/src/gui/formmain.ui @@ -74,6 +74,8 @@ &Tools + + @@ -447,6 +449,14 @@ + + + Defragment database + + + Defragment database file so that its size decreases. + +