summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-06-17 23:21:54 +0200
committerCarl Hetherington <cth@carlh.net>2021-09-21 09:46:32 +0200
commita5f481aae19a6ef5b0cad48edaea5b58fc00ee05 (patch)
tree50ab7bc8fe9a308b8dd1bea778884ac18d55d956
parentff6c51d3aae0195f6612b01b7609342d3f53df26 (diff)
Move 'show in file manager' code to cross_*
-rw-r--r--src/lib/cross.h1
-rw-r--r--src/lib/cross_linux.cc19
-rw-r--r--src/lib/cross_osx.cc9
-rw-r--r--src/lib/cross_windows.cc10
-rw-r--r--src/tools/dcpomatic.cc34
5 files changed, 42 insertions, 31 deletions
diff --git a/src/lib/cross.h b/src/lib/cross.h
index 25b3b3820..919113305 100644
--- a/src/lib/cross.h
+++ b/src/lib/cross.h
@@ -67,6 +67,7 @@ extern void unprivileged ();
extern boost::filesystem::path config_path ();
extern boost::filesystem::path directory_containing_executable ();
extern boost::filesystem::path fix_long_path (boost::filesystem::path path);
+extern bool show_in_file_manager (boost::filesystem::path dir, boost::filesystem::path select);
namespace dcpomatic {
std::string get_process_id ();
}
diff --git a/src/lib/cross_linux.cc b/src/lib/cross_linux.cc
index 65151791c..d142c416f 100644
--- a/src/lib/cross_linux.cc
+++ b/src/lib/cross_linux.cc
@@ -411,3 +411,22 @@ fix_long_path (boost::filesystem::path path)
return path;
}
+
+bool
+show_in_file_manager (boost::filesystem::path dir, boost::filesystem::path)
+{
+ int r = system ("which nautilus");
+ if (WEXITSTATUS(r) == 0) {
+ r = system (String::compose("nautilus \"%1\"", dir.string()).c_str());
+ return static_cast<bool>(WEXITSTATUS(r));
+ } else {
+ int r = system ("which konqueror");
+ if (WEXITSTATUS(r) == 0) {
+ r = system (String::compose("konqueror \"%1\"", dir.string()).c_str());
+ return static_cast<bool>(WEXITSTATUS(r));
+ }
+ }
+
+ return true;
+}
+
diff --git a/src/lib/cross_osx.cc b/src/lib/cross_osx.cc
index b9b7796a2..d0cb9f216 100644
--- a/src/lib/cross_osx.cc
+++ b/src/lib/cross_osx.cc
@@ -638,3 +638,12 @@ fix_long_path (boost::filesystem::path path)
{
return path;
}
+
+
+bool
+show_in_file_manager (boost::filesystem::path, boost::filesystem::path select)
+{
+ int r = system (String::compose("open -R \"%1\"", select.string()).c_str());
+ return static_cast<bool>(WEXITSTATUS(r));
+}
+
diff --git a/src/lib/cross_windows.cc b/src/lib/cross_windows.cc
index ac92aa7eb..f778a60e1 100644
--- a/src/lib/cross_windows.cc
+++ b/src/lib/cross_windows.cc
@@ -694,3 +694,13 @@ dcpomatic::get_process_id ()
return dcp::raw_convert<string>(GetCurrentProcessId());
}
+
+bool
+show_in_file_manager (boost::filesystem::path, boost::filesystem::path select)
+{
+ std::wstringstream args;
+ args << "/select," << select;
+ auto const r = ShellExecute (0, L"open", L"explorer.exe", args.str().c_str(), 0, SW_SHOWDEFAULT);
+ return (reinterpret_cast<int64_t>(r) <= 32);
+}
+
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index ea3dc9a41..ca45963f4 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -58,6 +58,7 @@
#include "lib/analytics.h"
#include "lib/emailer.h"
#include "lib/config.h"
+#include "lib/cross.h"
#include "lib/util.h"
#include "lib/video_content.h"
#include "lib/content.h"
@@ -127,8 +128,6 @@ using std::shared_ptr;
using std::string;
using std::vector;
using std::wcout;
-using std::wstring;
-using std::wstringstream;
using boost::optional;
using boost::is_any_of;
using boost::algorithm::find;
@@ -1027,36 +1026,9 @@ private:
void jobs_show_dcp ()
{
DCPOMATIC_ASSERT (_film->directory ());
-#ifdef DCPOMATIC_WINDOWS
- wstringstream args;
- args << "/select," << _film->dir (_film->dcp_name(false));
- ShellExecute (0, L"open", L"explorer.exe", args.str().c_str(), 0, SW_SHOWDEFAULT);
-#endif
-
-#ifdef DCPOMATIC_LINUX
- int r = system ("which nautilus");
- if (WEXITSTATUS (r) == 0) {
- r = system (String::compose("nautilus \"%1\"", _film->directory()->string()).c_str());
- if (WEXITSTATUS (r)) {
- error_dialog (this, _("Could not show DCP."), _("Could not run nautilus"));
- }
- } else {
- int r = system ("which konqueror");
- if (WEXITSTATUS (r) == 0) {
- r = system (String::compose ("konqueror \"%1\"", _film->directory()->string()).c_str());
- if (WEXITSTATUS (r)) {
- error_dialog (this, _("Could not show DCP"), _("Could not run konqueror"));
- }
- }
+ if (show_in_file_manager(_film->directory().get(), _film->dir(_film->dcp_name(false)))) {
+ error_dialog (this, _("Could not show DCP."));
}
-#endif
-
-#ifdef DCPOMATIC_OSX
- int r = system (String::compose ("open -R \"%1\"", _film->dir (_film->dcp_name(false)).string()).c_str());
- if (WEXITSTATUS (r)) {
- error_dialog (this, _("Could not show DCP"));
- }
-#endif
}
void view_closed_captions ()