diff --git a/backend/src/diff.rs b/backend/src/diff.rs index a5a0837..7051e6e 100644 --- a/backend/src/diff.rs +++ b/backend/src/diff.rs @@ -32,16 +32,27 @@ pub fn diff_torrents(old: &[Torrent], new: &[Torrent]) -> Vec { let mut update = TorrentUpdate { hash: new_t.hash.clone(), + name: None, + size: None, down_rate: None, up_rate: None, percent_complete: None, completed: None, eta: None, status: None, + error_message: None, }; let mut has_changes = false; + if old_t.name != new_t.name { + update.name = Some(new_t.name.clone()); + has_changes = true; + } + if old_t.size != new_t.size { + update.size = Some(new_t.size); + has_changes = true; + } if old_t.down_rate != new_t.down_rate { update.down_rate = Some(new_t.down_rate); has_changes = true; @@ -67,6 +78,10 @@ pub fn diff_torrents(old: &[Torrent], new: &[Torrent]) -> Vec { update.status = Some(new_t.status.clone()); has_changes = true; } + if old_t.error_message != new_t.error_message { + update.error_message = Some(new_t.error_message.clone()); + has_changes = true; + } if has_changes { events.push(AppEvent::Update(update)); diff --git a/frontend/src/app.rs b/frontend/src/app.rs index 897a18e..e1b1279 100644 --- a/frontend/src/app.rs +++ b/frontend/src/app.rs @@ -128,12 +128,15 @@ pub fn App() -> impl IntoView { AppEvent::Update(diff) => { set_torrents.update(|list| { if let Some(target) = list.iter_mut().find(|t| t.hash == diff.hash) { + if let Some(v) = diff.name { target.name = v; } + if let Some(v) = diff.size { target.size = v; } if let Some(v) = diff.down_rate { target.down_rate = v; } if let Some(v) = diff.up_rate { target.up_rate = v; } if let Some(v) = diff.percent_complete { target.percent_complete = v; } if let Some(v) = diff.completed { target.completed = v; } if let Some(v) = diff.eta { target.eta = v; } if let Some(v) = diff.status { target.status = v; } + if let Some(v) = diff.error_message { target.error_message = v; } } }); } @@ -435,8 +438,8 @@ pub fn App() -> impl IntoView { "text-blue-500 bg-blue-500/10 border-blue-500/20", @@ -515,7 +518,7 @@ pub fn App() -> impl IntoView {
"text-blue-500", diff --git a/shared/src/lib.rs b/shared/src/lib.rs index 4619cf4..3663792 100644 --- a/shared/src/lib.rs +++ b/shared/src/lib.rs @@ -35,12 +35,15 @@ pub enum AppEvent { #[derive(Debug, Serialize, Deserialize, Clone)] pub struct TorrentUpdate { pub hash: String, + pub name: Option, + pub size: Option, pub down_rate: Option, pub up_rate: Option, pub percent_complete: Option, pub completed: Option, pub eta: Option, pub status: Option, + pub error_message: Option, } #[derive(Debug, Serialize, Deserialize, Clone)]