diff --git a/common/src/main/java/ctbrec/image/RemotePortraitStore.java b/common/src/main/java/ctbrec/image/RemotePortraitStore.java index b762219c..3c2f592d 100644 --- a/common/src/main/java/ctbrec/image/RemotePortraitStore.java +++ b/common/src/main/java/ctbrec/image/RemotePortraitStore.java @@ -1,10 +1,10 @@ package ctbrec.image; import ctbrec.Config; +import ctbrec.GlobalThreadPool; import ctbrec.Hmac; import ctbrec.io.HttpClient; import ctbrec.io.HttpException; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.MediaType; import okhttp3.Request; @@ -15,18 +15,56 @@ import java.io.IOException; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import java.util.Optional; import static ctbrec.io.HttpConstants.MIMETYPE_IMAGE_JPG; import static java.nio.charset.StandardCharsets.UTF_8; @Slf4j -@RequiredArgsConstructor public class RemotePortraitStore implements PortraitStore { private final HttpClient httpClient; private final Config config; + public RemotePortraitStore(HttpClient httpClient, Config config) { + this.httpClient = httpClient; + this.config = config; + transferOldPortraitsToServer(config.getSettings().modelPortraits); + } + + private void transferOldPortraitsToServer(Map modelPortraits) { + LocalPortraitStore localPortraitStore = new LocalPortraitStore(config); + GlobalThreadPool.submit(() -> { + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + List successfullyTransfered = new ArrayList<>(); + for (Map.Entry entry : modelPortraits.entrySet()) { + localPortraitStore.loadModelPortraitById(entry.getValue()).ifPresent(data -> { + try { + log.info("Uploading portrait to server {} - {} bytes", entry.getKey(), data.length); + RemotePortraitStore.this.writePortrait(entry.getKey(), data); + successfullyTransfered.add(entry.getKey()); + } catch (Exception e) { + log.warn("Could not transfer portrait from local to remote store: {} {}", entry.getKey(), entry.getValue()); + } + }); + } + for (String s : successfullyTransfered) { + try { + localPortraitStore.removePortrait(s); + } catch (IOException e) { + log.warn("Could not delete local potrait, which has been transferred to the server: {} ", s, e); + } + } + }); + } + private String getEndpoint() { return config.getServerUrl() + "/image/portrait"; }