Move subtitle config into struct

This commit is contained in:
Avery 2024-01-19 18:52:42 -05:00
parent 3f7dabe137
commit b54a000c87
4 changed files with 73 additions and 52 deletions

View File

@ -157,7 +157,10 @@ impl Default for VideoPlayerConfig {
impl Migrate<Config> for ConfigV1 {
fn migrate(self) -> Config {
use config::{Account, GeneralConfig, Server, VideoPlayerConfig, Window};
use config::{
video_player_config::VideoPlayerSubtitlesConfig, Account, GeneralConfig, Server,
VideoPlayerConfig, Window,
};
let servers = self
.servers
@ -225,11 +228,13 @@ impl Migrate<Config> for ConfigV1 {
config::video_player_config::VideoPlayerOnLeftClick::ToggleControls
}
},
subtitle_scale: self.video_player.subtitle_scale,
subtitle_colour: self.video_player.subtitle_colour,
subtitle_background_colour: self.video_player.subtitle_background_colour,
subtitle_position: self.video_player.subtitle_position,
subtitle_font: self.video_player.subtitle_font,
subtitles: VideoPlayerSubtitlesConfig {
scale: self.video_player.subtitle_scale,
colour: self.video_player.subtitle_colour,
background_colour: self.video_player.subtitle_background_colour,
position: self.video_player.subtitle_position,
font: self.video_player.subtitle_font,
},
backend: match self.video_player.backend {
VideoPlayerBackendPreference::Mpv => {
config::video_player_config::VideoPlayerBackendPreference::Mpv

View File

@ -22,12 +22,7 @@ pub struct VideoPlayerConfig {
pub on_left_click: VideoPlayerOnLeftClick,
pub duration_display: DurationDisplay,
#[serde(serialize_with = "round_one_place")]
pub subtitle_scale: f64,
pub subtitle_colour: String,
pub subtitle_background_colour: String,
pub subtitle_position: u32,
pub subtitle_font: VideoPlayerSubtitleFont,
pub subtitles: VideoPlayerSubtitlesConfig,
pub intro_skipper: bool,
pub intro_skipper_auto_skip: bool,
@ -49,11 +44,7 @@ impl Default for VideoPlayerConfig {
on_left_click: VideoPlayerOnLeftClick::default(),
duration_display: DurationDisplay::default(),
subtitle_scale: 1.0,
subtitle_colour: "#FFFFFFFF".into(),
subtitle_background_colour: "#00000000".into(),
subtitle_position: 100,
subtitle_font: VideoPlayerSubtitleFont::default(),
subtitles: VideoPlayerSubtitlesConfig::default(),
backend: VideoPlayerBackendPreference::default(),
hls_playback: false,
@ -84,6 +75,28 @@ pub enum VideoPlayerOnLeftClick {
ToggleControls,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct VideoPlayerSubtitlesConfig {
#[serde(serialize_with = "round_one_place")]
pub scale: f64,
pub colour: String,
pub background_colour: String,
pub position: u32,
pub font: VideoPlayerSubtitleFont,
}
impl Default for VideoPlayerSubtitlesConfig {
fn default() -> Self {
Self {
scale: 1.0,
colour: "#FFFFFFFF".into(),
background_colour: "#00000000".into(),
position: 100,
font: VideoPlayerSubtitleFont::default(),
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum VideoPlayerBackendPreference {
#[default]

View File

@ -60,7 +60,7 @@ impl SimpleComponent for SubtitlesPreferences {
add_suffix = &gtk::Label {
#[watch]
set_label: &model.video_player_config.subtitle_colour,
set_label: &model.video_player_config.subtitles.colour,
},
add_suffix = &gtk::ColorDialogButton {
@ -68,8 +68,8 @@ impl SimpleComponent for SubtitlesPreferences {
set_dialog = &gtk::ColorDialog,
#[watch]
#[block_signal(colour_change_handler)]
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitle_colour.clone())
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitle_colour.clone())),
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitles.colour.clone())
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitles.colour.clone())),
connect_rgba_notify[sender] => move |btn| {
sender.input(SubtitlesPreferencesInput::SubtitleColour(btn.rgba().into()));
} @colour_change_handler,
@ -81,7 +81,7 @@ impl SimpleComponent for SubtitlesPreferences {
add_suffix = &gtk::Label {
#[watch]
set_label: &model.video_player_config.subtitle_background_colour,
set_label: &model.video_player_config.subtitles.background_colour,
},
add_suffix = &gtk::ColorDialogButton {
@ -89,8 +89,8 @@ impl SimpleComponent for SubtitlesPreferences {
set_dialog = &gtk::ColorDialog,
#[watch]
#[block_signal(background_colour_change_handler)]
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitle_background_colour.clone())
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitle_background_colour.clone())),
set_rgba: &gdk::RGBA::parse(model.video_player_config.subtitles.background_colour.clone())
.unwrap_or_else(|_| panic!("Error parsing colour: {}", model.video_player_config.subtitles.background_colour.clone())),
connect_rgba_notify[sender] => move |btn| {
sender.input(SubtitlesPreferencesInput::SubtitleBackgroundColour(btn.rgba().into()));
} @background_colour_change_handler,
@ -106,7 +106,7 @@ impl SimpleComponent for SubtitlesPreferences {
#[watch]
#[block_signal(subtitle_font_change_handler)]
set_font_desc: &model.video_player_config.subtitle_font.clone().into(),
set_font_desc: &model.video_player_config.subtitles.font.clone().into(),
set_use_font: true,
set_dialog = &gtk::FontDialog {
set_filter: Some(&model.font_filter()),
@ -144,7 +144,7 @@ impl SimpleComponent for SubtitlesPreferences {
add_row = &adw::SpinRow::new(
Some(&gtk::Adjustment::new(
model.video_player_config.subtitle_scale,
model.video_player_config.subtitles.scale,
0.0, 100.0, 0.1, 1.0, 0.0,
)),
// Climb rate
@ -157,7 +157,7 @@ impl SimpleComponent for SubtitlesPreferences {
#[watch]
#[block_signal(subtitle_scale_change_handler)]
set_value: model.video_player_config.subtitle_scale,
set_value: model.video_player_config.subtitles.scale,
connect_changed[sender] => move |spinrow| {
sender.input(SubtitlesPreferencesInput::SubtitleScale(spinrow.value()));
} @subtitle_scale_change_handler,
@ -166,7 +166,7 @@ impl SimpleComponent for SubtitlesPreferences {
add_row = &adw::SpinRow::new(
Some(&gtk::Adjustment::new(
model.video_player_config.subtitle_position as f64,
model.video_player_config.subtitles.position as f64,
0.0, 150.0, 1.0, 1.0, 0.0,
)),
// Climb rate
@ -179,7 +179,7 @@ impl SimpleComponent for SubtitlesPreferences {
#[watch]
#[block_signal(subtitle_position_change_handler)]
set_value: model.video_player_config.subtitle_position as f64,
set_value: model.video_player_config.subtitles.position as f64,
connect_changed[sender] => move |spinrow| {
sender.input(SubtitlesPreferencesInput::SubtitlePosition(spinrow.value()));
} @subtitle_position_change_handler,
@ -220,26 +220,27 @@ impl SimpleComponent for SubtitlesPreferences {
}
SubtitlesPreferencesInput::Reset => {
let default = VideoPlayerConfig::default();
config.video_player.subtitle_scale = default.subtitle_scale;
config.video_player.subtitle_colour = default.subtitle_colour;
config.video_player.subtitle_background_colour = default.subtitle_background_colour;
config.video_player.subtitle_position = default.subtitle_position;
config.video_player.subtitle_font = default.subtitle_font;
config.video_player.subtitles.scale = default.subtitles.scale;
config.video_player.subtitles.colour = default.subtitles.colour;
config.video_player.subtitles.background_colour =
default.subtitles.background_colour;
config.video_player.subtitles.position = default.subtitles.position;
config.video_player.subtitles.font = default.subtitles.font;
}
SubtitlesPreferencesInput::SubtitleScale(subtitle_scale) => {
config.video_player.subtitle_scale = subtitle_scale;
SubtitlesPreferencesInput::SubtitleScale(scale) => {
config.video_player.subtitles.scale = scale;
}
SubtitlesPreferencesInput::SubtitleColour(colour) => {
config.video_player.subtitle_colour = colour.to_hex();
config.video_player.subtitles.colour = colour.to_hex();
}
SubtitlesPreferencesInput::SubtitleBackgroundColour(background_colour) => {
config.video_player.subtitle_background_colour = background_colour.to_hex();
config.video_player.subtitles.background_colour = background_colour.to_hex();
}
SubtitlesPreferencesInput::SubtitlePosition(position) => {
config.video_player.subtitle_position = position as u32;
config.video_player.subtitles.position = position as u32;
}
SubtitlesPreferencesInput::SubtitleFont(font) => {
config.video_player.subtitle_font = font;
config.video_player.subtitles.font = font;
}
}
@ -252,12 +253,12 @@ impl SubtitlesPreferences {
let default = VideoPlayerConfig::default();
let video_player_config = &self.video_player_config;
(video_player_config.subtitle_scale != default.subtitle_scale)
|| (video_player_config.subtitle_colour != default.subtitle_colour)
|| (video_player_config.subtitle_background_colour
!= default.subtitle_background_colour)
|| (video_player_config.subtitle_position != default.subtitle_position)
|| (video_player_config.subtitle_font != default.subtitle_font)
(video_player_config.subtitles.scale != default.subtitles.scale)
|| (video_player_config.subtitles.colour != default.subtitles.colour)
|| (video_player_config.subtitles.background_colour
!= default.subtitles.background_colour)
|| (video_player_config.subtitles.position != default.subtitles.position)
|| (video_player_config.subtitles.font != default.subtitles.font)
}
fn font_filter(&self) -> CustomFilter {

View File

@ -571,33 +571,35 @@ impl VideoPlayer {
fn configure_player(&self, video_player_config: &VideoPlayerConfig) {
let player = self.backend.borrow();
player.set_subtitle_scale(video_player_config.subtitle_scale);
player.set_subtitle_scale(video_player_config.subtitles.scale);
player.set_subtitle_colour(
video_player_config
.subtitle_colour
.subtitles
.colour
.clone()
.try_into()
.unwrap_or_else(|_| {
panic!(
"Error setting subtitle colour: {}",
video_player_config.subtitle_colour
video_player_config.subtitles.colour
)
}),
);
player.set_subtitle_background_colour(
video_player_config
.subtitle_background_colour
.subtitles
.background_colour
.clone()
.try_into()
.unwrap_or_else(|_| {
panic!(
"Error setting subtitle background colour: {}",
video_player_config.subtitle_background_colour
video_player_config.subtitles.background_colour
)
}),
);
player.set_subtitle_position(video_player_config.subtitle_position);
player.set_subtitle_font(&video_player_config.subtitle_font);
player.set_subtitle_position(video_player_config.subtitles.position);
player.set_subtitle_font(&video_player_config.subtitles.font);
}
fn set_player_state(&mut self, new_state: PlayerState) {