New release

This commit is contained in:
crschnick 2023-01-29 09:49:58 +00:00
parent 06405de396
commit 4b6d0d5f28
22 changed files with 76 additions and 37 deletions

11
LICENSE.md Normal file
View file

@ -0,0 +1,11 @@
The following modules are licensed under the MIT license:
- api
- beacon
- core
- extension
Everything else is licensed under GPL3.
As a special exception to GPL3 license, Christopher Schnick (the
author of X-Pipe) is granted permanent and irrevocable
permission to use this code for any purpose, and to modify,
distribute and sublicense it under any terms of his/her choosing.

View file

@ -160,3 +160,12 @@ You are also able to properly debug the built production application through two
Note that when any unit test is run using a debugger, the X-Pipe daemon process that is started will also attempt
to connect to that debugger through [AttachMe](https://plugins.jetbrains.com/plugin/13263-attachme) as well.
### Development FAQ
##### Why are there no GitHub actions workflows or other continuous integration pipelines set up for this repository?
There are several test workflows run in a private environment as they use private test connections
such as remote server connections and database connections.
Other private workflows are responsible for packaging, signing, and distributing the releases.
So you can assume that the code is tested!

View file

@ -47,8 +47,8 @@ dependencies {
implementation group: 'org.kordamp.ikonli', name: 'ikonli-materialdesign2-pack', version: "12.2.0"
implementation group: 'org.kordamp.ikonli', name: 'ikonli-javafx', version: "12.2.0"
implementation group: 'org.kordamp.ikonli', name: 'ikonli-material-pack', version: "12.2.0"
implementation name: 'preferencesfx-core-lazy-11.11.0'
implementation name: 'formsfx-core-lazy-11.5.0'
implementation group: 'com.dlsc.preferencesfx', name: 'preferencesfx-core', version: '11.15.0'
implementation group: 'com.dlsc.formsfx', name: 'formsfx-core', version: '11.6.0'
implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.0'
implementation 'io.xpipe:modulefs:0.1.4'
implementation 'com.jfoenix:jfoenix:9.0.10'

View file

@ -4,7 +4,7 @@ import io.xpipe.app.comp.about.AboutTabComp;
import io.xpipe.app.comp.base.SideMenuBarComp;
import io.xpipe.app.comp.storage.collection.SourceCollectionLayoutComp;
import io.xpipe.app.comp.storage.store.StoreLayoutComp;
import io.xpipe.app.core.AppActionDetector;
import io.xpipe.app.core.AppActionLinkDetector;
import io.xpipe.app.core.AppCache;
import io.xpipe.app.core.AppFont;
import io.xpipe.app.core.AppProperties;
@ -36,7 +36,7 @@ public class AppLayoutComp extends Comp<CompStructure<BorderPane>> {
selected = new SimpleObjectProperty<>(entries.get(0));
shortcut(new KeyCodeCombination(KeyCode.V, KeyCombination.SHORTCUT_DOWN), structure -> {
AppActionDetector.detectOnPaste();
AppActionLinkDetector.detectOnPaste();
});
}

View file

@ -66,7 +66,7 @@ public class App extends Application {
var content = new AppLayoutComp();
content.apply(struc -> {
struc.get().addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
AppActionDetector.detectOnFocus();
AppActionLinkDetector.detectOnFocus();
});
});
var title = String.format("X-Pipe Desktop (%s)", AppProperties.get().getVersion());

View file

@ -8,7 +8,7 @@ import javafx.scene.input.DataFormat;
import java.util.List;
public class AppActionDetector {
public class AppActionLinkDetector {
private static String lastDetectedAction;
@ -34,6 +34,10 @@ public class AppActionDetector {
LauncherInput.handle(List.of(content));
}
public static void setLastDetectedAction(String s) {
lastDetectedAction = s;
}
public static void detectOnFocus() {
var content = getClipboardAction();
if (content == null) {

View file

@ -83,7 +83,8 @@ public class ErrorHandlerComp extends SimpleComp {
if (desc == null) {
desc = I18n.get("errorNoDetail");
}
var top = JfxHelper.createNamedEntry(I18n.get(headerId), desc, graphic);
var limitedDescription = desc.substring(0, Math.min(1000, desc.length()));
var top = JfxHelper.createNamedEntry(I18n.get(headerId), limitedDescription, graphic);
var content = new VBox(top, new Separator(Orientation.HORIZONTAL));
if (event.isReportable()) {

View file

@ -112,8 +112,6 @@ public class AppPrefs {
private final BooleanField automaticallyUpdateField = BooleanField.ofBooleanType(automaticallyUpdate)
.editable(AppDistributionType.get().supportsUpdate())
.render(() -> new ToggleControl());
private final BooleanProperty sendAnonymousErrorReports = typed(new SimpleBooleanProperty(true), Boolean.class);
private final BooleanProperty sendUsageStatistics = typed(new SimpleBooleanProperty(true), Boolean.class);
private final BooleanProperty updateToPrereleases = typed(new SimpleBooleanProperty(true), Boolean.class);
private final BooleanProperty confirmDeletions = typed(new SimpleBooleanProperty(true), Boolean.class);
@ -282,14 +280,6 @@ public class AppPrefs {
// Developer mode
// ==============
public ReadOnlyBooleanProperty sendAnonymousErrorReports() {
return sendAnonymousErrorReports;
}
public ReadOnlyBooleanProperty sendUsageStatistics() {
return sendUsageStatistics;
}
public ReadOnlyBooleanProperty updateToPrereleases() {
return updateToPrereleases;
}
@ -386,8 +376,6 @@ public class AppPrefs {
externalStartupBehaviour),
Setting.of("closeBehaviour", closeBehaviourControl, closeBehaviour),
Setting.of("automaticallyUpdate", automaticallyUpdateField, automaticallyUpdate),
Setting.of("sendAnonymousErrorReports", sendAnonymousErrorReports),
Setting.of("sendUsageStatistics", sendUsageStatistics),
Setting.of("storageDirectory", storageDirectoryControl, internalStorageDirectory),
Setting.of("logLevel", logLevelField, internalLogLevel))),
Category.of(

View file

@ -21,7 +21,7 @@ public class ProxyManagerProviderImpl extends ProxyManagerProvider {
alert.setAlertType(Alert.AlertType.CONFIRMATION);
alert.setTitle(I18n.get("connectorInstallationTitle"));
alert.setHeaderText(I18n.get("connectorInstallationHeader"));
alert.setContentText(I18n.get("connectorInstallationContent"));
alert.getDialogPane().setContent(AppWindowHelper.alertContentText(I18n.get("connectorInstallationContent")));
})
.filter(buttonType -> buttonType.getButtonData().isDefaultButton())
.isPresent();

View file

@ -1,6 +1,6 @@
connectorInstallationTitle=X-Pipe Connector
connectorInstallationHeader=Would you like to install the X-Pipe connector on that host?
connectorInstallationContent=Some operations require the X-Pipe connector to be installed on the host.\nNote that this operation may take some time.
connectorInstallationContent=Some operations require the X-Pipe connector to be installed on the host. Note that this operation may take some time.
errorOccured=An error occured
terminalErrorOccured=A terminal error occured
errorTypeOccured=An exception of type $TYPE$ was thrown

7
beacon/LICENSE.md Normal file
View file

@ -0,0 +1,7 @@
Copyright 2022 Christopher Schnick
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

7
core/LICENSE.md Normal file
View file

@ -0,0 +1,7 @@
Copyright 2022 Christopher Schnick
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -7,6 +7,8 @@ import java.util.function.Consumer;
public interface CommandProcessControl extends ProcessControl {
public CommandProcessControl doesNotObeyReturnValueConvention();
@Override
public CommandProcessControl sensitive();
CommandProcessControl complex();

2
dist/version vendored
View file

@ -1 +1 @@
0.4.21
0.4.22

View file

@ -1,15 +1,16 @@
package io.xpipe.ext.base.actions;
import io.xpipe.app.core.AppActionLinkDetector;
import io.xpipe.core.store.DataStore;
import io.xpipe.core.util.SecretValue;
import io.xpipe.extension.DataStoreActionProvider;
import io.xpipe.extension.DataStoreProviders;
import io.xpipe.extension.I18n;
import javafx.beans.value.ObservableValue;
import javafx.scene.input.Clipboard;
import javafx.scene.input.DataFormat;
import java.util.Map;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
public class ShareStoreAction implements DataStoreActionProvider<DataStore> {
@ -45,6 +46,9 @@ public class ShareStoreAction implements DataStoreActionProvider<DataStore> {
@Override
public void execute(DataStore store) throws Exception {
var string = create(store);
Clipboard.getSystemClipboard().setContent(Map.of(DataFormat.PLAIN_TEXT, string, DataFormat.URL, string));
var selection = new StringSelection(string);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
AppActionLinkDetector.setLastDetectedAction(string);
clipboard.setContents(selection, selection);
}
}

View file

@ -34,6 +34,12 @@ public class SaveSourceTarget implements DataSourceTarget {
var storageGroup = new SimpleObjectProperty<DataSourceCollection>();
var dataSourceEntry = new SimpleObjectProperty<DataSourceEntry>();
SimpleChangeListener.apply(id, val -> {
if (val == null) {
storageGroup.set(null);
dataSourceEntry.set(null);
return;
}
storageGroup.set(
SourceCollectionViewState.get().getSelectedGroup() != null
? SourceCollectionViewState.get().getSelectedGroup().getCollection()

View file

@ -9,19 +9,12 @@ import io.xpipe.extension.DataStoreActionProvider;
import io.xpipe.extension.DataStoreProvider;
import io.xpipe.extension.DataSourceTarget;
module io.xpipe.ext.base {
open module io.xpipe.ext.base {
exports io.xpipe.ext.base;
opens io.xpipe.ext.base;
exports io.xpipe.ext.base.apps;
opens io.xpipe.ext.base.apps;
exports io.xpipe.ext.base.actions;
opens io.xpipe.ext.base.actions;
requires java.desktop;
requires io.xpipe.core;
requires io.xpipe.extension;
requires com.fasterxml.jackson.databind;

7
extension/LICENSE.md Normal file
View file

@ -0,0 +1,7 @@
Copyright 2022 Christopher Schnick
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -35,8 +35,8 @@ dependencies {
compileOnly 'com.jfoenix:jfoenix:9.0.10'
compileOnly 'org.controlsfx:controlsfx:11.1.2'
compileOnly 'org.apache.commons:commons-lang3:3.12.0'
compileOnly name: 'preferencesfx-core-lazy-11.11.0'
compileOnly name: 'formsfx-core-lazy-11.5.0'
compileOnly group: 'com.dlsc.preferencesfx', name: 'preferencesfx-core', version: '11.15.0'
compileOnly group: 'com.dlsc.formsfx', name: 'formsfx-core', version: '11.6.0'
}
task dist(type: Copy) {