8 Library *Library::mInstance = 0;
10 Library::Library(QObject *parent): QAbstractListModel(parent), mNowReading(0)
20 Library *Library::instance()
23 mInstance = new Library();
28 int Library::rowCount(const QModelIndex &parent) const
30 if (parent.isValid()) {
37 QVariant Library::data(const QModelIndex &index, int role) const
39 qDebug() << "Library::data, row" << index.row() << "role" << role;
41 if (!index.isValid()) {
47 return mBooks[index.row()]->name();
53 Book *Library::book(const QModelIndex &index)
55 if (index.isValid()) {
56 return mBooks[index.row()];
72 int size = settings.value("lib/size").toInt();
73 for (int i = 0; i < size; i++) {
74 QString key = "lib/book" + QString::number(i);
75 QString path = settings.value(key).toString();
76 Book *book = new Book(path);
78 qDebug() << "Library::load: Add" << book->title << "from" << path;
81 QString currentPath = settings.value("lib/nowreading").toString();
82 QModelIndex index = find(currentPath);
83 if (index.isValid()) {
84 mNowReading = mBooks[index.row()];
85 qDebug() << "Library::load: Now reading" << mNowReading->path();
91 qDebug() << "Library::save";
94 settings.setValue("lib/size", mBooks.size());
95 for (int i = 0; i < mBooks.size(); i++) {
96 QString key = "lib/book" + QString::number(i);
97 settings.setValue(key, mBooks[i]->path());
99 settings.setValue("lib/nowreading",
100 mNowReading? mNowReading->path(): QString());
103 bool Library::add(QString path)
105 qDebug() << "Library::add" << path;
107 qWarning() << "Library::add: Empty path";
110 if (find(path).isValid()) {
111 qDebug() << " Book already exists in library";
114 int size = mBooks.size();
115 Book *book = new Book(path);
116 beginInsertRows(QModelIndex(), size, size);
123 void Library::remove(const QModelIndex &index)
125 if (!index.isValid()) {
128 int row = index.row();
129 if ((row < 0) || (row >= mBooks.size())) {
132 beginRemoveRows(QModelIndex(), row, row);
133 Book *book = mBooks[row];
134 mBooks.removeAt(row);
137 if (book == mNowReading) {
139 emit nowReadingChanged();
144 QModelIndex Library::nowReading() const
146 return find(mNowReading);
149 void Library::setNowReading(const QModelIndex index)
151 if (index.isValid()) {
152 int row = index.row();
153 if ((row >= 0) && (row < mBooks.size())) {
154 mNowReading = mBooks[row];
160 emit nowReadingChanged();
163 void Library::clear()
165 for (int i = 0; i < mBooks.size(); i++) {
172 QModelIndex Library::find(QString path) const
175 QString absolutePath = QFileInfo(path).absoluteFilePath();
176 for (int i = 0; i < mBooks.size(); i++) {
177 if (absolutePath == mBooks[i]->path()) {
182 return QModelIndex();
185 QModelIndex Library::find(const Book *book) const
187 for (int i = 0; i < mBooks.size(); i++) {
188 if (book == mBooks[i]) {
192 return QModelIndex();