Improved C++ NotedModel and some small visual thinks
This commit is contained in:
parent
3b1e1cca8c
commit
5156f1e629
8 changed files with 112 additions and 78 deletions
|
@ -5,8 +5,16 @@ import Nemo.Notifications 1.0
|
||||||
Dialog {
|
Dialog {
|
||||||
id: editDialog
|
id: editDialog
|
||||||
|
|
||||||
//property int noteID
|
property int id
|
||||||
property var note
|
property int modified
|
||||||
|
property string title
|
||||||
|
property string category
|
||||||
|
property string content
|
||||||
|
property bool favorite
|
||||||
|
property string etag
|
||||||
|
property bool error
|
||||||
|
property string errorMessage
|
||||||
|
property string date
|
||||||
|
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
api.updateNote(note.id, { 'category': categoryField.text, 'content': contentArea.text, 'favorite': favoriteButton.selected } )
|
api.updateNote(note.id, { 'category': categoryField.text, 'content': contentArea.text, 'favorite': favoriteButton.selected } )
|
||||||
|
|
|
@ -6,6 +6,8 @@ import "../js/showdown/dist/showdown.js" as ShowDown
|
||||||
Dialog {
|
Dialog {
|
||||||
id: noteDialog
|
id: noteDialog
|
||||||
|
|
||||||
|
property Note note
|
||||||
|
|
||||||
property int id
|
property int id
|
||||||
property int modified
|
property int modified
|
||||||
property string title
|
property string title
|
||||||
|
@ -31,7 +33,17 @@ Dialog {
|
||||||
|
|
||||||
|
|
||||||
acceptDestination: Qt.resolvedUrl("EditPage.qml")
|
acceptDestination: Qt.resolvedUrl("EditPage.qml")
|
||||||
acceptDestinationProperties: { note: note }
|
acceptDestinationProperties: (
|
||||||
|
{ id: id,
|
||||||
|
modified: modified,
|
||||||
|
title: title,
|
||||||
|
category: category,
|
||||||
|
content: content,
|
||||||
|
favorite: favorite,
|
||||||
|
etag: etag,
|
||||||
|
error: error,
|
||||||
|
errorMessage: errorMessage,
|
||||||
|
date: date } )
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
acceptDestinationInstance.note = note
|
acceptDestinationInstance.note = note
|
||||||
acceptDestinationInstance.reloadContent()
|
acceptDestinationInstance.reloadContent()
|
||||||
|
@ -42,6 +54,7 @@ Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
console.log(note.title)
|
||||||
parseContent()
|
parseContent()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ Page {
|
||||||
SearchField {
|
SearchField {
|
||||||
id: searchField
|
id: searchField
|
||||||
width: parent.width
|
width: parent.width
|
||||||
enabled: appSettings.accountIDs.length > 0
|
enabled: !busyIndicator.running && !noLoginPlaceholder.enabled && !errorPlaceholder.enabled && !noNotesPlaceholder.enabled
|
||||||
placeholderText: account.name.length > 0 ? account.name : qsTr("Nextcloud Notes")
|
placeholderText: account.name.length > 0 ? account.name : qsTr("Nextcloud Notes")
|
||||||
EnterKey.iconSource: "image://theme/icon-m-enter-close"
|
EnterKey.iconSource: "image://theme/icon-m-enter-close"
|
||||||
EnterKey.onClicked: focus = false
|
EnterKey.onClicked: focus = false
|
||||||
|
@ -103,7 +103,8 @@ Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked: pageStack.push(Qt.resolvedUrl("../pages/NotePage.qml"),
|
onClicked: pageStack.push(Qt.resolvedUrl("../pages/NotePage.qml"),
|
||||||
{ id: id,
|
{ note: noteListModel.get(index),
|
||||||
|
id: id,
|
||||||
modified: modified,
|
modified: modified,
|
||||||
title: title,
|
title: title,
|
||||||
category: category,
|
category: category,
|
||||||
|
@ -220,6 +221,17 @@ Page {
|
||||||
size: BusyIndicatorSize.Large
|
size: BusyIndicatorSize.Large
|
||||||
running: notesList.count === 0 && api.busy
|
running: notesList.count === 0 && api.busy
|
||||||
}
|
}
|
||||||
|
Label {
|
||||||
|
id: busyLabel
|
||||||
|
anchors.top: busyIndicator.bottom
|
||||||
|
anchors.topMargin: Theme.paddingMedium
|
||||||
|
visible: busyIndicator.running
|
||||||
|
width: parent.width
|
||||||
|
color: Theme.highlightColor
|
||||||
|
font.pixelSize: Theme.fontSizeExtraLarge
|
||||||
|
horizontalAlignment: Qt.AlignHCenter
|
||||||
|
text: qsTr("Loading notes...")
|
||||||
|
}
|
||||||
|
|
||||||
ViewPlaceholder {
|
ViewPlaceholder {
|
||||||
id: noLoginPlaceholder
|
id: noLoginPlaceholder
|
||||||
|
|
|
@ -57,6 +57,35 @@ void NotesModel::clearSearch() {
|
||||||
search();
|
search();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NotesModel::applyJSONobject(const QJsonObject &jobj) {
|
||||||
|
if (!jobj.isEmpty()) {
|
||||||
|
Note note = Note::fromjson(jobj); // TODO connect signals
|
||||||
|
if (!note.error()) {
|
||||||
|
int position = indexOf(note.id());
|
||||||
|
Note oldNote = get(position);
|
||||||
|
if (position >= 0 && note.etag() != oldNote.etag()) {
|
||||||
|
qDebug() << "-- Existing note " << note.title() << "changed, updating the model.";
|
||||||
|
replaceNote(note);
|
||||||
|
}
|
||||||
|
else if (position < 0) {
|
||||||
|
qDebug() << "-- New note" << note.title() << ", adding it to the model.";
|
||||||
|
insertNote(note);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug() << "-- Existing note " << note.title() << "unchanged, nothing to do.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug() << "Note contains an error:" << note.errorMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug() << "Unknown JSON object. This message should never occure!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool NotesModel::applyJSON(const QString &json) {
|
bool NotesModel::applyJSON(const QString &json) {
|
||||||
qDebug() << "Applying new JSON input";// << json;
|
qDebug() << "Applying new JSON input";// << json;
|
||||||
QJsonParseError error;
|
QJsonParseError error;
|
||||||
|
@ -70,55 +99,14 @@ bool NotesModel::applyJSON(const QString &json) {
|
||||||
QJsonValue jval = jarr.first();
|
QJsonValue jval = jarr.first();
|
||||||
if (jval.isObject()) {
|
if (jval.isObject()) {
|
||||||
//qDebug() << "It's an object, all fine...";
|
//qDebug() << "It's an object, all fine...";
|
||||||
QJsonObject jobj = jval.toObject();
|
applyJSONobject(jval.toObject());
|
||||||
if (!jobj.isEmpty()) {
|
|
||||||
//qDebug() << "Adding it to the model...";
|
|
||||||
Note note = Note::fromjson(jobj); // TODO connect signals
|
|
||||||
if (!note.error()) {
|
|
||||||
int position = indexOf(note.id());
|
|
||||||
Note oldNote = get(position);
|
|
||||||
if (position >= 0 && note.etag() != oldNote.etag()) {
|
|
||||||
qDebug() << "-- Existing note " << note.title() << "changed, updating the model...";
|
|
||||||
replaceNote(note);
|
|
||||||
}
|
|
||||||
else if (position < 0) {
|
|
||||||
qDebug() << "-- New note" << note.title() << ", adding it to the model...";
|
|
||||||
insertNote(note);
|
|
||||||
}
|
|
||||||
//qDebug() << "Adding note"<< note.title << "on position" << position;
|
|
||||||
//beginInsertRows(QModelIndex(), position, position);
|
|
||||||
//m_notes.insert(position, note);
|
|
||||||
//endInsertRows();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qDebug() << "Note contains an error:" << note.errorMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qDebug() << "Unknown JSON object. This message should never occure!";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
jarr.pop_front();
|
jarr.pop_front();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (jdoc.isObject()) {
|
else if (jdoc.isObject()) {
|
||||||
qDebug() << "It's a single object...";
|
qDebug() << "- It's a single object...";
|
||||||
QJsonObject jobj = jdoc.object();
|
return applyJSONobject(jdoc.object());
|
||||||
if (!jobj.isEmpty() && !jobj.value(roleNames()[ErrorRole]).toBool(true)) {
|
|
||||||
Note note = Note::fromjson(jobj); // TODO connect signals
|
|
||||||
int position = indexOf(note.id());
|
|
||||||
if (position >= 0) {
|
|
||||||
m_notes[position].note = note;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
position = insertPosition(note);
|
|
||||||
ModelNote<Note, bool> noteToInsert;
|
|
||||||
noteToInsert.note = note; noteToInsert.param = true;
|
|
||||||
beginInsertRows(index(position), position, position);
|
|
||||||
m_notes.insert(position, noteToInsert);
|
|
||||||
endInsertRows();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qDebug() << "Unknown JSON document. This message should never occure!";
|
qDebug() << "Unknown JSON document. This message should never occure!";
|
||||||
|
@ -127,7 +115,7 @@ bool NotesModel::applyJSON(const QString &json) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug() << error.errorString();
|
qDebug() << "Unable to parse the JSON input:" << error.errorString();
|
||||||
}
|
}
|
||||||
return error.error == QJsonParseError::NoError;
|
return error.error == QJsonParseError::NoError;
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ private:
|
||||||
|
|
||||||
void sort();
|
void sort();
|
||||||
//void update();
|
//void update();
|
||||||
//void insertJnote(const QJsonObject &jobj);
|
bool applyJSONobject(const QJsonObject &jobj);
|
||||||
int insertPosition(const Note &n) const;
|
int insertPosition(const Note &n) const;
|
||||||
bool noteLessThan(const Note &n1, const Note &n2) const;
|
bool noteLessThan(const Note &n1, const Note &n2) const;
|
||||||
/*static bool noteLessThanByDate(const Note &n1, const Note &n2);
|
/*static bool noteLessThanByDate(const Note &n1, const Note &n2);
|
||||||
|
|
|
@ -313,6 +313,10 @@
|
||||||
<source>Deleting note</source>
|
<source>Deleting note</source>
|
||||||
<translation>Lösche Notiz</translation>
|
<translation>Lösche Notiz</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Loading notes...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SettingsPage</name>
|
<name>SettingsPage</name>
|
||||||
|
|
|
@ -313,6 +313,10 @@
|
||||||
<source>Deleting note</source>
|
<source>Deleting note</source>
|
||||||
<translation type="unfinished">Tar bort anteckning</translation>
|
<translation type="unfinished">Tar bort anteckning</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Loading notes...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SettingsPage</name>
|
<name>SettingsPage</name>
|
||||||
|
|
|
@ -84,32 +84,32 @@
|
||||||
<context>
|
<context>
|
||||||
<name>EditPage</name>
|
<name>EditPage</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="31"/>
|
<location filename="../qml/pages/EditPage.qml" line="39"/>
|
||||||
<source>Reset</source>
|
<source>Reset</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="35"/>
|
<location filename="../qml/pages/EditPage.qml" line="43"/>
|
||||||
<source>Markdown syntax</source>
|
<source>Markdown syntax</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="63"/>
|
<location filename="../qml/pages/EditPage.qml" line="71"/>
|
||||||
<source>No content</source>
|
<source>No content</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="148"/>
|
<location filename="../qml/pages/EditPage.qml" line="156"/>
|
||||||
<source>No category</source>
|
<source>No category</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="149"/>
|
<location filename="../qml/pages/EditPage.qml" line="157"/>
|
||||||
<source>Category</source>
|
<source>Category</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/EditPage.qml" line="164"/>
|
<location filename="../qml/pages/EditPage.qml" line="172"/>
|
||||||
<source>Modified</source>
|
<source>Modified</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -232,52 +232,52 @@
|
||||||
<context>
|
<context>
|
||||||
<name>NotePage</name>
|
<name>NotePage</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="102"/>
|
<location filename="../qml/pages/NotePage.qml" line="115"/>
|
||||||
<source>Delete</source>
|
<source>Delete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="106"/>
|
<location filename="../qml/pages/NotePage.qml" line="119"/>
|
||||||
<source>Reload</source>
|
<source>Reload</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="106"/>
|
<location filename="../qml/pages/NotePage.qml" line="119"/>
|
||||||
<source>Updating...</source>
|
<source>Updating...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="112"/>
|
<location filename="../qml/pages/NotePage.qml" line="125"/>
|
||||||
<source>Last update</source>
|
<source>Last update</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="115"/>
|
<location filename="../qml/pages/NotePage.qml" line="128"/>
|
||||||
<source>never</source>
|
<source>never</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="122"/>
|
<location filename="../qml/pages/NotePage.qml" line="135"/>
|
||||||
<source>Edit</source>
|
<source>Edit</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="123"/>
|
<location filename="../qml/pages/NotePage.qml" line="136"/>
|
||||||
<source>Notes</source>
|
<source>Notes</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="243"/>
|
<location filename="../qml/pages/NotePage.qml" line="256"/>
|
||||||
<source>No category</source>
|
<source>No category</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="244"/>
|
<location filename="../qml/pages/NotePage.qml" line="257"/>
|
||||||
<source>Category</source>
|
<source>Category</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotePage.qml" line="259"/>
|
<location filename="../qml/pages/NotePage.qml" line="272"/>
|
||||||
<source>Modified</source>
|
<source>Modified</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -328,57 +328,62 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="197"/>
|
<location filename="../qml/pages/NotesPage.qml" line="198"/>
|
||||||
<source>Modified</source>
|
<source>Modified</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="200"/>
|
<location filename="../qml/pages/NotesPage.qml" line="201"/>
|
||||||
<source>Delete</source>
|
<source>Delete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="202"/>
|
<location filename="../qml/pages/NotesPage.qml" line="203"/>
|
||||||
<source>Deleting note</source>
|
<source>Deleting note</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="227"/>
|
<location filename="../qml/pages/NotesPage.qml" line="233"/>
|
||||||
|
<source>Loading notes...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../qml/pages/NotesPage.qml" line="239"/>
|
||||||
<source>No account yet</source>
|
<source>No account yet</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="228"/>
|
<location filename="../qml/pages/NotesPage.qml" line="240"/>
|
||||||
<source>Got to the settings to add an account</source>
|
<source>Got to the settings to add an account</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="234"/>
|
<location filename="../qml/pages/NotesPage.qml" line="246"/>
|
||||||
<source>No notes yet</source>
|
<source>No notes yet</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="235"/>
|
<location filename="../qml/pages/NotesPage.qml" line="247"/>
|
||||||
<source>Pull down to add a note</source>
|
<source>Pull down to add a note</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="241"/>
|
<location filename="../qml/pages/NotesPage.qml" line="253"/>
|
||||||
<source>No result</source>
|
<source>No result</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="242"/>
|
<location filename="../qml/pages/NotesPage.qml" line="254"/>
|
||||||
<source>Try another query</source>
|
<source>Try another query</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="248"/>
|
<location filename="../qml/pages/NotesPage.qml" line="260"/>
|
||||||
<source>An error occurred</source>
|
<source>An error occurred</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/pages/NotesPage.qml" line="259"/>
|
<location filename="../qml/pages/NotesPage.qml" line="271"/>
|
||||||
<source>Open the settings to configure your Nextcloud accounts</source>
|
<source>Open the settings to configure your Nextcloud accounts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
Loading…
Reference in a new issue