23 package com.realtime.crossfire.jxclient.faces;
27 import java.io.IOException;
28 import java.io.InputStream;
29 import java.nio.file.Files;
30 import java.nio.file.Path;
31 import javax.swing.Icon;
32 import javax.swing.ImageIcon;
33 import org.jetbrains.annotations.NotNull;
34 import org.jetbrains.annotations.Nullable;
56 }
catch (
final IOException ex) {
57 System.err.println(
cacheDir+
": cannot create directory: "+ex);
63 public ImageIcon
load(@NotNull
final Face face) {
64 return load(face.getFaceName(), face.getFaceChecksum());
75 private ImageIcon
load(@NotNull
final String faceName,
final int faceChecksum) {
79 len = Files.size(file);
80 }
catch (
final IOException ignored) {
83 if (len >= 0x10000 || len <= 0) {
86 final byte[] data =
new byte[(int)len];
88 try (InputStream fis = Files.newInputStream(file)) {
89 if (fis.read(data) != data.length) {
93 }
catch (
final IOException ignored) {
96 final ImageIcon imageIcon =
new ImageIcon(data);
97 return imageIcon.getIconWidth() <= 0 && imageIcon.getIconHeight() <= 0 ? null : imageIcon;
101 public void save(@NotNull
final Face face, @NotNull
final ImageIcon imageIcon) {
102 save(face.getFaceName(), face.getFaceChecksum(), imageIcon);
111 public void save(@NotNull
final String faceName,
final int faceChecksum, @NotNull
final Icon imageIcon) {
124 final String dirName = quotedFaceName.substring(0, Math.min(2, quotedFaceName.length()));
125 final Path dir =
cacheDir.resolve(dirName).resolve(quotedFaceName);
127 Files.createDirectories(dir);
128 }
catch (
final IOException ex) {
129 System.err.println(dir+
": cannot create directory: "+ex);
131 return dir.resolve(Integer.toString(faceChecksum));