61 lines
2.2 KiB
Java
61 lines
2.2 KiB
Java
package ctbrec.image;
|
|
|
|
import ctbrec.Config;
|
|
import ctbrec.StringUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.util.Optional;
|
|
|
|
@Slf4j
|
|
public record LocalPortraitStore(Config config) implements PortraitStore {
|
|
|
|
@Override
|
|
public Optional<byte[]> loadModelPortraitByModelUrl(String modelUrl) {
|
|
String portraitId = config.getSettings().modelPortraits.get(modelUrl);
|
|
return loadModelPortraitById(portraitId);
|
|
}
|
|
|
|
@Override
|
|
public Optional<byte[]> loadModelPortraitById(String portraitId) {
|
|
if (StringUtil.isNotBlank(portraitId)) {
|
|
File configDir = config.getConfigDir();
|
|
File portraitDir = new File(configDir.getParent(), "portraits");
|
|
File portraitFile = new File(portraitDir, portraitId + '.' + FORMAT);
|
|
try {
|
|
return Optional.of(Files.readAllBytes(portraitFile.toPath()));
|
|
} catch (IOException e) {
|
|
log.error("Couldn't load portrait file {}", portraitFile, e);
|
|
}
|
|
}
|
|
return Optional.empty();
|
|
}
|
|
|
|
@Override
|
|
public void writePortrait(String modelUrl, byte[] data) throws IOException {
|
|
String portraitId = config.getSettings().modelPortraits.getOrDefault(modelUrl, idForModelUrl(modelUrl));
|
|
File portraitFile = getPortraitFile(portraitId);
|
|
Files.write(portraitFile.toPath(), data);
|
|
config.getSettings().modelPortraits.put(modelUrl, portraitId);
|
|
config.save();
|
|
}
|
|
|
|
@Override
|
|
public void removePortrait(String modelUrl) throws IOException {
|
|
String portraitId = config.getSettings().modelPortraits.get(modelUrl);
|
|
File portraitFile = getPortraitFile(portraitId);
|
|
Files.delete(portraitFile.toPath());
|
|
config.getSettings().modelPortraits.remove(modelUrl);
|
|
config.save();
|
|
}
|
|
|
|
private File getPortraitFile(String portraitId) throws IOException {
|
|
File configDir = config.getConfigDir();
|
|
File portraitDir = new File(configDir.getParent(), "portraits");
|
|
Files.createDirectories(portraitDir.toPath());
|
|
return new File(portraitDir, portraitId + '.' + FORMAT);
|
|
}
|
|
}
|