mirror of
https://github.com/laurent22/joplin.git
synced 2025-04-11 11:12:03 +02:00
72 lines
1.6 KiB
C++
Executable File
72 lines
1.6 KiB
C++
Executable File
#include "notemodel.h"
|
|
|
|
jop::NoteModel::NoteModel() {
|
|
folderId_ = "";
|
|
orderBy_ = "title";
|
|
}
|
|
|
|
int jop::NoteModel::rowCount(const QModelIndex &parent) const {
|
|
Q_UNUSED(parent);
|
|
return folder().noteCount();
|
|
}
|
|
|
|
QVariant jop::NoteModel::data(const QModelIndex &index, int role) const {
|
|
Note note = atIndex(index.row());
|
|
|
|
if (role == IdRole) {
|
|
return QVariant(note.id().toString());
|
|
}
|
|
|
|
return QVariant(note.value("title").toString());
|
|
}
|
|
|
|
jop::Note jop::NoteModel::atIndex(int index) const {
|
|
if (folderId_ == "") return Note();
|
|
if (index < 0 || index >= rowCount()) return Note();
|
|
|
|
if (cache_.isset(index)) return cache_.get(index);
|
|
|
|
std::vector<int> indexes = cache_.availableBufferAround(index, 32);
|
|
if (!indexes.size()) {
|
|
qWarning() << "Couldn't acquire buffer"; // "Cannot happen"
|
|
return Note();
|
|
}
|
|
|
|
int from = indexes[0];
|
|
int to = indexes[indexes.size() - 1];
|
|
|
|
Folder folder = this->folder();
|
|
|
|
QVector<Note> notes = folder.notes(orderBy_, to - from + 1, from);
|
|
int noteIndex = from;
|
|
for (int i = 0; i < notes.size(); i++) {
|
|
cache_.set(noteIndex, notes[i]);
|
|
noteIndex++;
|
|
}
|
|
|
|
return cache_.get(index);
|
|
}
|
|
|
|
void jop::NoteModel::setFolderId(const QString &v) {
|
|
if (v == folderId_) return;
|
|
beginResetModel();
|
|
cache_.clear();
|
|
folderId_ = v;
|
|
endResetModel();
|
|
}
|
|
|
|
jop::Folder jop::NoteModel::folder() const {
|
|
Folder folder;
|
|
if (folderId_ == "") return folder;
|
|
folder.load(folderId_);
|
|
return folder;
|
|
}
|
|
|
|
QHash<int, QByteArray> jop::NoteModel::roleNames() const {
|
|
QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
|
|
// roles[TitleRole] = "title";
|
|
// roles[UuidRole] = "uuid";
|
|
return roles;
|
|
|
|
}
|