mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-13 19:41:38 +00:00
Split the logging of mod mail threads to a separate feature
fixed the default values of features in properties files
This commit is contained in:
@@ -57,7 +57,7 @@ public class AnonReply extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -64,7 +64,7 @@ public class Close extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -60,7 +60,7 @@ public class CloseSilently extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -82,7 +82,7 @@ public class Contact extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +48,6 @@ public class RemoveModMailRole extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class Reply extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -47,6 +47,6 @@ public class SetModMailCategory extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,6 @@ public class SetModMailRole extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ public class Subscribe extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,7 +52,7 @@ public class UnSubscribe extends AbstractConditionableCommand {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,12 +2,25 @@ package dev.sheldan.abstracto.modmail.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class ModMailFeature implements FeatureConfig {
|
||||
|
||||
@Autowired
|
||||
private ModMailLoggingFeature modMailLoggingFeature;
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureConfig> getDependantFeatures() {
|
||||
return Arrays.asList(modMailLoggingFeature);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.modmail.config;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
|
||||
public enum ModMailFeatures implements FeatureEnum {
|
||||
MODMAIL("modmail");
|
||||
MOD_MAIL("modmail"), MOD_MAIL_LOGGING("modmail_logging");
|
||||
|
||||
private String key;
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package dev.sheldan.abstracto.modmail.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class ModMailLoggingFeature implements FeatureConfig {
|
||||
|
||||
@Autowired
|
||||
private ModMailFeature modMailFeature;
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MOD_MAIL_LOGGING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureConfig> getRequiredFeatures() {
|
||||
return Arrays.asList(modMailFeature);
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,6 @@ public class ModMailMessageListener implements PrivateMessageReceivedListener {
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return ModMailFeatures.MODMAIL;
|
||||
return ModMailFeatures.MOD_MAIL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,12 +26,12 @@ public class ModMailRoleServiceBean implements ModMailRoleService {
|
||||
if(!modMailRoleManagementService.isRoleAlreadyAssigned(role, server)) {
|
||||
modMailRoleManagementService.addRoleToModMailRoles(role, server);
|
||||
}
|
||||
commandService.allowFeatureForRole(ModMailFeatures.MODMAIL, role);
|
||||
commandService.allowFeatureForRole(ModMailFeatures.MOD_MAIL, role);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRoleFromModMailRoles(ARole role, AServer server) {
|
||||
modMailRoleManagementService.removeRoleFromModMailRoles(role, server);
|
||||
commandService.disAllowFeatureForRole(ModMailFeatures.MODMAIL, role);
|
||||
commandService.disAllowFeatureForRole(ModMailFeatures.MOD_MAIL, role);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import dev.sheldan.abstracto.core.service.management.UserInServerManagementServi
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerService;
|
||||
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||
import dev.sheldan.abstracto.modmail.config.ModMailFeature;
|
||||
import dev.sheldan.abstracto.modmail.config.ModMailLoggingFeature;
|
||||
import dev.sheldan.abstracto.modmail.models.database.*;
|
||||
import dev.sheldan.abstracto.modmail.models.dto.ServerChoice;
|
||||
import dev.sheldan.abstracto.modmail.models.template.*;
|
||||
@@ -94,6 +95,10 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
||||
@Autowired
|
||||
private EventWaiter eventWaiter;
|
||||
|
||||
@Autowired
|
||||
private ModMailLoggingFeature modMailLoggingFeature;
|
||||
|
||||
|
||||
@Autowired
|
||||
private ModMailThreadServiceBean self;
|
||||
|
||||
@@ -336,51 +341,56 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
||||
Long modMailThreadId = modMailThread.getId();
|
||||
log.info("Starting closing procedure for thread {}", modMailThread.getId());
|
||||
List<ModMailMessage> modMailMessages = modMailThread.getMessages();
|
||||
List<CompletableFuture<Message>> messages = modMailMessageService.loadModMailMessages(modMailMessages);
|
||||
log.trace("Loading {} mod mail thread messages.", messages.size());
|
||||
for (int i = 0; i < messages.size(); i++) {
|
||||
CompletableFuture<Message> messageCompletableFuture = messages.get(i);
|
||||
Long messageId = modMailMessages.get(i).getMessageId();
|
||||
messageCompletableFuture.exceptionally(throwable -> {
|
||||
log.warn("Failed to load message {} in mod mail thread {}", messageId, modMailThreadId);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
CompletableFuture.allOf(messages.toArray(new CompletableFuture[0])).whenComplete((avoid, throwable) -> {
|
||||
ModMailThread innerModMailThread = modMailThreadManagementService.getById(modMailThreadId);
|
||||
log.trace("Loaded {} mod mail thread messages", messages.size());
|
||||
if(throwable != null) {
|
||||
log.warn("Failed to load some mod mail messages for mod mail thread {}. Still trying to post the ones we got.", modMailThreadId, throwable);
|
||||
}
|
||||
try {
|
||||
List<UndoActionInstance> undoActions = new ArrayList<>();
|
||||
CompletableFutureList<Message> list = self.logModMailThread(modMailThreadId, messages, note);
|
||||
list.getMainFuture().thenRun(() -> {
|
||||
list.getFutures().forEach(messageCompletableFuture -> {
|
||||
try {
|
||||
Message message = messageCompletableFuture.get();
|
||||
undoActions.add(UndoActionInstance.getMessageDeleteAction(message.getChannel().getIdLong(), message.getIdLong()));
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
log.error("Failed to post logging messages.", e);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to handle the mod mail log messages.", e);
|
||||
}
|
||||
});
|
||||
self.afterSuccessfulLog(modMailThreadId, feedBack, notifyUser, undoActions);
|
||||
});
|
||||
list.getMainFuture().exceptionally(innerThrowable -> {
|
||||
sendModMailFailure("modmail_exception_generic", innerModMailThread.getUser(), modMailThreadId, feedBack, innerThrowable);
|
||||
log.error("Failed to log messages for mod mail thread {}.", modMailThreadId, innerThrowable);
|
||||
boolean loggingEnabled = featureFlagService.isFeatureEnabled(modMailLoggingFeature, modMailThread.getServer());
|
||||
List<UndoActionInstance> undoActions = new ArrayList<>();
|
||||
if(loggingEnabled) {
|
||||
List<CompletableFuture<Message>> messages = modMailMessageService.loadModMailMessages(modMailMessages);
|
||||
log.trace("Loading {} mod mail thread messages.", messages.size());
|
||||
for (int i = 0; i < messages.size(); i++) {
|
||||
CompletableFuture<Message> messageCompletableFuture = messages.get(i);
|
||||
Long messageId = modMailMessages.get(i).getMessageId();
|
||||
messageCompletableFuture.exceptionally(throwable -> {
|
||||
log.warn("Failed to load message {} in mod mail thread {}", messageId, modMailThreadId);
|
||||
return null;
|
||||
});
|
||||
} catch (PostTargetException po) {
|
||||
log.error("Failed to log mod mail messages", po);
|
||||
sendModMailFailure("modmail_exception_post_target_not_defined", innerModMailThread.getUser(), modMailThreadId, feedBack, po);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to log mod mail messages", e);
|
||||
sendModMailFailure("modmail_exception_generic", innerModMailThread.getUser(), modMailThreadId, feedBack, e);
|
||||
}
|
||||
});
|
||||
CompletableFuture.allOf(messages.toArray(new CompletableFuture[0])).whenComplete((avoid, throwable) -> {
|
||||
ModMailThread innerModMailThread = modMailThreadManagementService.getById(modMailThreadId);
|
||||
log.trace("Loaded {} mod mail thread messages", messages.size());
|
||||
if(throwable != null) {
|
||||
log.warn("Failed to load some mod mail messages for mod mail thread {}. Still trying to post the ones we got.", modMailThreadId, throwable);
|
||||
}
|
||||
try {
|
||||
CompletableFutureList<Message> list = self.logModMailThread(modMailThreadId, messages, note);
|
||||
list.getMainFuture().thenRun(() -> {
|
||||
list.getFutures().forEach(messageCompletableFuture -> {
|
||||
try {
|
||||
Message message = messageCompletableFuture.get();
|
||||
undoActions.add(UndoActionInstance.getMessageDeleteAction(message.getChannel().getIdLong(), message.getIdLong()));
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
log.error("Failed to post logging messages.", e);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to handle the mod mail log messages.", e);
|
||||
}
|
||||
});
|
||||
self.afterSuccessfulLog(modMailThreadId, feedBack, notifyUser, undoActions);
|
||||
});
|
||||
list.getMainFuture().exceptionally(innerThrowable -> {
|
||||
sendModMailFailure("modmail_exception_generic", innerModMailThread.getUser(), modMailThreadId, feedBack, innerThrowable);
|
||||
log.error("Failed to log messages for mod mail thread {}.", modMailThreadId, innerThrowable);
|
||||
return null;
|
||||
});
|
||||
} catch (PostTargetException po) {
|
||||
log.error("Failed to log mod mail messages", po);
|
||||
sendModMailFailure("modmail_exception_post_target_not_defined", innerModMailThread.getUser(), modMailThreadId, feedBack, po);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to log mod mail messages", e);
|
||||
sendModMailFailure("modmail_exception_generic", innerModMailThread.getUser(), modMailThreadId, feedBack, e);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
self.afterSuccessfulLog(modMailThreadId, feedBack, notifyUser, undoActions);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
abstracto.postTargets.modmail=modmailLog,modmailPing
|
||||
abstracto.emoteNames.readReaction=readReaction
|
||||
abstracto.defaultEmotes.readReaction=\uD83D\uDC40
|
||||
abstracto.defaultEmotes.readReaction=\uD83D\uDC40
|
||||
abstracto.features.modmail=false
|
||||
abstracto.features.modmail_logging=false
|
||||
Reference in New Issue
Block a user