@@ -222,7 +222,6 @@ cpp::result<std::string, std::string> DownloadService::StopTask(
222
222
CTL_INF (" Stopping task: " << task_id);
223
223
auto cancelled = task_queue_.cancelTask (task_id);
224
224
if (cancelled) {
225
- EmitTaskStopped (task_id);
226
225
return task_id;
227
226
}
228
227
CTL_INF (" Not found in pending task, try to find task " + task_id +
@@ -236,7 +235,6 @@ cpp::result<std::string, std::string> DownloadService::StopTask(
236
235
std::lock_guard<std::mutex> lock (stop_mutex_);
237
236
tasks_to_stop_.insert (task_id);
238
237
}
239
- EmitTaskStopped (task_id);
240
238
return task_id;
241
239
}
242
240
@@ -356,7 +354,15 @@ void DownloadService::ProcessTask(DownloadTask& task, int worker_id) {
356
354
fclose (file);
357
355
}
358
356
359
- if (!result.has_error ()) {
357
+ if (result.has_error ()) {
358
+ if (result.error ().type == DownloadEventType::DownloadStopped) {
359
+ RemoveTaskFromStopList (task.id );
360
+ EmitTaskStopped (task.id );
361
+ } else {
362
+ EmitTaskError (task.id );
363
+ }
364
+ } else {
365
+ // success
360
366
// if the download has error, we are not run the callback
361
367
ExecuteCallback (task);
362
368
EmitTaskCompleted (task.id );
@@ -369,7 +375,7 @@ void DownloadService::ProcessTask(DownloadTask& task, int worker_id) {
369
375
worker_data->downloading_data_map .clear ();
370
376
}
371
377
372
- cpp::result<void , std::string > DownloadService::ProcessMultiDownload (
378
+ cpp::result<void , ProcessDownloadFailed > DownloadService::ProcessMultiDownload (
373
379
DownloadTask& task, CURLM* multi_handle,
374
380
const std::vector<std::pair<CURL*, FILE*>>& handles) {
375
381
auto still_running = 0 ;
@@ -379,25 +385,21 @@ cpp::result<void, std::string> DownloadService::ProcessMultiDownload(
379
385
380
386
auto result = ProcessCompletedTransfers (multi_handle);
381
387
if (result.has_error ()) {
382
- EmitTaskError (task.id );
383
- {
384
- std::lock_guard<std::mutex> lock (event_emit_map_mutex);
385
- event_emit_map_.erase (task.id );
386
- }
387
- return cpp::fail (result.error ());
388
+ return cpp::fail (ProcessDownloadFailed{
389
+ .message = result.error (),
390
+ .task_id = task.id ,
391
+ .type = DownloadEventType::DownloadError,
392
+ });
388
393
}
389
394
390
395
if (IsTaskTerminated (task.id ) || stop_flag_) {
391
396
CTL_INF (" IsTaskTerminated " + std::to_string (IsTaskTerminated (task.id )));
392
397
CTL_INF (" stop_flag_ " + std::to_string (stop_flag_));
393
- {
394
- std::lock_guard<std::mutex> lock (event_emit_map_mutex);
395
- event_emit_map_.erase (task.id );
396
- }
397
- CTL_INF (" Emit task stopped: " << task.id );
398
- EmitTaskStopped (task.id );
399
- RemoveTaskFromStopList (task.id );
400
- return cpp::fail (" Task " + task.id + " cancelled" );
398
+ return cpp::fail (ProcessDownloadFailed{
399
+ .message = result.error (),
400
+ .task_id = task.id ,
401
+ .type = DownloadEventType::DownloadStopped,
402
+ });
401
403
}
402
404
} while (still_running);
403
405
return {};
0 commit comments