diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryFlatMiniSection.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryFlatMiniSection.java index d35d1a86..9a2e721d 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryFlatMiniSection.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryFlatMiniSection.java @@ -3,6 +3,7 @@ package io.xpipe.app.comp.storage.store; import atlantafx.base.controls.Spacer; import io.xpipe.app.fxcomps.SimpleComp; import io.xpipe.app.fxcomps.impl.PrettyImageComp; +import io.xpipe.app.storage.DataStoreEntry; import javafx.beans.property.SimpleStringProperty; import javafx.geometry.Orientation; import javafx.scene.control.Label; @@ -29,18 +30,19 @@ public class StoreEntryFlatMiniSection extends SimpleComp { } private static void add(int depth, StoreViewSection section, Map map) { - map.put(section.getEntry(), new StoreEntryFlatMiniSection(depth, section.getEntry()).createRegion()); + map.put(section.getWrapper(), new StoreEntryFlatMiniSection(depth, section.getWrapper().getEntry()).createRegion()); for (StoreViewSection child : section.getChildren()) { add(depth + 1, child, map); } } int depth; - StoreEntryWrapper wrapper; + DataStoreEntry entry; @Override protected Region createSimple() { - var label = new Label(wrapper.getName(), new PrettyImageComp(new SimpleStringProperty(wrapper.getEntry().getProvider().getDisplayIconFileName()), 20, 20).createRegion()); + var image = entry.getState() == DataStoreEntry.State.LOAD_FAILED ? "disabled_icon.png" : entry.getProvider().getDisplayIconFileName(); + var label = new Label(entry.getName(), new PrettyImageComp(new SimpleStringProperty(image), 20, 20).createRegion()); var spacer = new Spacer(depth * 10, Orientation.HORIZONTAL); var box = new HBox(spacer, label); return box; diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntrySection.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntrySection.java index daea175f..bcfc2499 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntrySection.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntrySection.java @@ -26,7 +26,7 @@ public class StoreEntrySection extends Comp> { @Override public CompStructure createBase() { - var root = new StoreEntryComp(section.getEntry()).apply(struc -> HBox.setHgrow(struc.get(), Priority.ALWAYS)); + var root = new StoreEntryComp(section.getWrapper()).apply(struc -> HBox.setHgrow(struc.get(), Priority.ALWAYS)); var icon = Comp.of(() -> { var padding = new FontIcon("mdal-arrow_forward_ios"); padding.setIconSize(14); diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreViewSection.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreViewSection.java index 50336a13..17940a52 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreViewSection.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreViewSection.java @@ -14,15 +14,15 @@ import java.util.Comparator; @Value public class StoreViewSection implements StorageFilter.Filterable { - StoreEntryWrapper entry; + StoreEntryWrapper wrapper; ObservableList children; private static final Comparator COMPARATOR = Comparator.comparing( - o -> o.entry.getEntry().getState().equals(DataStoreEntry.State.COMPLETE_AND_VALID) - ? o.entry.getEntry().getLastAccess() + o -> o.wrapper.getEntry().getState().equals(DataStoreEntry.State.COMPLETE_AND_VALID) + ? o.wrapper.getEntry().getLastAccess() : Instant.EPOCH).reversed() .thenComparing( - storeEntrySection -> storeEntrySection.entry.getEntry().getName()); + storeEntrySection -> storeEntrySection.wrapper.getEntry().getName()); public static ObservableList createTopLevels() { var filtered = @@ -67,7 +67,7 @@ public class StoreViewSection implements StorageFilter.Filterable { @Override public boolean shouldShow(String filter) { - return entry.shouldShow(filter) + return wrapper.shouldShow(filter) || children.stream().anyMatch(storeEntrySection -> storeEntrySection.shouldShow(filter)); } } diff --git a/app/src/main/java/io/xpipe/app/fxcomps/impl/ShellStoreChoiceComp.java b/app/src/main/java/io/xpipe/app/fxcomps/impl/ShellStoreChoiceComp.java index 17133a54..d2934630 100644 --- a/app/src/main/java/io/xpipe/app/fxcomps/impl/ShellStoreChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/fxcomps/impl/ShellStoreChoiceComp.java @@ -84,6 +84,7 @@ public class ShellStoreChoiceComp extends SimpleComp { .getValue(), new Label(AppI18n.get("none")), n -> true); + comboBox.setSelectedDisplay(t -> createGraphic(t)); comboBox.setUnknownNode(t -> createGraphic(t)); for (Map.Entry e : map.entrySet()) { diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java index 34860f67..bf2ab526 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java @@ -43,7 +43,7 @@ public abstract class ExternalApplicationType implements PrefsChoiceValue { + "-dump | grep -o \"/.*%s.app\" | grep -v -E \"Caches|TimeMachine|Temporary|/Volumes/%s\" | uniq", applicationName, applicationName)) .start()) { - var path = c.readOnlyStdout(); + var path = c.readStdoutDiscardErr(); if (c.getExitCode() != 0) { return Optional.empty(); } diff --git a/core/src/main/java/io/xpipe/core/process/CommandControl.java b/core/src/main/java/io/xpipe/core/process/CommandControl.java index 48c67d54..6f7a03bb 100644 --- a/core/src/main/java/io/xpipe/core/process/CommandControl.java +++ b/core/src/main/java/io/xpipe/core/process/CommandControl.java @@ -64,7 +64,7 @@ public interface CommandControl extends ProcessControl { CommandControl exitTimeout(Integer timeout); public void withStdoutOrThrow(Charsetter.FailableConsumer c) throws Exception; - String readOnlyStdout() throws Exception; + String readStdoutDiscardErr() throws Exception; public void discardOrThrow() throws Exception; diff --git a/core/src/main/java/io/xpipe/core/process/OsType.java b/core/src/main/java/io/xpipe/core/process/OsType.java index 33efe059..987d061b 100644 --- a/core/src/main/java/io/xpipe/core/process/OsType.java +++ b/core/src/main/java/io/xpipe/core/process/OsType.java @@ -102,14 +102,14 @@ public interface OsType { @Override public String determineOperatingSystemName(ShellControl pc) throws Exception { try (CommandControl c = pc.command("lsb_release -a").start()) { - var text = c.readOnlyStdout(); + var text = c.readStdoutDiscardErr(); if (c.getExitCode() == 0) { return PropertiesFormatsParser.parse(text, ":").getOrDefault("Description", null); } } try (CommandControl c = pc.command("cat /etc/*release").start()) { - var text = c.readOnlyStdout(); + var text = c.readStdoutDiscardErr(); if (c.getExitCode() == 0) { return PropertiesFormatsParser.parse(text, "=").getOrDefault("PRETTY_NAME", null); } @@ -117,7 +117,7 @@ public interface OsType { String type = "Unknown"; try (CommandControl c = pc.command("uname -o").start()) { - var text = c.readOnlyStdout(); + var text = c.readStdoutDiscardErr(); if (c.getExitCode() == 0) { type = text.strip(); } @@ -125,7 +125,7 @@ public interface OsType { String version = "?"; try (CommandControl c = pc.command("uname -r").start()) { - var text = c.readOnlyStdout(); + var text = c.readStdoutDiscardErr(); if (c.getExitCode() == 0) { version = text.strip(); } diff --git a/core/src/main/java/io/xpipe/core/process/ShellControl.java b/core/src/main/java/io/xpipe/core/process/ShellControl.java index 3d79054f..39fbc2ec 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellControl.java +++ b/core/src/main/java/io/xpipe/core/process/ShellControl.java @@ -6,6 +6,7 @@ import io.xpipe.core.util.SecretValue; import lombok.NonNull; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.concurrent.Semaphore; import java.util.function.Consumer; @@ -103,8 +104,9 @@ public interface ShellControl extends ProcessControl { FailableFunction command, FailableFunction terminalCommand); - default CommandControl command(String command) { - return command(shellProcessControl -> command); + default CommandControl command(String... command) { + var c = Arrays.stream(command).filter(s -> s != null).toArray(String[]::new); + return command(shellProcessControl -> String.join("\n", c)); } default CommandControl command(List command) { diff --git a/version b/version index 12697f71..7988f134 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.5.12 \ No newline at end of file +0.5.13 \ No newline at end of file