Skip to main content

eureka_mmanager/download/chapter/task/messages/
cancel.rs

1use actix::{AsyncContext, Handler};
2
3use crate::download::{
4    chapter::task::{ChapterDownloadTask as Task, ChapterDownloadTaskState as State},
5    messages::CancelTaskMessage,
6    traits::task::Cancelable,
7};
8
9impl Handler<CancelTaskMessage> for Task {
10    type Result = ();
11    fn handle(&mut self, _msg: CancelTaskMessage, ctx: &mut Self::Context) -> Self::Result {
12        self.cancel(ctx);
13    }
14}
15
16impl Cancelable for Task {
17    fn cancel(&mut self, ctx: &mut Self::Context) {
18        if let Some(handle) = self.handle.take() {
19            ctx.cancel_future(handle);
20        }
21        *self.state.write() = State::Canceled;
22        self.sync_state_subscribers();
23    }
24}