From: AsamK Date: Sun, 12 Nov 2023 10:51:38 +0000 (+0100) Subject: Make JobExecutor execute jobs asynchronously X-Git-Tag: v0.13.0~89 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/ed11bf6368f59a454c3b18ccd97460c5f642b5aa Make JobExecutor execute jobs asynchronously --- diff --git a/lib/src/main/java/org/asamk/signal/manager/api/StickerPackId.java b/lib/src/main/java/org/asamk/signal/manager/api/StickerPackId.java index 38ea4950..ccb18708 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/StickerPackId.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/StickerPackId.java @@ -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) + '}'; + } } diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java index e5824a5a..ba2e5fb0 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java @@ -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(); diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java b/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java index 8a3e815f..bbd36800 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java @@ -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(); } } diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index e6f1a143..d4d0b10a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -1332,6 +1332,7 @@ public class ManagerImpl implements Manager { stopReceiveThread(thread); } executor.close(); + context.close(); dependencies.getSignalWebSocket().disconnect(); dependencies.getPushServiceSocket().close(); diff --git a/lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java b/lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java index 585e3161..1eeed9dc 100644 --- a/lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java +++ b/lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java @@ -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) {