mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-04-23 08:00:56 -04:00
Improve icon cache handling of blank images
This commit is contained in:
@@ -6,6 +6,7 @@ import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.icon.SystemIcon;
|
||||
import io.xpipe.app.icon.SystemIconCache;
|
||||
import io.xpipe.app.icon.SystemIconManager;
|
||||
import io.xpipe.app.resources.AppImages;
|
||||
import io.xpipe.app.util.BooleanScope;
|
||||
import io.xpipe.app.util.LabelGraphic;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
@@ -106,14 +107,13 @@ public class StoreIconChoiceComp extends SimpleComp {
|
||||
}
|
||||
|
||||
private void updateData(TableView<List<SystemIcon>> table, String filterString) {
|
||||
var displayedIcons = filterString == null || filterString.isBlank() || filterString.length() < 2
|
||||
? icons.stream()
|
||||
.sorted(Comparator.comparing(systemIcon -> systemIcon.getId()))
|
||||
.toList()
|
||||
: icons.stream()
|
||||
.filter(icon -> containsString(icon.getId(), filterString))
|
||||
.toList();
|
||||
|
||||
var stream = icons.stream()
|
||||
.filter(systemIcon -> AppImages.hasNormalImage("icons/" + systemIcon.getSource().getId() + "/" + systemIcon.getId() + "-40.png"))
|
||||
.sorted(Comparator.comparing(systemIcon -> systemIcon.getId()));
|
||||
if (filterString != null && !filterString.isBlank() && filterString.length() >= 2) {
|
||||
stream = stream.filter(icon -> containsString(icon.getId(), filterString));
|
||||
}
|
||||
var displayedIcons = stream.toList();
|
||||
var data = partitionList(displayedIcons, columns);
|
||||
table.getItems().setAll(data);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ public class SystemIconCache {
|
||||
|
||||
private static enum ImageColorScheme {
|
||||
|
||||
TRANSPARENT,
|
||||
MIXED,
|
||||
LIGHT,
|
||||
DARK
|
||||
@@ -63,6 +64,10 @@ public class SystemIconCache {
|
||||
}
|
||||
|
||||
var scheme = rasterizeSizes(icon.getFile(), target, icon.getName(), dark);
|
||||
if (scheme == ImageColorScheme.TRANSPARENT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (scheme != ImageColorScheme.DARK || icon.getColorSchemeData() != SystemIconSourceFile.ColorSchemeData.DEFAULT) {
|
||||
continue;
|
||||
}
|
||||
@@ -106,10 +111,13 @@ public class SystemIconCache {
|
||||
if (image == null) {
|
||||
continue;
|
||||
}
|
||||
write(dir, name, dark, size, image);
|
||||
if (c == null) {
|
||||
c = determineColorScheme(image);
|
||||
if (c == ImageColorScheme.TRANSPARENT) {
|
||||
return ImageColorScheme.TRANSPARENT;
|
||||
}
|
||||
}
|
||||
write(dir, name, dark, size, image);
|
||||
}
|
||||
return c;
|
||||
} catch (Exception ex) {
|
||||
@@ -205,6 +213,11 @@ public class SystemIconCache {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
||||
if (counter == 0) {
|
||||
return ImageColorScheme.TRANSPARENT;
|
||||
}
|
||||
|
||||
mean /= counter * 3;
|
||||
if (mean < 50) {
|
||||
return ImageColorScheme.DARK;
|
||||
|
||||
@@ -80,7 +80,18 @@ public class SystemIconManager {
|
||||
});
|
||||
}
|
||||
|
||||
public static void reloadImages() {
|
||||
private static void reloadImages() {
|
||||
AppImages.remove(s -> s.startsWith("icons/"));
|
||||
try {
|
||||
for (var source : getEffectiveSources()) {
|
||||
AppImages.loadRasterImages(SystemIconCache.getDirectory(source), "icons/" + source.getId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ErrorEvent.fromThrowable(e).handle();
|
||||
}
|
||||
}
|
||||
|
||||
private static void clearInvalidImages() {
|
||||
AppImages.remove(s -> s.startsWith("icons/"));
|
||||
try {
|
||||
for (var source : getEffectiveSources()) {
|
||||
|
||||
Reference in New Issue
Block a user