feat: add pause/start all torrents

This commit is contained in:
Kristofers Solo 2024-01-30 18:57:03 +02:00
parent 61675c3422
commit c3f2b9113a
5 changed files with 33 additions and 21 deletions

View File

@ -18,7 +18,7 @@ impl Torrents {
pub async fn toggle_all(&mut self) {
let torrents: Vec<(Id, TorrentAction)> = self
.torrents()
.torrents
.iter()
.map(|torrent| {
(
@ -39,6 +39,18 @@ impl Torrents {
}
}
pub async fn start_all(&mut self) {
self.action_all(TorrentAction::StartNow)
.await
.expect("Error starting all torrents");
}
pub async fn stop_all(&mut self) {
self.action_all(TorrentAction::Stop)
.await
.expect("Error stopping all torrents");
}
pub fn move_dir(&mut self) -> Result<()> {
todo!()
}
@ -50,4 +62,15 @@ impl Torrents {
pub fn rename(&mut self) -> Result<()> {
todo!()
}
async fn action_all(&mut self, action: TorrentAction) -> transmission_rpc::types::Result<()> {
let ids = self
.torrents
.iter()
.filter_map(|torrent| torrent.id())
.collect::<Vec<_>>();
self.client.torrent_action(action, ids).await?;
Ok(())
}
}

View File

@ -126,7 +126,7 @@ impl<'a> App<'a> {
fn selected(&self) -> Option<&Torrent> {
let idx = self.state.selected()?;
let torrent = self.torrents.torrents().get(idx)?;
let torrent = self.torrents.torrents.get(idx)?;
Some(torrent)
}
}

View File

@ -12,9 +12,9 @@ use url::Url;
pub struct Torrents {
/// Constructs a new instance of [`Torrents`].
pub client: TransClient,
torrents: Vec<Torrent>,
ids: Option<Vec<Id>>,
fields: Option<Vec<TorrentGetField>>,
pub torrents: Vec<Torrent>,
pub ids: Option<Vec<Id>>,
pub fields: Option<Vec<TorrentGetField>>,
}
impl Torrents {
@ -57,11 +57,6 @@ impl Torrents {
.torrents;
self
}
/// Returns [`Vec`] of [`Torrent`] as reference.
pub fn torrents(&self) -> &Vec<Torrent> {
&self.torrents
}
}
impl Debug for Torrents {

View File

@ -6,22 +6,16 @@ use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
pub async fn handle_key_events(key_event: KeyEvent, app: &mut App<'_>) -> Result<()> {
match key_event.code {
// Exit application on `ESC` or `q`
KeyCode::Esc | KeyCode::Char('q') => {
app.quit();
}
KeyCode::Esc | KeyCode::Char('q') => app.quit(),
// Exit application on `Ctrl-C`
KeyCode::Char('c') | KeyCode::Char('C') => {
if key_event.modifiers == KeyModifiers::CONTROL {
app.quit();
}
}
KeyCode::Char('l') | KeyCode::Right => {
app.next_tab();
}
KeyCode::Char('h') | KeyCode::Left => {
app.prev_tab();
}
KeyCode::Char('l') | KeyCode::Right => app.next_tab(),
KeyCode::Char('h') | KeyCode::Left => app.prev_tab(),
KeyCode::Char('j') | KeyCode::Down => app.next(),
KeyCode::Char('k') | KeyCode::Up => app.previous(),
KeyCode::Char('1') => app.switch_tab(0),

View File

@ -8,7 +8,7 @@ use crate::app::{utils::Wrapper, App, Tab};
pub fn render_table<'a>(app: &mut App, tab: Tab) -> Table<'a> {
let fields = tab.fields();
let torrents = app.torrents.set_fields(None).torrents();
let torrents = &app.torrents.set_fields(None).torrents;
let rows: Vec<Row<'_>> = torrents
.iter()