]> uap-core.de Git - note.git/commitdiff
add note_store_count_repository_usage_async
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 4 Aug 2025 19:25:36 +0000 (21:25 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 4 Aug 2025 19:25:36 +0000 (21:25 +0200)
application/store.c
application/store.h

index eb43cb723501ecdafb7d6517cbb567aaf556e18d..ee52203a41d8ba10963100fc48074c85768cb5aa 100644 (file)
     " local_path = ? " \
     "where repository_id = ?;"
 
+#define SQL_REPOSITORY_USAGE \
+    "select count(*) from notebooks where repository_id = ?;"
+
 static DBUConnection *connection;
 
 static UiThreadpool *queue;
@@ -1095,3 +1098,41 @@ void note_store_save_repository_async(UiObject *obj, Repository *repository, exe
     job->error = 0;
     ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_store_save_repository, job, (ui_callback)uithr_save_repository_job_finished, job);
 }
+
+
+typedef struct CountJob {
+    countresult_func resultcb;
+    void *userdata;
+    int64_t id1;
+    int64_t id2;
+    int64_t num;
+} CountJob;
+
+static void uithr_countjob_finished(UiEvent *event, CountJob *job) {
+    job->resultcb(event, job->num, job->userdata);
+    free(job);
+}
+
+static int qthr_count_repo_usage(CountJob *job) {
+    DBUQuery *q = connection->createQuery(connection, NULL);
+    dbuQuerySetSQL(q, SQL_REPOSITORY_USAGE);
+    dbuQuerySetParamInt64(q, 1, job->id1);
+    if(!dbuQueryExec(q)) {
+        DBUResult *result = dbuQueryGetResult(q);
+        if(result) {
+            dbuResultAsInt64(result, &job->num);
+        }
+    }
+    dbuQueryFree(q);
+    return 0;
+}
+
+void note_store_count_repository_usage_async(UiObject *obj, Repository *repository, countresult_func resultcb, void *userdata) {
+    CountJob *job = malloc(sizeof(CountJob));
+    job->resultcb = resultcb;
+    job->userdata = userdata;
+    job->id1 = repository->repository_id;
+    job->id2 = 0;
+    job->num = -1;
+    ui_threadpool_job(queue, obj, (ui_threadfunc)qthr_count_repo_usage, job, (ui_callback)uithr_countjob_finished, job);
+}
index 466a5028299121ed831498212e0b8133e8464ec5..71ae9c753cb102a9ab5424aa4950956f11af693e 100644 (file)
@@ -58,6 +58,7 @@ 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);
+typedef void (*countresult_func)(UiEvent *event, int64_t n, void *userdata);
 
 int init_note_store();
 
@@ -123,6 +124,8 @@ void note_store_notebook_swap_position_async(
 
 void note_store_save_repository_async(UiObject *obj, Repository *repository, execresult_func resultcb, void *userdata);
 
+void note_store_count_repository_usage_async(UiObject *obj, Repository *repository, countresult_func resultcb, void *userdata);
+
 #ifdef __cplusplus
 }
 #endif