Browse Source

Move stuff to integrations-linux

Ralph Plawetzki 1 year ago
parent
commit
317f3c3458

File diff suppressed because it is too large
+ 1 - 1
.idea/runConfigurations/Cryptomator_Linux.xml


File diff suppressed because it is too large
+ 1 - 1
.idea/runConfigurations/Cryptomator_Linux_Dev.xml


+ 2 - 10
pom.xml

@@ -34,10 +34,10 @@
 
 		<!-- cryptomator dependencies -->
 		<cryptomator.cryptofs.version>2.6.2</cryptomator.cryptofs.version>
-		<cryptomator.integrations.version>2.0.0</cryptomator.integrations.version>
+		<cryptomator.integrations.version>2.0.0-alpha1</cryptomator.integrations.version>
 		<cryptomator.integrations.win.version>1.2.0</cryptomator.integrations.win.version>
 		<cryptomator.integrations.mac.version>1.2.0</cryptomator.integrations.mac.version>
-		<cryptomator.integrations.linux.version>1.2.0</cryptomator.integrations.linux.version>
+		<cryptomator.integrations.linux.version>2.0.0-alpha1</cryptomator.integrations.linux.version>
 		<cryptomator.fuse.version>2.0.5</cryptomator.fuse.version>
 		<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
 		<cryptomator.webdav.version>2.0.2</cryptomator.webdav.version>
@@ -55,7 +55,6 @@
 		<slf4j.version>2.0.6</slf4j.version>
 		<tinyoauth2.version>0.5.1</tinyoauth2.version>
 		<zxcvbn.version>1.7.0</zxcvbn.version>
-		<appindicator.version>1.2.0</appindicator.version>
 
 		<!-- test dependencies -->
 		<junit.jupiter.version>5.9.2</junit.jupiter.version>
@@ -251,13 +250,6 @@
 			<version>${jetbrains.annotations.version}</version>
 			<scope>provided</scope>
 		</dependency>
-
-		<!-- Java bindings for libappindicator -->
-		<dependency>
-			<groupId>org.purejava</groupId>
-			<artifactId>libappindicator-gtk3-java-minimal</artifactId>
-			<version>${appindicator.version}</version>
-		</dependency>
 	</dependencies>
 
 	<build>

+ 3 - 4
src/main/java/module-info.java

@@ -1,7 +1,6 @@
 import ch.qos.logback.classic.spi.Configurator;
 import org.cryptomator.integrations.tray.TrayMenuController;
 import org.cryptomator.logging.LogbackConfiguratorFactory;
