updating and formatting more
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2025-09-30 13:14:03 -05:00
parent 49117a39a3
commit 144fba3706
25 changed files with 392 additions and 346 deletions

View file

@ -10,8 +10,8 @@ use crisp::types::{Keyword, Symbol, Value};
use miette::{IntoDiagnostic, Result};
use serde::{Deserialize, Serialize};
use sqlx::{
pool::PoolConnection, query, query_as, Sqlite, SqliteConnection,
SqlitePool,
Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection,
query, query_as,
};
use std::path::{Path, PathBuf};
use tracing::{debug, error};

View file

@ -3,8 +3,8 @@ use std::{error::Error, fmt::Display};
use serde::{Deserialize, Serialize};
use crate::{
core::{content::Content, service_items::ServiceItem},
Slide,
core::{content::Content, service_items::ServiceItem},
};
use super::{

View file

@ -1,7 +1,7 @@
use std::{borrow::Cow, mem::replace};
use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes};
use miette::{miette, IntoDiagnostic, Result};
use miette::{IntoDiagnostic, Result, miette};
use serde::{Deserialize, Serialize};
use sqlx::{Connection, SqliteConnection};
use tracing::debug;

View file

@ -4,8 +4,8 @@ use miette::{IntoDiagnostic, Result};
use mupdf::{Colorspace, Document, Matrix};
use serde::{Deserialize, Serialize};
use sqlx::{
pool::PoolConnection, prelude::FromRow, query, sqlite::SqliteRow,
Row, Sqlite, SqliteConnection, SqlitePool,
Row, Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection,
prelude::FromRow, query, sqlite::SqliteRow,
};
use std::path::{Path, PathBuf};
use tracing::{debug, error};

View file

@ -12,7 +12,7 @@ use crate::Slide;
use super::images::Image;
use super::presentations::Presentation;
use super::songs::{lisp_to_song, Song};
use super::songs::{Song, lisp_to_song};
use super::videos::Video;
use super::kinds::ServiceItemKind;

View file

