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);
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");
}
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);
}
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();
+}
+
#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()
}
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();
+}
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;
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);
private:
explicit Library(QObject *parent = 0);
~Library();
- void load();
void clear();
static Library *mInstance;
QList<Book *> mBooks;