]> git.ktnx.net Git - mobile-ledger.git/commitdiff
DbOp*: optional post-execute hook
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Wed, 15 Jul 2020 20:38:47 +0000 (23:38 +0300)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Wed, 15 Jul 2020 20:38:47 +0000 (23:38 +0300)
app/src/main/java/net/ktnx/mobileledger/async/DbOpItem.java
app/src/main/java/net/ktnx/mobileledger/async/DbOpQueue.java
app/src/main/java/net/ktnx/mobileledger/async/DbOpRunner.java

index 7ecce275afbbab35322133b67c2fc4eec932fe34..b031dc64791dfc8cdd778d9a468fc677a16b9d45 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 Damyan Ivanov.
  * This file is part of MoLe.
  * MoLe is free software: you can distribute it and/or modify it
  * under the term of the GNU General Public License as published by
@@ -20,11 +20,16 @@ package net.ktnx.mobileledger.async;
 class DbOpItem {
     String sql;
     Object[] params;
-    public DbOpItem(String sql, Object[] params) {
+    Runnable onReady;
+    public DbOpItem(String sql, Object[] params, Runnable onReady) {
         this.sql = sql;
         this.params = params;
+        this.onReady = onReady;
+    }
+    public DbOpItem(String sql, Object[] params) {
+        this(sql, params, null);
     }
     public DbOpItem(String sql) {
-        this(sql, null);
+        this(sql, null, null);
     }
 }
index 2bc541e388840f69871c943ebe370d1083faa65b..081bbeee2ea640641929a0f857f0ca0809ab5112 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 Damyan Ivanov.
  * This file is part of MoLe.
  * MoLe is free software: you can distribute it and/or modify it
  * under the term of the GNU General Public License as published by
@@ -26,7 +26,8 @@ public class DbOpQueue {
     static private final BlockingQueue<DbOpItem> queue = new LinkedBlockingQueue<>();
     static private DbOpRunner runner;
     synchronized static public void init() {
-        if (runner != null) return;
+        if (runner != null)
+            return;
         debug("opQueue", "Starting runner thread");
         runner = new DbOpRunner(queue);
         runner.start();
@@ -34,10 +35,11 @@ public class DbOpQueue {
     static public void done() {
         runner.interrupt();
     }
-    public static void add(String sql, Object[] params) {
+    public static void add(String sql, Object[] params) {add(sql, params, null);}
+    public static void add(String sql, Object[] params, Runnable onReady) {
         init();
         debug("opQueue", "Adding " + sql);
-        queue.add(new DbOpItem(sql, params));
+        queue.add(new DbOpItem(sql, params, onReady));
     }
     static void add(String sql) {
         queue.add(new DbOpItem(sql));
index 3a81614d94a097e3a98c69a3a4074b0e7a65ca33..2944efedeea536762b54e79e0ec8cd3fe1d2ca1d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 Damyan Ivanov.
  * This file is part of MoLe.
  * MoLe is free software: you can distribute it and/or modify it
  * under the term of the GNU General Public License as published by
@@ -35,10 +35,14 @@ class DbOpRunner extends Thread {
         while (!interrupted()) {
             try {
                 DbOpItem item = queue.take();
-                debug("opQrunner", "Got "+item.sql);
-                SQLiteDatabase db = App.getDatabase();
-                debug("opQrunner", "Executing "+item.sql);
-                db.execSQL(item.sql, item.params);
+                debug("opQrunner", "Got " + item.sql);
+                {
+                    SQLiteDatabase db = App.getDatabase();
+                    debug("opQrunner", "Executing " + item.sql);
+                    db.execSQL(item.sql, item.params);
+                }
+                if (item.onReady != null)
+                    item.onReady.run();
             }
             catch (InterruptedException e) {
                 break;