a fledgling visible library system
Why do I write these weird commit messages....
This commit is contained in:
parent
201e9dc925
commit
89294061b7
7 changed files with 188 additions and 55 deletions
|
@ -1,6 +1,9 @@
|
|||
use crate::{Background, Slide, SlideBuilder, TextAlignment};
|
||||
|
||||
use super::{model::Model, service_items::ServiceTrait};
|
||||
use super::{
|
||||
model::{get_db, LibraryKind, Model},
|
||||
service_items::ServiceTrait,
|
||||
};
|
||||
use crisp::types::{Keyword, Value};
|
||||
use miette::{IntoDiagnostic, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
@ -90,12 +93,22 @@ impl ServiceTrait for Image {
|
|||
}
|
||||
|
||||
impl Model<Image> {
|
||||
pub async fn load_from_db(&mut self) {
|
||||
pub async fn new_image_model(db: &mut SqliteConnection) -> Self {
|
||||
let mut model = Self {
|
||||
items: vec![],
|
||||
kind: LibraryKind::Image,
|
||||
};
|
||||
|
||||
model.load_from_db(db).await;
|
||||
model
|
||||
}
|
||||
|
||||
pub async fn load_from_db(&mut self, db: &mut SqliteConnection) {
|
||||
let result = query_as!(
|
||||
Image,
|
||||
r#"SELECT title as "title!", file_path as "path!", id as "id: i32" from images"#
|
||||
)
|
||||
.fetch_all(&mut self.db)
|
||||
.fetch_all(db)
|
||||
.await;
|
||||
match result {
|
||||
Ok(v) => {
|
||||
|
|
|
@ -6,12 +6,20 @@ use sqlx::{Connection, SqliteConnection};
|
|||
|
||||
use super::kinds::ServiceItemKind;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Model<T> {
|
||||
pub items: Vec<T>,
|
||||
pub db: SqliteConnection,
|
||||
pub kind: ServiceItemKind,
|
||||
pub kind: LibraryKind,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum LibraryKind {
|
||||
Song,
|
||||
Video,
|
||||
Image,
|
||||
Presentation,
|
||||
}
|
||||
|
||||
impl<T> Model<T> {
|
||||
pub fn add_item(&mut self, item: T) -> Result<()> {
|
||||
self.items.push(item);
|
||||
|
|
|
@ -9,7 +9,10 @@ use tracing::error;
|
|||
|
||||
use crate::{Background, Slide, SlideBuilder, TextAlignment};
|
||||
|
||||
use super::{model::Model, service_items::ServiceTrait};
|
||||
use super::{
|
||||
model::{get_db, LibraryKind, Model},
|
||||
service_items::ServiceTrait,
|
||||
};
|
||||
|
||||
#[derive(
|
||||
Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize,
|
||||
|
@ -131,11 +134,23 @@ impl FromRow<'_, SqliteRow> for Presentation {
|
|||
}
|
||||
|
||||
impl Model<Presentation> {
|
||||
pub async fn load_from_db(&mut self) {
|
||||
pub async fn new_presentation_model(
|
||||
db: &mut SqliteConnection,
|
||||
) -> Self {
|
||||
let mut model = Self {
|
||||
items: vec![],
|
||||
kind: LibraryKind::Presentation,
|
||||
};
|
||||
|
||||
model.load_from_db(db).await;
|
||||
model
|
||||
}
|
||||
|
||||
pub async fn load_from_db(&mut self, db: &mut SqliteConnection) {
|
||||
let result = query!(
|
||||
r#"SELECT id as "id: i32", title, file_path as "path", html from presentations"#
|
||||
)
|
||||
.fetch_all(&mut self.db)
|
||||
.fetch_all(db)
|
||||
.await;
|
||||
match result {
|
||||
Ok(v) => {
|
||||
|
|
|
@ -12,7 +12,7 @@ use tracing::{debug, error};
|
|||
use crate::{core::slide, Slide, SlideBuilder};
|
||||
|
||||
use super::{
|
||||
model::Model,
|
||||
model::{get_db, LibraryKind, Model},
|
||||
service_items::ServiceTrait,
|
||||
slide::{Background, TextAlignment},
|
||||
};
|
||||
|
@ -348,9 +348,19 @@ pub async fn get_song_from_db(
|
|||
}
|
||||
|
||||
impl Model<Song> {
|
||||
pub async fn load_from_db(&mut self) {
|
||||
pub async fn new_song_model(db: &mut SqliteConnection) -> Self {
|
||||
let mut model = Self {
|
||||
items: vec![],
|
||||
kind: LibraryKind::Song,
|
||||
};
|
||||
|
||||
model.load_from_db(db).await;
|
||||
model
|
||||
}
|
||||
|
||||
pub async fn load_from_db(&mut self, db: &mut SqliteConnection) {
|
||||
// static DATABASE_URL: &str = "sqlite:///home/chris/.local/share/lumina/library-db.sqlite3";
|
||||
let result = query(r#"SELECT verse_order as "verse_order!", font_size as "font_size!: i32", background_type as "background_type!", horizontal_text_alignment as "horizontal_text_alignment!", vertical_text_alignment as "vertical_text_alignment!", title as "title!", font as "font!", background as "background!", lyrics as "lyrics!", ccli as "ccli!", author as "author!", audio as "audio!", id as "id: i32" from songs"#).fetch_all(&mut self.db).await;
|
||||
let result = query(r#"SELECT verse_order as "verse_order!", font_size as "font_size!: i32", background_type as "background_type!", horizontal_text_alignment as "horizontal_text_alignment!", vertical_text_alignment as "vertical_text_alignment!", title as "title!", font as "font!", background as "background!", lyrics as "lyrics!", ccli as "ccli!", author as "author!", audio as "audio!", id as "id: i32" from songs"#).fetch_all(db).await;
|
||||
match result {
|
||||
Ok(s) => {
|
||||
for song in s.into_iter() {
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
use crate::{Background, SlideBuilder, TextAlignment};
|
||||
|
||||
use super::{
|
||||
model::Model, service_items::ServiceTrait, slide::Slide,
|
||||
model::{get_db, LibraryKind, Model},
|
||||
service_items::ServiceTrait,
|
||||
slide::Slide,
|
||||
};
|
||||
use cosmic::iced::Executor;
|
||||
use crisp::types::{Keyword, Value};
|
||||
|
@ -136,8 +138,18 @@ impl ServiceTrait for Video {
|
|||
}
|
||||
|
||||
impl Model<Video> {
|
||||
pub async fn load_from_db(&mut self) {
|
||||
let result = query_as!(Video, r#"SELECT title as "title!", file_path as "path!", start_time as "start_time!: f32", end_time as "end_time!: f32", loop as "looping!", id as "id: i32" from videos"#).fetch_all(&mut self.db).await;
|
||||
pub async fn new_video_model(db: &mut SqliteConnection) -> Self {
|
||||
let mut model = Self {
|
||||
items: vec![],
|
||||
kind: LibraryKind::Video,
|
||||
};
|
||||
|
||||
model.load_from_db(db).await;
|
||||
model
|
||||
}
|
||||
|
||||
pub async fn load_from_db(&mut self, db: &mut SqliteConnection) {
|
||||
let result = query_as!(Video, r#"SELECT title as "title!", file_path as "path!", start_time as "start_time!: f32", end_time as "end_time!: f32", loop as "looping!", id as "id: i32" from videos"#).fetch_all(db).await;
|
||||
match result {
|
||||
Ok(v) => {
|
||||
for video in v.into_iter() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue