New minor version. Database upgrade preparations.
authorAkos Polster <akos@pipacs.com>
Fri, 8 Oct 2010 17:25:34 +0000 (19:25 +0200)
committerAkos Polster <akos@pipacs.com>
Fri, 8 Oct 2010 17:25:34 +0000 (19:25 +0200)
mainwindow.cpp
mainwindow.h
model/book.cpp
model/book.h
model/library.cpp
model/library.h
pkg/version.txt

index 40fa621..1b653f2 100755 (executable)
@@ -110,8 +110,21 @@ MainWindow::MainWindow(QWidget *parent):
     connect(Library::instance(), SIGNAL(nowReadingChanged()),
             this, SLOT(onCurrentBookChanged()));
 
-    // Load book on command line, or load last read book, or load default book
+    // Load library, upgrade it if needed
+    upgradeProgress = new QProgressDialog(tr("Upgrading library"), "", 0, 0, this);
+    upgradeProgress->reset();
+    upgradeProgress->setMinimumDuration(0);
+    upgradeProgress->setWindowModality(Qt::WindowModal);
+    upgradeProgress->setCancelButton(0);
     Library *library = Library::instance();
+    connect(library, SIGNAL(beginUpgrade(int)), this, SLOT(onBeginUpgrade(int)));
+    connect(library, SIGNAL(upgrading(const QString &)),
+            this, SLOT(onUpgrading(const QString &)));
+    connect(library, SIGNAL(endUpgrade()), this, SLOT(onEndUpgrade()));
+    library->upgrade();
+    library->load();
+
+    // Load book on command line, or load last read book, or load default book
     if (QCoreApplication::arguments().size() == 2) {
         QString path = QCoreApplication::arguments()[1];
         library->add(path);
@@ -119,13 +132,11 @@ MainWindow::MainWindow(QWidget *parent):
         if (index.isValid()) {
             library->setNowReading(index);
         }
-    }
-    else {
+    } else {
         QModelIndex index = library->nowReading();
         if (index.isValid()) {
             library->setNowReading(index);
-        }
-        else {
+        } else {
             if (!library->rowCount()) {
                 library->add(":/books/2BR02B.epub");
             }
@@ -291,8 +302,7 @@ void MainWindow::onSettingsChanged(const QString &key)
         if (value == "portrait") {
             setAttribute(Qt::WA_Maemo5LandscapeOrientation, false);
             setAttribute(Qt::WA_Maemo5PortraitOrientation, true);
-        }
-        else {
+        } else {
             setAttribute(Qt::WA_Maemo5PortraitOrientation, false);
             setAttribute(Qt::WA_Maemo5LandscapeOrientation, true);
         }
@@ -450,3 +460,23 @@ void MainWindow::goToPreviousPage()
     previousButton->flash(1500);
     view->goPreviousPage();
 }
+
+void MainWindow::onBeginUpgrade(int total)
+{
+    upgradeProgress->setVisible(total > 0);
+    upgradeProgress->setMaximum(total);
+}
+
+void MainWindow::onUpgrading(const QString &path)
+{
+    upgradeProgress->setLabelText(tr("Upgrading %1").
+                                  arg(QFileInfo(path).fileName()));
+    upgradeProgress->setValue(upgradeProgress->value() + 1);
+}
+
+void MainWindow::onEndUpgrade()
+{
+    upgradeProgress->hide();
+    upgradeProgress->reset();
+}
+
index dc75edf..60f3d4e 100755 (executable)
@@ -41,6 +41,9 @@ public slots:
     void about();
     void goToNextPage();
     void goToPreviousPage();
+    void onBeginUpgrade(int total);
+    void onUpgrading(const QString &book);
+    void onEndUpgrade();
 
 protected:
     void closeEvent(QCloseEvent *event);
@@ -67,6 +70,7 @@ private:
     Progress *progress;
     TranslucentButton *previousButton;
     TranslucentButton *nextButton;
+    QProgressDialog *upgradeProgress;
 };
 
 #endif // MAINWINDOW_H
index 8fc6f69..bfaf451 100644 (file)
@@ -497,3 +497,9 @@ bool Book::extractMetaData()
     excludedExtensions << ".html" << ".xhtml" << ".xht" << ".htm";
     return extract(excludedExtensions);
 }
+
+void Book::upgrade()
+{
+    Trace t("Book::upgrade");
+    qDebug() << path();
+}
index 0c8fa4f..a5d5175 100644 (file)
@@ -42,12 +42,15 @@ public:
     /** Default constructor. */
     Book();
 
-    /** Load book from persistent storage. */
+    /** Load book meta-data from persistent storage. */
     void load();
 
-    /** Save book to persistent storage. */
+    /** Save book meta-data to persistent storage. */
     void save();
 
+    /** Upgrade persistent storage of book meta-data. */
+    void upgrade();
+
     /** Extract and parse EPUB contents, fill in all members except mPath. */
     bool open();
 
index f28181f..84d51e9 100644 (file)
@@ -6,11 +6,14 @@
 #include "book.h"
 #include "trace.h"
 
+static const char *DORIAN_VERSION =
+#include "pkg/version.txt"
+;
+
 Library *Library::mInstance = 0;
 
 Library::Library(QObject *parent): QAbstractListModel(parent)
 {
-    load();
 }
 
 Library::~Library()
@@ -207,3 +210,25 @@ QStringList Library::bookPaths()
     }
     return ret;
 }
+
+void Library::upgrade()
+{
+    Trace t("Library::upgrade");
+    QSettings settings;
+    QString oldVersion = settings.value("lib/version").toString();
+    if (true /* oldVersion.isEmpty() */) {
+        int size = settings.value("lib/size").toInt();
+        emit beginUpgrade(size);
+        for (int i = 0; i < size; i++) {
+            QString key = "lib/book" + QString::number(i);
+            QString path = settings.value(key).toString();
+            emit upgrading(path);
+            Book *book = new Book(path);
+            book->upgrade();
+        }
+    } else {
+        emit beginUpgrade(0);
+    }
+    settings.setValue("lib/version", QString(DORIAN_VERSION));
+    emit endUpgrade();
+}
index ab48f6d..ed5582f 100644 (file)
@@ -20,6 +20,7 @@ public:
     static void close();
     int rowCount(const QModelIndex &parent = QModelIndex()) const;
     QVariant data(const QModelIndex &index, int role) const;
+    void load();
     void save();
     QModelIndex find(QString path) const;
     QModelIndex find(const Book *book) const;
@@ -27,9 +28,13 @@ public:
     QModelIndex nowReading() const;
     Book *book(const QModelIndex &index);
     QStringList bookPaths();
+    void upgrade();
 
 signals:
     void nowReadingChanged();
+    void beginUpgrade(int total);
+    void upgrading(const QString &book);
+    void endUpgrade();
 
 public slots:
     bool add(const QString &path);
@@ -40,7 +45,6 @@ public slots:
 private:
     explicit Library(QObject *parent = 0);
     ~Library();
-    void load();
     void clear();
     static Library *mInstance;
     QList<Book *> mBooks;
index b5160a7..4535e9e 100644 (file)
@@ -1 +1 @@
-"0.2.3"
+"0.3.0"