-import org.cryptomator.ui.traymenu.AppindicatorTrayMenuController;
 import org.cryptomator.ui.traymenu.AwtTrayMenuController;
 
 open module org.cryptomator.desktop {
@@ -32,13 +31,13 @@ open module org.cryptomator.desktop {
 	requires com.tobiasdiez.easybind;
 	requires dagger;
 	requires io.github.coffeelibs.tinyoauth2client;
-	requires libappindicator.gtk3.java.minimal;
 	requires org.slf4j;
 	requires org.apache.commons.lang3;
 
 	/* TODO: filename-based modules: */
-	requires static javax.inject; /* ugly dagger/guava crap */
+	requires static javax.inject;
+	requires org.cryptomator.integrations.linux; /* ugly dagger/guava crap */
 
-	provides TrayMenuController with AwtTrayMenuController, AppindicatorTrayMenuController;
+	provides TrayMenuController with AwtTrayMenuController;
 	provides Configurator with LogbackConfiguratorFactory;
 }

+ 0 - 21
src/main/java/org/cryptomator/ui/traymenu/ActionItemCallback.java

@@ -1,21 +0,0 @@
-package org.cryptomator.ui.traymenu;
-
-import org.cryptomator.integrations.tray.ActionItem;
-import org.purejava.linux.GCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ActionItemCallback implements GCallback {
-	private static final Logger LOG = LoggerFactory.getLogger(ActionItemCallback.class);
-	private ActionItem actionItem;
-
-	public ActionItemCallback(ActionItem actionItem) {
-		this.actionItem = actionItem;
-	}
-
-	@Override
-	public void apply() {
-		LOG.debug("Hit tray menu action '{}'", actionItem.title());
-		actionItem.action().run();
-	}
-}

+ 0 - 110
src/main/java/org/cryptomator/ui/traymenu/AppindicatorTrayMenuController.java

@@ -1,110 +0,0 @@
-package org.cryptomator.ui.traymenu;
-
-import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.integrations.common.CheckAvailability;
-import org.cryptomator.integrations.tray.ActionItem;
-import org.cryptomator.integrations.tray.SeparatorItem;
-import org.cryptomator.integrations.tray.SubMenuItem;
-import org.cryptomator.integrations.tray.TrayMenuController;
-import org.cryptomator.integrations.tray.TrayMenuException;
-import org.cryptomator.integrations.tray.TrayMenuItem;
-import org.purejava.linux.MemoryAllocator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.file.Paths;
-import java.util.List;
-
-import static org.purejava.linux.app_indicator_h.*;
-
-@CheckAvailability
-public class AppindicatorTrayMenuController implements TrayMenuController {
-
-	private static final Logger LOG = LoggerFactory.getLogger(AppindicatorTrayMenuController.class);
-
-	private final SegmentScope scope = SegmentScope.auto();
-	private MemorySegment indicator;
-	private MemorySegment menu = gtk_menu_new();
-
-	@CheckAvailability
-	public static boolean isAvailable() {
-		return SystemUtils.IS_OS_LINUX && MemoryAllocator.isLoadedNativeLib();
-	}
-
-	@Override
-	public void showTrayIcon(URI uri, Runnable runnable, String s) throws TrayMenuException {
-		indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"),
-				MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri))),
-				APP_INDICATOR_CATEGORY_APPLICATION_STATUS());
-		gtk_widget_show_all(menu);
-		app_indicator_set_menu(indicator, menu);
-		app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE());
-	}
-
-	@Override
-	public void updateTrayIcon(URI uri) {
-		app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri))));
-	}
-
-	@Override
-	public void updateTrayMenu(List<TrayMenuItem> items) throws TrayMenuException {
-		menu = gtk_menu_new();
-		addChildren(menu, items);
-		gtk_widget_show_all(menu);
-		app_indicator_set_menu(indicator, menu);
-	}
-
-	@Override
-	public void onBeforeOpenMenu(Runnable runnable) {
-
-	}
-
-	private void addChildren(MemorySegment menu, List<TrayMenuItem> items) {
-		for (var item : items) {
-			// TODO: use Pattern Matching for switch, once available
-			if (item instanceof ActionItem a) {
-				var gtkMenuItem = gtk_menu_item_new();
-				gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title()));
-				g_signal_connect_object(gtkMenuItem,
-						MemoryAllocator.ALLOCATE_FOR("activate"),
-						MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), scope),
-						menu,
-						0);
-				gtk_menu_shell_append(menu, gtkMenuItem);
-			} else if (item instanceof SeparatorItem) {
-				var gtkSeparator = gtk_menu_item_new();
-				gtk_menu_shell_append(menu, gtkSeparator);
-			} else if (item instanceof SubMenuItem s) {
-				var gtkMenuItem = gtk_menu_item_new();
-				var gtkSubmenu = gtk_menu_new();
-				gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title()));
-				addChildren(gtkSubmenu, s.items());
-				gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu);
-				gtk_menu_shell_append(menu, gtkMenuItem);
-			}
-			gtk_widget_show_all(menu);
-		}
-	}
-	private String getAbsolutePath(String iconName) {
-		var res = getClass().getClassLoader().getResource(iconName);
-		if (null == res) {
-			throw new IllegalArgumentException("Icon '" + iconName + "' cannot be found in resource folder");
-		}
-		File file = null;
-		try {
-			file = Paths.get(res.toURI()).toFile();
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("Icon '" + iconName + "' cannot be converted to file", e);
-		}
-		return file.getAbsolutePath();
-	}
-
-	private String getPathString(URI uri) {
-		return uri.getPath().substring(1);
-	}
-}