"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;
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);
+}
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);
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