pub struct DownloadEngine { /* private fields */ }Expand description
The main download engine
Implementations§
Source§impl DownloadEngine
impl DownloadEngine
Sourcepub async fn new(config: EngineConfig) -> Result<Arc<Self>>
pub async fn new(config: EngineConfig) -> Result<Arc<Self>>
Create a new download engine with the given configuration
When the storage feature is enabled and config.database_path is
set, download state is persisted to the built-in SQLite storage. To
use a custom Storage implementation instead, see
with_storage.
Sourcepub async fn with_storage(
config: EngineConfig,
storage: Arc<dyn Storage>,
) -> Result<Arc<Self>>
pub async fn with_storage( config: EngineConfig, storage: Arc<dyn Storage>, ) -> Result<Arc<Self>>
Create a new download engine that persists state to the given
Storage implementation.
This allows applications that maintain their own metadata store
(custom database, sidecar files, …) to get full pause/resume and
crash-recovery support without the built-in SQLite storage or the
storage feature. Previously persisted downloads are loaded from
the given storage during construction.
config.database_path is ignored when this constructor is used; the
injected storage always wins.
§Example
use std::sync::Arc;
use gosh_dl::{DownloadEngine, EngineConfig, MemoryStorage};
let storage = Arc::new(MemoryStorage::new());
let engine = DownloadEngine::with_storage(EngineConfig::default(), storage).await?;Sourcepub async fn add_http(
&self,
url: &str,
options: DownloadOptions,
) -> Result<DownloadId>
pub async fn add_http( &self, url: &str, options: DownloadOptions, ) -> Result<DownloadId>
Add an HTTP/HTTPS download
Sourcepub async fn add_torrent(
&self,
torrent_data: &[u8],
options: DownloadOptions,
) -> Result<DownloadId>
pub async fn add_torrent( &self, torrent_data: &[u8], options: DownloadOptions, ) -> Result<DownloadId>
Add a BitTorrent download from torrent file data
Sourcepub async fn add_magnet(
&self,
magnet_uri: &str,
options: DownloadOptions,
) -> Result<DownloadId>
pub async fn add_magnet( &self, magnet_uri: &str, options: DownloadOptions, ) -> Result<DownloadId>
Add a BitTorrent download from a magnet URI
Sourcepub async fn pause(&self, id: DownloadId) -> Result<()>
pub async fn pause(&self, id: DownloadId) -> Result<()>
Pause a download
Sourcepub async fn resume(&self, id: DownloadId) -> Result<()>
pub async fn resume(&self, id: DownloadId) -> Result<()>
Resume a paused download
Sourcepub async fn cancel(&self, id: DownloadId, delete_files: bool) -> Result<()>
pub async fn cancel(&self, id: DownloadId, delete_files: bool) -> Result<()>
Cancel a download and optionally delete files
Sourcepub async fn pause_all(&self) -> BatchResult
pub async fn pause_all(&self) -> BatchResult
Pause every active or queued download.
Queued downloads are paused as well so that freed slots do not
immediately promote them back into running state. Downloads that
change state while the batch is in flight are reported as skipped.
Per-download StateChanged/Paused events are emitted as usual;
there is no separate batch event.
Sourcepub async fn resume_all(&self) -> BatchResult
pub async fn resume_all(&self) -> BatchResult
Resume every paused download.
Downloads that change state while the batch is in flight are reported
as skipped. Per-download Resumed events are emitted as usual.
Sourcepub async fn cancel_all(&self, delete_files: bool) -> BatchResult
pub async fn cancel_all(&self, delete_files: bool) -> BatchResult
Cancel every download, optionally deleting downloaded files.
Tracked recursive job records are removed as well, since all of their
children are gone after this call. Per-download Removed events are
emitted as usual.
Sourcepub fn status(&self, id: DownloadId) -> Option<DownloadStatus>
pub fn status(&self, id: DownloadId) -> Option<DownloadStatus>
Get the status of a download
Sourcepub fn list(&self) -> Vec<DownloadStatus>
pub fn list(&self) -> Vec<DownloadStatus>
List all downloads
Sourcepub fn active(&self) -> Vec<DownloadStatus>
pub fn active(&self) -> Vec<DownloadStatus>
Get active downloads
Sourcepub fn waiting(&self) -> Vec<DownloadStatus>
pub fn waiting(&self) -> Vec<DownloadStatus>
Get waiting/queued downloads
Sourcepub fn stopped(&self) -> Vec<DownloadStatus>
pub fn stopped(&self) -> Vec<DownloadStatus>
Get stopped downloads (paused, completed, error)
Sourcepub fn global_stats(&self) -> GlobalStats
pub fn global_stats(&self) -> GlobalStats
Get global statistics
Sourcepub fn subscribe(&self) -> Receiver<DownloadEvent>
pub fn subscribe(&self) -> Receiver<DownloadEvent>
Subscribe to download events
Sourcepub fn set_config(&self, config: EngineConfig) -> Result<()>
pub fn set_config(&self, config: EngineConfig) -> Result<()>
Update engine configuration
Sourcepub fn get_config(&self) -> EngineConfig
pub fn get_config(&self) -> EngineConfig
Get current configuration
Sourcepub fn set_priority(
&self,
id: DownloadId,
priority: DownloadPriority,
) -> Result<()>
pub fn set_priority( &self, id: DownloadId, priority: DownloadPriority, ) -> Result<()>
Set the priority of a download
This affects the order in which downloads acquire slots when queued. If the download is already active, the priority is updated but won’t affect scheduling until the download is paused and resumed.
The priority change is persisted to storage immediately (non-blocking).
Sourcepub fn get_priority(&self, id: DownloadId) -> Option<DownloadPriority>
pub fn get_priority(&self, id: DownloadId) -> Option<DownloadPriority>
Get the current priority of a download
Sourcepub fn get_bandwidth_limits(&self) -> BandwidthLimits
pub fn get_bandwidth_limits(&self) -> BandwidthLimits
Get current bandwidth limits (accounting for schedule rules)
Sourcepub fn set_schedule_rules(&self, rules: Vec<ScheduleRule>)
pub fn set_schedule_rules(&self, rules: Vec<ScheduleRule>)
Update the bandwidth schedule rules
The new rules take effect immediately after evaluation.
Sourcepub fn get_schedule_rules(&self) -> Vec<ScheduleRule>
pub fn get_schedule_rules(&self) -> Vec<ScheduleRule>
Get the current schedule rules
Trait Implementations§
Source§impl Drop for DownloadEngine
impl Drop for DownloadEngine
Auto Trait Implementations§
impl !Freeze for DownloadEngine
impl !RefUnwindSafe for DownloadEngine
impl !UnwindSafe for DownloadEngine
impl Send for DownloadEngine
impl Sync for DownloadEngine
impl Unpin for DownloadEngine
impl UnsafeUnpin for DownloadEngine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.