X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcopy_to_drive_job.cc;h=7d208e0ecb6f3ac8225085de659e0d0893f9608f;hb=bb3a9a12116a4b2a5bc1fef38e73853f576a773a;hp=c6f9c84b0cea67867ad9f6cc8835a6aae4cfea16;hpb=4bdaccb5ede7d9a1066e0a0665fcfce9b1e3241e;p=dcpomatic.git diff --git a/src/lib/copy_to_drive_job.cc b/src/lib/copy_to_drive_job.cc index c6f9c84b0..7d208e0ec 100644 --- a/src/lib/copy_to_drive_job.cc +++ b/src/lib/copy_to_drive_job.cc @@ -97,44 +97,40 @@ CopyToDriveJob::run () } state = SETUP; while (true) { - optional s = _nanomsg.receive (10000); - if (!s) { + auto response = DiskWriterBackEndResponse::read_from_nanomsg(_nanomsg, 10000); + if (!response) { continue; } - if (*s == DISK_WRITER_OK) { + + switch (response->type()) { + case DiskWriterBackEndResponse::Type::OK: set_state (FINISHED_OK); return; - } else if (*s == DISK_WRITER_ERROR) { - auto const m = _nanomsg.receive (500); - auto const n = _nanomsg.receive (500); - throw CopyError (m.get_value_or("Unknown"), raw_convert(n.get_value_or("0"))); - } else if (*s == DISK_WRITER_FORMAT_PROGRESS) { + case DiskWriterBackEndResponse::Type::PONG: + break; + case DiskWriterBackEndResponse::Type::ERROR: + throw CopyError(response->error_message(), response->ext4_error_number(), response->platform_error_number()); + case DiskWriterBackEndResponse::Type::FORMAT_PROGRESS: if (state == SETUP) { sub (_("Formatting drive")); state = FORMAT; } - auto progress = _nanomsg.receive (500); - if (progress) { - set_progress (raw_convert(*progress)); - } - } else if (*s == DISK_WRITER_COPY_PROGRESS) { + set_progress(response->progress()); + break; + case DiskWriterBackEndResponse::Type::COPY_PROGRESS: if (state == FORMAT) { sub (_("Copying DCP")); state = COPY; } - auto progress = _nanomsg.receive (500); - if (progress) { - set_progress (raw_convert(*progress)); - } - } else if (*s == DISK_WRITER_VERIFY_PROGRESS) { + set_progress(response->progress()); + break; + case DiskWriterBackEndResponse::Type::VERIFY_PROGRESS: if (state == COPY) { sub (_("Verifying copied files")); state = VERIFY; } - auto progress = _nanomsg.receive (500); - if (progress) { - set_progress (raw_convert(*progress)); - } + set_progress(response->progress()); + break; } } }