Convert things to CompletableFutureUtil

This commit is contained in:
Vankka 2022-01-23 16:23:24 +02:00
parent 634c123937
commit 1097a8f2f8
No known key found for this signature in database
GPG Key ID: 6E50CB7A29B96AD0
6 changed files with 30 additions and 55 deletions

View File

@ -25,7 +25,7 @@ package com.discordsrv.api.discord.api.entity.message;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
/**
@ -38,7 +38,7 @@ public interface ReceivedDiscordMessageCluster {
* @return the messages in this cluster
*/
@NotNull
List<? extends ReceivedDiscordMessage> getMessages();
Set<? extends ReceivedDiscordMessage> getMessages();
/**
* Deletes all the messages from this cluster, one request per message.

View File

@ -41,6 +41,7 @@ import com.discordsrv.common.discord.api.entity.channel.DiscordTextChannelImpl;
import com.discordsrv.common.discord.api.entity.guild.DiscordGuildImpl;
import com.discordsrv.common.discord.api.entity.guild.DiscordRoleImpl;
import com.discordsrv.common.function.CheckedSupplier;
import com.discordsrv.common.future.util.CompletableFutureUtil;
import com.github.benmanes.caffeine.cache.AsyncCacheLoader;
import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
import com.github.benmanes.caffeine.cache.Expiry;
@ -320,9 +321,7 @@ public class DiscordAPIImpl implements DiscordAPI {
}
public <T> CompletableFuture<T> notReady() {
CompletableFuture<T> future = new CompletableFuture<>();
future.completeExceptionally(new NotReadyException());
return future;
return CompletableFutureUtil.failed(new NotReadyException());
}
@Override
@ -398,11 +397,9 @@ public class DiscordAPIImpl implements DiscordAPI {
return notReady();
}
CompletableFuture<WebhookClient> future = new CompletableFuture<>();
TextChannel textChannel = jda.getTextChannelById(channelId);
if (textChannel == null) {
future.completeExceptionally(new IllegalArgumentException("Channel could not be found"));
return future;
return CompletableFutureUtil.failed(new IllegalArgumentException("Channel could not be found"));
}
return textChannel.retrieveWebhooks().submit().thenApply(webhooks -> {
@ -422,9 +419,7 @@ public class DiscordAPIImpl implements DiscordAPI {
return hook;
}).thenCompose(webhook -> {
if (webhook != null) {
CompletableFuture<Webhook> completableFuture = new CompletableFuture<>();
completableFuture.complete(webhook);
return completableFuture;
return CompletableFuture.completedFuture(webhook);
}
return textChannel.createWebhook("DiscordSRV").submit();

View File

@ -21,54 +21,44 @@ package com.discordsrv.common.discord.api.entity.message;
import com.discordsrv.api.discord.api.entity.message.ReceivedDiscordMessage;
import com.discordsrv.api.discord.api.entity.message.ReceivedDiscordMessageCluster;
import com.discordsrv.api.discord.api.entity.message.SendableDiscordMessage;
import com.discordsrv.common.future.util.CompletableFutureUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
public class ReceivedDiscordMessageClusterImpl implements ReceivedDiscordMessageCluster {
private final List<ReceivedDiscordMessage> messages;
private final Set<ReceivedDiscordMessage> messages;
public ReceivedDiscordMessageClusterImpl(List<ReceivedDiscordMessage> messages) {
public ReceivedDiscordMessageClusterImpl(Set<ReceivedDiscordMessage> messages) {
this.messages = messages;
}
@Override
public @NotNull List<ReceivedDiscordMessage> getMessages() {
public @NotNull Set<ReceivedDiscordMessage> getMessages() {
return messages;
}
@SuppressWarnings("unchecked")
@Override
public @NotNull CompletableFuture<Void> deleteAll() {
CompletableFuture<Void>[] futures = new CompletableFuture[messages.size()];
for (int i = 0; i < messages.size(); i++) {
futures[i] = messages.get(i).delete();
List<CompletableFuture<Void>> futures = new ArrayList<>(messages.size());
for (ReceivedDiscordMessage message : messages) {
futures.add(message.delete());
}
return CompletableFuture.allOf(futures);
return CompletableFutureUtil.combine(futures).thenApply(v -> null);
}
@SuppressWarnings("unchecked")
@Override
public @NotNull CompletableFuture<ReceivedDiscordMessageCluster> editAll(SendableDiscordMessage newMessage) {
CompletableFuture<ReceivedDiscordMessage>[] futures = new CompletableFuture[messages.size()];
for (int i = 0; i < messages.size(); i++) {
futures[i] = messages.get(i).edit(newMessage);
List<CompletableFuture<ReceivedDiscordMessage>> futures = new ArrayList<>(messages.size());
for (ReceivedDiscordMessage message : messages) {
futures.add(message.edit(newMessage));
}
return CompletableFuture.allOf(futures)
.thenApply(v -> {
List<ReceivedDiscordMessage> messages = new ArrayList<>();
for (CompletableFuture<ReceivedDiscordMessage> future : futures) {
// All the futures are done, so we're just going to get the results from all of them
messages.add(
future.join());
}
return new ReceivedDiscordMessageClusterImpl(messages);
});
return CompletableFutureUtil.combine(futures).thenApply(ReceivedDiscordMessageClusterImpl::new);
}
}

View File

@ -44,6 +44,7 @@ import com.discordsrv.common.discord.api.entity.DiscordUserImpl;
import com.discordsrv.common.discord.api.entity.channel.DiscordMessageChannelImpl;
import com.discordsrv.common.discord.api.entity.guild.DiscordGuildMemberImpl;
import com.discordsrv.common.function.OrDefault;
import com.discordsrv.common.future.util.CompletableFutureUtil;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@ -260,9 +261,7 @@ public class ReceivedDiscordMessageImpl extends SendableDiscordMessageImpl imple
public @NotNull CompletableFuture<Void> delete() {
DiscordTextChannel textChannel = discordSRV.discordAPI().getTextChannelById(channelId).orElse(null);
if (textChannel == null) {
CompletableFuture<Void> future = new CompletableFuture<>();
future.completeExceptionally(new RestErrorResponseException(ErrorResponse.UNKNOWN_CHANNEL));
return future;
return CompletableFutureUtil.failed(new RestErrorResponseException(ErrorResponse.UNKNOWN_CHANNEL));
}
return textChannel.deleteMessageById(getId(), fromSelf && getWebhookUsername().isPresent());
@ -276,9 +275,7 @@ public class ReceivedDiscordMessageImpl extends SendableDiscordMessageImpl imple
DiscordTextChannel textChannel = discordSRV.discordAPI().getTextChannelById(channelId).orElse(null);
if (textChannel == null) {
CompletableFuture<ReceivedDiscordMessage> future = new CompletableFuture<>();
future.completeExceptionally(new RestErrorResponseException(ErrorResponse.UNKNOWN_CHANNEL));
return future;
return CompletableFutureUtil.failed(new RestErrorResponseException(ErrorResponse.UNKNOWN_CHANNEL));
}
return textChannel.editMessageById(getId(), message);

View File

@ -37,6 +37,7 @@ import com.discordsrv.common.config.main.channels.MirroringConfig;
import com.discordsrv.common.config.main.channels.base.BaseChannelConfig;
import com.discordsrv.common.config.main.channels.base.IChannelConfig;
import com.discordsrv.common.function.OrDefault;
import com.discordsrv.common.future.util.CompletableFutureUtil;
import com.discordsrv.common.module.type.AbstractModule;
import com.github.benmanes.caffeine.cache.Cache;
@ -134,17 +135,12 @@ public class DiscordMessageMirroringModule extends AbstractModule<DiscordSRV> {
}
}
CompletableFuture.allOf(messageFutures.toArray(new CompletableFuture[0])).whenComplete((v2, t2) -> {
Set<MessageReference> messages = new HashSet<>();
for (CompletableFuture<ReceivedDiscordMessage> messageFuture : messageFutures) {
if (messageFuture.isCompletedExceptionally()) {
continue;
CompletableFutureUtil.combine(messageFutures).whenComplete((messages, t2) -> {
Set<MessageReference> references = new HashSet<>();
for (ReceivedDiscordMessage msg : messages) {
references.add(getReference(msg));
}
messages.add(getReference(messageFuture.join()));
}
mapping.put(getReference(message), messages);
mapping.put(getReference(message), references);
});
});
}

View File

@ -40,10 +40,7 @@ import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.CopyOnWriteArrayList;
@ -126,7 +123,7 @@ public abstract class AbstractGameMessageModule<T> extends AbstractModule<Discor
CompletableFuture.allOf(messageFutures.keySet().toArray(new CompletableFuture[0]))
.whenComplete((vo, t2) -> {
List<ReceivedDiscordMessage> messages = new ArrayList<>();
Set<ReceivedDiscordMessage> messages = new LinkedHashSet<>();
for (Map.Entry<CompletableFuture<ReceivedDiscordMessage>, DiscordMessageChannel> entry : messageFutures.entrySet()) {
CompletableFuture<ReceivedDiscordMessage> future = entry.getKey();
if (future.isCompletedExceptionally()) {