9 Library *Library::mInstance = 0;
11 Library::Library(QObject *parent): QAbstractListModel(parent)
21 Library *Library::instance()
24 mInstance = new Library();
29 int Library::rowCount(const QModelIndex &parent) const
31 if (parent.isValid()) {
38 QVariant Library::data(const QModelIndex &index, int role) const
40 if (!index.isValid()) {
46 return mBooks[index.row()]->name();
52 Book *Library::book(const QModelIndex &index)
54 if (index.isValid()) {
55 if ((index.row() >= 0) && (index.row() < mBooks.size())) {
56 return mBooks[index.row()];
58 qCritical() << "*** Library::book: Bad index" << index.row();
74 int size = settings.value("lib/size").toInt();
75 for (int i = 0; i < size; i++) {
76 QString key = "lib/book" + QString::number(i);
77 QString path = settings.value(key).toString();
78 Book *book = new Book(path);
82 QString currentPath = settings.value("lib/nowreading").toString();
83 mNowReading = find(currentPath);
89 settings.setValue("lib/size", mBooks.size());
90 for (int i = 0; i < mBooks.size(); i++) {
91 QString key = "lib/book" + QString::number(i);
92 settings.setValue(key, mBooks[i]->path());
94 Book *currentBook = book(mNowReading);
95 settings.setValue("lib/nowreading",
96 currentBook? currentBook->path(): QString());
99 bool Library::add(QString path)
101 Trace t("Library::add " + path);
103 qCritical() << "*** Library::add: Empty path";
106 if (find(path).isValid()) {
107 t.trace("Book already exists in library");
110 int size = mBooks.size();
111 Book *book = new Book(path);
112 beginInsertRows(QModelIndex(), size, size);
119 void Library::remove(const QModelIndex &index)
121 Book *toRemove = book(index);
125 int row = index.row();
126 beginRemoveRows(QModelIndex(), row, row);
127 mBooks.removeAt(row);
130 if (index == mNowReading) {
131 mNowReading = QModelIndex();
132 emit nowReadingChanged();
137 QModelIndex Library::nowReading() const
142 void Library::setNowReading(const QModelIndex &index)
146 emit nowReadingChanged();
149 void Library::clear()
151 for (int i = 0; i < mBooks.size(); i++) {
155 mNowReading = QModelIndex();
158 QModelIndex Library::find(QString path) const
161 QString absolutePath = QFileInfo(path).absoluteFilePath();
162 for (int i = 0; i < mBooks.size(); i++) {
163 if (absolutePath == mBooks[i]->path()) {
168 return QModelIndex();
171 QModelIndex Library::find(const Book *book) const
174 for (int i = 0; i < mBooks.size(); i++) {
175 if (book == mBooks[i]) {
180 return QModelIndex();