package org.peerbox.presenter.tray; import java.nio.file.Files; import java.nio.file.Path; import javax.swing.SwingUtilities; import org.apache.commons.io.FileUtils; import org.peerbox.SettingsStage; import org.peerbox.app.AppContext; import org.peerbox.app.ClientContext; import org.peerbox.app.IExitHandler; import org.peerbox.app.activity.ActivityStage; import org.peerbox.app.config.UserConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.google.inject.Provider; public class TrayActionHandler { private static final Logger logger = LoggerFactory.getLogger(TrayActionHandler.class); private SettingsStage settingsStage; @Inject private AppContext appContext; @Inject private Provider<ActivityStage> activityStage; @Inject private Provider<IExitHandler> exitHandler; public void openRootFolder() { ClientContext clientContext = appContext.getCurrentClientContext(); if (clientContext != null) { UserConfig userConfig = clientContext.getUserConfig(); Path toOpen = userConfig.getRootPath(); if (toOpen == null || !Files.exists(toOpen)) { toOpen = FileUtils.getUserDirectory().toPath(); } final Path toOpenF = toOpen; // invokeLater requires final path. SwingUtilities.invokeLater(() -> { try { java.awt.Desktop.getDesktop().open(toOpenF.toFile()); } catch (Exception e) { logger.warn("Could not open folder.", e); } }); } } public void quit() { exitHandler.get().exit(); } public void showSettings() { settingsStage.show(); } public void showActivity() { activityStage.get().show(); } @Inject public void setSettingsStage(SettingsStage settingsStage) { this.settingsStage = settingsStage; } }