From 735816f5ddc1124748e1769eb277aebb4b3facfe Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sun, 5 Mar 2023 13:49:32 +0100 Subject: [PATCH] [AB-xxx] adding feature to split field value by configurable amount using larger images for member avatar --- .../abstracto/remind/service/RemindServiceBeanTest.java | 1 + .../abstracto/core/templating/model/EmbedField.java | 1 + .../core/templating/service/TemplateServiceBean.java | 9 +++++---- .../core/models/template/display/MemberNameDisplay.java | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/abstracto-application/abstracto-modules/remind/remind-impl/src/test/java/dev/sheldan/abstracto/remind/service/RemindServiceBeanTest.java b/abstracto-application/abstracto-modules/remind/remind-impl/src/test/java/dev/sheldan/abstracto/remind/service/RemindServiceBeanTest.java index 94e856220..01831985e 100644 --- a/abstracto-application/abstracto-modules/remind/remind-impl/src/test/java/dev/sheldan/abstracto/remind/service/RemindServiceBeanTest.java +++ b/abstracto-application/abstracto-modules/remind/remind-impl/src/test/java/dev/sheldan/abstracto/remind/service/RemindServiceBeanTest.java @@ -249,6 +249,7 @@ public class RemindServiceBeanTest { when(guild.getIdLong()).thenReturn(8L); when(remindedMember.getIdLong()).thenReturn(9L); when(remindedMember.getUser()).thenReturn(jdaUser); + when(remindedMember.getEffectiveAvatar()).thenReturn(Mockito.mock(ImageProxy.class)); when(jdaUser.getDefaultAvatar()).thenReturn(Mockito.mock(ImageProxy.class)); Reminder remindedReminder = Mockito.mock(Reminder.class); when(remindedReminder.getTargetDate()).thenReturn(Instant.now()); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java index 756368c6d..a865a097e 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/model/EmbedField.java @@ -25,6 +25,7 @@ public class EmbedField { */ private Boolean inline; private Boolean forceNewEmbed; + private Integer valueSplitLength; /** * this will actively limit the length, not create another field */ diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java index 973a81c85..65f80c27e 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/templating/service/TemplateServiceBean.java @@ -392,10 +392,11 @@ public class TemplateServiceBean implements TemplateService { }); for (int i = 0; i < configuration.getFields().size(); i++) { EmbedField field = configuration.getFields().get(i); - if (field != null && field.getValue() != null && field.getValue().length() > MessageEmbed.VALUE_MAX_LENGTH) { + int maxSplitLength = field != null && field.getValueSplitLength() != null ? Math.min(field.getValueSplitLength(), MessageEmbed.VALUE_MAX_LENGTH) : MessageEmbed.VALUE_MAX_LENGTH; + if (field != null && field.getValue() != null && field.getValue().length() > maxSplitLength) { int segmentCounter = 0; int segmentStart = 0; - int segmentEnd = MessageEmbed.VALUE_MAX_LENGTH; + int segmentEnd = maxSplitLength; int handledIndex = 0; String fullFieldValue = field.getValue(); while(handledIndex < fullFieldValue.length()) { @@ -403,7 +404,7 @@ public class TemplateServiceBean implements TemplateService { // start has a value, so some things are cut off int segmentLength = fullFieldValue.length() - segmentStart; // if its over the hard limit for a field - if(segmentLength > MessageEmbed.VALUE_MAX_LENGTH) { + if(segmentLength > maxSplitLength) { // find the last space in the text, as a natural "splitting point" int lastSpace = fullFieldValue.substring(segmentStart, segmentEnd).lastIndexOf(" "); if(lastSpace != -1) { @@ -431,7 +432,7 @@ public class TemplateServiceBean implements TemplateService { segmentCounter++; handledIndex = segmentEnd; segmentStart = segmentEnd; - segmentEnd += MessageEmbed.VALUE_MAX_LENGTH; + segmentEnd += maxSplitLength; } } } diff --git a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/models/template/display/MemberNameDisplay.java b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/models/template/display/MemberNameDisplay.java index a21b23e19..01f5d3445 100644 --- a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/models/template/display/MemberNameDisplay.java +++ b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/models/template/display/MemberNameDisplay.java @@ -22,7 +22,7 @@ public class MemberNameDisplay { String userAvatar = user.getAvatarUrl() != null ? user.getAvatarUrl() : user.getDefaultAvatar().getUrl(4096); return MemberNameDisplay .builder() - .memberAvatarUrl(member.getAvatarUrl()) + .memberAvatarUrl(member.getEffectiveAvatar().getUrl(4096)) .nickname(member.getNickname()) .userName(user.getName()) .memberMention(member.getAsMention())