From 74712b5410f94bd43acbcb5275a37204a1bdd89c Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 13 Mar 2018 03:47:46 +0200 Subject: [PATCH] EpisodeWidget: Remove unnecessary `Arc`s. `DateMachine` and `DurationMachine` are only mutated during initialization and thus do not need shared ownership. `TitleMachine` is only mutated during initialization and after that only the callback will keep holding a referrence to it. The `EpisodeWidget`s get dropped after initialization. So it's justifiable to use `Rc>` instead of `Arc`. --- hammond-gtk/src/widgets/episode.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index 5b59a86..2c8c02e 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -17,15 +17,16 @@ use widgets::episode_states::*; use std::ops::DerefMut; use std::path::Path; +use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::sync::mpsc::Sender; -#[derive(Debug, Clone)] +#[derive(Debug)] pub struct EpisodeWidget { pub container: gtk::Box, - date: Arc>, - title: Arc>, - duration: Arc>, + date: Mutex, + duration: Mutex, + title: Rc>, media: Arc>, } @@ -50,11 +51,10 @@ impl Default for EpisodeWidget { let separator2: gtk::Label = builder.get_object("separator2").unwrap(); let prog_separator: gtk::Label = builder.get_object("prog_separator").unwrap(); - let title_machine = Arc::new(Mutex::new(TitleMachine::new(title, false))); - let date_machine = Arc::new(Mutex::new(DateMachine::new(date, 0))); - let dur = DurationMachine::new(duration, separator1, None); - let duration_machine = Arc::new(Mutex::new(dur)); - let _media = MediaMachine::new( + let date_machine = Mutex::new(DateMachine::new(date, 0)); + let dur_machine = Mutex::new(DurationMachine::new(duration, separator1, None)); + let title_machine = Rc::new(Mutex::new(TitleMachine::new(title, false))); + let media = MediaMachine::new( play, download, progress, @@ -64,12 +64,12 @@ impl Default for EpisodeWidget { separator2, prog_separator, ); - let media_machine = Arc::new(Mutex::new(_media)); + let media_machine = Arc::new(Mutex::new(media)); EpisodeWidget { container, title: title_machine, - duration: duration_machine, + duration: dur_machine, date: date_machine, media: media_machine, } @@ -222,7 +222,7 @@ fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender) -> Resul #[inline] fn on_play_bttn_clicked( episode: &mut EpisodeWidgetQuery, - title: Arc>, + title: Rc>, sender: Sender, ) -> Result<(), Error> { open_uri(episode.rowid())?;