Emit the state of the job with the Finished signals.
[dcpomatic.git] / src / lib / cross_osx.cc
index b06f45a77e82c14b86ec3c1c88bc3535e84f4c67..3b04f1011d40bd1daed90ac1a26c041ef833a7d4 100644 (file)
 #include "dcpomatic_log.h"
 #include "config.h"
 #include "exceptions.h"
-#include "warnings.h"
 #include <dcp/raw_convert.h>
 #include <glib.h>
-extern "C" {
-#include <libavformat/avio.h>
-}
 #include <boost/algorithm/string.hpp>
 #include <boost/regex.hpp>
 #if BOOST_VERSION >= 106100
@@ -69,21 +65,6 @@ using boost::optional;
 using std::function;
 
 
-/** @param s Number of seconds to sleep for */
-void
-dcpomatic_sleep_seconds (int s)
-{
-       sleep (s);
-}
-
-
-void
-dcpomatic_sleep_milliseconds (int ms)
-{
-       usleep (ms * 1000);
-}
-
-
 /** @return A string of CPU information (model name etc.) */
 string
 cpu_info ()
@@ -115,16 +96,9 @@ resources_path ()
 
 
 boost::filesystem::path
-xsd_path ()
-{
-       return resources_path() / "xsd";
-}
-
-
-boost::filesystem::path
-tags_path ()
+libdcp_resources_path ()
 {
-       return resources_path() / "tags";
+       return resources_path();
 }
 
 
@@ -164,24 +138,6 @@ disk_writer_path ()
 #endif
 
 
-/* Apparently there is no way to create an ofstream using a UTF-8
-   filename under Windows.  We are hence reduced to using fopen
-   with this wrapper.
-*/
-FILE *
-fopen_boost (boost::filesystem::path p, string t)
-{
-        return fopen (p.c_str(), t.c_str());
-}
-
-
-int
-dcpomatic_fseek (FILE* stream, int64_t offset, int whence)
-{
-       return fseek (stream, offset, whence);
-}
-
-
 void
 Waker::nudge ()
 {
@@ -240,36 +196,6 @@ start_player ()
 }
 
 
-uint64_t
-thread_id ()
-{
-       return (uint64_t) pthread_self ();
-}
-
-
-int
-avio_open_boost (AVIOContext** s, boost::filesystem::path file, int flags)
-{
-       return avio_open (s, file.c_str(), flags);
-}
-
-
-boost::filesystem::path
-home_directory ()
-{
-       return getenv("HOME");
-}
-
-
-/** @return true if this process is a 32-bit one running on a 64-bit-capable OS */
-bool
-running_32_on_64 ()
-{
-       /* I'm assuming nobody does this on OS X */
-       return false;
-}
-
-
 static optional<string>
 get_vendor (CFDictionaryRef& description)
 {
@@ -479,16 +405,23 @@ config_path (optional<string> version)
 }
 
 
+struct UnmountState
+{
+       bool success = false;
+       bool callback = false;
+};
+
+
 void done_callback(DADiskRef, DADissenterRef dissenter, void* context)
 {
        LOG_DISK_NC("Unmount finished");
-       bool* success = reinterpret_cast<bool*> (context);
+       auto state = reinterpret_cast<UnmountState*>(context);
+       state->callback = true;
        if (dissenter) {
                LOG_DISK("Error: %1", DADissenterGetStatus(dissenter));
-               *success = false;
        } else {
                LOG_DISK_NC("Successful");
-               *success = true;
+               state->success = true;
        }
 }
 
@@ -508,18 +441,22 @@ Drive::unmount ()
                return false;
        }
        LOG_DISK("Requesting unmount of %1 from %2", _device, thread_id());
-       bool success = false;
-       DADiskUnmount(disk, kDADiskUnmountOptionWhole, &done_callback, &success);
+       UnmountState state;
+       DADiskUnmount(disk, kDADiskUnmountOptionWhole, &done_callback, &state);
        CFRelease (disk);
 
        CFRunLoopRef run_loop = CFRunLoopGetCurrent ();
        DASessionScheduleWithRunLoop (session, run_loop, kCFRunLoopDefaultMode);
        CFRunLoopStop (run_loop);
-       CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, 0);
+       CFRunLoopRunInMode(kCFRunLoopDefaultMode, 5, 0);
        CFRelease(session);
 
-       LOG_DISK_NC("End of unmount");
-       return success;
+       if (!state.callback) {
+               LOG_DISK_NC("End of unmount: timeout");
+       } else {
+               LOG_DISK("End of unmount: %1", state.success ? "success" : "failure");
+       }
+       return state.success;
 }
 
 
@@ -534,27 +471,13 @@ void
 make_foreground_application ()
 {
        ProcessSerialNumber serial;
-DCPOMATIC_DISABLE_WARNINGS
+LIBDCP_DISABLE_WARNINGS
        GetCurrentProcess (&serial);
-DCPOMATIC_ENABLE_WARNINGS
+LIBDCP_ENABLE_WARNINGS
        TransformProcessType (&serial, kProcessTransformToForegroundApplication);
 }
 
 
-string
-dcpomatic::get_process_id ()
-{
-       return dcp::raw_convert<string>(getpid());
-}
-
-
-boost::filesystem::path
-fix_long_path (boost::filesystem::path path)
-{
-       return path;
-}
-
-
 bool
 show_in_file_manager (boost::filesystem::path, boost::filesystem::path select)
 {