Skip to content

Commit

Permalink
storage override messages
Browse files Browse the repository at this point in the history
  • Loading branch information
bale1017 committed Mar 22, 2024
1 parent 22bf1a8 commit 76017dd
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ public interface MessageTranslator extends AutoCloseable, Formattable<MessageTra
*/
void saveLocale(Locale locale);

void saveMessagesAndBackupExistingValues(Collection<Message> messages, Locale locale);

/**
* Find a registered message by key.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import de.cubbossa.tinytranslations.tinyobject.TinyObjectResolver;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TranslatableComponent;
Expand Down Expand Up @@ -50,10 +49,7 @@ class MessageTranslatorImpl implements MessageTranslator {
@Getter
@Setter
private boolean useClientLocale = true;
@Getter
@Setter
@Accessors(fluent = true)
private Locale defaultLocale = Locale.ENGLISH;
private @NotNull Locale defaultLocale = Locale.ENGLISH;

private Logger logger = Logger.getLogger("TinyTranslations");

Expand Down Expand Up @@ -209,8 +205,8 @@ public Component translate(String raw, Locale locale, TagResolver... resolvers)
component = component.children(component.children().stream()
.map(c -> c instanceof Message tr
? GlobalTranslator.renderer().render(tr instanceof UnownedMessage
? ((UnownedMessage) tr).owner(this)
: tr, locale)
? ((UnownedMessage) tr).owner(this)
: tr, locale)
: c)
.filter(Objects::nonNull)
.toList());
Expand Down Expand Up @@ -414,6 +410,32 @@ public void saveLocale(Locale locale) {
}
}

@Override
public void saveMessagesAndBackupExistingValues(Collection<Message> messages, Locale locale) {
if (messageStorage != null) {
Map<TranslationKey, String> loadedValues = messageStorage.readMessages(locale);
List<Message> list = new ArrayList<>();
for (Message message : messages) {
Message stored = getMessage(message.getKey());
if (stored == null) {
continue;
}
String oldVal = loadedValues.get(message.getKey());
String newVal = message.getDictionary().get(locale);
if (!Objects.equals(newVal, oldVal)) {
String comment = "Backed up value: '" + oldVal + "'";
if (stored.getComment() == null || stored.getComment().isEmpty()) {
stored.setComment(comment);
} else {
stored.setComment(stored.getComment() + "\n" + comment);
}
list.add(stored);
}
}
messageStorage.overwriteMessages(list, locale);
}
}

@Override
public MessageTranslator formatted(TagResolver... resolver) {
this.resolvers.addAll(List.of(resolver));
Expand Down Expand Up @@ -466,4 +488,12 @@ public void unregister(@NotNull String key) {
public String toString() {
return "MessageTranslator[path=" + getPath() + "]";
}

public Locale defaultLocale() {
return defaultLocale;
}

public void defaultLocale(Locale defaultLocale) {
this.defaultLocale = defaultLocale;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,24 @@ public FileMessageStorage(File directory, String prefix, String suffix) {
this.fileSuffix = suffix;
}


void mkDir() {
if (!directory.exists()) {
directory.mkdirs();
}
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
return writeMessages(messages, locale, false);
}

@Override
public Collection<Message> overwriteMessages(Collection<Message> messages, Locale locale) {
return writeMessages(messages, locale, true);
}

protected abstract Collection<Message> writeMessages(Collection<Message> messages, Locale locale, boolean override);

@Override
public Collection<Locale> fetchLocales() {
if (directory == null || !directory.exists()) {
Expand All @@ -56,16 +67,6 @@ public Collection<Locale> fetchLocales() {
.toList();
}

@Override
public Map<TranslationKey, String> readMessages(Locale locale) {
return null;
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
return null;
}


@Nullable
protected File localeFileIfExists(Locale locale) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ public interface MessageStorage {
* @return A collection of Messages that were successfully written into storage.
*/
Collection<Message> writeMessages(Collection<Message> messages, Locale locale);

Collection<Message> overwriteMessages(Collection<Message> messages, Locale locale);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,11 @@ public Map<TranslationKey, String> readMessages(Locale locale) {
return result;
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale, boolean override) {
File file = localeFile(locale);

Collection<Message> written = new HashSet<>();
Map<String, StorageEntry> entries = readFile(file);
Map<String, StorageEntry> entries = override ? new HashMap<>() : readFile(file);
for (Message msg : messages) {
if (msg.getDictionary().containsKey(locale)) {
if (entries.containsKey(msg.getKey().key())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ public Map<TranslationKey, String> readMessages(Locale locale) {
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale, boolean override) {
Map<String, Object> result = new HashMap<>();
Collection<Message> success = new HashSet<>();

File file = localeFileIfExists(locale);
File file = override ? null : localeFileIfExists(locale);
if (file != null) {
try (FileReader fis = new FileReader(file, StandardCharsets.UTF_8)) {
result = YamlUtils.toDotNotation(yaml.load(fis));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,11 @@ public Map<TranslationKey, String> readMessages(Locale locale) {
return Map.of(TranslationKey.of(translator.getPath(), "a"), "Worked!");
}

@Override
public Collection<Message> overwriteMessages(Collection<Message> messages, Locale locale) {
return Collections.emptyList();
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
return Collections.emptyList();
Expand Down Expand Up @@ -214,6 +219,11 @@ public Map<TranslationKey, String> readMessages(Locale locale) {
return Map.of(TranslationKey.of(translator.getPath(), "a"), "Worked!");
}

@Override
public Collection<Message> overwriteMessages(Collection<Message> messages, Locale locale) {
return Collections.emptyList();
}

@Override
public Collection<Message> writeMessages(Collection<Message> messages, Locale locale) {
return Collections.emptyList();
Expand Down Expand Up @@ -444,6 +454,22 @@ public void testLoadMultipleLocales() {
);
}

@Test
void testOverwriteAndBackup(@TempDir File dir) {
translator.setMessageStorage(new PropertiesMessageStorage(dir));

Message a = Message.builder("a").withDefault("Old value")
.withComment("head").build();
translator.addMessage(a);
translator.saveLocale(translator.defaultLocale());
translator.loadLocale(translator.defaultLocale());
assertEquals(a.getComment(), translator.getMessage("a").getComment());

a.getDictionary().put(translator.defaultLocale(), "New Value");
translator.saveMessagesAndBackupExistingValues(Set.of(a), translator.defaultLocale());
assertEquals("head\nBacked up value: 'Old value'", translator.getMessage("a").getComment());
}

@Test
void testDuplicateTextInsertion() {
// Based on bug reported from a user of the framework
Expand Down

0 comments on commit 76017dd

Please sign in to comment.