mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
Add ability to easily add files to git vault data
This commit is contained in:
parent
e76a5f2e94
commit
1b7181a744
2 changed files with 61 additions and 19 deletions
|
@ -4,9 +4,17 @@ import atlantafx.base.theme.Styles;
|
||||||
import io.xpipe.app.browser.StandaloneFileBrowser;
|
import io.xpipe.app.browser.StandaloneFileBrowser;
|
||||||
import io.xpipe.app.comp.base.ButtonComp;
|
import io.xpipe.app.comp.base.ButtonComp;
|
||||||
import io.xpipe.app.fxcomps.SimpleComp;
|
import io.xpipe.app.fxcomps.SimpleComp;
|
||||||
|
import io.xpipe.app.fxcomps.util.BindingsHelper;
|
||||||
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
import io.xpipe.app.fxcomps.util.SimpleChangeListener;
|
||||||
|
import io.xpipe.app.issue.ErrorEvent;
|
||||||
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
|
import io.xpipe.app.storage.ContextualFileReference;
|
||||||
|
import io.xpipe.app.storage.DataStorage;
|
||||||
import io.xpipe.app.storage.DataStoreEntryRef;
|
import io.xpipe.app.storage.DataStoreEntryRef;
|
||||||
|
import io.xpipe.core.store.FileNames;
|
||||||
import io.xpipe.core.store.FileSystemStore;
|
import io.xpipe.core.store.FileSystemStore;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
|
@ -15,6 +23,9 @@ import javafx.scene.layout.Priority;
|
||||||
import javafx.scene.layout.Region;
|
import javafx.scene.layout.Region;
|
||||||
import org.kordamp.ikonli.javafx.FontIcon;
|
import org.kordamp.ikonli.javafx.FontIcon;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ContextualFileReferenceChoiceComp extends SimpleComp {
|
public class ContextualFileReferenceChoiceComp extends SimpleComp {
|
||||||
|
@ -22,7 +33,9 @@ public class ContextualFileReferenceChoiceComp extends SimpleComp {
|
||||||
private final Property<DataStoreEntryRef<? extends FileSystemStore>> fileSystem;
|
private final Property<DataStoreEntryRef<? extends FileSystemStore>> fileSystem;
|
||||||
private final Property<String> filePath;
|
private final Property<String> filePath;
|
||||||
|
|
||||||
public <T extends FileSystemStore> ContextualFileReferenceChoiceComp(ObservableValue<DataStoreEntryRef<T>> fileSystem, Property<String> filePath) {
|
public <T extends FileSystemStore> ContextualFileReferenceChoiceComp(
|
||||||
|
ObservableValue<DataStoreEntryRef<T>> fileSystem, Property<String> filePath
|
||||||
|
) {
|
||||||
this.fileSystem = new SimpleObjectProperty<>();
|
this.fileSystem = new SimpleObjectProperty<>();
|
||||||
SimpleChangeListener.apply(fileSystem, val -> {
|
SimpleChangeListener.apply(fileSystem, val -> {
|
||||||
this.fileSystem.setValue(val);
|
this.fileSystem.setValue(val);
|
||||||
|
@ -32,31 +45,59 @@ public class ContextualFileReferenceChoiceComp extends SimpleComp {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Region createSimple() {
|
protected Region createSimple() {
|
||||||
var fileNameComp = new TextFieldComp(filePath)
|
var fileNameComp = new TextFieldComp(filePath).apply(struc -> HBox.setHgrow(struc.get(), Priority.ALWAYS)).styleClass(Styles.LEFT_PILL).grow(
|
||||||
.apply(struc -> HBox.setHgrow(struc.get(), Priority.ALWAYS))
|
false, true);
|
||||||
.styleClass(Styles.LEFT_PILL)
|
|
||||||
.grow(false, true);
|
|
||||||
|
|
||||||
var fileBrowseButton = new ButtonComp(null, new FontIcon("mdi2f-folder-open-outline"), () -> {
|
var fileBrowseButton = new ButtonComp(null, new FontIcon("mdi2f-folder-open-outline"), () -> {
|
||||||
StandaloneFileBrowser.openSingleFile(() -> fileSystem.getValue(), fileStore -> {
|
StandaloneFileBrowser.openSingleFile(() -> fileSystem.getValue(), fileStore -> {
|
||||||
if (fileStore == null) {
|
if (fileStore == null) {
|
||||||
filePath.setValue(null);
|
filePath.setValue(null);
|
||||||
fileSystem.setValue(null);
|
fileSystem.setValue(null);
|
||||||
} else {
|
} else {
|
||||||
filePath.setValue(fileStore.getPath());
|
filePath.setValue(fileStore.getPath());
|
||||||
fileSystem.setValue(fileStore.getFileSystem());
|
fileSystem.setValue(fileStore.getFileSystem());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
}).styleClass(Styles.CENTER_PILL).grow(false, true);
|
||||||
.styleClass(Styles.RIGHT_PILL)
|
|
||||||
.grow(false, true);
|
|
||||||
|
|
||||||
var layout = new HorizontalComp(List.of(fileNameComp, fileBrowseButton))
|
|
||||||
|
var canGitShare = BindingsHelper.persist(Bindings.createBooleanBinding(() -> {
|
||||||
|
if (!AppPrefs.get().enableGitStorage().get() || filePath.getValue() == null || ContextualFileReference.of(filePath.getValue())
|
||||||
|
.isInDataDirectory()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}, filePath, AppPrefs.get().enableGitStorage()));
|
||||||
|
var gitShareButton = new ButtonComp(null, new FontIcon("mdi2g-git"), () -> {
|
||||||
|
if (filePath.getValue() == null || filePath.getValue().isBlank() ||
|
||||||
|
!canGitShare.get()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var data = DataStorage.get().getDataDir();
|
||||||
|
var f = data.resolve(FileNames.getFileName(filePath.getValue()));
|
||||||
|
var source = Path.of(filePath.getValue());
|
||||||
|
if (Files.exists(source)) {
|
||||||
|
Files.copy(source, f, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
filePath.setValue(f.toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
ErrorEvent.fromThrowable(e).handle();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gitShareButton.apply(new FancyTooltipAugment<>("gitShareFileTooltip"));
|
||||||
|
gitShareButton.styleClass(Styles.RIGHT_PILL).grow(false, true);
|
||||||
|
|
||||||
|
var layout = new HorizontalComp(List.of(fileNameComp, fileBrowseButton, gitShareButton))
|
||||||
.apply(struc -> struc.get().setFillHeight(true));
|
.apply(struc -> struc.get().setFillHeight(true));
|
||||||
|
|
||||||
layout.apply(struc -> {
|
layout.apply(struc -> {
|
||||||
struc.get().focusedProperty().addListener((observable, oldValue, newValue) -> {
|
struc.get().focusedProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
struc.get().getChildren().get(1).requestFocus();
|
struc.get().getChildren().getFirst().requestFocus();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ appearance=Appearance
|
||||||
integrations=Integrations
|
integrations=Integrations
|
||||||
uiOptions=UI Options
|
uiOptions=UI Options
|
||||||
theme=Theme
|
theme=Theme
|
||||||
|
gitShareFileTooltip=Add file to the git vault data directory so that it is automatically synced.\n\nThis action can only be used when the git vault is enabled in the settings.
|
||||||
performanceMode=Performance mode
|
performanceMode=Performance mode
|
||||||
performanceModeDescription=Disables all visual effects that are not required to improve the application performance.
|
performanceModeDescription=Disables all visual effects that are not required to improve the application performance.
|
||||||
editorProgram=Default Program
|
editorProgram=Default Program
|
||||||
|
|
Loading…
Reference in a new issue