]> nmode's Git Repositories - signal-cli/commitdiff
Make JobExecutor execute jobs asynchronously
authorAsamK <asamk@gmx.de>
Sun, 12 Nov 2023 10:51:38 +0000 (11:51 +0100)
committerAsamK <asamk@gmx.de>
Sun, 12 Nov 2023 10:51:38 +0000 (11:51 +0100)
lib/src/main/java/org/asamk/signal/manager/api/StickerPackId.java
lib/src/main/java/org/asamk/signal/manager/helper/Context.java
lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java
lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java

index 38ea495011e23e20b0c21afe6be3c4809faefafe..ccb18708404c978c444166afe10c44ce98a38bf3 100644 (file)
@@ -1,6 +1,7 @@
 package org.asamk.signal.manager.api;
 
 import java.util.Arrays;
+import java.util.Base64;
 
 public class StickerPackId {
 
@@ -32,4 +33,9 @@ public class StickerPackId {
     public int hashCode() {
         return Arrays.hashCode(id);
     }
+
+    @Override
+    public String toString() {
+        return "StickerPackId{" + Base64.getUrlEncoder().encodeToString(id) + '}';
+    }
 }
index e5824a5af26a4027dfe0b046ea0b5c67e4161a99..ba2e5fb016dbca0cf7bd5febdbcaa264dcdd8df4 100644 (file)
@@ -9,7 +9,7 @@ import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
 
 import java.util.function.Supplier;
 
-public class Context {
+public class Context implements AutoCloseable {
 
     private final Object LOCK = new Object();
 
@@ -170,6 +170,11 @@ public class Context {
         }
     }
 
+    @Override
+    public void close() {
+        jobExecutor.close();
+    }
+
     private interface Callable {
 
         void call();
index 8a3e815f96e21369938dc206c356ab78a7701708..bbd36800751af18f7b5a978900e03156c1f72916 100644 (file)
@@ -2,16 +2,31 @@ package org.asamk.signal.manager.internal;
 
 import org.asamk.signal.manager.helper.Context;
 import org.asamk.signal.manager.jobs.Job;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class JobExecutor {
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
+public class JobExecutor implements AutoCloseable {
+
+    private static final Logger logger = LoggerFactory.getLogger(JobExecutor.class);
     private final Context context;
+    private final ExecutorService executorService;
 
     public JobExecutor(final Context context) {
         this.context = context;
+        this.executorService = Executors.newCachedThreadPool();
     }
 
     public void enqueueJob(Job job) {
-        job.run(context);
+        logger.debug("Enqueuing {} job", job.getClass().getSimpleName());
+
+        executorService.execute(() -> job.run(context));
+    }
+
+    @Override
+    public void close() {
+        executorService.close();
     }
 }
index e6f1a143c7f64ee15515e5a60434996042239771..d4d0b10a9e50b3431997135b16ab2737acc905f8 100644 (file)
@@ -1332,6 +1332,7 @@ public class ManagerImpl implements Manager {
             stopReceiveThread(thread);
         }
         executor.close();
+        context.close();
 
         dependencies.getSignalWebSocket().disconnect();
         dependencies.getPushServiceSocket().close();
index 585e3161206186b91fa6176f36f1018998a082d2..1eeed9dc02e2692a678c1bdf9f9c5c3d55897016 100644 (file)
@@ -23,6 +23,7 @@ public class RetrieveStickerPackJob implements Job {
 
     @Override
     public void run(Context context) {
+        logger.trace("Downloading sticker pack {}", packId);
         try {
             context.getStickerHelper().retrieveStickerPack(packId, packKey);
         } catch (IOException e) {