Add download lifecycle controls
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use ely_domain::{DomainError, ProfileId, SpaceId, TabId};
|
||||
use ely_domain::{DomainError, DownloadId, ProfileId, SpaceId, TabId};
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Clone, Debug, Error, Eq, PartialEq)]
|
||||
@@ -15,6 +15,9 @@ pub enum CoreError {
|
||||
#[error("profile not found: {id}")]
|
||||
ProfileNotFound { id: ProfileId },
|
||||
|
||||
#[error("download not found: {id}")]
|
||||
DownloadNotFound { id: DownloadId },
|
||||
|
||||
#[error("favorite limit reached: {limit}")]
|
||||
FavoriteLimitReached { limit: usize },
|
||||
|
||||
|
||||
@@ -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() })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user