diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-03-08 22:25:47 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-03-12 23:28:27 +0100 |
| commit | 7981eefcfebb563ccf5627f132abdfdef22e0c23 (patch) | |
| tree | 62c0302b8b4d65de4343877b8975fd3407a11bad /src/lib | |
| parent | 3de828ef40c7b7c94c050bec4db57e6151787019 (diff) | |
Get progress during formatting.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/copy_to_drive_job.cc | 21 | ||||
| -rw-r--r-- | src/lib/disk_writer_messages.h | 5 | ||||
| -rw-r--r-- | src/lib/ext.cc | 16 |
3 files changed, 27 insertions, 15 deletions
diff --git a/src/lib/copy_to_drive_job.cc b/src/lib/copy_to_drive_job.cc index eafa126b6..96f873cf6 100644 --- a/src/lib/copy_to_drive_job.cc +++ b/src/lib/copy_to_drive_job.cc @@ -86,19 +86,24 @@ CopyToDriveJob::run () set_state (FINISHED_OK); return; } else if (*s == DISK_WRITER_ERROR) { - optional<string> const m = _nanomsg.receive (500); - optional<string> const n = _nanomsg.receive (500); + auto const m = _nanomsg.receive (500); + auto 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")); - set_progress_unknown (); - state = FORMAT; + } else if (*s == DISK_WRITER_FORMAT_PROGRESS) { + if (state == SETUP) { + sub (_("Formatting drive")); + state = FORMAT; + } + auto progress = _nanomsg.receive (500); + if (progress) { + set_progress (raw_convert<float>(*progress)); + } } else if (*s == DISK_WRITER_COPY_PROGRESS) { if (state == FORMAT) { sub (_("Copying DCP")); state = COPY; } - optional<string> progress = _nanomsg.receive (500); + auto progress = _nanomsg.receive (500); if (progress) { set_progress (raw_convert<float>(*progress)); } @@ -107,7 +112,7 @@ CopyToDriveJob::run () sub (_("Verifying copied files")); state = VERIFY; } - optional<string> progress = _nanomsg.receive (500); + auto progress = _nanomsg.receive (500); if (progress) { set_progress (raw_convert<float>(*progress)); } diff --git a/src/lib/disk_writer_messages.h b/src/lib/disk_writer_messages.h index 406afc61d..ab86f083e 100644 --- a/src/lib/disk_writer_messages.h +++ b/src/lib/disk_writer_messages.h @@ -51,8 +51,9 @@ // Error message // Error number -// the drive is being formatted -#define DISK_WRITER_FORMATTING "F" +// the drive is being formatted, 40% done +#define DISK_WRITER_FORMAT_PROGRESS "F" +// 0.4\n // data is being copied, 30% done #define DISK_WRITER_COPY_PROGRESS "C" diff --git a/src/lib/ext.cc b/src/lib/ext.cc index 086afd91e..b88a88726 100644 --- a/src/lib/ext.cc +++ b/src/lib/ext.cc @@ -255,6 +255,16 @@ verify (vector<CopiedFile> const& copied_files, uint64_t total, Nanomsg* nanomsg } +static +void +format_progress (void* context, float progress) +{ + if (context) { + reinterpret_cast<Nanomsg*>(context)->send(String::compose(DISK_WRITER_FORMAT_PROGRESS "\n%1\n", progress), SHORT_TIMEOUT); + } +} + + void #ifdef DCPOMATIC_WINDOWS dcpomatic::write (boost::filesystem::path dcp_path, string device, string, Nanomsg* nanomsg) @@ -329,11 +339,7 @@ try } LOG_DISK_NC ("Opened partition"); - if (nanomsg) { - nanomsg->send(DISK_WRITER_FORMATTING "\n", SHORT_TIMEOUT); - } - - r = ext4_mkfs(&fs, bd, &info, F_SET_EXT2); + r = ext4_mkfs(&fs, bd, &info, F_SET_EXT2, format_progress, nanomsg); if (r != EOK) { throw CopyError ("Failed to make filesystem", r); } |
