diff --git a/source/net/filebot/Settings.java b/source/net/filebot/Settings.java index dc97ee92..136d41b4 100644 --- a/source/net/filebot/Settings.java +++ b/source/net/filebot/Settings.java @@ -72,6 +72,10 @@ public final class Settings { return Boolean.parseBoolean(System.getProperty("useCreationDate")); } + public static boolean isMacApp() { + return "mas".equals(getApplicationDeployment()) || "app".equals(getApplicationDeployment()); + } + public static boolean isAppStore() { return "mas".equals(getApplicationDeployment()) || "usc".equals(getApplicationDeployment()); } diff --git a/source/net/filebot/UserFiles.java b/source/net/filebot/UserFiles.java index 98a04bab..3e7f763d 100644 --- a/source/net/filebot/UserFiles.java +++ b/source/net/filebot/UserFiles.java @@ -5,6 +5,7 @@ import static java.util.Collections.*; import static net.filebot.Settings.*; import static net.filebot.util.ui.SwingUI.*; +import java.awt.Desktop; import java.awt.Dialog; import java.awt.FileDialog; import java.awt.Frame; @@ -12,13 +13,28 @@ import java.io.File; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JFileChooser; +import net.filebot.mac.MacAppUtilities; import net.filebot.util.FileUtilities.ExtensionFileFilter; public class UserFiles { + public static void revealFile(File file) { + try { + if (isMacApp()) { + MacAppUtilities.revealInFinder(file); + } else { + Desktop.getDesktop().open(file.getParentFile()); + } + } catch (Exception e) { + Logger.getLogger(UserFiles.class.getName()).log(Level.WARNING, e.toString()); + } + } + private static FileChooser defaultFileChooser = getPreferredFileChooser(); public static void setDefaultFileChooser(FileChooser fileChooser) { diff --git a/source/net/filebot/mac/DropToUnlock.java b/source/net/filebot/mac/DropToUnlock.java index 5b2f71fa..aab806ac 100644 --- a/source/net/filebot/mac/DropToUnlock.java +++ b/source/net/filebot/mac/DropToUnlock.java @@ -11,7 +11,6 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; -import java.awt.Desktop; import java.awt.Dialog.ModalExclusionType; import java.awt.Dimension; import java.awt.Font; @@ -158,14 +157,14 @@ public class DropToUnlock extends JList { dialog.setAlwaysOnTop(true); // open required folders for easy drag and drop (a few milliseconds after the dialog has become visible) - invokeLater(750, () -> { - model.stream().map(f -> f.getParentFile()).sorted().distinct().forEach(f -> { - try { - Desktop.getDesktop().open(f); - } catch (Exception e) { - Logger.getLogger(DropToUnlock.class.getName()).log(Level.WARNING, e.toString()); + invokeLater(500, () -> { + try { + for (File it : model) { + revealFile(it); } - }); + } catch (Exception e) { + Logger.getLogger(DropToUnlock.class.getName()).log(Level.WARNING, e.toString()); + } }); // show and wait for user input diff --git a/source/net/filebot/mac/MacAppUtilities.java b/source/net/filebot/mac/MacAppUtilities.java index d65612a3..9c0b2c9e 100644 --- a/source/net/filebot/mac/MacAppUtilities.java +++ b/source/net/filebot/mac/MacAppUtilities.java @@ -54,6 +54,16 @@ public class MacAppUtilities { } } + public static void revealInFinder(File file) { + try { + Class fileManager = Class.forName("com.apple.eio.FileManager"); + Method revealInFinder = fileManager.getMethod("revealInFinder", new Class[] { File.class }); + revealInFinder.invoke(null, file); + } catch (Throwable t) { + Logger.getLogger(MacAppUtilities.class.getName()).log(Level.WARNING, "revealInFinder not supported: " + t); + } + } + public static void setUIDefaults() { UIManager.put("TitledBorder.border", UIManager.getBorder("InsetBorder.aquaVariant")); } diff --git a/source/net/filebot/ui/MainFrame.java b/source/net/filebot/ui/MainFrame.java index 754b5d40..a0008148 100644 --- a/source/net/filebot/ui/MainFrame.java +++ b/source/net/filebot/ui/MainFrame.java @@ -229,7 +229,7 @@ public class MainFrame extends JFrame { selectEnabled = true; // bring window to front when on dnd - if (Settings.isMacSandbox()) { + if (Settings.isMacApp()) { MacAppUtilities.requestForeground(); } else { SwingUtilities.getWindowAncestor(((DropTarget) dtde.getSource()).getComponent()).toFront(); diff --git a/source/net/filebot/ui/analyze/FileTree.java b/source/net/filebot/ui/analyze/FileTree.java index 2b631c6f..49add7f7 100644 --- a/source/net/filebot/ui/analyze/FileTree.java +++ b/source/net/filebot/ui/analyze/FileTree.java @@ -3,7 +3,6 @@ package net.filebot.ui.analyze; import static java.util.Collections.*; import static net.filebot.ui.NotificationLogging.*; -import java.awt.Desktop; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; @@ -29,6 +28,7 @@ import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import net.filebot.ResourceManager; +import net.filebot.UserFiles; import net.filebot.util.ExceptionUtilities; import net.filebot.util.FilterIterator; import net.filebot.util.TreeIterator; @@ -120,7 +120,7 @@ public class FileTree extends JTree { public void actionPerformed(ActionEvent event) { try { for (Object file : (Collection) getValue("files")) { - Desktop.getDesktop().open((File) file); + UserFiles.revealFile((File) file); } } catch (Exception e) { UILogger.log(Level.WARNING, ExceptionUtilities.getRootCauseMessage(e), e); diff --git a/source/net/filebot/ui/rename/RenamePanel.java b/source/net/filebot/ui/rename/RenamePanel.java index 49599a0c..a198ee7e 100644 --- a/source/net/filebot/ui/rename/RenamePanel.java +++ b/source/net/filebot/ui/rename/RenamePanel.java @@ -11,7 +11,6 @@ import static net.filebot.util.ui.SwingUI.*; import java.awt.Component; import java.awt.Cursor; -import java.awt.Desktop; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -52,6 +51,7 @@ import net.filebot.Language; import net.filebot.ResourceManager; import net.filebot.Settings; import net.filebot.StandardRenameAction; +import net.filebot.UserFiles; import net.filebot.WebServices; import net.filebot.format.MediaBindingBean; import net.filebot.media.MediaDetection; @@ -248,7 +248,7 @@ public class RenamePanel extends JComponent { JList list = (JList) evt.getSource(); if (list.getSelectedIndex() >= 0) { File item = (File) list.getSelectedValue(); - Desktop.getDesktop().open(item.getParentFile()); + UserFiles.revealFile(item); } } catch (Exception e) { Logger.getLogger(RenamePanel.class.getName()).log(Level.WARNING, e.getMessage());