Add download lifecycle controls

This commit is contained in:
2026-05-07 21:36:39 -04:00
parent f93943ccfe
commit 0ed8c09395
5 changed files with 261 additions and 3 deletions
@@ -25,6 +25,49 @@ impl BrowserCore {
Ok(download_id)
}
pub fn pause_download(&mut self, download_id: &DownloadId) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.pause()?;
Ok(())
}
pub fn resume_download(&mut self, download_id: &DownloadId) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.resume()?;
Ok(())
}
pub fn cancel_download(&mut self, download_id: &DownloadId) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.cancel()?;
Ok(())
}
pub fn retry_download(&mut self, download_id: &DownloadId) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.retry()?;
Ok(())
}
pub fn update_download_progress(
&mut self,
download_id: &DownloadId,
received_bytes: u64,
) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.update_progress(received_bytes)?;
Ok(())
}
pub fn complete_download(
&mut self,
download_id: &DownloadId,
received_bytes: u64,
) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.complete(received_bytes)?;
Ok(())
}
pub fn fail_download(&mut self, download_id: &DownloadId) -> Result<(), CoreError> {
self.download_entry_mut(download_id)?.fail()?;
Ok(())
}
pub(super) fn visible_downloads(&self) -> Vec<DownloadEntry> {
self.download_entries
.iter()
@@ -32,4 +75,14 @@ impl BrowserCore {
.cloned()
.collect()
}
fn download_entry_mut(
&mut self,
download_id: &DownloadId,
) -> Result<&mut DownloadEntry, CoreError> {
self.download_entries
.iter_mut()
.find(|entry| entry.id() == download_id)
.ok_or_else(|| CoreError::DownloadNotFound { id: download_id.clone() })
}
}