diff --git a/rustfmt.toml b/rustfmt.toml index 91b451d..bfddb63 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,4 @@ max_width = 70 style_edition = "2024" -# version = "Two" \ No newline at end of file +# version = "Two" +imports_granularity = "Module" \ No newline at end of file diff --git a/src/core/content.rs b/src/core/content.rs index 44d3a8a..c9fc36a 100644 --- a/src/core/content.rs +++ b/src/core/content.rs @@ -1,6 +1,7 @@ use crate::Background; -use super::{kinds::ServiceItemKind, service_items::ServiceItem}; +use super::kinds::ServiceItemKind; +use super::service_items::ServiceItem; pub trait Content { fn title(&self) -> String; diff --git a/src/core/file.rs b/src/core/file.rs index b7538a1..2d6a84b 100644 --- a/src/core/file.rs +++ b/src/core/file.rs @@ -1,16 +1,13 @@ -use crate::core::{ - kinds::ServiceItemKind, service_items::ServiceItem, - slide::Background, -}; +use crate::core::kinds::ServiceItemKind; +use crate::core::service_items::ServiceItem; +use crate::core::slide::Background; use cosmic::widget::image::Handle; use miette::{IntoDiagnostic, Result, miette}; -use std::{ - fs::{self, File}, - io::Write, - iter, - path::{Path, PathBuf}, - sync::Arc, -}; +use std::fs::{self, File}; +use std::io::Write; +use std::iter; +use std::path::{Path, PathBuf}; +use std::sync::Arc; use tar::{Archive, Builder}; use tracing::{debug, error}; use zstd::{Decoder, Encoder}; @@ -317,15 +314,13 @@ mod test { use resvg::usvg::fontdb; use super::*; - use crate::{ - core::{ - service_items::ServiceTrait, - slide::{Slide, TextAlignment}, - songs::{Song, VerseName}, - }, - ui::text_svg::text_svg_generator, - }; - use std::{collections::HashMap, path::PathBuf, sync::Arc}; + use crate::core::service_items::ServiceTrait; + use crate::core::slide::{Slide, TextAlignment}; + use crate::core::songs::{Song, VerseName}; + use crate::ui::text_svg::text_svg_generator; + use std::collections::HashMap; + use std::path::PathBuf; + use std::sync::Arc; fn test_song() -> Song { let lyrics = "Some({Verse(number:4):\"Our Savior displayed\\nOn a criminal\\'s cross\\n\\nDarkness rejoiced as though\\nHeaven had lost\\n\\nBut then Jesus arose\\nWith our freedom in hand\\n\\nThat\\'s when death was arrested\\nAnd my life began\\n\\nThat\\'s when death was arrested\\nAnd my life began\",Intro(number:1):\"Death Was Arrested\\nNorth Point Worship\",Verse(number:3):\"Released from my chains,\\nI\\'m a prisoner no more\\n\\nMy shame was a ransom\\nHe faithfully bore\\n\\nHe cancelled my debt and\\nHe called me His friend\\n\\nWhen death was arrested\\nAnd my life began\",Bridge(number:1):\"Oh, we\\'re free, free,\\nForever we\\'re free\\n\\nCome join the song\\nOf all the redeemed\\n\\nYes, we\\'re free, free,\\nForever amen\\n\\nWhen death was arrested\\nAnd my life began\\n\\nOh, we\\'re free, free,\\nForever we\\'re free\\n\\nCome join the song\\nOf all the redeemed\\n\\nYes, we\\'re free, free,\\nForever amen\\n\\nWhen death was arrested\\nAnd my life began\",Other(number:99):\"When death was arrested\\nAnd my life began\\n\\nThat\\'s when death was arrested\\nAnd my life began\",Verse(number:2):\"Ash was redeemed\\nOnly beauty remains\\n\\nMy orphan heart\\nWas given a name\\n\\nMy mourning grew quiet,\\nMy feet rose to dance\\n\\nWhen death was arrested\\nAnd my life began\",Verse(number:1):\"Alone in my sorrow\\nAnd dead in my sin\\n\\nLost without hope\\nWith no place to begin\\n\\nYour love made a way\\nTo let mercy come in\\n\\nWhen death was arrested\\nAnd my life began\",Chorus(number:1):\"Oh, Your grace so free,\\nWashes over me\\n\\nYou have made me new,\\nNow life begins with You\\n\\nIt\\'s Your endless love,\\nPouring down on us\\n\\nYou have made us new,\\nNow life begins with You\"})".to_string(); diff --git a/src/core/images.rs b/src/core/images.rs index f74d12f..9a9d5ea 100644 --- a/src/core/images.rs +++ b/src/core/images.rs @@ -1,20 +1,16 @@ use crate::{Background, Slide, SlideBuilder, TextAlignment}; -use super::{ - content::Content, - kinds::ServiceItemKind, - model::{LibraryKind, Model}, - service_items::ServiceTrait, -}; +use super::content::Content; +use super::kinds::ServiceItemKind; +use super::model::{LibraryKind, Model}; +use super::service_items::ServiceTrait; use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result, miette}; use serde::{Deserialize, Serialize}; use sqlx::{SqliteConnection, SqlitePool, query, query_as}; -use std::{ - mem::replace, - path::{Path, PathBuf}, - sync::Arc, -}; +use std::mem::replace; +use std::path::{Path, PathBuf}; +use std::sync::Arc; use tracing::error; #[derive( diff --git a/src/core/kinds.rs b/src/core/kinds.rs index 59de7ba..63d9f62 100644 --- a/src/core/kinds.rs +++ b/src/core/kinds.rs @@ -1,16 +1,17 @@ -use std::{error::Error, fmt::Display, path::PathBuf}; +use std::error::Error; +use std::fmt::Display; +use std::path::PathBuf; use serde::{Deserialize, Serialize}; -use crate::{ - Slide, - core::{content::Content, service_items::ServiceItem}, -}; +use crate::Slide; +use crate::core::content::Content; +use crate::core::service_items::ServiceItem; -use super::{ - images::Image, presentations::Presentation, songs::Song, - videos::Video, -}; +use super::images::Image; +use super::presentations::Presentation; +use super::songs::Song; +use super::videos::Video; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub enum ServiceItemKind { diff --git a/src/core/model.rs b/src/core/model.rs index fdcf7c7..35e3ad4 100644 --- a/src/core/model.rs +++ b/src/core/model.rs @@ -1,4 +1,7 @@ -use std::{borrow::Cow, fs, mem::replace, path::PathBuf}; +use std::borrow::Cow; +use std::fs; +use std::mem::replace; +use std::path::PathBuf; use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; use miette::{IntoDiagnostic, Result, miette}; diff --git a/src/core/presentations.rs b/src/core/presentations.rs index 0c86775..7a4c5d3 100644 --- a/src/core/presentations.rs +++ b/src/core/presentations.rs @@ -3,25 +3,20 @@ use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result, miette}; use mupdf::{Colorspace, Document, Matrix}; use serde::{Deserialize, Serialize}; -use sqlx::{ - Row, SqliteConnection, SqlitePool, prelude::FromRow, query, - sqlite::SqliteRow, -}; -use std::{ - mem::replace, - path::{Path, PathBuf}, - sync::Arc, -}; +use sqlx::prelude::FromRow; +use sqlx::sqlite::SqliteRow; +use sqlx::{Row, SqliteConnection, SqlitePool, query}; +use std::mem::replace; +use std::path::{Path, PathBuf}; +use std::sync::Arc; use tracing::{debug, error}; use crate::{Background, Slide, SlideBuilder, TextAlignment}; -use super::{ - content::Content, - kinds::ServiceItemKind, - model::{LibraryKind, Model}, - service_items::ServiceTrait, -}; +use super::content::Content; +use super::kinds::ServiceItemKind; +use super::model::{LibraryKind, Model}; +use super::service_items::ServiceTrait; #[derive( Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, diff --git a/src/core/settings.rs b/src/core/settings.rs index e7ecfa1..d64e79a 100644 --- a/src/core/settings.rs +++ b/src/core/settings.rs @@ -1,14 +1,11 @@ // SPDX-License-Identifier: GPL-3.0-only -use cosmic::{ - cosmic_config::{ - self, CosmicConfigEntry, - cosmic_config_derive::CosmicConfigEntry, - }, - theme, -}; +use cosmic::cosmic_config::cosmic_config_derive::CosmicConfigEntry; +use cosmic::cosmic_config::{self, CosmicConfigEntry}; +use cosmic::theme; use serde::{Deserialize, Serialize}; -use std::{collections::VecDeque, path::PathBuf}; +use std::collections::VecDeque; +use std::path::PathBuf; pub const SETTINGS_VERSION: u64 = 1; diff --git a/src/core/slide.rs b/src/core/slide.rs index 721c7fb..cf8c238 100644 --- a/src/core/slide.rs +++ b/src/core/slide.rs @@ -5,10 +5,8 @@ use crisp::types::{Keyword, Symbol, Value}; use iced_video_player::Video; use miette::{Result, miette}; use serde::{Deserialize, Serialize}; -use std::{ - fmt::Display, - path::{Path, PathBuf}, -}; +use std::fmt::Display; +use std::path::{Path, PathBuf}; use tracing::error; use crate::ui::text_svg::{Color, Font, Shadow, Stroke, TextSvg}; diff --git a/src/core/slide_actions.rs b/src/core/slide_actions.rs index 766149f..5b0efd6 100644 --- a/src/core/slide_actions.rs +++ b/src/core/slide_actions.rs @@ -2,7 +2,8 @@ use miette::{IntoDiagnostic, Result}; use std::sync::Arc; use tracing::warn; -use obws::{Client, responses::scenes::Scene}; +use obws::Client; +use obws::responses::scenes::Scene; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] diff --git a/src/core/song_search.rs b/src/core/song_search.rs index bd8c85a..72ae8f6 100644 --- a/src/core/song_search.rs +++ b/src/core/song_search.rs @@ -1,19 +1,15 @@ use std::collections::HashMap; -use crate::core::{ - settings, - songs::{Song, VerseName}, -}; +use crate::core::settings; +use crate::core::songs::{Song, VerseName}; use itertools::Itertools; use miette::{IntoDiagnostic, Result, miette}; -use nom::{ - IResult, Parser, - branch::alt, - bytes::{tag, take_till, take_till1, take_until}, - character::complete::{digit0, newline, space0}, - multi::{many0, separated_list1}, - sequence::{delimited, pair, preceded, terminated}, -}; +use nom::branch::alt; +use nom::bytes::{tag, take_till, take_till1, take_until}; +use nom::character::complete::{digit0, newline, space0}; +use nom::multi::{many0, separated_list1}; +use nom::sequence::{delimited, pair, preceded, terminated}; +use nom::{IResult, Parser}; use reqwest::header; use serde::{Deserialize, Serialize}; use serde_json::Value; diff --git a/src/core/songs.rs b/src/core/songs.rs index 4f50942..0447705 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -1,33 +1,28 @@ -use std::{ - borrow::Cow, collections::HashMap, mem::replace, option::Option, - path::PathBuf, sync::Arc, -}; +use std::borrow::Cow; +use std::collections::HashMap; +use std::mem::replace; +use std::option::Option; +use std::path::PathBuf; +use std::sync::Arc; -use cosmic::{ - cosmic_theme::palette::Srgb, - iced::{ - clipboard::mime::AsMimeTypes, - font::{Style, Weight}, - }, -}; +use cosmic::cosmic_theme::palette::Srgb; +use cosmic::iced::clipboard::mime::AsMimeTypes; +use cosmic::iced::font::{Style, Weight}; use crisp::types::{Keyword, Symbol, Value}; use itertools::Itertools; use miette::{IntoDiagnostic, Result, miette}; use serde::{Deserialize, Serialize}; -use sqlx::{FromRow, Row, SqlitePool, query, sqlite::SqliteRow}; +use sqlx::sqlite::SqliteRow; +use sqlx::{FromRow, Row, SqlitePool, query}; use tracing::{debug, error}; -use crate::{ - Slide, SlideBuilder, - core::{ - content::Content, - kinds::ServiceItemKind, - model::{LibraryKind, Model}, - service_items::ServiceTrait, - slide::{self, Background, TextAlignment}, - }, - ui::text_svg::{Color, Font, Stroke, shadow, stroke}, -}; +use crate::core::content::Content; +use crate::core::kinds::ServiceItemKind; +use crate::core::model::{LibraryKind, Model}; +use crate::core::service_items::ServiceTrait; +use crate::core::slide::{self, Background, TextAlignment}; +use crate::ui::text_svg::{Color, Font, Stroke, shadow, stroke}; +use crate::{Slide, SlideBuilder}; #[derive( Clone, Debug, Default, PartialEq, Serialize, Deserialize, @@ -1186,7 +1181,8 @@ impl Song { #[cfg(test)] pub mod test { - use std::{str::FromStr, sync::Arc}; + use std::str::FromStr; + use std::sync::Arc; use crate::ui::text_svg::text_svg_generator_with_cache; @@ -1194,12 +1190,10 @@ pub mod test { use pretty_assertions::{assert_eq, assert_ne}; use rayon::iter::{IntoParallelIterator, ParallelIterator}; use resvg::usvg::fontdb; - use sqlx::{ - Connection, migrate, - sqlite::{ - SqliteConnectOptions, SqliteConnection, SqlitePoolOptions, - }, + use sqlx::sqlite::{ + SqliteConnectOptions, SqliteConnection, SqlitePoolOptions, }; + use sqlx::{Connection, migrate}; #[test] pub fn test_song_lyrics() { diff --git a/src/core/thumbnail.rs b/src/core/thumbnail.rs index 4347793..a4ee52e 100644 --- a/src/core/thumbnail.rs +++ b/src/core/thumbnail.rs @@ -1,10 +1,9 @@ use dirs; use std::error::Error; -use std::fs; use std::io::{self, Write}; use std::path::{Path, PathBuf}; use std::process::Command; -use std::str; +use std::{fs, str}; use tracing::debug; pub fn bg_from_video( diff --git a/src/core/videos.rs b/src/core/videos.rs index 30480d1..7269e20 100644 --- a/src/core/videos.rs +++ b/src/core/videos.rs @@ -1,21 +1,17 @@ use crate::{Background, SlideBuilder, TextAlignment}; -use super::{ - content::Content, - kinds::ServiceItemKind, - model::{LibraryKind, Model}, - service_items::ServiceTrait, - slide::Slide, -}; +use super::content::Content; +use super::kinds::ServiceItemKind; +use super::model::{LibraryKind, Model}; +use super::service_items::ServiceTrait; +use super::slide::Slide; use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result, miette}; use serde::{Deserialize, Serialize}; use sqlx::{SqliteConnection, SqlitePool, query, query_as}; -use std::{ - mem::replace, - path::{Path, PathBuf}, - sync::Arc, -}; +use std::mem::replace; +use std::path::{Path, PathBuf}; +use std::sync::Arc; use tracing::error; #[derive( diff --git a/src/main.rs b/src/main.rs index 6380c7b..77b5a85 100755 --- a/src/main.rs +++ b/src/main.rs @@ -8,15 +8,14 @@ use core::slide::{ use cosmic::app::{Core, Settings, Task}; use cosmic::cosmic_config::{Config, CosmicConfigEntry}; use cosmic::dialog::file_chooser::{open, save}; -use cosmic::iced::Subscription; use cosmic::iced::alignment::Vertical; use cosmic::iced::core::text::Wrapping; use cosmic::iced::keyboard::{Key, Modifiers}; use cosmic::iced::widget::{column, row, stack}; use cosmic::iced::window::Position; use cosmic::iced::{ - self, Background as IcedBackground, Border, Color, Length, event, - window, + self, Background as IcedBackground, Border, Color, Length, + Subscription, event, window, }; use cosmic::widget::dnd_destination::dnd_destination; use cosmic::widget::menu::key_bind::Modifier; @@ -25,16 +24,15 @@ use cosmic::widget::nav_bar::nav_bar_style; use cosmic::widget::space::{self, horizontal}; use cosmic::widget::tooltip::Position as TPosition; use cosmic::widget::{ - Container, divider, menu, settings, text_input, + Container, Space, button, container, context_menu, divider, icon, + menu, mouse_area, nav_bar, nav_bar_toggle, responsive, + scrollable, search_input, settings, slider, text, text_input, + tooltip, }; -use cosmic::widget::{ - Space, button, context_menu, mouse_area, nav_bar, nav_bar_toggle, - responsive, scrollable, search_input, tooltip, +use cosmic::{ + Application, ApplicationExt, Apply, Element, cosmic_config, + executor, theme, }; -use cosmic::widget::{container, text}; -use cosmic::widget::{icon, slider}; -use cosmic::{Application, ApplicationExt, Apply, Element, executor}; -use cosmic::{cosmic_config, theme}; // use crisp::types::Value; // use lisp::parse_lisp; use miette::{IntoDiagnostic, Result, miette}; @@ -43,8 +41,8 @@ use resvg::usvg::fontdb; use std::collections::HashMap; use std::path::PathBuf; use std::sync::Arc; -use tracing::{debug, level_filters::LevelFilter}; -use tracing::{error, warn}; +use tracing::level_filters::LevelFilter; +use tracing::{debug, error, warn}; use tracing_subscriber::EnvFilter; use ui::EditorMode; use ui::library::{self, Library}; diff --git a/src/ui/gst_video.rs b/src/ui/gst_video.rs index f1691e1..2029de1 100644 --- a/src/ui/gst_video.rs +++ b/src/ui/gst_video.rs @@ -10,9 +10,8 @@ pub fn create_video(url: &Url, framerate: u16) -> Result