mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-19 22:01:12 +00:00
Small improvements [release]
This commit is contained in:
parent
849e8f0ef4
commit
516af8c66a
|
@ -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<StoreEntryWrapper, Region> 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;
|
||||
|
|
|
@ -26,7 +26,7 @@ public class StoreEntrySection extends Comp<CompStructure<VBox>> {
|
|||
|
||||
@Override
|
||||
public CompStructure<VBox> 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);
|
||||
|
|
|
@ -14,15 +14,15 @@ import java.util.Comparator;
|
|||
@Value
|
||||
public class StoreViewSection implements StorageFilter.Filterable {
|
||||
|
||||
StoreEntryWrapper entry;
|
||||
StoreEntryWrapper wrapper;
|
||||
ObservableList<StoreViewSection> children;
|
||||
|
||||
private static final Comparator<StoreViewSection> COMPARATOR = Comparator.<StoreViewSection, Instant>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<StoreViewSection> 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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ public class ShellStoreChoiceComp<T extends ShellStore> extends SimpleComp {
|
|||
.getValue(),
|
||||
new Label(AppI18n.get("none")),
|
||||
n -> true);
|
||||
comboBox.setSelectedDisplay(t -> createGraphic(t));
|
||||
comboBox.setUnknownNode(t -> createGraphic(t));
|
||||
|
||||
for (Map.Entry<StoreEntryWrapper, Region> e : map.entrySet()) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ public interface CommandControl extends ProcessControl {
|
|||
CommandControl exitTimeout(Integer timeout);
|
||||
|
||||
public void withStdoutOrThrow(Charsetter.FailableConsumer<InputStreamReader, Exception> c) throws Exception;
|
||||
String readOnlyStdout() throws Exception;
|
||||
String readStdoutDiscardErr() throws Exception;
|
||||
|
||||
public void discardOrThrow() throws Exception;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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<ShellControl, String, Exception> command,
|
||||
FailableFunction<ShellControl, String, Exception> 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<String> command) {
|
||||
|
|
Loading…
Reference in a new issue