Recover subtitle language metadata from the places is was written
[dcpomatic.git] / src / lib / copy_to_drive_job.cc
index fcac7e41bcd5012a53161642b4a0be849b13808e..f78d3d3c511b5b8d6f830cefe11a5733635a538d 100644 (file)
@@ -22,6 +22,7 @@
 #include "copy_to_drive_job.h"
 #include "compose.hpp"
 #include "exceptions.h"
+#include "dcpomatic_log.h"
 #include <dcp/raw_convert.h>
 #include <nanomsg/nn.h>
 #include <unistd.h>
@@ -52,7 +53,7 @@ CopyToDriveJob::CopyToDriveJob (boost::filesystem::path dcp, Drive drive, Nanoms
 string
 CopyToDriveJob::name () const
 {
-       return String::compose (_("Copying %1 to %2"), _dcp.filename().string(), _drive.description());
+       return String::compose (_("Copying %1\nto %2"), _dcp.filename().string(), _drive.description());
 }
 
 string
@@ -64,11 +65,18 @@ CopyToDriveJob::json_name () const
 void
 CopyToDriveJob::run ()
 {
-       if (!_nanomsg.send(String::compose(DISK_WRITER_WRITE "\n%1\n%2\n", _dcp.string(), _drive.internal_name()), 2000)) {
+       LOG_DISK("Sending write request to disk writer for %1 %2", _dcp.string(), _drive.device());
+       if (!_nanomsg.send(String::compose(DISK_WRITER_WRITE "\n%1\n%2\n", _dcp.string(), _drive.device()), 2000)) {
                throw CommunicationFailedError ();
        }
 
-       bool formatting = false;
+       enum State {
+               SETUP,
+               FORMAT,
+               COPY,
+               VERIFY
+       } state = SETUP;
+
        while (true) {
                optional<string> s = _nanomsg.receive (10000);
                if (!s) {
@@ -82,13 +90,22 @@ CopyToDriveJob::run ()
                        optional<string> const n = _nanomsg.receive (500);
                        throw CopyError (m.get_value_or("Unknown"), raw_convert<int>(n.get_value_or("0")));
                } else if (*s == DISK_WRITER_FORMATTING) {
-                       sub ("Formatting drive");
+                       sub (_("Formatting drive"));
                        set_progress_unknown ();
-                       formatting = true;
-               } else if (*s == DISK_WRITER_PROGRESS) {
-                       if (formatting) {
-                               sub ("Copying DCP");
-                               formatting = false;
+                       state = FORMAT;
+               } else if (*s == DISK_WRITER_COPY_PROGRESS) {
+                       if (state == FORMAT) {
+                               sub (_("Copying DCP"));
+                               state = COPY;
+                       }
+                       optional<string> progress = _nanomsg.receive (500);
+                       if (progress) {
+                               set_progress (raw_convert<float>(*progress));
+                       }
+               } else if (*s == DISK_WRITER_VERIFY_PROGRESS) {
+                       if (state == COPY) {
+                               sub (_("Verifying copied files"));
+                               state = VERIFY;
                        }
                        optional<string> progress = _nanomsg.receive (500);
                        if (progress) {