Skip to main content

eureka_mmanager/download/
messages.rs

1pub mod chapter;
2pub mod cover;
3pub mod manga;
4pub mod state;
5
6use std::{fmt::Debug, marker::PhantomData, sync::Arc};
7
8use actix::prelude::*;
9use tokio::sync::Notify;
10use uuid::Uuid;
11
12use crate::recipients::MaybeWeakRecipient;
13
14use super::state::{TaskState, WaitForFinished};
15
16#[derive(Debug, Clone, Copy)]
17pub struct DropSingleTaskMessage(pub Uuid);
18
19impl Message for DropSingleTaskMessage {
20    type Result = ();
21}
22
23#[non_exhaustive]
24#[derive(Clone, Copy, Debug)]
25pub enum TaskSubscriberMessages<State> {
26    Dropped,
27    State(State),
28    ID(Uuid),
29}
30
31impl<State> Message for TaskSubscriberMessages<State> {
32    type Result = ();
33}
34
35#[derive(Debug)]
36pub struct SubcribeMessage<T>(pub MaybeWeakRecipient<TaskSubscriberMessages<T>>)
37where
38    T: Send;
39
40impl<T> Message for SubcribeMessage<T>
41where
42    T: Send,
43{
44    type Result = ();
45}
46
47#[derive(Debug, Default, Clone, Copy, Message)]
48#[rtype(result = "()")]
49pub struct StartDownload;
50
51#[derive(Debug, Default)]
52pub struct WaitForFinishedMessage<T: ?Sized, L: ?Sized>(PhantomData<T>, PhantomData<L>);
53
54impl<T: ?Sized, L: ?Sized> WaitForFinishedMessage<T, L> {
55    pub fn new() -> Self {
56        Self(PhantomData::<T>, PhantomData::<L>)
57    }
58}
59
60impl<T, L> Message for WaitForFinishedMessage<T, L>
61where
62    T: 'static,
63    L: 'static,
64{
65    type Result = WaitForFinished<T, L>;
66}
67
68#[derive(Debug, Clone, Copy, Default, Message)]
69#[rtype(result = "()")]
70pub struct CancelTaskMessage;
71
72#[derive(Debug, Clone, Copy, Default)]
73pub struct TaskStateMessage;
74
75impl Message for TaskStateMessage {
76    type Result = TaskState;
77}
78
79pub struct GetTasksListMessage;
80
81impl Message for GetTasksListMessage {
82    type Result = Vec<Uuid>;
83}
84
85pub struct SubcribeToManagerMessage;
86
87impl Message for SubcribeToManagerMessage {
88    type Result = Arc<Notify>;
89}
90
91#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
92pub struct GetTaskMessage<T> {
93    id: Uuid,
94    _phantom: PhantomData<T>,
95}
96
97unsafe impl<T: Actor> Send for GetTaskMessage<T> {}
98
99unsafe impl<T: Actor> Sync for GetTaskMessage<T> {}
100
101impl<T> GetTaskMessage<T> {
102    pub fn new(id: Uuid) -> Self {
103        Self {
104            id,
105            _phantom: PhantomData,
106        }
107    }
108}
109
110impl<T> From<Uuid> for GetTaskMessage<T> {
111    fn from(value: Uuid) -> Self {
112        Self::new(value)
113    }
114}
115
116impl<T> From<GetTaskMessage<T>> for Uuid {
117    fn from(value: GetTaskMessage<T>) -> Self {
118        value.id
119    }
120}
121
122impl<T> Message for GetTaskMessage<T>
123where
124    T: Actor,
125{
126    type Result = Option<Addr<T>>;
127}
128
129#[derive(Debug, Message)]
130#[rtype(result = "()")]
131pub(crate) struct StopTask;