8 Library *Library::mInstance = 0;
10 Library::Library(QObject *parent): QAbstractListModel(parent)
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 if (!index.isValid()) {
45 return mBooks[index.row()]->name();
51 Book *Library::book(const QModelIndex &index)
53 if (index.isValid()) {
54 if ((index.row() >= 0) && (index.row() < mBooks.size())) {
55 return mBooks[index.row()];
57 qWarning() << "*** Library::book: Bad index" << index.row();
73 int size = settings.value("lib/size").toInt();
74 for (int i = 0; i < size; i++) {
75 QString key = "lib/book" + QString::number(i);
76 QString path = settings.value(key).toString();
77 Book *book = new Book(path);
81 QString currentPath = settings.value("lib/nowreading").toString();
82 mNowReading = find(currentPath);
88 settings.setValue("lib/size", mBooks.size());
89 for (int i = 0; i < mBooks.size(); i++) {
90 QString key = "lib/book" + QString::number(i);
91 settings.setValue(key, mBooks[i]->path());
93 Book *currentBook = book(mNowReading);
94 settings.setValue("lib/nowreading",
95 currentBook? currentBook->path(): QString());
98 bool Library::add(QString path)
101 qWarning() << "*** Library::add: Empty path";
104 if (find(path).isValid()) {
105 qDebug() << "Library::add: Book already exists in library";
108 int size = mBooks.size();
109 Book *book = new Book(path);
110 beginInsertRows(QModelIndex(), size, size);
117 void Library::remove(const QModelIndex &index)
119 Book *toRemove = book(index);
123 int row = index.row();
124 beginRemoveRows(QModelIndex(), row, row);
125 mBooks.removeAt(row);
128 if (index == mNowReading) {
129 mNowReading = QModelIndex();
130 emit nowReadingChanged();
135 QModelIndex Library::nowReading() const
137 qDebug() << "Library::nowReading" << mNowReading.row();
141 void Library::setNowReading(const QModelIndex &index)
145 emit nowReadingChanged();
148 void Library::clear()
150 for (int i = 0; i < mBooks.size(); i++) {
154 mNowReading = QModelIndex();
157 QModelIndex Library::find(QString path) const
160 QString absolutePath = QFileInfo(path).absoluteFilePath();
161 for (int i = 0; i < mBooks.size(); i++) {
162 if (absolutePath == mBooks[i]->path()) {
167 return QModelIndex();
170 QModelIndex Library::find(const Book *book) const
173 for (int i = 0; i < mBooks.size(); i++) {
174 if (book == mBooks[i]) {
179 return QModelIndex();