@ -2,7 +2,7 @@ use cosmic::widget::image::Handle;
// use cosmic::dialog::ashpd::url::Url;
use crisp::types::{Keyword, Symbol, Value};
use iced_video_player::Video;
use miette::{miette, Result};
use miette::{Result, miette};
use serde::{Deserialize, Serialize};
use std::{
fmt::Display,

View file

@ -1,15 +1,15 @@
use std::{collections::HashMap, option::Option, path::PathBuf};
use crisp::types::{Keyword, Symbol, Value};
use miette::{miette, IntoDiagnostic, Result};
use miette::{IntoDiagnostic, Result, miette};
use serde::{Deserialize, Serialize};
use sqlx::{
pool::PoolConnection, query, sqlite::SqliteRow, Acquire, FromRow,
Row, Sqlite, SqliteConnection, SqlitePool,
Acquire, FromRow, Row, Sqlite, SqliteConnection, SqlitePool,
pool::PoolConnection, query, sqlite::SqliteRow,
};
use tracing::error;
use crate::{core::slide, Slide, SlideBuilder};
use crate::{Slide, SlideBuilder, core::slide};
use super::{
content::Content,

View file

@ -11,8 +11,8 @@ use crisp::types::{Keyword, Symbol, Value};
use miette::{IntoDiagnostic, Result};
use serde::{Deserialize, Serialize};
use sqlx::{
pool::PoolConnection, query, query_as, Sqlite, SqliteConnection,
SqlitePool,
Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection,
query, query_as,
};
use std::path::{Path, PathBuf};
use tracing::{debug, error};

View file

@ -40,11 +40,11 @@ mod test {
use std::{fs::read_to_string, path::PathBuf};
use crate::{
Background, TextAlignment,
core::{
images::Image, kinds::ServiceItemKind,
service_items::ServiceTrait, songs::Song, videos::Video,
},
Background, TextAlignment,
};
use super::*;

View file

@ -1,4 +1,4 @@
use clap::{command, Parser};
use clap::{Parser, command};
use core::service_items::ServiceItem;
use core::slide::{
Background, BackgroundKind, Slide, SlideBuilder, TextAlignment,
@ -9,8 +9,8 @@ use cosmic::iced::alignment::Vertical;
use cosmic::iced::keyboard::{Key, Modifiers};
use cosmic::iced::window::{Mode, Position};
use cosmic::iced::{
self, event, window, Background as IcedBackground, Border, Color,
Length,
self, Background as IcedBackground, Border, Color, Length, event,
window,
};
use cosmic::iced_core::text::Wrapping;
use cosmic::iced_futures::Subscription;
@ -22,18 +22,18 @@ use cosmic::widget::menu::key_bind::Modifier;
use cosmic::widget::menu::{ItemWidth, KeyBind};
use cosmic::widget::nav_bar::nav_bar_style;
use cosmic::widget::tooltip::Position as TPosition;
use cosmic::widget::{Container, menu};
use cosmic::widget::{
button, context_menu, horizontal_space, mouse_area, nav_bar,
nav_bar_toggle, responsive, scrollable, search_input, tooltip,
vertical_space, Space,
Space, button, context_menu, horizontal_space, mouse_area,
nav_bar, nav_bar_toggle, responsive, scrollable, search_input,
tooltip,
};
use cosmic::widget::{container, text};
use cosmic::widget::{icon, slider};
use cosmic::widget::{menu, Container};
use cosmic::{executor, Application, ApplicationExt, Element};
use cosmic::{Application, ApplicationExt, Element, executor};
use crisp::types::Value;
use lisp::parse_lisp;
use miette::{miette, Result};
use miette::{Result, miette};
use rayon::prelude::*;
use resvg::usvg::fontdb;
use std::collections::HashMap;
@ -43,10 +43,10 @@ use std::sync::Arc;
use tracing::{debug, level_filters::LevelFilter};
use tracing::{error, warn};
use tracing_subscriber::EnvFilter;
use ui::EditorMode;
use ui::library::{self, Library};
use ui::presenter::{self, Presenter};
use ui::song_editor::{self, SongEditor};
use ui::EditorMode;
use crate::core::content::Content;
use crate::core::kinds::ServiceItemKind;
@ -597,9 +597,11 @@ impl cosmic::Application for App {
}
fn subscription(&self) -> Subscription<Self::Message> {
event::listen_with(|event, _, id| {
event::listen_with(|event, status, id| {
// debug!(?event);
match event {
match status {
event::Status::Ignored => {
match event {
iced::Event::Keyboard(event) => match event {
iced::keyboard::Event::KeyReleased {
key,
@ -639,8 +641,8 @@ impl cosmic::Application for App {
}
iced::Event::Touch(_touch) => None,
iced::Event::A11y(_id, _action_request) => None,
iced::Event::Dnd(_dnd_event) => {
// debug!(?dnd_event);
iced::Event::Dnd(dnd_event) => {
debug!(?dnd_event);
None
}
iced::Event::PlatformSpecific(_platform_specific) => {
@ -648,6 +650,9 @@ impl cosmic::Application for App {
None
}
}
}
event::Status::Captured => None,
}
})
}
@ -886,15 +891,12 @@ impl cosmic::Application for App {
slide_index,
),
);
match action {
presenter::Action::Task(task) => {
tasks.push(task.map(|m| {
cosmic::Action::App(
Message::Present(m),
)
}));
}
_ => (),
if let presenter::Action::Task(task) = action {
tasks.push(task.map(|m| {
cosmic::Action::App(
Message::Present(m),
)
}));
}
self.current_item =
(item_index, slide_index + 1);
@ -909,20 +911,17 @@ impl cosmic::Application for App {
.is_some()
{
let action = self.presenter.update(presenter::Message::ActivateSlide(self.current_item.0, self.current_item.1));
match action {
presenter::Action::Task(
if let presenter::Action::Task(
task,
) => {
tasks
.push(task.map(|m| {
cosmic::Action::App(
Message::Present(
m,
),
)
}));
}
_ => (),
) = action {
tasks
.push(task.map(|m| {
cosmic::Action::App(
Message::Present(
m,
),
)
}));
}
}
Task::batch(tasks)
@ -946,15 +945,12 @@ impl cosmic::Application for App {
slide_index,
),
);
match action {
presenter::Action::Task(task) => {
tasks.push(task.map(|m| {
cosmic::Action::App(
Message::Present(m),
)
}));
}
_ => (),
if let presenter::Action::Task(task) = action {
tasks.push(task.map(|m| {
cosmic::Action::App(
Message::Present(m),
)
}));
}
self.current_item =
(item_index, slide_index - 1);
@ -984,20 +980,17 @@ impl cosmic::Application for App {
.is_some()
{
let action = self.presenter.update(presenter::Message::ActivateSlide(self.current_item.0, self.current_item.1));
match action {
presenter::Action::Task(
if let presenter::Action::Task(
task,
) => {
tasks
.push(task.map(|m| {
cosmic::Action::App(
Message::Present(
m,
),
)
}));
}
_ => (),
) = action {
tasks
.push(task.map(|m| {
cosmic::Action::App(
Message::Present(
m,
),
)
}));
}
}
Task::batch(tasks)
@ -1084,7 +1077,7 @@ impl cosmic::Application for App {
let (id, spawn_window) =
window::open(window::Settings {
position: Position::Centered,
exit_on_close_request: count % 2 == 0,
exit_on_close_request: count.is_multiple_of(2),
decorations: false,
..Default::default()
});
@ -1193,8 +1186,8 @@ impl cosmic::Application for App {
Task::none()
}
Message::AddServiceItem(index, item) => {
let item_index = item.0 .1;
let kind = item.0 .0;
let item_index = item.0.1;
let kind = item.0.0;
let mut item;
match kind {
core::model::LibraryKind::Song => {
@ -1293,7 +1286,7 @@ impl cosmic::Application for App {
}
Message::AppendServiceItemKind(item) => {
let item = item.to_service_item();
return self.update(Message::AppendServiceItem(item));
self.update(Message::AppendServiceItem(item))
}
Message::ReorderService(index, target_index) => {
let item = self.service.remove(index);
@ -1317,6 +1310,9 @@ impl cosmic::Application for App {
}
Message::OpenEditor(item) => {
let kind = item.kind;
self.search_query = String::new();
self.search_results = vec![];
self.searching = false;
match kind {
ServiceItemKind::Song(song) => {
self.editor_mode = Some(EditorMode::Song);
@ -1348,7 +1344,7 @@ impl cosmic::Application for App {
}
Message::OpenEditorKind(item) => {
let item = item.to_service_item();
return self.update(Message::OpenEditor(item));
self.update(Message::OpenEditor(item))
}
Message::New => {
debug!("new file");

View file

@ -2,15 +2,15 @@ use std::{io, path::PathBuf};
use crate::core::images::Image;
use cosmic::{
dialog::file_chooser::{open::Dialog, FileFilter},
iced::{alignment::Vertical, Length},
Element, Task,
dialog::file_chooser::{FileFilter, open::Dialog},
iced::{Length, alignment::Vertical},
iced_widget::{column, row},
theme,
widget::{
self, button, container, horizontal_space, icon, text,
text_input, Space,
self, Space, button, container, horizontal_space, icon, text,
text_input,
},
Element, Task,
};
use tracing::{debug, error, warn};

View file

@ -1,41 +1,39 @@
use std::collections::HashMap;
use cosmic::{
Element, Task,
dialog::file_chooser::open::Dialog,
iced::{
alignment::Vertical, clipboard::dnd::DndAction,
keyboard::Modifiers, wgpu::core::command::DynComputePass,
Background, Border, Color, Length,
Background, Border, Color, Length, alignment::Vertical,
clipboard::dnd::DndAction, keyboard::Modifiers,
},
iced_core::widget::tree::State,
iced_widget::{column, row as rowm, text as textm},
theme,
widget::{
button, container, context_menu, dnd_destination,
horizontal_space, icon,
Container, DndSource, Space, button, container, context_menu,
dnd_destination, horizontal_space, icon,
menu::{self, Action as MenuAction},
mouse_area, responsive, row, scrollable, text, text_input,
Container, DndSource, Space,
},
Element, Task,
};
use miette::{IntoDiagnostic, Result};
use rapidfuzz::distance::levenshtein;
use sqlx::{migrate, SqlitePool};
use sqlx::{SqlitePool, migrate};
use tracing::{debug, error, warn};
use crate::core::{
content::Content,
images::{self, update_image_in_db, Image},
images::{self, Image, update_image_in_db},
kinds::ServiceItemKind,
model::{KindWrapper, LibraryKind, Model},
presentations::{
self, add_presentation_to_db, update_presentation_in_db,
Presentation,
self, Presentation, add_presentation_to_db,
update_presentation_in_db,
},
service_items::{ServiceItem, ServiceTrait},
songs::{self, update_song_in_db, Song},
videos::{self, update_video_in_db, Video},
songs::{self, Song, update_song_in_db},
videos::{self, Video, update_video_in_db},
};
#[derive(Debug, Clone)]
@ -557,7 +555,7 @@ impl<'a> Library {
};
if items.contains(&(kind, index)) {
()
} else {
items.push((kind, index));
}
@ -930,7 +928,7 @@ impl<'a> Library {
.clone()
.into_iter()
.filter(|song| song.title.to_lowercase().contains(&query))
.map(|song| ServiceItemKind::Song(song))
.map(ServiceItemKind::Song)
.collect();
let videos: Vec<ServiceItemKind> = self
.video_library
@ -938,7 +936,7 @@ impl<'a> Library {
.clone()
.into_iter()
.filter(|vid| vid.title.to_lowercase().contains(&query))
.map(|video| ServiceItemKind::Video(video))
.map(ServiceItemKind::Video)
.collect();
let images: Vec<ServiceItemKind> = self
.image_library
@ -948,7 +946,7 @@ impl<'a> Library {
.filter(|image| {
image.title.to_lowercase().contains(&query)
})
.map(|image| ServiceItemKind::Image(image))
.map(ServiceItemKind::Image)
.collect();
let presentations: Vec<ServiceItemKind> = self
.presentation_library
@ -956,7 +954,7 @@ impl<'a> Library {
.clone()
.into_iter()
.filter(|pres| pres.title.to_lowercase().contains(&query))
.map(|pres| ServiceItemKind::Presentation(pres))
.map(ServiceItemKind::Presentation)
.collect();
items.extend(videos);
items.extend(images);

View file

@ -2,15 +2,15 @@ use std::{io, path::PathBuf};
use crate::core::presentations::Presentation;
use cosmic::{
dialog::file_chooser::{open::Dialog, FileFilter},
iced::{alignment::Vertical, ContentFit, Length},
Element, Task,
dialog::file_chooser::{FileFilter, open::Dialog},
iced::{ContentFit, Length, alignment::Vertical},
iced_widget::{column, row},
theme,
widget::{
self, button, container, horizontal_space, icon,
image::Handle, text, text_input, Space,
self, Space, button, container, horizontal_space, icon,
image::Handle, text, text_input,
},
Element, Task,
};
use miette::IntoDiagnostic;
use mupdf::{Colorspace, Document, Matrix};

View file

@ -7,32 +7,32 @@ use std::{
};
use cosmic::{
Task,
iced::{
font::{Family, Stretch, Style, Weight},
Background, Border, Color, ContentFit, Font, Length, Shadow,
Vector,
font::{Family, Stretch, Style, Weight},
},
iced_widget::{
scrollable::{
scroll_to, AbsoluteOffset, Direction, Scrollbar,
AbsoluteOffset, Direction, Scrollbar, scroll_to,
},
stack, vertical_rule,
},
prelude::*,
widget::{
container, image, mouse_area, responsive, scrollable, text,
Container, Id, Row, Space,
Container, Id, Row, Space, container, image, mouse_area,
responsive, scrollable, text,
},
Task,
};
use iced_video_player::{gst_pbutils, Position, Video, VideoPlayer};
use iced_video_player::{Position, Video, VideoPlayer, gst_pbutils};
use rodio::{Decoder, OutputStream, OutputStreamBuilder, Sink};
use tracing::{debug, error, info, warn};
use url::Url;
use crate::{
core::{service_items::ServiceItem, slide::Slide},
BackgroundKind,
core::{service_items::ServiceItem, slide::Slide},
};
const REFERENCE_WIDTH: f32 = 1920.0;

View file

@ -2,15 +2,16 @@ use cosmic::iced::Size;
use cosmic::iced_core::widget::tree;
use cosmic::{
Element,
iced::{
Event, Length, Point, Rectangle, Vector,
clipboard::dnd::{DndEvent, SourceEvent},
event, mouse, Event, Length, Point, Rectangle, Vector,
event, mouse,
},
iced_core::{
self, layout, renderer, widget::Tree, Clipboard, Shell,
self, Clipboard, Shell, layout, renderer, widget::Tree,
},
widget::Widget,
Element,
};
use tracing::debug;

View file

@ -1,13 +1,13 @@
use std::{io, path::PathBuf};
use cosmic::{
Renderer,
iced::{Color, Font, Length, Size},
widget::{
self,
canvas::{self, Program, Stroke},
container,
},
Renderer,
};
use tracing::debug;

View file

@ -1,8 +1,9 @@
use std::{io, path::PathBuf, sync::Arc};
use cosmic::{
dialog::file_chooser::{open::Dialog, FileFilter},
iced::{alignment::Vertical, Length},
Element, Task,
dialog::file_chooser::{FileFilter, open::Dialog},
iced::{Length, alignment::Vertical},
iced_wgpu::graphics::text::cosmic_text::fontdb,
iced_widget::{column, row},
theme,
@ -10,7 +11,6 @@ use cosmic::{
button, combo_box, container, horizontal_space, icon,
progress_bar, scrollable, text, text_editor, text_input,
},
Element, Task,
};
use dirs::font_dir;
use iced_video_player::Video;
@ -18,11 +18,11 @@ use rayon::iter::{IntoParallelIterator, ParallelIterator};
use tracing::{debug, error};
use crate::{
Background, BackgroundKind,
core::{service_items::ServiceTrait, slide::Slide, songs::Song},
ui::{
presenter::slide_view, slide_editor::SlideEditor, text_svg,
},
Background, BackgroundKind,
};
#[derive(Debug)]

View file

@ -8,16 +8,16 @@ use std::{
use colors_transform::Rgb;
use cosmic::{
iced::{
font::{Style, Weight},
ContentFit, Length, Size,
font::{Style, Weight},
},
prelude::*,
widget::{image::Handle, Image},
widget::{Image, image::Handle},
};
use rapidhash::v3::rapidhash_v3;
use resvg::{
tiny_skia::{self, Pixmap},
usvg::{fontdb, Tree},
usvg::{Tree, fontdb},
};
use tracing::{debug, error};

View file

@ -1,15 +1,15 @@
use std::{io, path::PathBuf};
use cosmic::{
dialog::file_chooser::{open::Dialog, FileFilter},
iced::{alignment::Vertical, Length},
Element, Task,
dialog::file_chooser::{FileFilter, open::Dialog},
iced::{Length, alignment::Vertical},
iced_widget::{column, row},
theme,
widget::{
button, container, horizontal_space, icon, progress_bar,
text, text_input, Space,
Space, button, container, horizontal_space, icon,
progress_bar, text, text_input,
},
Element, Task,
};
use iced_video_player::{Video, VideoPlayer};
use tracing::{debug, error, warn};

View file

@ -22,18 +22,17 @@
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
use cosmic::Theme;
use cosmic::iced::advanced::layout::{self, Layout};
use cosmic::iced::advanced::widget::{tree, Operation, Tree, Widget};
use cosmic::iced::advanced::{overlay, renderer, Clipboard, Shell};
use cosmic::iced::advanced::widget::{Operation, Tree, Widget, tree};
use cosmic::iced::advanced::{Clipboard, Shell, overlay, renderer};
use cosmic::iced::alignment::{self, Alignment};
use cosmic::iced::event::{self, Event};
use cosmic::iced::{self, mouse, Transformation};
use cosmic::iced::{self, Transformation, mouse};
use cosmic::iced::{
Background, Border, Color, Element, Length, Padding, Pixels,
Point, Rectangle, Size, Vector,
};
use cosmic::Theme;
use tracing::debug;
use super::{Action, DragEvent, DropPosition};

View file

@ -23,11 +23,11 @@
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
use cosmic::iced::advanced::layout::{self, Layout};
use cosmic::iced::advanced::widget::{tree, Operation, Tree, Widget};
use cosmic::iced::advanced::{overlay, renderer, Clipboard, Shell};
use cosmic::iced::advanced::widget::{Operation, Tree, Widget, tree};
use cosmic::iced::advanced::{Clipboard, Shell, overlay, renderer};
use cosmic::iced::alignment::{self, Alignment};
use cosmic::iced::event::{self, Event};
use cosmic::iced::{self, mouse, Transformation};
use cosmic::iced::{self, Transformation, mouse};
use cosmic::iced::{
Background, Border, Color, Element, Length, Padding, Pixels,
Point, Rectangle, Size, Theme, Vector,