first proper design draft

This commit is contained in:
Armin Schrenk
2025-02-13 11:21:05 +01:00
parent 5a97060fac
commit 4f6e091c13
20 changed files with 162 additions and 58 deletions

View File

@@ -59,7 +59,7 @@ open module org.cryptomator.desktop {
uses org.cryptomator.common.locationpresets.LocationPresetsProvider;
uses SSLContextProvider;
uses org.cryptomator.notify.NotificationHandler;
uses org.cryptomator.event.NotificationHandler;
provides TrayMenuController with AwtTrayMenuController;
provides Configurator with LogbackConfiguratorFactory;

View File

@@ -15,7 +15,7 @@ import org.cryptomator.common.vaults.VaultComponent;
import org.cryptomator.common.vaults.VaultListModule;
import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
import org.cryptomator.integrations.revealpath.RevealPathService;
import org.cryptomator.notify.Event;
import org.cryptomator.event.Event;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -111,7 +111,7 @@ public class Environment {
* @return App version or "SNAPSHOT", if undefined
*/
public String getAppVersion() {
return System.getProperty(APP_VERSION_PROP_NAME, "SNAPSHOT");
return System.getProperty(APP_VERSION_PROP_NAME, "1.14.2");
}
public Optional<String> getBuildNumber() {

View File

@@ -27,8 +27,8 @@ import org.cryptomator.integrations.mount.Mountpoint;
import org.cryptomator.integrations.mount.UnmountFailedException;
import org.cryptomator.integrations.quickaccess.QuickAccessService;
import org.cryptomator.integrations.quickaccess.QuickAccessServiceException;
import org.cryptomator.notify.Event;
import org.cryptomator.notify.VaultEvent;
import org.cryptomator.event.Event;
import org.cryptomator.event.VaultEvent;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package org.cryptomator.notify;
package org.cryptomator.event;
public sealed interface Answer permits Answer.DoNothing, Answer.DoSomething {

View File

@@ -0,0 +1,15 @@
package org.cryptomator.event;
public sealed interface Event extends Comparable<Event> permits UpdateEvent, VaultEvent {
long getTimestampMilli();
default int compareTo(Event other) {
long timeDiff = this.getTimestampMilli() - other.getTimestampMilli();
if (timeDiff != 0) {
return (int) timeDiff;
}
return this.equals(other) ? 0 : this.getClass().getName().compareTo(other.getClass().getName());
}
}

View File

@@ -1,4 +1,4 @@
package org.cryptomator.notify;
package org.cryptomator.event;
import org.cryptomator.integrations.common.IntegrationsLoader;

View File

@@ -0,0 +1,17 @@
package org.cryptomator.event;
import java.time.Instant;
public record UpdateEvent(long timestamp, String newVersion) implements Event {
public UpdateEvent(String newVersion) {
this(Instant.now().toEpochMilli(), newVersion);
}
@Override
public long getTimestampMilli() {
return timestamp;
}
}

View File

@@ -0,0 +1,17 @@
package org.cryptomator.event;
import org.cryptomator.cryptofs.event.FilesystemEvent;
import java.time.Instant;
public record VaultEvent(long timestamp, String vaultId, String displayName, FilesystemEvent actualEvent) implements Event {
public VaultEvent(String vaultId, String displayName, FilesystemEvent actualEvent) {
this(Instant.now().toEpochMilli(), vaultId, displayName, actualEvent);
}
@Override
public long getTimestampMilli() {
return timestamp;
}
}

View File

@@ -1,5 +0,0 @@
package org.cryptomator.notify;
public sealed interface Event permits UpdateEvent, VaultEvent {
}

View File

@@ -1,3 +0,0 @@
package org.cryptomator.notify;
public record UpdateEvent(String newVersion) implements Event {}

View File

@@ -1,7 +0,0 @@
package org.cryptomator.notify;
import org.cryptomator.cryptofs.event.FilesystemEvent;
public record VaultEvent(String vaultId, String path, FilesystemEvent actualEvent) implements Event {
}

View File

@@ -1,14 +1,39 @@
package org.cryptomator.ui.eventviewer;
import org.cryptomator.event.Event;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
import javafx.collections.ObservableList;
import javafx.collections.transformation.SortedList;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import java.util.Comparator;
@EventViewerScoped
public class EventViewController implements FxController {
@Inject
public EventViewController() {
private final SortedList<Event> reversedEventList;
private final ObservableList<Event> eventList;
@FXML
ListView<Event> eventListView;
@Inject
public EventViewController(ObservableList<Event> eventList) {
reversedEventList = new SortedList<>(eventList, Comparator.reverseOrder());
this.eventList = eventList;
}
@FXML
public void initialize() {
eventListView.setItems(reversedEventList);
}
@FXML
void emptyEventList() {
eventList.clear();
}
}

View File

@@ -30,7 +30,7 @@ abstract class EventViewerModule {
Stage stage = factory.create();
stage.setTitle("TODO EVENTVIEWER");
stage.setResizable(true);
stage.initModality(Modality.WINDOW_MODAL); //TODO: or not modal at all?
stage.initModality(Modality.NONE);
stage.initOwner(owner);
return stage;
}
@@ -42,11 +42,6 @@ abstract class EventViewerModule {
return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Binds
@IntoMap
@FxControllerKey(EventViewController.class)
abstract FxController bindEventViewController(EventViewController controller);
@Provides
@FxmlScene(FxmlFile.EVENT_VIEWER)
@EventViewerScoped
@@ -54,4 +49,14 @@ abstract class EventViewerModule {
return fxmlLoaders.createScene(FxmlFile.EVENT_VIEWER);
}
@Binds
@IntoMap
@FxControllerKey(EventViewController.class)
abstract FxController bindEventViewController(EventViewController controller);
@Binds
@IntoMap
@FxControllerKey(UpdateEventViewController.class)
abstract FxController bindUpdateEventViewController(UpdateEventViewController controller);
}

View File

@@ -0,0 +1,14 @@
package org.cryptomator.ui.eventviewer;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
@EventViewerScoped
public class UpdateEventViewController implements FxController {
@Inject
public UpdateEventViewController() {
}
}

View File

@@ -204,10 +204,14 @@ public class FxApplicationWindows {
}
}
public CompletionStage<Void> showEventViewer(@Nullable Stage owner) {
public CompletionStage<Object> showEventViewer(@Nullable Stage owner) {
return CompletableFuture.supplyAsync(() -> {
eventViewWindow.create(owner).showEventViewerWindow();
return null;
}, Platform::runLater);
}, Platform::runLater).exceptionally(t -> {
LOG.error("Unable to display event viewer.", t);
return null;
});
}
}

View File

@@ -3,8 +3,8 @@ package org.cryptomator.ui.fxapp;
import org.cryptomator.common.Environment;
import org.cryptomator.common.SemVerComparator;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.notify.Event;
import org.cryptomator.notify.UpdateEvent;
import org.cryptomator.event.Event;
import org.cryptomator.event.UpdateEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;