fix: don't discard initial work if it doesn't get finished
This commit is contained in:
parent
6a0cfdb26a
commit
fa4fa75944
@ -1,5 +1,6 @@
|
|||||||
package io.gitlab.jfronny.translater.transformer;
|
package io.gitlab.jfronny.translater.transformer;
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.commons.concurrent.AsyncRequestState;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.translater.Cfg;
|
import io.gitlab.jfronny.translater.Cfg;
|
||||||
import io.gitlab.jfronny.translater.Translater;
|
import io.gitlab.jfronny.translater.Translater;
|
||||||
@ -10,7 +11,7 @@ import java.io.*;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class CachingTransformer implements Transformer {
|
public class CachingTransformer implements Transformer {
|
||||||
@ -32,7 +33,7 @@ public class CachingTransformer implements Transformer {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
cache.put(str, transformed);
|
cache.put(str, transformed);
|
||||||
save();
|
scheduleSave();
|
||||||
}
|
}
|
||||||
//Return cached result
|
//Return cached result
|
||||||
return (String) cache.get(str);
|
return (String) cache.get(str);
|
||||||
@ -40,7 +41,7 @@ public class CachingTransformer implements Transformer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void transformMultiple(Stream<? extends String> strings, ResultConsumer results) {
|
public void transformMultiple(Stream<? extends String> strings, ResultConsumer results) {
|
||||||
AtomicBoolean bl = new AtomicBoolean(false);
|
AtomicInteger count = new AtomicInteger(0);
|
||||||
transformer.transformMultiple(strings.filter(s -> {
|
transformer.transformMultiple(strings.filter(s -> {
|
||||||
String translation = (String) cache.get(s);
|
String translation = (String) cache.get(s);
|
||||||
if (translation != null) {
|
if (translation != null) {
|
||||||
@ -57,9 +58,12 @@ public class CachingTransformer implements Transformer {
|
|||||||
return true;
|
return true;
|
||||||
}), (str, translation) -> {
|
}), (str, translation) -> {
|
||||||
cache.put(str, translation);
|
cache.put(str, translation);
|
||||||
bl.set(true);
|
if (count.incrementAndGet() == 50) {
|
||||||
|
count.addAndGet(-50);
|
||||||
|
scheduleSave();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (bl.get()) save();
|
if (count.get() > 0) scheduleSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CachingTransformer(Transformer baseTransformer) {
|
public CachingTransformer(Transformer baseTransformer) {
|
||||||
@ -92,15 +96,21 @@ public class CachingTransformer implements Transformer {
|
|||||||
}
|
}
|
||||||
defaultCache = p;
|
defaultCache = p;
|
||||||
} else defaultCache = null;
|
} else defaultCache = null;
|
||||||
save();
|
scheduleSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void save() {
|
private final AsyncRequestState state = new AsyncRequestState();
|
||||||
if (cache.isEmpty()) return;
|
private void scheduleSave() {
|
||||||
try (OutputStream outS = Files.newOutputStream(CACHE_FILE)) {
|
if (state.request().shouldStart()) {
|
||||||
cache.store(outS, "---Lang---");
|
do {
|
||||||
} catch (IOException e) {
|
if (!cache.isEmpty()) {
|
||||||
Translater.LOGGER.error("Could not save translater cache");
|
try (OutputStream outS = Files.newOutputStream(CACHE_FILE)) {
|
||||||
|
cache.store(outS, "---Lang---");
|
||||||
|
} catch (IOException e) {
|
||||||
|
Translater.LOGGER.error("Could not save translater cache");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (state.emitFinished().shouldContinue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user