diff --git a/src/main/java/net/discordjug/javabot/data/h2db/message_cache/MessageCache.java b/src/main/java/net/discordjug/javabot/data/h2db/message_cache/MessageCache.java index 5245b0cd3..5c9f3d7ad 100644 --- a/src/main/java/net/discordjug/javabot/data/h2db/message_cache/MessageCache.java +++ b/src/main/java/net/discordjug/javabot/data/h2db/message_cache/MessageCache.java @@ -86,16 +86,23 @@ public MessageCache(BotConfig botConfig, MessageCacheRepository cacheRepository, } /** - * Synchronizes Messages saved in the Database with what is currently stored in memory. + * Synchronizes Messages saved in the Database with what is currently stored in memory. This action is executed in the background. */ public void synchronize() { asyncPool.execute(()->{ - cacheRepository.delete(cache.size()); - cacheRepository.insertList(new ArrayList<>(cache)); - messageCount = 0; - log.info("Synchronized Database with local Cache."); + synchronizeNow(); }); } + + /** + * Synchronizes Messages saved in the Database with what is currently stored in memory and wait until the synchronization finishes. + */ + public void synchronizeNow() { + cacheRepository.delete(cache.size()); + cacheRepository.insertList(new ArrayList<>(cache)); + messageCount = 0; + log.info("Synchronized Database with local Cache."); + } /** * Caches a single {@link Message} object. diff --git a/src/main/java/net/discordjug/javabot/data/h2db/message_cache/dao/MessageCacheRepository.java b/src/main/java/net/discordjug/javabot/data/h2db/message_cache/dao/MessageCacheRepository.java index c97f4ef3f..e86f1408e 100644 --- a/src/main/java/net/discordjug/javabot/data/h2db/message_cache/dao/MessageCacheRepository.java +++ b/src/main/java/net/discordjug/javabot/data/h2db/message_cache/dao/MessageCacheRepository.java @@ -82,13 +82,14 @@ public int getBatchSize() { public List getAll() throws DataAccessException { List messagesWithLink = jdbcTemplate.query( "SELECT * FROM message_cache LEFT JOIN message_cache_attachments ON message_cache.message_id = message_cache_attachments.message_id", - (rs, rowNum) -> this.read(rs)); + (rs, _) -> this.read(rs)); Map messages=new LinkedHashMap<>(); for (CachedMessage msg : messagesWithLink) { - CachedMessage previous = messages.putIfAbsent(msg.getMessageId(), msg); - if(previous!=null) { - previous.getAttachments().addAll(msg.getAttachments()); - } + messages.merge(msg.getMessageId(), msg, (oldValue, value) -> { + ArrayList attachments = new ArrayList<>(oldValue.getAttachments()); + attachments.addAll(value.getAttachments()); + return new CachedMessage(oldValue.getMessageId(), oldValue.getAuthorId(), oldValue.getMessageContent(), attachments); + }); } return new ArrayList<>(messages.values()); } diff --git a/src/main/java/net/discordjug/javabot/systems/staff_commands/RedeployCommand.java b/src/main/java/net/discordjug/javabot/systems/staff_commands/RedeployCommand.java index 8ce1c84d3..4dc6a68b4 100644 --- a/src/main/java/net/discordjug/javabot/systems/staff_commands/RedeployCommand.java +++ b/src/main/java/net/discordjug/javabot/systems/staff_commands/RedeployCommand.java @@ -62,7 +62,7 @@ public void execute(@NotNull SlashCommandInteractionEvent event) { } log.warn("Redeploying... Requested by: " + UserUtils.getUserTag(event.getUser())); event.reply("**Redeploying...** This may take some time.").queue(); - messageCache.synchronize(); + messageCache.synchronizeNow(); asyncPool.shutdownNow(); try { asyncPool.awaitTermination(3, TimeUnit.SECONDS);