41 const std::string& input_path,
43 std::function<
bool()> cancel_cb)
49 std::string open_error;
51 emit_progress(progress_cb,
53 trs(
"Opening source in read-only mode"),
57 report.
logs.push_back(
trs(
"Error: could not open the source in read-only mode."));
59 if (!open_error.empty())
60 report.
logs.push_back(
trs(
"Open error:") + std::string(
" ") + open_error);
68 trs(
"Unable to open source") + (open_error.empty() ?
"" : std::string(
": ") + open_error),
72 emit_progress(progress_cb,
83 report.
logs.push_back(
trs(
"Source opened in read-only mode."));
84 if (!health.summary.empty()) {
85 report.
logs.push_back(
trs(
"Device health:") + std::string(
" ") + health.summary);
92 trs(
"Device health warning"),
93 trs(
"Device health probe"),
94 health.summary.empty() ?
trs(
"Device may be unstable or partially readable") : health.summary,
99 report.
logs.push_back(
trs(
"Input size:") + std::string(
" ") +
100 std::to_string(report.
input_size) +
" bytes");
102 if (check_cancel(cancel_cb)) {
103 report.
logs.push_back(
trs(
"Scan cancelled by user."));
107 emit_progress(progress_cb,
108 trs(
"Partition analysis"),
115 report.
results.insert(report.
results.end(), mbr.begin(), mbr.end());
117 if (check_cancel(cancel_cb)) {
118 report.
logs.push_back(
trs(
"Scan cancelled during MBR parsing."));
122 emit_progress(progress_cb,
123 trs(
"Partition analysis"),
130 report.
results.insert(report.
results.end(), gpt.begin(), gpt.end());
132 if (check_cancel(cancel_cb)) {
133 report.
logs.push_back(
trs(
"Scan cancelled during GPT parsing."));
137 emit_progress(progress_cb,
139 trs(
"Searching filesystem signatures"),
145 report.
results.insert(report.
results.end(), sig.begin(), sig.end());
147 if (check_cancel(cancel_cb)) {
148 report.
logs.push_back(
trs(
"Scan cancelled during signature scan."));
152 emit_progress(progress_cb,
154 trs(
"Looking for lost partitions"),
160 report.
results.insert(report.
results.end(), lost.begin(), lost.end());
162 if (check_cancel(cancel_cb)) {
163 report.
logs.push_back(
trs(
"Scan cancelled during lost partition search."));
167 emit_progress(progress_cb,
168 trs(
"Filesystem probes"),
169 trs(
"Validating NTFS metadata"),
175 report.
results.insert(report.
results.end(), ntfs.begin(), ntfs.end());
177 if (check_cancel(cancel_cb)) {
178 report.
logs.push_back(
trs(
"Scan cancelled during NTFS probe."));
182 emit_progress(progress_cb,
183 trs(
"Filesystem probes"),
184 trs(
"Validating ext4, Btrfs, FAT32, exFAT"),
190 report.
results.insert(report.
results.end(), fs.begin(), fs.end());
193 report.
logs.push_back(
trs(
"No useful results found."));
196 emit_progress(progress_cb,
198 trs(
"Scan finished"),