mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
Api fixes, order fixes [stage]
This commit is contained in:
parent
adb621dab4
commit
20093becf3
40 changed files with 273 additions and 176 deletions
|
@ -118,7 +118,10 @@ public class BeaconRequestHandler<T> implements HttpHandler {
|
||||||
exchange.sendResponseHeaders(200, -1);
|
exchange.sendResponseHeaders(200, -1);
|
||||||
}
|
}
|
||||||
} catch (IOException ioException) {
|
} catch (IOException ioException) {
|
||||||
ErrorEvent.fromThrowable(ioException).omit().expected().handle();
|
// The exchange implementation might have already sent a response manually
|
||||||
|
if (!"headers already sent".equals(ioException.getMessage())) {
|
||||||
|
ErrorEvent.fromThrowable(ioException).omit().expected().handle();
|
||||||
|
}
|
||||||
} catch (Throwable other) {
|
} catch (Throwable other) {
|
||||||
ErrorEvent.fromThrowable(other).handle();
|
ErrorEvent.fromThrowable(other).handle();
|
||||||
writeError(exchange, new BeaconServerErrorResponse(other), 500);
|
writeError(exchange, new BeaconServerErrorResponse(other), 500);
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class AskpassExchangeImpl extends AskpassExchange {
|
||||||
? SecretManager.getProgress(msg.getRequest(), msg.getSecretId())
|
? SecretManager.getProgress(msg.getRequest(), msg.getSecretId())
|
||||||
: SecretManager.getProgress(msg.getRequest());
|
: SecretManager.getProgress(msg.getRequest());
|
||||||
if (found.isEmpty()) {
|
if (found.isEmpty()) {
|
||||||
throw new BeaconClientException("No password was provided");
|
throw new BeaconClientException("Unknown askpass request");
|
||||||
}
|
}
|
||||||
|
|
||||||
var p = found.get();
|
var p = found.get();
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import io.xpipe.app.beacon.AppBeaconServer;
|
||||||
|
import io.xpipe.beacon.api.FsReadExchange;
|
||||||
|
import io.xpipe.core.store.ConnectionFileSystem;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
|
public class FsReadExchangeImpl extends FsReadExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public Object handle(HttpExchange exchange, Request msg) {
|
||||||
|
var shell = AppBeaconServer.get().getCache().getShellSession(msg.getConnection());
|
||||||
|
var fs = new ConnectionFileSystem(shell.getControl());
|
||||||
|
byte[] bytes;
|
||||||
|
try (var in = fs.openInput(msg.getPath().toString())) {
|
||||||
|
bytes = in.readAllBytes();
|
||||||
|
}
|
||||||
|
exchange.sendResponseHeaders(200, bytes.length);
|
||||||
|
try (var out = exchange.getResponseBody()) {
|
||||||
|
out.write(bytes);
|
||||||
|
}
|
||||||
|
return Response.builder().build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -76,7 +76,7 @@ public final class BrowserBookmarkComp extends SimpleComp {
|
||||||
|
|
||||||
var section = new StoreSectionMiniComp(
|
var section = new StoreSectionMiniComp(
|
||||||
StoreSection.createTopLevel(
|
StoreSection.createTopLevel(
|
||||||
StoreViewState.get().getAllEntries(), this::filter, filterText, selectedCategory),
|
StoreViewState.get().getAllEntries(), this::filter, filterText, selectedCategory, StoreViewState.get().getEntriesListUpdateObservable()),
|
||||||
augment,
|
augment,
|
||||||
entryWrapper -> action.accept(entryWrapper, busy),
|
entryWrapper -> action.accept(entryWrapper, busy),
|
||||||
true);
|
true);
|
||||||
|
|
|
@ -18,6 +18,7 @@ import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
import io.xpipe.app.storage.DataStorage;
|
import io.xpipe.app.storage.DataStorage;
|
||||||
import io.xpipe.app.storage.DataStoreColor;
|
import io.xpipe.app.storage.DataStoreColor;
|
||||||
|
import io.xpipe.app.storage.DataStoreEntry;
|
||||||
import io.xpipe.app.update.XPipeDistributionType;
|
import io.xpipe.app.update.XPipeDistributionType;
|
||||||
import io.xpipe.app.util.*;
|
import io.xpipe.app.util.*;
|
||||||
|
|
||||||
|
@ -369,57 +370,41 @@ public abstract class StoreEntryComp extends SimpleComp {
|
||||||
});
|
});
|
||||||
contextMenu.getItems().add(move);
|
contextMenu.getItems().add(move);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
var order = new Menu(AppI18n.get("order"), new FontIcon("mdal-bookmarks"));
|
var order = new Menu(AppI18n.get("order"), new FontIcon("mdal-bookmarks"));
|
||||||
var noOrder = new MenuItem(AppI18n.get("none"), new FontIcon("mdi2r-reorder-horizontal"));
|
var noOrder = new MenuItem(AppI18n.get("none"), new FontIcon("mdi2r-reorder-horizontal"));
|
||||||
noOrder.setOnAction(event -> {
|
noOrder.setOnAction(event -> {
|
||||||
DataStorage.get().orderBefore(wrapper.getEntry(), null);
|
wrapper.setOrder(null);
|
||||||
event.consume();
|
event.consume();
|
||||||
});
|
|
||||||
if (wrapper.getEntry().getOrderBefore() == null) {
|
|
||||||
noOrder.setDisable(true);
|
|
||||||
}
|
|
||||||
order.getItems().add(noOrder);
|
|
||||||
order.getItems().add(new SeparatorMenuItem());
|
|
||||||
var stick = new MenuItem(AppI18n.get("stickToTop"), new FontIcon("mdi2o-order-bool-descending"));
|
|
||||||
stick.setOnAction(event -> {
|
|
||||||
DataStorage.get().orderBefore(wrapper.getEntry(), wrapper.getEntry());
|
|
||||||
event.consume();
|
|
||||||
});
|
|
||||||
if (wrapper.getEntry().getUuid().equals(wrapper.getEntry().getOrderBefore())) {
|
|
||||||
stick.setDisable(true);
|
|
||||||
}
|
|
||||||
order.getItems().add(stick);
|
|
||||||
order.getItems().add(new SeparatorMenuItem());
|
|
||||||
var desc = new MenuItem(AppI18n.get("orderAheadOf"), new FontIcon("mdi2o-order-bool-descending-variant"));
|
|
||||||
desc.setDisable(true);
|
|
||||||
order.getItems().add(desc);
|
|
||||||
var section = StoreViewState.get().getParentSectionForWrapper(wrapper);
|
|
||||||
if (section.isPresent()) {
|
|
||||||
section.get().getAllChildren().getList().forEach(other -> {
|
|
||||||
var ow = other.getWrapper();
|
|
||||||
var op = ow.getEntry().getProvider();
|
|
||||||
MenuItem m = new MenuItem(
|
|
||||||
ow.getName().getValue(),
|
|
||||||
op != null
|
|
||||||
? PrettyImageHelper.ofFixedSizeSquare(
|
|
||||||
op.getDisplayIconFileName(
|
|
||||||
ow.getEntry().getStore()),
|
|
||||||
16)
|
|
||||||
.createRegion()
|
|
||||||
: null);
|
|
||||||
if (other.getWrapper().equals(wrapper)
|
|
||||||
|| ow.getEntry().getUuid().equals(wrapper.getEntry().getOrderBefore())) {
|
|
||||||
m.setDisable(true);
|
|
||||||
}
|
|
||||||
m.setOnAction(event -> {
|
|
||||||
wrapper.orderBefore(ow);
|
|
||||||
event.consume();
|
|
||||||
});
|
|
||||||
order.getItems().add(m);
|
|
||||||
});
|
});
|
||||||
|
if (wrapper.getEntry().getExplicitOrder() == null) {
|
||||||
|
noOrder.setDisable(true);
|
||||||
|
}
|
||||||
|
order.getItems().add(noOrder);
|
||||||
|
order.getItems().add(new SeparatorMenuItem());
|
||||||
|
|
||||||
|
var top = new MenuItem(AppI18n.get("stickToTop"), new FontIcon("mdi2o-order-bool-descending"));
|
||||||
|
top.setOnAction(event -> {
|
||||||
|
wrapper.setOrder(DataStoreEntry.Order.TOP);
|
||||||
|
event.consume();
|
||||||
|
});
|
||||||
|
if (DataStoreEntry.Order.TOP.equals(wrapper.getEntry().getExplicitOrder())) {
|
||||||
|
top.setDisable(true);
|
||||||
|
}
|
||||||
|
order.getItems().add(top);
|
||||||
|
|
||||||
|
|
||||||
|
var bottom = new MenuItem(AppI18n.get("stickToBottom"), new FontIcon("mdi2o-order-bool-ascending"));
|
||||||
|
bottom.setOnAction(event -> {
|
||||||
|
wrapper.setOrder(DataStoreEntry.Order.BOTTOM);
|
||||||
|
event.consume();
|
||||||
|
});
|
||||||
|
if (DataStoreEntry.Order.BOTTOM.equals(wrapper.getEntry().getExplicitOrder())) {
|
||||||
|
bottom.setDisable(true);
|
||||||
|
}
|
||||||
|
order.getItems().add(bottom);
|
||||||
|
contextMenu.getItems().add(order);
|
||||||
}
|
}
|
||||||
contextMenu.getItems().add(order);
|
|
||||||
|
|
||||||
contextMenu.getItems().add(new SeparatorMenuItem());
|
contextMenu.getItems().add(new SeparatorMenuItem());
|
||||||
|
|
||||||
|
|
|
@ -68,9 +68,9 @@ public class StoreEntryWrapper {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void orderBefore(StoreEntryWrapper other) {
|
public void setOrder(DataStoreEntry.Order order) {
|
||||||
ThreadHelper.runAsync(() -> {
|
ThreadHelper.runAsync(() -> {
|
||||||
DataStorage.get().orderBefore(getEntry(), other.getEntry());
|
DataStorage.get().setOrder(getEntry(), order);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import io.xpipe.app.storage.DataStoreEntry;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.beans.value.ObservableBooleanValue;
|
import javafx.beans.value.ObservableBooleanValue;
|
||||||
|
import javafx.beans.value.ObservableIntegerValue;
|
||||||
import javafx.beans.value.ObservableStringValue;
|
import javafx.beans.value.ObservableStringValue;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
|
@ -61,7 +62,8 @@ public class StoreSection {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DerivedObservableList<StoreSection> sorted(
|
private static DerivedObservableList<StoreSection> sorted(
|
||||||
DerivedObservableList<StoreSection> list, ObservableValue<StoreCategoryWrapper> category) {
|
DerivedObservableList<StoreSection> list, ObservableValue<StoreCategoryWrapper> category,
|
||||||
|
ObservableIntegerValue updateObservable) {
|
||||||
if (category == null) {
|
if (category == null) {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -69,36 +71,15 @@ public class StoreSection {
|
||||||
var explicitOrderComp = Comparator.<StoreSection>comparingInt(new ToIntFunction<>() {
|
var explicitOrderComp = Comparator.<StoreSection>comparingInt(new ToIntFunction<>() {
|
||||||
@Override
|
@Override
|
||||||
public int applyAsInt(StoreSection value) {
|
public int applyAsInt(StoreSection value) {
|
||||||
var explicit = value.getWrapper().getEntry().getOrderBefore();
|
var explicit = value.getWrapper().getEntry().getExplicitOrder();
|
||||||
if (explicit == null) {
|
if (explicit == null) {
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (explicit.equals(value.getWrapper().getEntry().getUuid())) {
|
|
||||||
return Integer.MIN_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -count(value.getWrapper(), new HashSet<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
private int count(StoreEntryWrapper wrapper, Set<StoreEntryWrapper> seen) {
|
|
||||||
if (seen.contains(wrapper)) {
|
|
||||||
// Loop!
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
seen.add(wrapper);
|
|
||||||
|
|
||||||
var found = list.getList().stream()
|
return switch (explicit) {
|
||||||
.filter(section -> section.getWrapper()
|
case TOP -> -1;
|
||||||
.getEntry()
|
case BOTTOM -> 1;
|
||||||
.getUuid()
|
};
|
||||||
.equals(wrapper.getEntry().getOrderBefore()))
|
|
||||||
.findFirst();
|
|
||||||
if (found.isPresent()) {
|
|
||||||
return count(found.get().getWrapper(), seen);
|
|
||||||
} else {
|
|
||||||
return seen.size();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var usableComp = Comparator.<StoreSection>comparingInt(
|
var usableComp = Comparator.<StoreSection>comparingInt(
|
||||||
|
@ -118,23 +99,25 @@ public class StoreSection {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mappedSortMode,
|
mappedSortMode,
|
||||||
StoreViewState.get().getEntriesOrderChangeObservable());
|
updateObservable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StoreSection createTopLevel(
|
public static StoreSection createTopLevel(
|
||||||
DerivedObservableList<StoreEntryWrapper> all,
|
DerivedObservableList<StoreEntryWrapper> all,
|
||||||
Predicate<StoreEntryWrapper> entryFilter,
|
Predicate<StoreEntryWrapper> entryFilter,
|
||||||
ObservableStringValue filterString,
|
ObservableStringValue filterString,
|
||||||
ObservableValue<StoreCategoryWrapper> category) {
|
ObservableValue<StoreCategoryWrapper> category,
|
||||||
|
ObservableIntegerValue updateObservable
|
||||||
|
) {
|
||||||
var topLevel = all.filtered(
|
var topLevel = all.filtered(
|
||||||
section -> {
|
section -> {
|
||||||
return DataStorage.get().isRootEntry(section.getEntry());
|
return DataStorage.get().isRootEntry(section.getEntry());
|
||||||
},
|
},
|
||||||
category,
|
category,
|
||||||
StoreViewState.get().getEntriesListChangeObservable());
|
updateObservable);
|
||||||
var cached = topLevel.mapped(
|
var cached = topLevel.mapped(
|
||||||
storeEntryWrapper -> create(List.of(), storeEntryWrapper, 1, all, entryFilter, filterString, category));
|
storeEntryWrapper -> create(List.of(), storeEntryWrapper, 1, all, entryFilter, filterString, category, updateObservable));
|
||||||
var ordered = sorted(cached, category);
|
var ordered = sorted(cached, category, updateObservable);
|
||||||
var shown = ordered.filtered(
|
var shown = ordered.filtered(
|
||||||
section -> {
|
section -> {
|
||||||
// matches filter
|
// matches filter
|
||||||
|
@ -160,7 +143,8 @@ public class StoreSection {
|
||||||
DerivedObservableList<StoreEntryWrapper> all,
|
DerivedObservableList<StoreEntryWrapper> all,
|
||||||
Predicate<StoreEntryWrapper> entryFilter,
|
Predicate<StoreEntryWrapper> entryFilter,
|
||||||
ObservableStringValue filterString,
|
ObservableStringValue filterString,
|
||||||
ObservableValue<StoreCategoryWrapper> category) {
|
ObservableValue<StoreCategoryWrapper> category,
|
||||||
|
ObservableIntegerValue updateObservable) {
|
||||||
if (e.getEntry().getValidity() == DataStoreEntry.Validity.LOAD_FAILED) {
|
if (e.getEntry().getValidity() == DataStoreEntry.Validity.LOAD_FAILED) {
|
||||||
return new StoreSection(
|
return new StoreSection(
|
||||||
e,
|
e,
|
||||||
|
@ -186,11 +170,11 @@ public class StoreSection {
|
||||||
},
|
},
|
||||||
e.getPersistentState(),
|
e.getPersistentState(),
|
||||||
e.getCache(),
|
e.getCache(),
|
||||||
StoreViewState.get().getEntriesListChangeObservable());
|
updateObservable);
|
||||||
var l = new ArrayList<>(parents);
|
var l = new ArrayList<>(parents);
|
||||||
l.add(e);
|
l.add(e);
|
||||||
var cached = allChildren.mapped(c -> create(l, c, depth + 1, all, entryFilter, filterString, category));
|
var cached = allChildren.mapped(c -> create(l, c, depth + 1, all, entryFilter, filterString, category, updateObservable));
|
||||||
var ordered = sorted(cached, category);
|
var ordered = sorted(cached, category, updateObservable);
|
||||||
var filtered = ordered.filtered(
|
var filtered = ordered.filtered(
|
||||||
section -> {
|
section -> {
|
||||||
// matches filter
|
// matches filter
|
||||||
|
|
|
@ -34,10 +34,7 @@ public class StoreViewState {
|
||||||
new DerivedObservableList<>(FXCollections.observableList(new CopyOnWriteArrayList<>()), true);
|
new DerivedObservableList<>(FXCollections.observableList(new CopyOnWriteArrayList<>()), true);
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final IntegerProperty entriesOrderChangeObservable = new SimpleIntegerProperty();
|
private final IntegerProperty entriesListUpdateObservable = new SimpleIntegerProperty();
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final IntegerProperty entriesListChangeObservable = new SimpleIntegerProperty();
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final Property<StoreCategoryWrapper> activeCategory = new SimpleObjectProperty<>();
|
private final Property<StoreCategoryWrapper> activeCategory = new SimpleObjectProperty<>();
|
||||||
|
@ -86,7 +83,7 @@ public class StoreViewState {
|
||||||
private void initSections() {
|
private void initSections() {
|
||||||
try {
|
try {
|
||||||
currentTopLevelSection =
|
currentTopLevelSection =
|
||||||
StoreSection.createTopLevel(allEntries, storeEntryWrapper -> true, filter, activeCategory);
|
StoreSection.createTopLevel(allEntries, storeEntryWrapper -> true, filter, activeCategory, entriesListUpdateObservable);
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
currentTopLevelSection = new StoreSection(
|
currentTopLevelSection = new StoreSection(
|
||||||
null,
|
null,
|
||||||
|
@ -124,15 +121,9 @@ public class StoreViewState {
|
||||||
.orElseThrow()));
|
.orElseThrow()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toggleStoreOrderUpdate() {
|
|
||||||
PlatformThread.runLaterIfNeeded(() -> {
|
|
||||||
entriesOrderChangeObservable.set(entriesOrderChangeObservable.get() + 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void toggleStoreListUpdate() {
|
public void toggleStoreListUpdate() {
|
||||||
PlatformThread.runLaterIfNeeded(() -> {
|
PlatformThread.runLaterIfNeeded(() -> {
|
||||||
entriesListChangeObservable.set(entriesListChangeObservable.get() + 1);
|
entriesListUpdateObservable.set(entriesListUpdateObservable.get() + 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,13 +143,6 @@ public class StoreViewState {
|
||||||
// Watch out for synchronizing all calls to the entries and categories list!
|
// Watch out for synchronizing all calls to the entries and categories list!
|
||||||
DataStorage.get().addListener(new StorageListener() {
|
DataStorage.get().addListener(new StorageListener() {
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStoreOrderUpdate() {
|
|
||||||
Platform.runLater(() -> {
|
|
||||||
toggleStoreOrderUpdate();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStoreListUpdate() {
|
public void onStoreListUpdate() {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
|
|
|
@ -93,7 +93,8 @@ public class DataStoreChoiceComp<T extends DataStore> extends SimpleComp {
|
||||||
};
|
};
|
||||||
var section = new StoreSectionMiniComp(
|
var section = new StoreSectionMiniComp(
|
||||||
StoreSection.createTopLevel(
|
StoreSection.createTopLevel(
|
||||||
StoreViewState.get().getAllEntries(), applicable, filterText, selectedCategory),
|
StoreViewState.get().getAllEntries(), applicable, filterText, selectedCategory, StoreViewState.get()
|
||||||
|
.getEntriesListUpdateObservable()),
|
||||||
(s, comp) -> {
|
(s, comp) -> {
|
||||||
if (!applicable.test(s.getWrapper())) {
|
if (!applicable.test(s.getWrapper())) {
|
||||||
comp.disable(new SimpleBooleanProperty(true));
|
comp.disable(new SimpleBooleanProperty(true));
|
||||||
|
|
|
@ -333,9 +333,9 @@ public abstract class DataStorage {
|
||||||
saveAsync();
|
saveAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void orderBefore(DataStoreEntry entry, DataStoreEntry reference) {
|
public void setOrder(DataStoreEntry entry, DataStoreEntry.Order order) {
|
||||||
entry.setOrderBefore(reference != null ? reference.getUuid() : null);
|
entry.setExplicitOrder(order);
|
||||||
listeners.forEach(storageListener -> storageListener.onStoreOrderUpdate());
|
listeners.forEach(storageListener -> storageListener.onStoreListUpdate());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean refreshChildren(DataStoreEntry e) {
|
public boolean refreshChildren(DataStoreEntry e) {
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
String notes;
|
String notes;
|
||||||
|
|
||||||
@NonFinal
|
@NonFinal
|
||||||
UUID orderBefore;
|
Order explicitOrder;
|
||||||
|
|
||||||
private DataStoreEntry(
|
private DataStoreEntry(
|
||||||
Path directory,
|
Path directory,
|
||||||
|
@ -90,7 +90,8 @@ public class DataStoreEntry extends StorageElement {
|
||||||
boolean expanded,
|
boolean expanded,
|
||||||
DataStoreColor color,
|
DataStoreColor color,
|
||||||
String notes,
|
String notes,
|
||||||
UUID orderBefore) {
|
Order explicitOrder
|
||||||
|
) {
|
||||||
super(directory, uuid, name, lastUsed, lastModified, dirty);
|
super(directory, uuid, name, lastUsed, lastModified, dirty);
|
||||||
this.categoryUuid = categoryUuid;
|
this.categoryUuid = categoryUuid;
|
||||||
this.store = DataStorageParser.storeFromNode(storeNode);
|
this.store = DataStorageParser.storeFromNode(storeNode);
|
||||||
|
@ -99,7 +100,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
this.expanded = expanded;
|
this.expanded = expanded;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
this.orderBefore = orderBefore;
|
this.explicitOrder = explicitOrder;
|
||||||
this.provider = store != null
|
this.provider = store != null
|
||||||
? DataStoreProviders.byStoreClass(store.getClass()).orElse(null)
|
? DataStoreProviders.byStoreClass(store.getClass()).orElse(null)
|
||||||
: null;
|
: null;
|
||||||
|
@ -115,11 +116,12 @@ public class DataStoreEntry extends StorageElement {
|
||||||
Instant lastUsed,
|
Instant lastUsed,
|
||||||
Instant lastModified,
|
Instant lastModified,
|
||||||
DataStore store,
|
DataStore store,
|
||||||
UUID orderBefore) {
|
Order explicitOrder
|
||||||
|
) {
|
||||||
super(directory, uuid, name, lastUsed, lastModified, false);
|
super(directory, uuid, name, lastUsed, lastModified, false);
|
||||||
this.categoryUuid = categoryUuid;
|
this.categoryUuid = categoryUuid;
|
||||||
this.store = store;
|
this.store = store;
|
||||||
this.orderBefore = orderBefore;
|
this.explicitOrder = explicitOrder;
|
||||||
this.storeNode = null;
|
this.storeNode = null;
|
||||||
this.validity = Validity.INCOMPLETE;
|
this.validity = Validity.INCOMPLETE;
|
||||||
this.configuration = Configuration.defaultConfiguration();
|
this.configuration = Configuration.defaultConfiguration();
|
||||||
|
@ -186,7 +188,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
boolean expanded,
|
boolean expanded,
|
||||||
DataStoreColor color,
|
DataStoreColor color,
|
||||||
String notes,
|
String notes,
|
||||||
UUID orderBeforeEntry) {
|
Order order) {
|
||||||
return new DataStoreEntry(
|
return new DataStoreEntry(
|
||||||
directory,
|
directory,
|
||||||
uuid,
|
uuid,
|
||||||
|
@ -202,7 +204,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
expanded,
|
expanded,
|
||||||
color,
|
color,
|
||||||
notes,
|
notes,
|
||||||
orderBeforeEntry);
|
order);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<DataStoreEntry> fromDirectory(Path dir) throws Exception {
|
public static Optional<DataStoreEntry> fromDirectory(Path dir) throws Exception {
|
||||||
|
@ -237,10 +239,10 @@ public class DataStoreEntry extends StorageElement {
|
||||||
.map(jsonNode -> jsonNode.textValue())
|
.map(jsonNode -> jsonNode.textValue())
|
||||||
.map(Instant::parse)
|
.map(Instant::parse)
|
||||||
.orElse(Instant.EPOCH);
|
.orElse(Instant.EPOCH);
|
||||||
var order = Optional.ofNullable(stateJson.get("orderBefore"))
|
var order = Optional.ofNullable(stateJson.get("order"))
|
||||||
.map(node -> {
|
.map(node -> {
|
||||||
try {
|
try {
|
||||||
return mapper.treeToValue(node, UUID.class);
|
return mapper.treeToValue(node, Order.class);
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -299,9 +301,9 @@ public class DataStoreEntry extends StorageElement {
|
||||||
order));
|
order));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOrderBefore(UUID uuid) {
|
public void setExplicitOrder(Order uuid) {
|
||||||
var changed = !Objects.equals(orderBefore, uuid);
|
var changed = !Objects.equals(explicitOrder, uuid);
|
||||||
this.orderBefore = uuid;
|
this.explicitOrder = uuid;
|
||||||
if (changed) {
|
if (changed) {
|
||||||
notifyUpdate(false, true);
|
notifyUpdate(false, true);
|
||||||
}
|
}
|
||||||
|
@ -415,7 +417,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
stateObj.set("persistentState", storePersistentStateNode);
|
stateObj.set("persistentState", storePersistentStateNode);
|
||||||
obj.set("configuration", mapper.valueToTree(configuration));
|
obj.set("configuration", mapper.valueToTree(configuration));
|
||||||
stateObj.put("expanded", expanded);
|
stateObj.put("expanded", expanded);
|
||||||
stateObj.put("orderBefore", orderBefore != null ? orderBefore.toString() : null);
|
stateObj.put("orderBefore", explicitOrder != null ? explicitOrder.toString() : null);
|
||||||
|
|
||||||
var entryString = mapper.writeValueAsString(obj);
|
var entryString = mapper.writeValueAsString(obj);
|
||||||
var stateString = mapper.writeValueAsString(stateObj);
|
var stateString = mapper.writeValueAsString(stateObj);
|
||||||
|
@ -601,4 +603,13 @@ public class DataStoreEntry extends StorageElement {
|
||||||
this.isUsable = isUsable;
|
this.isUsable = isUsable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum Order {
|
||||||
|
@JsonProperty("top")
|
||||||
|
TOP,
|
||||||
|
@JsonProperty("bottom")
|
||||||
|
BOTTOM;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@ package io.xpipe.app.storage;
|
||||||
|
|
||||||
public interface StorageListener {
|
public interface StorageListener {
|
||||||
|
|
||||||
void onStoreOrderUpdate();
|
|
||||||
|
|
||||||
void onStoreListUpdate();
|
void onStoreListUpdate();
|
||||||
|
|
||||||
void onStoreAdd(DataStoreEntry... entry);
|
void onStoreAdd(DataStoreEntry... entry);
|
||||||
|
|
|
@ -138,7 +138,7 @@ open module io.xpipe.app {
|
||||||
DaemonStatusExchangeImpl,
|
DaemonStatusExchangeImpl,
|
||||||
DaemonStopExchangeImpl,
|
DaemonStopExchangeImpl,
|
||||||
HandshakeExchangeImpl,
|
HandshakeExchangeImpl,
|
||||||
DaemonModeExchangeImpl, FsBlobExchangeImpl,
|
DaemonModeExchangeImpl, FsBlobExchangeImpl, FsReadExchangeImpl,
|
||||||
FsScriptExchangeImpl,
|
FsScriptExchangeImpl,
|
||||||
FsWriteExchangeImpl,
|
FsWriteExchangeImpl,
|
||||||
AskpassExchangeImpl,
|
AskpassExchangeImpl,
|
||||||
|
|
33
beacon/src/main/java/io/xpipe/beacon/api/FsReadExchange.java
Normal file
33
beacon/src/main/java/io/xpipe/beacon/api/FsReadExchange.java
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
package io.xpipe.beacon.api;
|
||||||
|
|
||||||
|
import io.xpipe.beacon.BeaconInterface;
|
||||||
|
import io.xpipe.core.store.FilePath;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.Value;
|
||||||
|
import lombok.extern.jackson.Jacksonized;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class FsReadExchange extends BeaconInterface<FsReadExchange.Request> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPath() {
|
||||||
|
return "/fs/read";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Jacksonized
|
||||||
|
@Builder
|
||||||
|
@Value
|
||||||
|
public static class Request {
|
||||||
|
@NonNull
|
||||||
|
UUID connection;
|
||||||
|
@NonNull
|
||||||
|
FilePath path;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Jacksonized
|
||||||
|
@Builder
|
||||||
|
@Value
|
||||||
|
public static class Response {}
|
||||||
|
}
|
|
@ -1,10 +1,9 @@
|
||||||
|
import com.fasterxml.jackson.databind.Module;
|
||||||
import io.xpipe.beacon.BeaconInterface;
|
import io.xpipe.beacon.BeaconInterface;
|
||||||
import io.xpipe.beacon.BeaconJacksonModule;
|
import io.xpipe.beacon.BeaconJacksonModule;
|
||||||
import io.xpipe.beacon.api.*;
|
import io.xpipe.beacon.api.*;
|
||||||
import io.xpipe.core.util.ModuleLayerLoader;
|
import io.xpipe.core.util.ModuleLayerLoader;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.Module;
|
|
||||||
|
|
||||||
open module io.xpipe.beacon {
|
open module io.xpipe.beacon {
|
||||||
exports io.xpipe.beacon;
|
exports io.xpipe.beacon;
|
||||||
exports io.xpipe.beacon.test;
|
exports io.xpipe.beacon.test;
|
||||||
|
@ -40,5 +39,9 @@ open module io.xpipe.beacon {
|
||||||
AskpassExchange,
|
AskpassExchange,
|
||||||
TerminalWaitExchange,
|
TerminalWaitExchange,
|
||||||
TerminalLaunchExchange,
|
TerminalLaunchExchange,
|
||||||
|
FsReadExchange,
|
||||||
|
FsBlobExchange,
|
||||||
|
FsWriteExchange,
|
||||||
|
FsScriptExchange,
|
||||||
DaemonVersionExchange;
|
DaemonVersionExchange;
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,11 +460,10 @@ notes=Bemærkninger
|
||||||
addNotes=Tilføj noter
|
addNotes=Tilføj noter
|
||||||
order=Bestille ...
|
order=Bestille ...
|
||||||
stickToTop=Hold dig på toppen
|
stickToTop=Hold dig på toppen
|
||||||
|
stickToBottom=Hold på bunden
|
||||||
orderAheadOf=Bestil på forhånd ...
|
orderAheadOf=Bestil på forhånd ...
|
||||||
httpServer=HTTP-server
|
httpServer=HTTP-server
|
||||||
httpServerConfiguration=Konfiguration af HTTP-server
|
httpServerConfiguration=Konfiguration af HTTP-server
|
||||||
httpServerPort=Port
|
|
||||||
httpServerPortDescription=Den port, som HTTP-serveren vil lytte på.\n\nBemærk, at hvis du ændrer dette, skal alle andre programmer, der interagerer med serveren, også konfigureres til at bruge den nye port.\n\nKræver en genstart for at gælde.
|
|
||||||
apiKey=API-nøgle
|
apiKey=API-nøgle
|
||||||
apiKeyDescription=API-nøglen til godkendelse af XPipe-dæmonens API-anmodninger. Se den generelle API-dokumentation for at få flere oplysninger om, hvordan du godkender.\n\nKræver en genstart for at blive anvendt.
|
apiKeyDescription=API-nøglen til godkendelse af XPipe-dæmonens API-anmodninger. Se den generelle API-dokumentation for at få flere oplysninger om, hvordan du godkender.\n\nKræver en genstart for at blive anvendt.
|
||||||
disableApiAuthentication=Deaktiver API-godkendelse
|
disableApiAuthentication=Deaktiver API-godkendelse
|
||||||
|
@ -479,3 +478,4 @@ isOnlySupportedLimit=understøttes kun med en professionel licens, når man har
|
||||||
areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser
|
areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser
|
||||||
enabled=Aktiveret
|
enabled=Aktiveret
|
||||||
enableGitStoragePtbDisabled=Git-synkronisering er deaktiveret for offentlige test-builds for at forhindre brug med almindelige release-git-lagre og for at modvirke, at man bruger en PTB-build som sin daglige driver.
|
enableGitStoragePtbDisabled=Git-synkronisering er deaktiveret for offentlige test-builds for at forhindre brug med almindelige release-git-lagre og for at modvirke, at man bruger en PTB-build som sin daglige driver.
|
||||||
|
copyId=Kopi ID
|
||||||
|
|
|
@ -454,11 +454,10 @@ notes=Anmerkungen
|
||||||
addNotes=Notizen hinzufügen
|
addNotes=Notizen hinzufügen
|
||||||
order=Bestellen ...
|
order=Bestellen ...
|
||||||
stickToTop=Oben bleiben
|
stickToTop=Oben bleiben
|
||||||
|
stickToBottom=Auf dem Boden bleiben
|
||||||
orderAheadOf=Vorbestellen ...
|
orderAheadOf=Vorbestellen ...
|
||||||
httpServer=HTTP-Server
|
httpServer=HTTP-Server
|
||||||
httpServerConfiguration=HTTP-Server-Konfiguration
|
httpServerConfiguration=HTTP-Server-Konfiguration
|
||||||
httpServerPort=Port
|
|
||||||
httpServerPortDescription=Der Port, auf dem der HTTP-Server lauschen wird.\n\nWenn du diesen Wert änderst, müssen alle anderen Anwendungen, die mit dem Server interagieren, so konfiguriert werden, dass sie ebenfalls den neuen Port verwenden.\n\nZur Anwendung ist ein Neustart erforderlich.
|
|
||||||
apiKey=API-Schlüssel
|
apiKey=API-Schlüssel
|
||||||
apiKeyDescription=Der API-Schlüssel zur Authentifizierung von XPipe Daemon API-Anfragen. Weitere Informationen zur Authentifizierung findest du in der allgemeinen API-Dokumentation.\n\nErfordert einen Neustart zur Anwendung.
|
apiKeyDescription=Der API-Schlüssel zur Authentifizierung von XPipe Daemon API-Anfragen. Weitere Informationen zur Authentifizierung findest du in der allgemeinen API-Dokumentation.\n\nErfordert einen Neustart zur Anwendung.
|
||||||
disableApiAuthentication=API-Authentifizierung deaktivieren
|
disableApiAuthentication=API-Authentifizierung deaktivieren
|
||||||
|
@ -473,3 +472,4 @@ isOnlySupportedLimit=wird nur mit einer professionellen Lizenz unterstützt, wen
|
||||||
areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen
|
areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen
|
||||||
enabled=Aktiviert
|
enabled=Aktiviert
|
||||||
enableGitStoragePtbDisabled=Die Git-Synchronisierung ist für öffentliche Test-Builds deaktiviert, um die Verwendung mit regulären Git-Repositories zu verhindern und um davon abzuraten, einen PTB-Build als täglichen Treiber zu verwenden.
|
enableGitStoragePtbDisabled=Die Git-Synchronisierung ist für öffentliche Test-Builds deaktiviert, um die Verwendung mit regulären Git-Repositories zu verhindern und um davon abzuraten, einen PTB-Build als täglichen Treiber zu verwenden.
|
||||||
|
copyId=ID kopieren
|
||||||
|
|
|
@ -458,6 +458,7 @@ addNotes=Add notes
|
||||||
#context: verb
|
#context: verb
|
||||||
order=Order ...
|
order=Order ...
|
||||||
stickToTop=Keep on top
|
stickToTop=Keep on top
|
||||||
|
stickToBottom=Keep on bottom
|
||||||
orderAheadOf=Order ahead of ...
|
orderAheadOf=Order ahead of ...
|
||||||
httpServer=HTTP server
|
httpServer=HTTP server
|
||||||
httpServerConfiguration=HTTP server configuration
|
httpServerConfiguration=HTTP server configuration
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Notas
|
||||||
addNotes=Añadir notas
|
addNotes=Añadir notas
|
||||||
order=Ordenar ...
|
order=Ordenar ...
|
||||||
stickToTop=Mantener arriba
|
stickToTop=Mantener arriba
|
||||||
|
stickToBottom=Mantener en la parte inferior
|
||||||
orderAheadOf=Haz tu pedido antes de ...
|
orderAheadOf=Haz tu pedido antes de ...
|
||||||
httpServer=Servidor HTTP
|
httpServer=Servidor HTTP
|
||||||
httpServerConfiguration=Configuración del servidor HTTP
|
httpServerConfiguration=Configuración del servidor HTTP
|
||||||
httpServerPort=Puerto
|
|
||||||
httpServerPortDescription=El puerto en el que escuchará el servidor HTTP.\n\nTen en cuenta que si cambias esto, cualquier otra aplicación que interactúe con el servidor deberá configurarse para utilizar también el nuevo puerto.\n\nRequiere un reinicio para aplicarse.
|
|
||||||
apiKey=Clave API
|
apiKey=Clave API
|
||||||
apiKeyDescription=La clave API para autenticar las peticiones API del demonio XPipe. Para más información sobre cómo autenticarse, consulta la documentación general de la API.\n\nRequiere un reinicio para aplicarse.
|
apiKeyDescription=La clave API para autenticar las peticiones API del demonio XPipe. Para más información sobre cómo autenticarse, consulta la documentación general de la API.\n\nRequiere un reinicio para aplicarse.
|
||||||
disableApiAuthentication=Desactivar la autenticación de la API
|
disableApiAuthentication=Desactivar la autenticación de la API
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=sólo es compatible con una licencia profesional cuando tie
|
||||||
areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones
|
areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones
|
||||||
enabled=Activado
|
enabled=Activado
|
||||||
enableGitStoragePtbDisabled=La sincronización Git está desactivada para las compilaciones públicas de prueba, para evitar que se utilicen con los repositorios git de publicación regular y para desalentar el uso de una compilación PTB como tu conductor diario.
|
enableGitStoragePtbDisabled=La sincronización Git está desactivada para las compilaciones públicas de prueba, para evitar que se utilicen con los repositorios git de publicación regular y para desalentar el uso de una compilación PTB como tu conductor diario.
|
||||||
|
copyId=ID de copia
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Notes
|
||||||
addNotes=Ajouter des notes
|
addNotes=Ajouter des notes
|
||||||
order=Commander...
|
order=Commander...
|
||||||
stickToTop=Garde le dessus
|
stickToTop=Garde le dessus
|
||||||
|
stickToBottom=Garde en bas
|
||||||
orderAheadOf=Commande en avance...
|
orderAheadOf=Commande en avance...
|
||||||
httpServer=Serveur HTTP
|
httpServer=Serveur HTTP
|
||||||
httpServerConfiguration=Configuration du serveur HTTP
|
httpServerConfiguration=Configuration du serveur HTTP
|
||||||
httpServerPort=Port
|
|
||||||
httpServerPortDescription=Le port sur lequel le serveur HTTP écoutera.\n\nNote que si tu modifies ce paramètre, toutes les autres applications qui interagissent avec le serveur doivent être configurées pour utiliser également le nouveau port.\n\nIl faut redémarrer l'ordinateur pour l'appliquer.
|
|
||||||
apiKey=Clé API
|
apiKey=Clé API
|
||||||
apiKeyDescription=La clé API pour authentifier les demandes API du démon XPipe. Pour plus d'informations sur la manière de s'authentifier, voir la documentation générale de l'API.\n\nNécessite un redémarrage pour être appliquée.
|
apiKeyDescription=La clé API pour authentifier les demandes API du démon XPipe. Pour plus d'informations sur la manière de s'authentifier, voir la documentation générale de l'API.\n\nNécessite un redémarrage pour être appliquée.
|
||||||
disableApiAuthentication=Désactiver l'authentification de l'API
|
disableApiAuthentication=Désactiver l'authentification de l'API
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=n'est pris en charge qu'avec une licence professionnelle lo
|
||||||
areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions
|
areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions
|
||||||
enabled=Activé
|
enabled=Activé
|
||||||
enableGitStoragePtbDisabled=La synchronisation Git est désactivée pour les versions de test publiques afin d'éviter toute utilisation avec les dépôts git des versions régulières et de décourager l'utilisation d'une version PTB comme conducteur quotidien.
|
enableGitStoragePtbDisabled=La synchronisation Git est désactivée pour les versions de test publiques afin d'éviter toute utilisation avec les dépôts git des versions régulières et de décourager l'utilisation d'une version PTB comme conducteur quotidien.
|
||||||
|
copyId=ID de copie
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Note
|
||||||
addNotes=Aggiungi note
|
addNotes=Aggiungi note
|
||||||
order=Ordinare ...
|
order=Ordinare ...
|
||||||
stickToTop=Continua a essere in cima
|
stickToTop=Continua a essere in cima
|
||||||
|
stickToBottom=Tieni sul fondo
|
||||||
orderAheadOf=Ordina prima di ...
|
orderAheadOf=Ordina prima di ...
|
||||||
httpServer=Server HTTP
|
httpServer=Server HTTP
|
||||||
httpServerConfiguration=Configurazione del server HTTP
|
httpServerConfiguration=Configurazione del server HTTP
|
||||||
httpServerPort=Porta
|
|
||||||
httpServerPortDescription=La porta su cui il server HTTP si metterà in ascolto.\n\nSe la modifichi, tutte le altre applicazioni che interagiscono con il server devono essere configurate per utilizzare la nuova porta.\n\nRichiede un riavvio per essere applicata.
|
|
||||||
apiKey=Chiave API
|
apiKey=Chiave API
|
||||||
apiKeyDescription=La chiave API per autenticare le richieste API del demone XPipe. Per ulteriori informazioni sulle modalità di autenticazione, consulta la documentazione generale dell'API.\n\nRichiede un riavvio per essere applicata.
|
apiKeyDescription=La chiave API per autenticare le richieste API del demone XPipe. Per ulteriori informazioni sulle modalità di autenticazione, consulta la documentazione generale dell'API.\n\nRichiede un riavvio per essere applicata.
|
||||||
disableApiAuthentication=Disabilita l'autenticazione API
|
disableApiAuthentication=Disabilita l'autenticazione API
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=è supportato solo con una licenza professionale quando ci
|
||||||
areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni
|
areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni
|
||||||
enabled=Abilitato
|
enabled=Abilitato
|
||||||
enableGitStoragePtbDisabled=La sincronizzazione Git è disabilitata per le build di test pubbliche per evitare l'uso con i repository git di rilascio regolari e per scoraggiare l'uso di una build PTB come guida quotidiana.
|
enableGitStoragePtbDisabled=La sincronizzazione Git è disabilitata per le build di test pubbliche per evitare l'uso con i repository git di rilascio regolari e per scoraggiare l'uso di una build PTB come guida quotidiana.
|
||||||
|
copyId=Copia ID
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=備考
|
||||||
addNotes=メモを追加する
|
addNotes=メモを追加する
|
||||||
order=注文する
|
order=注文する
|
||||||
stickToTop=トップをキープする
|
stickToTop=トップをキープする
|
||||||
|
stickToBottom=底を保つ
|
||||||
orderAheadOf=先に注文する
|
orderAheadOf=先に注文する
|
||||||
httpServer=HTTPサーバー
|
httpServer=HTTPサーバー
|
||||||
httpServerConfiguration=HTTPサーバーの設定
|
httpServerConfiguration=HTTPサーバーの設定
|
||||||
httpServerPort=ポート
|
|
||||||
httpServerPortDescription=HTTPサーバーがリッスンするポート。\n\nこれを変更すると、サーバーとやりとりする他のアプリケーションも新しいポートを使うように設定する必要があることに注意。\n\n適用するには再起動が必要である。
|
|
||||||
apiKey=APIキー
|
apiKey=APIキー
|
||||||
apiKeyDescription=XPipeデーモンAPIリクエストを認証するためのAPIキー。認証方法の詳細については、一般的なAPIドキュメントを参照のこと。\n\n適用には再起動が必要。
|
apiKeyDescription=XPipeデーモンAPIリクエストを認証するためのAPIキー。認証方法の詳細については、一般的なAPIドキュメントを参照のこと。\n\n適用には再起動が必要。
|
||||||
disableApiAuthentication=API認証を無効にする
|
disableApiAuthentication=API認証を無効にする
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=は、$COUNT$ を超える接続がある場合、プロフ
|
||||||
areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。
|
areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。
|
||||||
enabled=有効にする
|
enabled=有効にする
|
||||||
enableGitStoragePtbDisabled=Gitの同期をパブリックテストビルドでは無効にしているのは、通常のリリース用gitリポジトリとの使い回しを防ぎ、PTBビルドをデイリードライバーとして使わないようにするためだ。
|
enableGitStoragePtbDisabled=Gitの同期をパブリックテストビルドでは無効にしているのは、通常のリリース用gitリポジトリとの使い回しを防ぎ、PTBビルドをデイリードライバーとして使わないようにするためだ。
|
||||||
|
copyId=コピーID
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Opmerkingen
|
||||||
addNotes=Opmerkingen toevoegen
|
addNotes=Opmerkingen toevoegen
|
||||||
order=Bestellen ...
|
order=Bestellen ...
|
||||||
stickToTop=Bovenaan houden
|
stickToTop=Bovenaan houden
|
||||||
|
stickToBottom=Onderaan houden
|
||||||
orderAheadOf=Vooruitbestellen ...
|
orderAheadOf=Vooruitbestellen ...
|
||||||
httpServer=HTTP-server
|
httpServer=HTTP-server
|
||||||
httpServerConfiguration=HTTP-server configuratie
|
httpServerConfiguration=HTTP-server configuratie
|
||||||
httpServerPort=Poort
|
|
||||||
httpServerPortDescription=De poort waarop de HTTP-server zal luisteren.\n\nMerk op dat als je dit verandert, andere applicaties die communiceren met de server ook geconfigureerd moeten worden om de nieuwe poort te gebruiken.\n\nVereist een herstart om toe te passen.
|
|
||||||
apiKey=API-sleutel
|
apiKey=API-sleutel
|
||||||
apiKeyDescription=De API sleutel om XPipe daemon API verzoeken te authenticeren. Voor meer informatie over hoe te authenticeren, zie de algemene API documentatie.\n\nVereist een herstart om toe te passen.
|
apiKeyDescription=De API sleutel om XPipe daemon API verzoeken te authenticeren. Voor meer informatie over hoe te authenticeren, zie de algemene API documentatie.\n\nVereist een herstart om toe te passen.
|
||||||
disableApiAuthentication=API-authenticatie uitschakelen
|
disableApiAuthentication=API-authenticatie uitschakelen
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=wordt alleen ondersteund met een professionele licentie bij
|
||||||
areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen
|
areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen
|
||||||
enabled=Ingeschakeld
|
enabled=Ingeschakeld
|
||||||
enableGitStoragePtbDisabled=Git synchronisatie is uitgeschakeld voor publieke test builds om gebruik met reguliere release git repositories te voorkomen en om het gebruik van een PTB build als je dagelijkse driver te ontmoedigen.
|
enableGitStoragePtbDisabled=Git synchronisatie is uitgeschakeld voor publieke test builds om gebruik met reguliere release git repositories te voorkomen en om het gebruik van een PTB build als je dagelijkse driver te ontmoedigen.
|
||||||
|
copyId=ID kopiëren
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Nota
|
||||||
addNotes=Adiciona notas
|
addNotes=Adiciona notas
|
||||||
order=Encomenda ...
|
order=Encomenda ...
|
||||||
stickToTop=Mantém-te no topo
|
stickToTop=Mantém-te no topo
|
||||||
|
stickToBottom=Mantém na parte inferior
|
||||||
orderAheadOf=Encomenda antes de ...
|
orderAheadOf=Encomenda antes de ...
|
||||||
httpServer=Servidor HTTP
|
httpServer=Servidor HTTP
|
||||||
httpServerConfiguration=Configuração do servidor HTTP
|
httpServerConfiguration=Configuração do servidor HTTP
|
||||||
httpServerPort=Porta
|
|
||||||
httpServerPortDescription=A porta em que o servidor HTTP irá escutar.\n\nTem em atenção que, se alterares isto, quaisquer outras aplicações que interajam com o servidor têm de ser configuradas para utilizar também a nova porta.\n\nRequer uma reinicialização para ser aplicado.
|
|
||||||
apiKey=Chave API
|
apiKey=Chave API
|
||||||
apiKeyDescription=A chave da API para autenticar os pedidos de API do daemon XPipe. Para mais informações sobre como autenticar, vê a documentação geral da API.\n\nRequer um reinício para ser aplicado.
|
apiKeyDescription=A chave da API para autenticar os pedidos de API do daemon XPipe. Para mais informações sobre como autenticar, vê a documentação geral da API.\n\nRequer um reinício para ser aplicado.
|
||||||
disableApiAuthentication=Desativar a autenticação da API
|
disableApiAuthentication=Desativar a autenticação da API
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=só é suportado com uma licença profissional se tiver mai
|
||||||
areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações
|
areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações
|
||||||
enabled=Ativado
|
enabled=Ativado
|
||||||
enableGitStoragePtbDisabled=A sincronização do Git está desactivada para compilações de teste públicas para evitar a utilização com repositórios git de lançamento regulares e para desencorajar a utilização de uma compilação PTB como o teu condutor diário.
|
enableGitStoragePtbDisabled=A sincronização do Git está desactivada para compilações de teste públicas para evitar a utilização com repositórios git de lançamento regulares e para desencorajar a utilização de uma compilação PTB como o teu condutor diário.
|
||||||
|
copyId=ID de cópia
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=Заметки
|
||||||
addNotes=Добавляй заметки
|
addNotes=Добавляй заметки
|
||||||
order=Заказать ...
|
order=Заказать ...
|
||||||
stickToTop=Держись на высоте
|
stickToTop=Держись на высоте
|
||||||
|
stickToBottom=Держать на дне
|
||||||
orderAheadOf=Заказать заранее ...
|
orderAheadOf=Заказать заранее ...
|
||||||
httpServer=HTTP-сервер
|
httpServer=HTTP-сервер
|
||||||
httpServerConfiguration=Конфигурация HTTP-сервера
|
httpServerConfiguration=Конфигурация HTTP-сервера
|
||||||
httpServerPort=Порт
|
|
||||||
httpServerPortDescription=Порт, на котором будет прослушиваться HTTP-сервер.\n\nОбрати внимание, что если ты изменишь этот параметр, то все остальные приложения, которые взаимодействуют с сервером, тоже должны быть настроены на использование нового порта.\n\nТребуется перезагрузка для применения.
|
|
||||||
apiKey=Ключ API
|
apiKey=Ключ API
|
||||||
apiKeyDescription=API-ключ для аутентификации API-запросов демона XPipe. Подробнее о том, как проходить аутентификацию, читай в общей документации по API.\n\nТребуется перезагрузка для применения.
|
apiKeyDescription=API-ключ для аутентификации API-запросов демона XPipe. Подробнее о том, как проходить аутентификацию, читай в общей документации по API.\n\nТребуется перезагрузка для применения.
|
||||||
disableApiAuthentication=Отключить аутентификацию API
|
disableApiAuthentication=Отключить аутентификацию API
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=поддерживается только професси
|
||||||
areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений
|
areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений
|
||||||
enabled=Включено
|
enabled=Включено
|
||||||
enableGitStoragePtbDisabled=Git-синхронизация отключена для публичных тестовых сборок, чтобы предотвратить их использование с обычными релизными git-репозиториями и не допустить использования PTB-сборки в качестве ежедневного драйвера.
|
enableGitStoragePtbDisabled=Git-синхронизация отключена для публичных тестовых сборок, чтобы предотвратить их использование с обычными релизными git-репозиториями и не допустить использования PTB-сборки в качестве ежедневного драйвера.
|
||||||
|
copyId=Идентификатор копии
|
||||||
|
|
|
@ -442,11 +442,10 @@ notes=Notlar
|
||||||
addNotes=Notlar ekleyin
|
addNotes=Notlar ekleyin
|
||||||
order=Sipariş ...
|
order=Sipariş ...
|
||||||
stickToTop=Zirvede kal
|
stickToTop=Zirvede kal
|
||||||
|
stickToBottom=Altta kal
|
||||||
orderAheadOf=Önceden sipariş verin ...
|
orderAheadOf=Önceden sipariş verin ...
|
||||||
httpServer=HTTP sunucusu
|
httpServer=HTTP sunucusu
|
||||||
httpServerConfiguration=HTTP sunucu yapılandırması
|
httpServerConfiguration=HTTP sunucu yapılandırması
|
||||||
httpServerPort=Liman
|
|
||||||
httpServerPortDescription=HTTP sunucusunun dinleyeceği bağlantı noktası.\n\nBunu değiştirirseniz, sunucuyla etkileşime giren diğer uygulamaların da yeni bağlantı noktasını kullanacak şekilde yapılandırılması gerektiğini unutmayın.\n\nUygulamak için yeniden başlatma gerekir.
|
|
||||||
apiKey=API anahtarı
|
apiKey=API anahtarı
|
||||||
apiKeyDescription=XPipe daemon API isteklerinin kimliğini doğrulamak için API anahtarı. Kimlik doğrulamanın nasıl yapılacağı hakkında daha fazla bilgi için genel API belgelerine bakın.\n\nUygulamak için yeniden başlatma gerekir.
|
apiKeyDescription=XPipe daemon API isteklerinin kimliğini doğrulamak için API anahtarı. Kimlik doğrulamanın nasıl yapılacağı hakkında daha fazla bilgi için genel API belgelerine bakın.\n\nUygulamak için yeniden başlatma gerekir.
|
||||||
disableApiAuthentication=API kimlik doğrulamasını devre dışı bırakma
|
disableApiAuthentication=API kimlik doğrulamasını devre dışı bırakma
|
||||||
|
@ -461,3 +460,4 @@ isOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip
|
||||||
areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir
|
areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir
|
||||||
enabled=Etkin
|
enabled=Etkin
|
||||||
enableGitStoragePtbDisabled=Git senkronizasyonu, normal sürüm git depoları ile kullanımı önlemek ve günlük sürücünüz olarak bir PTB derlemesini kullanmaktan vazgeçirmek için genel test derlemeleri için devre dışı bırakılmıştır.
|
enableGitStoragePtbDisabled=Git senkronizasyonu, normal sürüm git depoları ile kullanımı önlemek ve günlük sürücünüz olarak bir PTB derlemesini kullanmaktan vazgeçirmek için genel test derlemeleri için devre dışı bırakılmıştır.
|
||||||
|
copyId=Kopya Kimliği
|
||||||
|
|
|
@ -441,11 +441,10 @@ notes=说明
|
||||||
addNotes=添加注释
|
addNotes=添加注释
|
||||||
order=订购 ...
|
order=订购 ...
|
||||||
stickToTop=保持在顶部
|
stickToTop=保持在顶部
|
||||||
|
stickToBottom=保持在底部
|
||||||
orderAheadOf=提前订购...
|
orderAheadOf=提前订购...
|
||||||
httpServer=HTTP 服务器
|
httpServer=HTTP 服务器
|
||||||
httpServerConfiguration=HTTP 服务器配置
|
httpServerConfiguration=HTTP 服务器配置
|
||||||
httpServerPort=端口
|
|
||||||
httpServerPortDescription=HTTP 服务器监听的端口。\n\n请注意,如果更改端口,则与服务器交互的任何其他应用程序也需要配置为使用新端口。\n\n需要重新启动才能应用。
|
|
||||||
apiKey=应用程序接口密钥
|
apiKey=应用程序接口密钥
|
||||||
apiKeyDescription=用于验证 XPipe 守护进程 API 请求的 API 密钥。有关如何验证的更多信息,请参阅一般 API 文档。\n\n需要重新启动才能应用。
|
apiKeyDescription=用于验证 XPipe 守护进程 API 请求的 API 密钥。有关如何验证的更多信息,请参阅一般 API 文档。\n\n需要重新启动才能应用。
|
||||||
disableApiAuthentication=禁用 API 身份验证
|
disableApiAuthentication=禁用 API 身份验证
|
||||||
|
@ -460,3 +459,4 @@ isOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
|
||||||
areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
|
areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
|
||||||
enabled=已启用
|
enabled=已启用
|
||||||
enableGitStoragePtbDisabled=公共测试版已禁用 Git 同步功能,以防止与常规发布版本的 git 仓库一起使用,并避免将公共测试版作为日常驱动程序使用。
|
enableGitStoragePtbDisabled=公共测试版已禁用 Git 同步功能,以防止与常规发布版本的 git 仓库一起使用,并避免将公共测试版作为日常驱动程序使用。
|
||||||
|
copyId=复制 ID
|
||||||
|
|
|
@ -152,8 +152,8 @@ serviceRemotePortDescription=Den port, som tjenesten kører på
|
||||||
serviceHost=Servicevært
|
serviceHost=Servicevært
|
||||||
serviceHostDescription=Den vært, som tjenesten kører på
|
serviceHostDescription=Den vært, som tjenesten kører på
|
||||||
openWebsite=Åben hjemmeside
|
openWebsite=Åben hjemmeside
|
||||||
serviceGroup.displayName=Service-gruppe
|
customServiceGroup.displayName=Service-gruppe
|
||||||
serviceGroup.displayDescription=Gruppér flere tjenester i én kategori
|
customServiceGroup.displayDescription=Gruppér flere tjenester i én kategori
|
||||||
initScript=Kører på shell init
|
initScript=Kører på shell init
|
||||||
shellScript=Gør script tilgængeligt under shell-session
|
shellScript=Gør script tilgængeligt under shell-session
|
||||||
fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren
|
fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren
|
||||||
|
@ -163,3 +163,5 @@ fixedServiceGroup.displayName=Service-gruppe
|
||||||
fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system
|
fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system
|
||||||
mappedService.displayName=Service
|
mappedService.displayName=Service
|
||||||
mappedService.displayDescription=Interagere med en tjeneste, der er eksponeret af en container
|
mappedService.displayDescription=Interagere med en tjeneste, der er eksponeret af en container
|
||||||
|
customService.displayName=Service
|
||||||
|
customService.displayDescription=Tilføj en brugerdefineret tjeneste til tunnel og åben
|
||||||
|
|
|
@ -143,8 +143,8 @@ serviceRemotePortDescription=Der Port, auf dem der Dienst läuft
|
||||||
serviceHost=Diensthost
|
serviceHost=Diensthost
|
||||||
serviceHostDescription=Der Host, auf dem der Dienst läuft
|
serviceHostDescription=Der Host, auf dem der Dienst läuft
|
||||||
openWebsite=Website öffnen
|
openWebsite=Website öffnen
|
||||||
serviceGroup.displayName=Dienstgruppe
|
customServiceGroup.displayName=Dienstgruppe
|
||||||
serviceGroup.displayDescription=Mehrere Dienste in einer Kategorie zusammenfassen
|
customServiceGroup.displayDescription=Mehrere Dienste in einer Kategorie zusammenfassen
|
||||||
initScript=Auf der Shell init ausführen
|
initScript=Auf der Shell init ausführen
|
||||||
shellScript=Skript während der Shell-Sitzung verfügbar machen
|
shellScript=Skript während der Shell-Sitzung verfügbar machen
|
||||||
fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen
|
fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen
|
||||||
|
@ -154,3 +154,5 @@ fixedServiceGroup.displayName=Dienstgruppe
|
||||||
fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System
|
fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System
|
||||||
mappedService.displayName=Dienst
|
mappedService.displayName=Dienst
|
||||||
mappedService.displayDescription=Interaktion mit einem Dienst, der von einem Container angeboten wird
|
mappedService.displayDescription=Interaktion mit einem Dienst, der von einem Container angeboten wird
|
||||||
|
customService.displayName=Dienst
|
||||||
|
customService.displayDescription=Einen benutzerdefinierten Dienst zum Tunnel hinzufügen und öffnen
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=El puerto en el que se ejecuta el servicio
|
||||||
serviceHost=Host de servicio
|
serviceHost=Host de servicio
|
||||||
serviceHostDescription=El host en el que se ejecuta el servicio
|
serviceHostDescription=El host en el que se ejecuta el servicio
|
||||||
openWebsite=Abrir sitio web
|
openWebsite=Abrir sitio web
|
||||||
serviceGroup.displayName=Grupo de servicios
|
customServiceGroup.displayName=Grupo de servicios
|
||||||
serviceGroup.displayDescription=Agrupa varios servicios en una categoría
|
customServiceGroup.displayDescription=Agrupa varios servicios en una categoría
|
||||||
initScript=Ejecutar en shell init
|
initScript=Ejecutar en shell init
|
||||||
shellScript=Hacer que el script esté disponible durante la sesión shell
|
shellScript=Hacer que el script esté disponible durante la sesión shell
|
||||||
fileScript=Permitir llamar a un script con argumentos de archivo en el explorador de archivos
|
fileScript=Permitir llamar a un script con argumentos de archivo en el explorador de archivos
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Grupo de servicios
|
||||||
fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema
|
fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema
|
||||||
mappedService.displayName=Servicio
|
mappedService.displayName=Servicio
|
||||||
mappedService.displayDescription=Interactúa con un servicio expuesto por un contenedor
|
mappedService.displayDescription=Interactúa con un servicio expuesto por un contenedor
|
||||||
|
customService.displayName=Servicio
|
||||||
|
customService.displayDescription=Añade un servicio personalizado para tunelizar y abrir
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=Le port sur lequel le service fonctionne
|
||||||
serviceHost=Hôte du service
|
serviceHost=Hôte du service
|
||||||
serviceHostDescription=L'hôte sur lequel le service est exécuté
|
serviceHostDescription=L'hôte sur lequel le service est exécuté
|
||||||
openWebsite=Ouvrir un site web
|
openWebsite=Ouvrir un site web
|
||||||
serviceGroup.displayName=Groupe de service
|
customServiceGroup.displayName=Groupe de service
|
||||||
serviceGroup.displayDescription=Regrouper plusieurs services dans une même catégorie
|
customServiceGroup.displayDescription=Regrouper plusieurs services dans une même catégorie
|
||||||
initScript=Exécute sur le shell init
|
initScript=Exécute sur le shell init
|
||||||
shellScript=Rendre le script disponible pendant la session shell
|
shellScript=Rendre le script disponible pendant la session shell
|
||||||
fileScript=Permet d'appeler un script avec des arguments de fichier dans le navigateur de fichiers
|
fileScript=Permet d'appeler un script avec des arguments de fichier dans le navigateur de fichiers
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Groupe de service
|
||||||
fixedServiceGroup.displayDescription=Liste les services disponibles sur un système
|
fixedServiceGroup.displayDescription=Liste les services disponibles sur un système
|
||||||
mappedService.displayName=Service
|
mappedService.displayName=Service
|
||||||
mappedService.displayDescription=Interagir avec un service exposé par un conteneur
|
mappedService.displayDescription=Interagir avec un service exposé par un conteneur
|
||||||
|
customService.displayName=Service
|
||||||
|
customService.displayDescription=Ajouter un service personnalisé au tunnel et à l'ouverture
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=La porta su cui è in esecuzione il servizio
|
||||||
serviceHost=Servizio host
|
serviceHost=Servizio host
|
||||||
serviceHostDescription=L'host su cui è in esecuzione il servizio
|
serviceHostDescription=L'host su cui è in esecuzione il servizio
|
||||||
openWebsite=Sito web aperto
|
openWebsite=Sito web aperto
|
||||||
serviceGroup.displayName=Gruppo di servizio
|
customServiceGroup.displayName=Gruppo di servizio
|
||||||
serviceGroup.displayDescription=Raggruppa più servizi in un'unica categoria
|
customServiceGroup.displayDescription=Raggruppa più servizi in un'unica categoria
|
||||||
initScript=Eseguire su shell init
|
initScript=Eseguire su shell init
|
||||||
shellScript=Rendere disponibile lo script durante la sessione di shell
|
shellScript=Rendere disponibile lo script durante la sessione di shell
|
||||||
fileScript=Consente di richiamare uno script con argomenti di file nel browser di file
|
fileScript=Consente di richiamare uno script con argomenti di file nel browser di file
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Gruppo di servizio
|
||||||
fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema
|
fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema
|
||||||
mappedService.displayName=Servizio
|
mappedService.displayName=Servizio
|
||||||
mappedService.displayDescription=Interagire con un servizio esposto da un contenitore
|
mappedService.displayDescription=Interagire con un servizio esposto da un contenitore
|
||||||
|
customService.displayName=Servizio
|
||||||
|
customService.displayDescription=Aggiungi un servizio personalizzato per il tunnel e l'apertura
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=サービスが実行されているポート
|
||||||
serviceHost=サービスホスト
|
serviceHost=サービスホスト
|
||||||
serviceHostDescription=サービスが稼働しているホスト
|
serviceHostDescription=サービスが稼働しているホスト
|
||||||
openWebsite=オープンウェブサイト
|
openWebsite=オープンウェブサイト
|
||||||
serviceGroup.displayName=サービスグループ
|
customServiceGroup.displayName=サービスグループ
|
||||||
serviceGroup.displayDescription=複数のサービスを1つのカテゴリーにまとめる
|
customServiceGroup.displayDescription=複数のサービスを1つのカテゴリーにまとめる
|
||||||
initScript=シェル init で実行する
|
initScript=シェル init で実行する
|
||||||
shellScript=シェルセッション中にスクリプトを利用可能にする
|
shellScript=シェルセッション中にスクリプトを利用可能にする
|
||||||
fileScript=ファイルブラウザでファイル引数を指定してスクリプトを呼び出せるようにする
|
fileScript=ファイルブラウザでファイル引数を指定してスクリプトを呼び出せるようにする
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=サービスグループ
|
||||||
fixedServiceGroup.displayDescription=システムで利用可能なサービスをリストアップする
|
fixedServiceGroup.displayDescription=システムで利用可能なサービスをリストアップする
|
||||||
mappedService.displayName=サービス
|
mappedService.displayName=サービス
|
||||||
mappedService.displayDescription=コンテナによって公開されたサービスとやりとりする
|
mappedService.displayDescription=コンテナによって公開されたサービスとやりとりする
|
||||||
|
customService.displayName=サービス
|
||||||
|
customService.displayDescription=トンネルとオープンにカスタムサービスを追加する
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=De poort waarop de service draait
|
||||||
serviceHost=Service host
|
serviceHost=Service host
|
||||||
serviceHostDescription=De host waarop de service draait
|
serviceHostDescription=De host waarop de service draait
|
||||||
openWebsite=Open website
|
openWebsite=Open website
|
||||||
serviceGroup.displayName=Servicegroep
|
customServiceGroup.displayName=Servicegroep
|
||||||
serviceGroup.displayDescription=Groepeer meerdere diensten in één categorie
|
customServiceGroup.displayDescription=Groepeer meerdere diensten in één categorie
|
||||||
initScript=Uitvoeren op shell init
|
initScript=Uitvoeren op shell init
|
||||||
shellScript=Script beschikbaar maken tijdens shellsessie
|
shellScript=Script beschikbaar maken tijdens shellsessie
|
||||||
fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser
|
fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Servicegroep
|
||||||
fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem
|
fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem
|
||||||
mappedService.displayName=Service
|
mappedService.displayName=Service
|
||||||
mappedService.displayDescription=Interactie met een service die wordt aangeboden door een container
|
mappedService.displayDescription=Interactie met een service die wordt aangeboden door een container
|
||||||
|
customService.displayName=Service
|
||||||
|
customService.displayDescription=Een aangepaste service toevoegen aan tunnel en openen
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=A porta em que o serviço está a ser executado
|
||||||
serviceHost=Anfitrião de serviço
|
serviceHost=Anfitrião de serviço
|
||||||
serviceHostDescription=O anfitrião em que o serviço está a ser executado
|
serviceHostDescription=O anfitrião em que o serviço está a ser executado
|
||||||
openWebsite=Abre o sítio Web
|
openWebsite=Abre o sítio Web
|
||||||
serviceGroup.displayName=Grupo de serviços
|
customServiceGroup.displayName=Grupo de serviços
|
||||||
serviceGroup.displayDescription=Agrupa vários serviços numa categoria
|
customServiceGroup.displayDescription=Agrupa vários serviços numa categoria
|
||||||
initScript=Corre no shell init
|
initScript=Corre no shell init
|
||||||
shellScript=Torna o script disponível durante a sessão da shell
|
shellScript=Torna o script disponível durante a sessão da shell
|
||||||
fileScript=Permite que o script seja chamado com argumentos de ficheiro no navegador de ficheiros
|
fileScript=Permite que o script seja chamado com argumentos de ficheiro no navegador de ficheiros
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Grupo de serviços
|
||||||
fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema
|
fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema
|
||||||
mappedService.displayName=Serviço
|
mappedService.displayName=Serviço
|
||||||
mappedService.displayDescription=Interage com um serviço exposto por um contentor
|
mappedService.displayDescription=Interage com um serviço exposto por um contentor
|
||||||
|
customService.displayName=Serviço
|
||||||
|
customService.displayDescription=Adiciona um serviço personalizado ao túnel e abre
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=Порт, на котором работает сл
|
||||||
serviceHost=Сервисный хост
|
serviceHost=Сервисный хост
|
||||||
serviceHostDescription=Хост, на котором запущена служба
|
serviceHostDescription=Хост, на котором запущена служба
|
||||||
openWebsite=Открытый сайт
|
openWebsite=Открытый сайт
|
||||||
serviceGroup.displayName=Группа услуг
|
customServiceGroup.displayName=Группа услуг
|
||||||
serviceGroup.displayDescription=Сгруппируйте несколько сервисов в одну категорию
|
customServiceGroup.displayDescription=Сгруппируйте несколько сервисов в одну категорию
|
||||||
initScript=Запуск на shell init
|
initScript=Запуск на shell init
|
||||||
shellScript=Сделать скрипт доступным во время сеанса оболочки
|
shellScript=Сделать скрипт доступным во время сеанса оболочки
|
||||||
fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов
|
fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Группа услуг
|
||||||
fixedServiceGroup.displayDescription=Список доступных сервисов в системе
|
fixedServiceGroup.displayDescription=Список доступных сервисов в системе
|
||||||
mappedService.displayName=Сервис
|
mappedService.displayName=Сервис
|
||||||
mappedService.displayDescription=Взаимодействие с сервисом, открываемым контейнером
|
mappedService.displayDescription=Взаимодействие с сервисом, открываемым контейнером
|
||||||
|
customService.displayName=Сервис
|
||||||
|
customService.displayDescription=Добавьте пользовательский сервис для туннелирования и открытия
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=Hizmetin üzerinde çalıştığı bağlantı nokta
|
||||||
serviceHost=Hizmet sunucusu
|
serviceHost=Hizmet sunucusu
|
||||||
serviceHostDescription=Hizmetin üzerinde çalıştığı ana bilgisayar
|
serviceHostDescription=Hizmetin üzerinde çalıştığı ana bilgisayar
|
||||||
openWebsite=Açık web sitesi
|
openWebsite=Açık web sitesi
|
||||||
serviceGroup.displayName=Hizmet grubu
|
customServiceGroup.displayName=Hizmet grubu
|
||||||
serviceGroup.displayDescription=Birden fazla hizmeti tek bir kategoride gruplayın
|
customServiceGroup.displayDescription=Birden fazla hizmeti tek bir kategoride gruplayın
|
||||||
initScript=Kabuk başlangıcında çalıştır
|
initScript=Kabuk başlangıcında çalıştır
|
||||||
shellScript=Kabuk oturumu sırasında komut dosyasını kullanılabilir hale getirme
|
shellScript=Kabuk oturumu sırasında komut dosyasını kullanılabilir hale getirme
|
||||||
fileScript=Kodun dosya tarayıcısında dosya bağımsız değişkenleriyle çağrılmasına izin ver
|
fileScript=Kodun dosya tarayıcısında dosya bağımsız değişkenleriyle çağrılmasına izin ver
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=Hizmet grubu
|
||||||
fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme
|
fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme
|
||||||
mappedService.displayName=Hizmet
|
mappedService.displayName=Hizmet
|
||||||
mappedService.displayDescription=Bir konteyner tarafından sunulan bir hizmetle etkileşim
|
mappedService.displayDescription=Bir konteyner tarafından sunulan bir hizmetle etkileşim
|
||||||
|
customService.displayName=Hizmet
|
||||||
|
customService.displayDescription=Tünele özel bir hizmet ekleyin ve açın
|
||||||
|
|
|
@ -141,8 +141,8 @@ serviceRemotePortDescription=服务运行的端口
|
||||||
serviceHost=服务主机
|
serviceHost=服务主机
|
||||||
serviceHostDescription=服务运行的主机
|
serviceHostDescription=服务运行的主机
|
||||||
openWebsite=打开网站
|
openWebsite=打开网站
|
||||||
serviceGroup.displayName=服务组
|
customServiceGroup.displayName=服务组
|
||||||
serviceGroup.displayDescription=将多项服务归为一类
|
customServiceGroup.displayDescription=将多项服务归为一类
|
||||||
initScript=在 shell init 上运行
|
initScript=在 shell init 上运行
|
||||||
shellScript=在 shell 会话中提供脚本
|
shellScript=在 shell 会话中提供脚本
|
||||||
fileScript=允许在文件浏览器中使用文件参数调用脚本
|
fileScript=允许在文件浏览器中使用文件参数调用脚本
|
||||||
|
@ -152,3 +152,5 @@ fixedServiceGroup.displayName=服务组
|
||||||
fixedServiceGroup.displayDescription=列出系统中可用的服务
|
fixedServiceGroup.displayDescription=列出系统中可用的服务
|
||||||
mappedService.displayName=服务
|
mappedService.displayName=服务
|
||||||
mappedService.displayDescription=与容器暴露的服务交互
|
mappedService.displayDescription=与容器暴露的服务交互
|
||||||
|
customService.displayName=服务
|
||||||
|
customService.displayDescription=为隧道和开放添加自定义服务
|
||||||
|
|
46
openapi.yaml
46
openapi.yaml
|
@ -264,6 +264,40 @@ paths:
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
$ref: '#/components/responses/InternalServerError'
|
$ref: '#/components/responses/InternalServerError'
|
||||||
|
/fs/read:
|
||||||
|
post:
|
||||||
|
summary: Read the content of a remote file
|
||||||
|
description: |
|
||||||
|
Reads the entire content of a remote file through an active shell session.
|
||||||
|
operationId: fsRead
|
||||||
|
requestBody:
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/FsReadRequest'
|
||||||
|
examples:
|
||||||
|
simple:
|
||||||
|
summary: Read file
|
||||||
|
value: { "connection": "f0ec68aa-63f5-405c-b178-9a4454556d6b", "path": "/home/user/myfile.txt" }
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: The operation was successful. The file was read.
|
||||||
|
content:
|
||||||
|
application/octet-stream:
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
format: binary
|
||||||
|
'400':
|
||||||
|
$ref: '#/components/responses/BadRequest'
|
||||||
|
'401':
|
||||||
|
$ref: '#/components/responses/Unauthorized'
|
||||||
|
'403':
|
||||||
|
$ref: '#/components/responses/Forbidden'
|
||||||
|
'404':
|
||||||
|
$ref: '#/components/responses/NotFound'
|
||||||
|
'500':
|
||||||
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/fs/write:
|
/fs/write:
|
||||||
post:
|
post:
|
||||||
summary: Write a blob to a remote file
|
summary: Write a blob to a remote file
|
||||||
|
@ -402,6 +436,18 @@ components:
|
||||||
- connection
|
- connection
|
||||||
- blob
|
- blob
|
||||||
- path
|
- path
|
||||||
|
FsReadRequest:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
connection:
|
||||||
|
type: string
|
||||||
|
description: The connection uuid
|
||||||
|
path:
|
||||||
|
type: string
|
||||||
|
description: The target file path
|
||||||
|
required:
|
||||||
|
- connection
|
||||||
|
- path
|
||||||
FsScriptRequest:
|
FsScriptRequest:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
2
version
2
version
|
@ -1 +1 @@
|
||||||
10.0-10
|
10.0-11
|
||||||
|
|
Loading…
Reference in a new issue