]> uap-core.de Git - note.git/commitdiff
add note_store_new_notebook_async
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 9 May 2025 19:32:06 +0000 (21:32 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 9 May 2025 19:32:06 +0000 (21:32 +0200)
application/store.c
application/store.h
application/window.c

index 2c82211ca26044d601a9daa93da0bca36bd13c37..38412885502d3a7e0263da9ed5f558c8a616f138 100644 (file)
@@ -82,6 +82,8 @@
     "inner join resources r on a.attachment_resource_id = r.resource_id " \
     "where parent_resource_id = ? order by attachment_id;"
 
+#define SQL_NOTEBOOK_NEW "insert into resources(parent_id, nodename, iscollection) values (?, ?, 1) returning resource_id;"
+
 static DBUConnection *connection;
 
 static UiThreadpool *queue;
@@ -761,3 +763,49 @@ void note_store_load_note_attachments_async(UiObject *obj, Note *note, execresul
     job->userdata = userdata;
     ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_load_attachments, job, (ui_callback)uithr_load_attachments_finished, job);
 }
+
+
+
+
+
+typedef struct CreateNotebookJob {
+    Resource *resource;
+    createresult_func resultcb;
+    void *userdata;
+    int error;
+} CreateNotebookJob;
+
+static int qthr_new_notebook(CreateNotebookJob *job) {
+    DBUQuery *q = connection->createQuery(connection, NULL);
+    dbuQuerySetSQL(q, SQL_NOTEBOOK_NEW);
+    dbuQuerySetParamInt64(q, 1, job->resource->parent_id);
+    dbuQuerySetParamString(q, 2, cx_str(job->resource->nodename));
+    if(dbuQueryExec(q)) {
+        job->error = 1;
+    } else {
+        DBUResult *result = dbuQueryGetResult(q);
+        int64_t new_resource_id;
+        if(!dbuResultAsInt64(result, &job->resource->resource_id)) {
+            job->error = 2;
+        }
+    }
+    dbuQueryFree(q);
+    
+    return 0;
+}
+
+static void uithr_new_notebook_finished(UiEvent *event, CreateNotebookJob *job) {
+    if(job->resultcb) {
+        job->resultcb(event, job->resource->resource_id, job->error, job->userdata);
+    }
+    free(job);
+}
+
+void note_store_new_notebook_async(UiObject *obj, Resource *notebook, createresult_func resultcb, void *userdata) {
+    CreateNotebookJob *job = malloc(sizeof(CreateNotebookJob));
+    job->resource = notebook;
+    job->resultcb = resultcb;
+    job->userdata = userdata;
+    job->error = 0;
+    ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_new_notebook, job, (ui_callback)uithr_new_notebook_finished, job);
+}
index 4314efd2226d8154fd41469bee58db25a9affa49..1c1ba6d3d035137b95ffab7fe8b34c3f1c74fab1 100644 (file)
@@ -56,6 +56,8 @@ typedef void (*stringresult_func)(UiEvent *event, cxmutstr result, void *userdat
 
 typedef void (*execresult_func)(UiEvent *event, int error, void *userdata);
 
+typedef void (*createresult_func)(UiEvent *event, int64_t newid, int error, void *userdata);
+
 int init_note_store();
 
 CxList* note_store_get_user_settings(const CxAllocator *a, const char *host, const char *user, const char *profile);
@@ -96,6 +98,8 @@ void note_store_save_attachment_async(UiObject *obj, Attachment *attachment, exe
 
 void note_store_load_note_attachments_async(UiObject *obj, Note *note, execresult_func resultcb, void *userdata);
 
+void note_store_new_notebook_async(UiObject *obj, Resource *notebook, createresult_func resultcb, void *userdata);
+
 #ifdef __cplusplus
 }
 #endif
index 175129c6f53fb637786e551f72ce1f725e7820a7..4f4d893d78342d89cd48b94781f76c8924ce171a 100644 (file)
@@ -279,6 +279,7 @@ static void action_nnd_new_group(UiEvent *event, void *userdata) {
 static void action_nnd_button(UiEvent *event, void *userdata) {
     if(event->intval == 1) {
         // add
+        
     } // 4: cancel
     ui_close(event->obj);
 }