From: Carl Hetherington Date: Thu, 17 Jun 2021 21:21:54 +0000 (+0200) Subject: Move 'show in file manager' code to cross_* X-Git-Tag: v2.15.162~6 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=a5f481aae19a6ef5b0cad48edaea5b58fc00ee05 Move 'show in file manager' code to cross_* --- 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(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(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(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(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(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 ()