This commit is contained in:
crschnick 2024-06-13 16:21:24 +00:00
parent 7b26984773
commit 4a2bc6a458
41 changed files with 276 additions and 50 deletions

View file

@ -239,9 +239,7 @@ public abstract class StoreEntryComp extends SimpleComp {
var button = var button =
new IconButtonComp(cs.getIcon(wrapper.getEntry().ref()), leaf != null ? () -> { new IconButtonComp(cs.getIcon(wrapper.getEntry().ref()), leaf != null ? () -> {
ThreadHelper.runFailableAsync(() -> { ThreadHelper.runFailableAsync(() -> {
var action = leaf.createAction( wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy());
wrapper.getEntry().ref());
action.execute();
}); });
} : null); } : null);
if (branch != null) { if (branch != null) {
@ -314,26 +312,6 @@ public abstract class StoreEntryComp extends SimpleComp {
contextMenu.getItems().add(browse); contextMenu.getItems().add(browse);
} }
if (wrapper.getEntry().getValidity().isUsable()) {
var color = new Menu(AppI18n.get("color"), new FontIcon("mdi2f-format-color-fill"));
var none = new MenuItem("None");
none.setOnAction(event -> {
wrapper.getEntry().setColor(null);
event.consume();
});
color.getItems().add(none);
Arrays.stream(DataStoreColor.values()).forEach(dataStoreColor -> {
MenuItem m = new MenuItem(DataStoreFormatter.capitalize(dataStoreColor.getId()));
m.setOnAction(event -> {
wrapper.getEntry().setColor(dataStoreColor);
event.consume();
});
color.getItems().add(m);
});
contextMenu.getItems().add(color);
}
if (DataStorage.get().isRootEntry(wrapper.getEntry())) { if (DataStorage.get().isRootEntry(wrapper.getEntry())) {
var color = new Menu(AppI18n.get("color"), new FontIcon("mdi2f-format-color-fill")); var color = new Menu(AppI18n.get("color"), new FontIcon("mdi2f-format-color-fill"));
var none = new MenuItem("None"); var none = new MenuItem("None");
@ -473,9 +451,7 @@ public abstract class StoreEntryComp extends SimpleComp {
run.textProperty().bind(AppI18n.observable("base.execute")); run.textProperty().bind(AppI18n.observable("base.execute"));
run.setOnAction(event -> { run.setOnAction(event -> {
ThreadHelper.runFailableAsync(() -> { ThreadHelper.runFailableAsync(() -> {
p.getLeafDataStoreCallSite() wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy());
.createAction(wrapper.getEntry().ref())
.execute();
}); });
}); });
menu.getItems().add(run); menu.getItems().add(run);
@ -521,15 +497,13 @@ public abstract class StoreEntryComp extends SimpleComp {
event.consume(); event.consume();
ThreadHelper.runFailableAsync(() -> { ThreadHelper.runFailableAsync(() -> {
var action = leaf.createAction(wrapper.getEntry().ref()); wrapper.runAction(leaf.createAction(wrapper.getEntry().ref()), leaf.showBusy());
action.execute();
}); });
}); });
return item; return item;
} }
private static String DEFAULT_NOTES = null; private static String DEFAULT_NOTES = null;
private static String getDefaultNotes() { private static String getDefaultNotes() {

View file

@ -130,7 +130,7 @@ public class StoreEntryWrapper {
color.setValue(entry.getColor()); color.setValue(entry.getColor());
notes.setValue(new StoreNotes(entry.getNotes(), entry.getNotes())); notes.setValue(new StoreNotes(entry.getNotes(), entry.getNotes()));
busy.setValue(entry.isInRefresh()); busy.setValue(entry.getBusyCounter().get() != 0);
deletable.setValue(entry.getConfiguration().isDeletable() deletable.setValue(entry.getConfiguration().isDeletable()
|| AppPrefs.get().developerDisableGuiRestrictions().getValue()); || AppPrefs.get().developerDisableGuiRestrictions().getValue());
@ -222,12 +222,26 @@ public class StoreEntryWrapper {
var found = getDefaultActionProvider().getValue(); var found = getDefaultActionProvider().getValue();
entry.notifyUpdate(true, false); entry.notifyUpdate(true, false);
if (found != null) { if (found != null) {
found.getDefaultDataStoreCallSite().createAction(entry.ref()).execute(); var act = found.getDefaultDataStoreCallSite().createAction(entry.ref());
runAction(act,found.getDefaultDataStoreCallSite().showBusy());
} else { } else {
entry.setExpanded(!entry.isExpanded()); entry.setExpanded(!entry.isExpanded());
} }
} }
public void runAction(ActionProvider.Action action, boolean showBusy) throws Exception {
try {
if (showBusy) {
getEntry().incrementBusyCounter();
}
action.execute();
} finally {
if (showBusy) {
getEntry().decrementBusyCounter();
}
}
}
public void toggleExpanded() { public void toggleExpanded() {
this.expanded.set(!expanded.getValue()); this.expanded.set(!expanded.getValue());
} }

View file

@ -88,6 +88,10 @@ public interface ActionProvider {
default boolean isApplicable(DataStoreEntryRef<T> o) { default boolean isApplicable(DataStoreEntryRef<T> o) {
return true; return true;
} }
default boolean showBusy() {
return true;
}
} }
interface DataStoreCallSite<T extends DataStore> { interface DataStoreCallSite<T extends DataStore> {
@ -109,6 +113,10 @@ public interface ActionProvider {
String getIcon(DataStoreEntryRef<T> store); String getIcon(DataStoreEntryRef<T> store);
Class<T> getApplicableClass(); Class<T> getApplicableClass();
default boolean showBusy() {
return true;
}
} }
interface BranchDataStoreCallSite<T extends DataStore> extends DataStoreCallSite<T> { interface BranchDataStoreCallSite<T extends DataStore> extends DataStoreCallSite<T> {

View file

@ -1,12 +1,14 @@
package io.xpipe.app.storage; package io.xpipe.app.storage;
import io.xpipe.app.comp.store.StoreSortMode; import io.xpipe.app.comp.store.StoreSortMode;
import io.xpipe.app.ext.DataStorageExtensionProvider;
import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.ErrorEvent;
import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.AppPrefs;
import io.xpipe.app.util.FixedHierarchyStore; import io.xpipe.app.util.FixedHierarchyStore;
import io.xpipe.app.util.ThreadHelper; import io.xpipe.app.util.ThreadHelper;
import io.xpipe.core.store.*; import io.xpipe.core.store.DataStore;
import io.xpipe.core.store.FixedChildStore;
import io.xpipe.core.store.LocalStore;
import io.xpipe.core.store.StorePath;
import io.xpipe.core.util.UuidHelper; import io.xpipe.core.util.UuidHelper;
import javafx.util.Pair; import javafx.util.Pair;
import lombok.Getter; import lombok.Getter;
@ -338,15 +340,15 @@ public abstract class DataStorage {
return false; return false;
} }
e.setInRefresh(true); e.incrementBusyCounter();
List<? extends DataStoreEntryRef<? extends FixedChildStore>> newChildren; List<? extends DataStoreEntryRef<? extends FixedChildStore>> newChildren;
try { try {
newChildren = ((FixedHierarchyStore) (e.getStore())).listChildren(e); newChildren = ((FixedHierarchyStore) (e.getStore())).listChildren(e);
e.setInRefresh(false);
} catch (Exception ex) { } catch (Exception ex) {
e.setInRefresh(false);
ErrorEvent.fromThrowable(ex).handle(); ErrorEvent.fromThrowable(ex).handle();
return false; return false;
} finally {
e.decrementBusyCounter();
} }

View file

@ -21,6 +21,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.Instant; import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -46,8 +47,7 @@ public class DataStoreEntry extends StorageElement {
@NonFinal @NonFinal
boolean expanded; boolean expanded;
@NonFinal AtomicInteger busyCounter = new AtomicInteger();
boolean inRefresh;
@Getter @Getter
@NonFinal @NonFinal
@ -323,14 +323,21 @@ public class DataStoreEntry extends StorageElement {
return getName(); return getName();
} }
public void setInRefresh(boolean newRefresh) { public void incrementBusyCounter() {
var changed = inRefresh != newRefresh; var r = busyCounter.incrementAndGet() == 1;
if (changed) { if (r) {
this.inRefresh = newRefresh;
notifyUpdate(false, false); notifyUpdate(false, false);
} }
} }
public boolean decrementBusyCounter() {
var r = busyCounter.decrementAndGet() == 0;
if (r) {
notifyUpdate(false, false);
}
return r;
}
public <T extends DataStore> DataStoreEntryRef<T> ref() { public <T extends DataStore> DataStoreEntryRef<T> ref() {
return new DataStoreEntryRef<>(this); return new DataStoreEntryRef<>(this);
} }
@ -503,7 +510,7 @@ public class DataStoreEntry extends StorageElement {
try { try {
store.checkComplete(); store.checkComplete();
setInRefresh(true); incrementBusyCounter();
if (store instanceof ValidatableStore l) { if (store instanceof ValidatableStore l) {
l.validate(); l.validate();
} else if (store instanceof FixedHierarchyStore h) { } else if (store instanceof FixedHierarchyStore h) {
@ -512,7 +519,7 @@ public class DataStoreEntry extends StorageElement {
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
} finally { } finally {
setInRefresh(false); decrementBusyCounter();
} }
} }
@ -547,14 +554,13 @@ public class DataStoreEntry extends StorageElement {
public void initializeEntry() { public void initializeEntry() {
if (store instanceof ExpandedLifecycleStore lifecycleStore) { if (store instanceof ExpandedLifecycleStore lifecycleStore) {
try { try {
inRefresh = true; incrementBusyCounter();
notifyUpdate(false, false); notifyUpdate(false, false);
lifecycleStore.initializeValidate(); lifecycleStore.initializeValidate();
inRefresh = false;
} catch (Exception e) { } catch (Exception e) {
inRefresh = false;
ErrorEvent.fromThrowable(e).handle(); ErrorEvent.fromThrowable(e).handle();
} finally { } finally {
decrementBusyCounter();
notifyUpdate(false, false); notifyUpdate(false, false);
} }
} }
@ -564,12 +570,13 @@ public class DataStoreEntry extends StorageElement {
public void finalizeEntry() { public void finalizeEntry() {
if (store instanceof ExpandedLifecycleStore lifecycleStore) { if (store instanceof ExpandedLifecycleStore lifecycleStore) {
try { try {
inRefresh = true; incrementBusyCounter();
notifyUpdate(false, false); notifyUpdate(false, false);
lifecycleStore.finalizeValidate(); lifecycleStore.finalizeValidate();
} catch (Exception e) { } catch (Exception e) {
ErrorEvent.fromThrowable(e).handle(); ErrorEvent.fromThrowable(e).handle();
} finally { } finally {
decrementBusyCounter();
notifyUpdate(false, false); notifyUpdate(false, false);
} }
} }

View file

@ -473,3 +473,8 @@ api=API
storeIntroImportDescription=Bruger du allerede XPipe på et andet system? Synkroniser dine eksisterende forbindelser på tværs af flere systemer via et eksternt git-repository. Du kan også synkronisere senere når som helst, hvis det ikke er sat op endnu. storeIntroImportDescription=Bruger du allerede XPipe på et andet system? Synkroniser dine eksisterende forbindelser på tværs af flere systemer via et eksternt git-repository. Du kan også synkronisere senere når som helst, hvis det ikke er sat op endnu.
importConnections=Synkroniser forbindelser importConnections=Synkroniser forbindelser
importConnectionsTitle=Importer forbindelser importConnectionsTitle=Importer forbindelser
showAllChildren=Vis alle børn
httpApi=HTTP API
isOnlySupportedLimit=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

View file

@ -467,3 +467,8 @@ api=API
storeIntroImportDescription=Benutzt du XPipe bereits auf einem anderen System? Synchronisiere deine bestehenden Verbindungen über mehrere Systeme hinweg über ein Remote-Git-Repository. Du kannst auch später jederzeit synchronisieren, wenn es noch nicht eingerichtet ist. storeIntroImportDescription=Benutzt du XPipe bereits auf einem anderen System? Synchronisiere deine bestehenden Verbindungen über mehrere Systeme hinweg über ein Remote-Git-Repository. Du kannst auch später jederzeit synchronisieren, wenn es noch nicht eingerichtet ist.
importConnections=Synchronisierte Verbindungen importConnections=Synchronisierte Verbindungen
importConnectionsTitle=Verbindungen importieren importConnectionsTitle=Verbindungen importieren
showAllChildren=Alle Kinder anzeigen
httpApi=HTTP-API
isOnlySupportedLimit=wird 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

View file

@ -475,5 +475,6 @@ importConnections=Sync connections
importConnectionsTitle=Import Connections importConnectionsTitle=Import Connections
showAllChildren=Show all children showAllChildren=Show all children
httpApi=HTTP API httpApi=HTTP API
isOnlySupportedLimit=is only supported with a professional license when having more than $COUNT$ active connections isOnlySupportedLimit=is only supported with a professional license when having more than $COUNT$ connections
areOnlySupportedLimit=are only supported with a professional license when having more than $COUNT$ active connections areOnlySupportedLimit=are only supported with a professional license when having more than $COUNT$ connections
enabled=Enabled

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=¿Ya utilizas XPipe en otro sistema? Sincroniza tus conexiones existentes en varios sistemas a través de un repositorio git remoto. También puedes sincronizar más tarde en cualquier momento si aún no está configurado. storeIntroImportDescription=¿Ya utilizas XPipe en otro sistema? Sincroniza tus conexiones existentes en varios sistemas a través de un repositorio git remoto. También puedes sincronizar más tarde en cualquier momento si aún no está configurado.
importConnections=Sincronizar conexiones importConnections=Sincronizar conexiones
importConnectionsTitle=Importar conexiones importConnectionsTitle=Importar conexiones
showAllChildren=Mostrar todos los niños
httpApi=API HTTP
isOnlySupportedLimit=sólo es compatible con una licencia profesional cuando tiene más de $COUNT$ conexiones
areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones
enabled=Activado

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=Tu utilises déjà XPipe sur un autre système ? Synchronise tes connexions existantes sur plusieurs systèmes grâce à un dépôt git distant. Tu peux aussi synchroniser plus tard à tout moment si ce n'est pas encore configuré. storeIntroImportDescription=Tu utilises déjà XPipe sur un autre système ? Synchronise tes connexions existantes sur plusieurs systèmes grâce à un dépôt git distant. Tu peux aussi synchroniser plus tard à tout moment si ce n'est pas encore configuré.
importConnections=Synchronisation des connexions importConnections=Synchronisation des connexions
importConnectionsTitle=Importer des connexions importConnectionsTitle=Importer des connexions
showAllChildren=Afficher tous les enfants
httpApi=API HTTP
isOnlySupportedLimit=n'est 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é

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=Stai già usando XPipe su un altro sistema? Sincronizza le connessioni esistenti su più sistemi attraverso un repository git remoto. Puoi anche sincronizzare in seguito, in qualsiasi momento, se non è ancora stato configurato. storeIntroImportDescription=Stai già usando XPipe su un altro sistema? Sincronizza le connessioni esistenti su più sistemi attraverso un repository git remoto. Puoi anche sincronizzare in seguito, in qualsiasi momento, se non è ancora stato configurato.
importConnections=Connessioni di sincronizzazione importConnections=Connessioni di sincronizzazione
importConnectionsTitle=Importazione di connessioni importConnectionsTitle=Importazione di connessioni
showAllChildren=Mostra tutti i bambini
httpApi=API HTTP
isOnlySupportedLimit=è supportato 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

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=すでに他のシステムでXPipeを使っているリモートgitリポジトリを通して、複数のシステム間で既存の接続を同期する。まだ設定されていない場合は、後からいつでも同期することもできる。 storeIntroImportDescription=すでに他のシステムでXPipeを使っているリモートgitリポジトリを通して、複数のシステム間で既存の接続を同期する。まだ設定されていない場合は、後からいつでも同期することもできる。
importConnections=シンク接続 importConnections=シンク接続
importConnectionsTitle=コネクションのインポート importConnectionsTitle=コネクションのインポート
showAllChildren=すべての子供を表示する
httpApi=HTTP API
isOnlySupportedLimit=は、$COUNT$ を超える接続がある場合、プロフェッショナルライセンスでのみサポートされる。
areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。
enabled=有効にする

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=Gebruik je XPipe al op een ander systeem? Synchroniseer je bestaande verbindingen over meerdere systemen via een remote git repository. Je kunt ook later synchroniseren op elk gewenst moment als het nog niet is ingesteld. storeIntroImportDescription=Gebruik je XPipe al op een ander systeem? Synchroniseer je bestaande verbindingen over meerdere systemen via een remote git repository. Je kunt ook later synchroniseren op elk gewenst moment als het nog niet is ingesteld.
importConnections=Synchronisatieverbindingen importConnections=Synchronisatieverbindingen
importConnectionsTitle=Verbindingen importeren importConnectionsTitle=Verbindingen importeren
showAllChildren=Toon alle kinderen
httpApi=HTTP API
isOnlySupportedLimit=wordt 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

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=Já estás a utilizar o XPipe noutro sistema? Sincroniza as tuas ligações existentes em vários sistemas através de um repositório git remoto. Também podes sincronizar mais tarde, a qualquer momento, se ainda não estiver configurado. storeIntroImportDescription=Já estás a utilizar o XPipe noutro sistema? Sincroniza as tuas ligações existentes em vários sistemas através de um repositório git remoto. Também podes sincronizar mais tarde, a qualquer momento, se ainda não estiver configurado.
importConnections=Sincroniza ligações importConnections=Sincroniza ligações
importConnectionsTitle=Importar ligações importConnectionsTitle=Importar ligações
showAllChildren=Mostra todas as crianças
httpApi=API HTTP
isOnlySupportedLimit=só é suportado com uma licença profissional se tiver 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

View file

@ -454,3 +454,8 @@ api=API
storeIntroImportDescription=Уже используешь XPipe на другой системе? Синхронизируй существующие соединения на нескольких системах через удаленный git-репозиторий. Ты также можешь синхронизировать позже в любой момент, если он еще не настроен. storeIntroImportDescription=Уже используешь XPipe на другой системе? Синхронизируй существующие соединения на нескольких системах через удаленный git-репозиторий. Ты также можешь синхронизировать позже в любой момент, если он еще не настроен.
importConnections=Синхронизация соединений importConnections=Синхронизация соединений
importConnectionsTitle=Импортные соединения importConnectionsTitle=Импортные соединения
showAllChildren=Показать всех детей
httpApi=HTTP API
isOnlySupportedLimit=поддерживается только профессиональной лицензией при наличии более $COUNT$ соединений
areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений
enabled=Включено

View file

@ -455,3 +455,8 @@ api=API
storeIntroImportDescription=XPipe'ı zaten başka bir sistemde mi kullanıyorsunuz? Mevcut bağlantılarınızı uzak bir git deposu aracılığıyla birden fazla sistem arasında senkronize edin. Henüz kurulmamışsa daha sonra istediğiniz zaman senkronize edebilirsiniz. storeIntroImportDescription=XPipe'ı zaten başka bir sistemde mi kullanıyorsunuz? Mevcut bağlantılarınızı uzak bir git deposu aracılığıyla birden fazla sistem arasında senkronize edin. Henüz kurulmamışsa daha sonra istediğiniz zaman senkronize edebilirsiniz.
importConnections=Senkronizasyon bağlantıları importConnections=Senkronizasyon bağlantıları
importConnectionsTitle=Bağlantıları İçe Aktar importConnectionsTitle=Bağlantıları İçe Aktar
showAllChildren=Tüm çocukları göster
httpApi=HTTP API
isOnlySupportedLimit=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

View file

@ -454,3 +454,8 @@ api=应用程序接口
storeIntroImportDescription=已经在其他系统上使用 XPipe通过远程 git 仓库在多个系统间同步您的现有连接。如果尚未设置,您也可以稍后随时同步。 storeIntroImportDescription=已经在其他系统上使用 XPipe通过远程 git 仓库在多个系统间同步您的现有连接。如果尚未设置,您也可以稍后随时同步。
importConnections=同步连接 importConnections=同步连接
importConnectionsTitle=导入连接 importConnectionsTitle=导入连接
showAllChildren=显示所有儿童
httpApi=HTTP API
isOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
enabled=已启用

View file

@ -158,3 +158,8 @@ 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
runScript=Kør script ... runScript=Kør script ...
copyUrl=Kopier URL
fixedServiceGroup.displayName=Service-gruppe
fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system
mappedService.displayName=Service
mappedService.displayDescription=Interagere med en tjeneste, der er eksponeret af en container

View file

@ -149,3 +149,8 @@ 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
runScript=Skript ausführen ... runScript=Skript ausführen ...
copyUrl=URL kopieren
fixedServiceGroup.displayName=Dienstgruppe
fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System
mappedService.displayName=Dienst
mappedService.displayDescription=Interaktion mit einem Dienst, der von einem Container angeboten wird

View file

@ -147,5 +147,10 @@ initScript=Run on shell init
shellScript=Make script available during shell session shellScript=Make script available during shell session
fileScript=Allow script to be called with file arguments in the file browser fileScript=Allow script to be called with file arguments in the file browser
runScript=Run script with runScript=Run script with
copyUrl=Copy URL
fixedServiceGroup.displayName=Service group
fixedServiceGroup.displayDescription=List the available services on a system
mappedService.displayName=Service
mappedService.displayDescription=Interact with a service exposed by a container

View file

@ -147,3 +147,8 @@ 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
runScript=Ejecutar script ... runScript=Ejecutar script ...
copyUrl=Copiar URL
fixedServiceGroup.displayName=Grupo de servicios
fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema
mappedService.displayName=Servicio
mappedService.displayDescription=Interactúa con un servicio expuesto por un contenedor

View file

@ -147,3 +147,8 @@ 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
runScript=Exécute le script ... runScript=Exécute le script ...
copyUrl=Copier l'URL
fixedServiceGroup.displayName=Groupe de service
fixedServiceGroup.displayDescription=Liste les services disponibles sur un système
mappedService.displayName=Service
mappedService.displayDescription=Interagir avec un service exposé par un conteneur

View file

@ -147,3 +147,8 @@ 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
runScript=Esegui script ... runScript=Esegui script ...
copyUrl=Copia URL
fixedServiceGroup.displayName=Gruppo di servizio
fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema
mappedService.displayName=Servizio
mappedService.displayDescription=Interagire con un servizio esposto da un contenitore

View file

@ -147,3 +147,8 @@ initScript=シェル init で実行する
shellScript=シェルセッション中にスクリプトを利用可能にする shellScript=シェルセッション中にスクリプトを利用可能にする
fileScript=ファイルブラウザでファイル引数を指定してスクリプトを呼び出せるようにする fileScript=ファイルブラウザでファイル引数を指定してスクリプトを呼び出せるようにする
runScript=スクリプトを実行する runScript=スクリプトを実行する
copyUrl=URLをコピーする
fixedServiceGroup.displayName=サービスグループ
fixedServiceGroup.displayDescription=システムで利用可能なサービスをリストアップする
mappedService.displayName=サービス
mappedService.displayDescription=コンテナによって公開されたサービスとやりとりする

View file

@ -147,3 +147,8 @@ 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
runScript=Script uitvoeren ... runScript=Script uitvoeren ...
copyUrl=URL kopiëren
fixedServiceGroup.displayName=Servicegroep
fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem
mappedService.displayName=Service
mappedService.displayDescription=Interactie met een service die wordt aangeboden door een container

View file

@ -147,3 +147,8 @@ 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
runScript=Executa o script ... runScript=Executa o script ...
copyUrl=Copia o URL
fixedServiceGroup.displayName=Grupo de serviços
fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema
mappedService.displayName=Serviço
mappedService.displayDescription=Interage com um serviço exposto por um contentor

View file

@ -147,3 +147,8 @@ initScript=Запуск на shell init
shellScript=Сделать скрипт доступным во время сеанса оболочки shellScript=Сделать скрипт доступным во время сеанса оболочки
fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов
runScript=Запустите скрипт ... runScript=Запустите скрипт ...
copyUrl=Копировать URL
fixedServiceGroup.displayName=Группа услуг
fixedServiceGroup.displayDescription=Список доступных сервисов в системе
mappedService.displayName=Сервис
mappedService.displayDescription=Взаимодействие с сервисом, открываемым контейнером

View file

@ -147,3 +147,8 @@ 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
runScript=Komut dosyasını çalıştır ... runScript=Komut dosyasını çalıştır ...
copyUrl=URL'yi kopyala
fixedServiceGroup.displayName=Hizmet grubu
fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme
mappedService.displayName=Hizmet
mappedService.displayDescription=Bir konteyner tarafından sunulan bir hizmetle etkileşim

View file

@ -147,3 +147,8 @@ initScript=在 shell init 上运行
shellScript=在 shell 会话中提供脚本 shellScript=在 shell 会话中提供脚本
fileScript=允许在文件浏览器中使用文件参数调用脚本 fileScript=允许在文件浏览器中使用文件参数调用脚本
runScript=运行脚本 ... runScript=运行脚本 ...
copyUrl=复制 URL
fixedServiceGroup.displayName=服务组
fixedServiceGroup.displayDescription=列出系统中可用的服务
mappedService.displayName=服务
mappedService.displayDescription=与容器暴露的服务交互

View file

@ -348,3 +348,12 @@ rdpUsernameDescription=Til brugeren for at logge ind som
addressDescription=Hvor skal man oprette forbindelse til addressDescription=Hvor skal man oprette forbindelse til
rdpAdditionalOptions=Yderligere RDP-muligheder rdpAdditionalOptions=Yderligere RDP-muligheder
rdpAdditionalOptionsDescription=Rå RDP-muligheder, der skal inkluderes, formateret på samme måde som i .rdp-filer rdpAdditionalOptionsDescription=Rå RDP-muligheder, der skal inkluderes, formateret på samme måde som i .rdp-filer
proxmoxVncConfirmTitle=VNC-opsætning
proxmoxVncConfirmHeader=Vil du aktivere VNC for den virtuelle maskine?
proxmoxVncConfirmContent=Dette opsætter en tilgængelig VNC-server og genstarter den virtuelle maskine. Du skal så vente, indtil maskinen er startet op igen, før du opretter forbindelse.
dockerContext.displayName=Docker-kontekst
dockerContext.displayDescription=Interagerer med containere i en bestemt kontekst
containerActions=Container-handlinger
vmActions=VM-handlinger
dockerContextActions=Kontekst-handlinger
k8sPodActions=Pod-handlinger

View file

@ -326,3 +326,12 @@ rdpUsernameDescription=An Benutzer, der sich anmelden soll als
addressDescription=Wohin soll die Verbindung gehen? addressDescription=Wohin soll die Verbindung gehen?
rdpAdditionalOptions=Zusätzliche RDP-Optionen rdpAdditionalOptions=Zusätzliche RDP-Optionen
rdpAdditionalOptionsDescription=Rohe RDP-Optionen, die genauso formatiert sind wie in .rdp-Dateien rdpAdditionalOptionsDescription=Rohe RDP-Optionen, die genauso formatiert sind wie in .rdp-Dateien
proxmoxVncConfirmTitle=VNC-Einrichtung
proxmoxVncConfirmHeader=Willst du VNC für die virtuelle Maschine aktivieren?
proxmoxVncConfirmContent=Dadurch wird ein zugänglicher VNC-Server eingerichtet und die virtuelle Maschine neu gestartet. Du solltest dann warten, bis die Maschine wieder hochgefahren ist, bevor du eine Verbindung herstellst.
dockerContext.displayName=Docker-Kontext
dockerContext.displayDescription=Interaktion mit Containern, die sich in einem bestimmten Kontext befinden
containerActions=Container-Aktionen
vmActions=VM-Aktionen
dockerContextActions=Kontextbezogene Aktionen
k8sPodActions=Pod-Aktionen

View file

@ -327,3 +327,9 @@ rdpAdditionalOptionsDescription=Raw RDP options to include, formatted the same a
proxmoxVncConfirmTitle=VNC setup proxmoxVncConfirmTitle=VNC setup
proxmoxVncConfirmHeader=Do you want to enable VNC for the virtual machine? proxmoxVncConfirmHeader=Do you want to enable VNC for the virtual machine?
proxmoxVncConfirmContent=This will set up an accessible VNC server and restart the virtual machine. You should then wait until the machine has started up again before connecting. proxmoxVncConfirmContent=This will set up an accessible VNC server and restart the virtual machine. You should then wait until the machine has started up again before connecting.
dockerContext.displayName=Docker context
dockerContext.displayDescription=Interact with containers located in a specific context
containerActions=Container actions
vmActions=VM actions
dockerContextActions=Context actions
k8sPodActions=Pod actions

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=Para que el usuario inicie sesión como
addressDescription=Dónde conectarse addressDescription=Dónde conectarse
rdpAdditionalOptions=Opciones RDP adicionales rdpAdditionalOptions=Opciones RDP adicionales
rdpAdditionalOptionsDescription=Opciones RDP en bruto a incluir, con el mismo formato que en los archivos .rdp rdpAdditionalOptionsDescription=Opciones RDP en bruto a incluir, con el mismo formato que en los archivos .rdp
proxmoxVncConfirmTitle=Configuración VNC
proxmoxVncConfirmHeader=¿Quieres activar VNC para la máquina virtual?
proxmoxVncConfirmContent=Esto configurará un servidor VNC accesible y reiniciará la máquina virtual. Deberás esperar a que la máquina se haya reiniciado antes de conectarte.
dockerContext.displayName=Contexto Docker
dockerContext.displayDescription=Interactúa con contenedores situados en un contexto específico
containerActions=Acciones del contenedor
vmActions=Acciones VM
dockerContextActions=Acciones contextuales
k8sPodActions=Acciones del pod

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=A l'utilisateur de se connecter en tant que
addressDescription=Où se connecter addressDescription=Où se connecter
rdpAdditionalOptions=Options RDP supplémentaires rdpAdditionalOptions=Options RDP supplémentaires
rdpAdditionalOptionsDescription=Options RDP brutes à inclure, formatées de la même manière que dans les fichiers .rdp rdpAdditionalOptionsDescription=Options RDP brutes à inclure, formatées de la même manière que dans les fichiers .rdp
proxmoxVncConfirmTitle=Configuration de VNC
proxmoxVncConfirmHeader=Veux-tu activer VNC pour la machine virtuelle ?
proxmoxVncConfirmContent=Cela permet de mettre en place un serveur VNC accessible et de redémarrer la machine virtuelle. Tu dois alors attendre que la machine ait redémarré avant de te connecter.
dockerContext.displayName=Contexte Docker
dockerContext.displayDescription=Interagir avec des conteneurs situés dans un contexte spécifique
containerActions=Actions du conteneur
vmActions=Actions VM
dockerContextActions=Actions contextuelles
k8sPodActions=Actions de pods

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=All'utente di accedere come
addressDescription=Dove connettersi addressDescription=Dove connettersi
rdpAdditionalOptions=Opzioni RDP aggiuntive rdpAdditionalOptions=Opzioni RDP aggiuntive
rdpAdditionalOptionsDescription=Opzioni RDP grezze da includere, formattate come nei file .rdp rdpAdditionalOptionsDescription=Opzioni RDP grezze da includere, formattate come nei file .rdp
proxmoxVncConfirmTitle=Configurazione di VNC
proxmoxVncConfirmHeader=Vuoi abilitare VNC per la macchina virtuale?
proxmoxVncConfirmContent=In questo modo verrà configurato un server VNC accessibile e verrà riavviata la macchina virtuale. Dovrai quindi attendere che la macchina si sia riavviata prima di connetterti.
dockerContext.displayName=Contesto Docker
dockerContext.displayDescription=Interagire con contenitori situati in un contesto specifico
containerActions=Azioni del contenitore
vmActions=Azioni della VM
dockerContextActions=Azioni contestuali
k8sPodActions=Azioni del pod

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=としてログインする
addressDescription=接続先 addressDescription=接続先
rdpAdditionalOptions=RDPの追加オプション rdpAdditionalOptions=RDPの追加オプション
rdpAdditionalOptionsDescription=.rdpファイルと同じ書式で、RDPの生オプションを含める。 rdpAdditionalOptionsDescription=.rdpファイルと同じ書式で、RDPの生オプションを含める。
proxmoxVncConfirmTitle=VNCのセットアップ
proxmoxVncConfirmHeader=仮想マシンのVNCを有効にするか
proxmoxVncConfirmContent=これでアクセス可能なVNCサーバーがセットアップされ、仮想マシンが再起動する。その後、マシンが再び起動するまで待ってから接続する。
dockerContext.displayName=Dockerコンテキスト
dockerContext.displayDescription=特定のコンテキストにあるコンテナと対話する
containerActions=コンテナアクション
vmActions=VMアクション
dockerContextActions=コンテキストアクション
k8sPodActions=ポッドアクション

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=Naar gebruiker om in te loggen als
addressDescription=Waar je verbinding mee moet maken addressDescription=Waar je verbinding mee moet maken
rdpAdditionalOptions=Extra RDP opties rdpAdditionalOptions=Extra RDP opties
rdpAdditionalOptionsDescription=Rauwe RDP-opties om op te nemen, in dezelfde opmaak als in .rdp-bestanden rdpAdditionalOptionsDescription=Rauwe RDP-opties om op te nemen, in dezelfde opmaak als in .rdp-bestanden
proxmoxVncConfirmTitle=VNC-instelling
proxmoxVncConfirmHeader=Wil je VNC inschakelen voor de virtuele machine?
proxmoxVncConfirmContent=Hiermee wordt een toegankelijke VNC-server opgezet en wordt de virtuele machine opnieuw opgestart. Je moet dan wachten tot de machine weer is opgestart voordat je verbinding maakt.
dockerContext.displayName=Docker context
dockerContext.displayDescription=Interactie met containers in een specifieke context
containerActions=Container acties
vmActions=VM-acties
dockerContextActions=Context acties
k8sPodActions=Pod acties

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=Para que o utilizador inicie sessão como
addressDescription=Onde te deves ligar addressDescription=Onde te deves ligar
rdpAdditionalOptions=Opções adicionais de RDP rdpAdditionalOptions=Opções adicionais de RDP
rdpAdditionalOptionsDescription=Opções RDP brutas a incluir, formatadas da mesma forma que nos ficheiros .rdp rdpAdditionalOptionsDescription=Opções RDP brutas a incluir, formatadas da mesma forma que nos ficheiros .rdp
proxmoxVncConfirmTitle=Configuração do VNC
proxmoxVncConfirmHeader=Pretendes ativar o VNC para a máquina virtual?
proxmoxVncConfirmContent=Isto irá configurar um servidor VNC acessível e reiniciar a máquina virtual. Deves esperar até que a máquina seja reiniciada antes de te ligares.
dockerContext.displayName=Contexto do Docker
dockerContext.displayDescription=Interage com contentores localizados num contexto específico
containerActions=Acções de contentor
vmActions=Acções VM
dockerContextActions=Acções de contexto
k8sPodActions=Acções de pod

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=Чтобы пользователь вошел в сис
addressDescription=К чему подключиться addressDescription=К чему подключиться
rdpAdditionalOptions=Дополнительные опции RDP rdpAdditionalOptions=Дополнительные опции RDP
rdpAdditionalOptionsDescription=Необработанные опции RDP, которые нужно включить, в том же формате, что и в файлах .rdp rdpAdditionalOptionsDescription=Необработанные опции RDP, которые нужно включить, в том же формате, что и в файлах .rdp
proxmoxVncConfirmTitle=Настройка VNC
proxmoxVncConfirmHeader=Хочешь ли ты включить VNC для виртуальной машины?
proxmoxVncConfirmContent=Это настроит доступный VNC-сервер и перезапустит виртуальную машину. Затем тебе следует подождать, пока машина снова запустится, прежде чем подключаться.
dockerContext.displayName=Контекст Docker
dockerContext.displayDescription=Взаимодействуй с контейнерами, расположенными в определенном контексте
containerActions=Действия с контейнером
vmActions=Действия виртуальной машины
dockerContextActions=Контекстные действия
k8sPodActions=Действия в капсуле

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=Kullanıcı olarak oturum açmak için
addressDescription=Nereye bağlanmalı addressDescription=Nereye bağlanmalı
rdpAdditionalOptions=Ek RDP seçenekleri rdpAdditionalOptions=Ek RDP seçenekleri
rdpAdditionalOptionsDescription=Dahil edilecek ham RDP seçenekleri, .rdp dosyalarında olduğu gibi biçimlendirilir rdpAdditionalOptionsDescription=Dahil edilecek ham RDP seçenekleri, .rdp dosyalarında olduğu gibi biçimlendirilir
proxmoxVncConfirmTitle=VNC kurulumu
proxmoxVncConfirmHeader=Sanal makine için VNC'yi etkinleştirmek istiyor musunuz?
proxmoxVncConfirmContent=Bu, erişilebilir bir VNC sunucusu kuracak ve sanal makineyi yeniden başlatacaktır. Daha sonra bağlanmadan önce makinenin tekrar başlamasını beklemelisiniz.
dockerContext.displayName=Docker bağlamı
dockerContext.displayDescription=Belirli bir bağlamda bulunan konteynerlerle etkileşim
containerActions=Konteyner eylemleri
vmActions=VM eylemleri
dockerContextActions=Bağlam eylemleri
k8sPodActions=Pod eylemleri

View file

@ -322,3 +322,12 @@ rdpUsernameDescription=用户以
addressDescription=连接到哪里 addressDescription=连接到哪里
rdpAdditionalOptions=其他 RDP 选项 rdpAdditionalOptions=其他 RDP 选项
rdpAdditionalOptionsDescription=要包含的原始 RDP 选项,格式与 .rdp 文件相同 rdpAdditionalOptionsDescription=要包含的原始 RDP 选项,格式与 .rdp 文件相同
proxmoxVncConfirmTitle=VNC 设置
proxmoxVncConfirmHeader=您要为虚拟机启用 VNC 吗?
proxmoxVncConfirmContent=这将设置一个可访问的 VNC 服务器,并重新启动虚拟机。然后,您应等待虚拟机再次启动后再进行连接。
dockerContext.displayName=Docker 上下文
dockerContext.displayDescription=与位于特定环境中的容器交互
containerActions=容器操作
vmActions=虚拟机操作
dockerContextActions=上下文操作
k8sPodActions=Pod 操作