mirror of
https://github.com/Dangoware/dmp-core.git
synced 2025-04-19 17:42:56 -05:00
Merge remote-tracking branch 'refs/remotes/origin/main'
This commit is contained in:
commit
4e33d20d18
8 changed files with 131 additions and 33 deletions
23
Cargo.toml
23
Cargo.toml
|
@ -1,21 +1,21 @@
|
||||||
[package]
|
[package]
|
||||||
name = "dango-core"
|
name = "dmp-core"
|
||||||
version = "0.1.1"
|
version = "0.0.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "AGPL-3.0-only"
|
license = "AGPL-3.0-only"
|
||||||
description = "A music backend that manages storage, querying, and playback of remote and local songs."
|
description = "Backend crate for the Dango Music Player "
|
||||||
homepage = "https://dangoware.com/dango-music-player"
|
homepage = ""
|
||||||
documentation = "https://docs.rs/dango-core"
|
documentation = ""
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/Dangoware/dango-music-player"
|
repository = "https://github.com/Dangoware/dmp-core"
|
||||||
keywords = ["audio", "music"]
|
keywords = []
|
||||||
categories = ["multimedia::audio"]
|
categories = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
file-format = { version = "0.22.0", features = ["reader-asf", "reader-ebml", "reader-mp4", "reader-rm", "reader-txt", "reader-xml", "serde"] }
|
file-format = { version = "0.23.0", features = ["reader-asf", "reader-ebml", "reader-mp4", "reader-rm", "reader-txt", "reader-xml", "serde"] }
|
||||||
lofty = "0.17.1"
|
lofty = "0.18.0"
|
||||||
serde = { version = "1.0.191", features = ["derive"] }
|
serde = { version = "1.0.191", features = ["derive"] }
|
||||||
toml = "0.7.5"
|
toml = "0.8.8"
|
||||||
walkdir = "2.4.0"
|
walkdir = "2.4.0"
|
||||||
chrono = { version = "0.4.31", features = ["serde"] }
|
chrono = { version = "0.4.31", features = ["serde"] }
|
||||||
bincode = { version = "2.0.0-rc.3", features = ["serde"] }
|
bincode = { version = "2.0.0-rc.3", features = ["serde"] }
|
||||||
|
@ -34,3 +34,4 @@ leb128 = "0.2.5"
|
||||||
urlencoding = "2.1.3"
|
urlencoding = "2.1.3"
|
||||||
m3u8-rs = "5.0.5"
|
m3u8-rs = "5.0.5"
|
||||||
thiserror = "1.0.56"
|
thiserror = "1.0.56"
|
||||||
|
font = "0.27.0"
|
||||||
|
|
16
src/config/config.rs
Normal file
16
src/config/config.rs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
use std::{path::PathBuf, marker::PhantomData};
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct Config {
|
||||||
|
db_path: Option<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn new_main() -> Self {
|
||||||
|
Config::default()
|
||||||
|
}
|
||||||
|
//TODO: Add new function for test tube
|
||||||
|
pub fn load(&self) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
82
src/config/other_settings.rs
Normal file
82
src/config/other_settings.rs
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
use std::{marker::PhantomData, fs::File, path::PathBuf};
|
||||||
|
|
||||||
|
use font::Font;
|
||||||
|
|
||||||
|
pub trait Setting {}
|
||||||
|
|
||||||
|
pub struct DropDown {
|
||||||
|
name: String,
|
||||||
|
//value: ???
|
||||||
|
}
|
||||||
|
impl Setting for DropDown {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct Slider {
|
||||||
|
name: String,
|
||||||
|
value: i32,
|
||||||
|
}
|
||||||
|
impl Setting for Slider {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct CheckBox {
|
||||||
|
name: String,
|
||||||
|
value: bool,
|
||||||
|
}
|
||||||
|
impl Setting for CheckBox {}
|
||||||
|
|
||||||
|
enum TextBoxSize {
|
||||||
|
Small,
|
||||||
|
Large,
|
||||||
|
}
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct TextBox<Size = TextBoxSize> {
|
||||||
|
name: String,
|
||||||
|
text: String,
|
||||||
|
size: PhantomData<Size>
|
||||||
|
}
|
||||||
|
impl Setting for TextBox {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct SingleSelect {
|
||||||
|
name: String,
|
||||||
|
value: bool,
|
||||||
|
}
|
||||||
|
impl Setting for SingleSelect {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct MultiSelect {
|
||||||
|
name: String,
|
||||||
|
value: bool,
|
||||||
|
}
|
||||||
|
impl Setting for MultiSelect {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct ConfigCounter {
|
||||||
|
name: String,
|
||||||
|
value: i32,
|
||||||
|
}
|
||||||
|
impl Setting for ConfigCounter {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct ConfigFont {
|
||||||
|
name: String,
|
||||||
|
value: Font,
|
||||||
|
}
|
||||||
|
impl Setting for ConfigFont {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct ConfigFile {
|
||||||
|
name: String,
|
||||||
|
value: PathBuf,
|
||||||
|
}
|
||||||
|
impl Setting for ConfigFile {}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct List<T: Setting> {
|
||||||
|
items: Vec<T>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Form {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
20
src/lib.rs
20
src/lib.rs
|
@ -3,21 +3,7 @@ pub mod music_storage {
|
||||||
pub mod music_collection;
|
pub mod music_collection;
|
||||||
pub mod playlist;
|
pub mod playlist;
|
||||||
mod utils;
|
mod utils;
|
||||||
pub mod db_reader {
|
pub mod db_reader;
|
||||||
pub mod foobar {
|
|
||||||
pub mod reader;
|
|
||||||
pub mod utils;
|
|
||||||
}
|
|
||||||
pub mod musicbee {
|
|
||||||
pub mod reader;
|
|
||||||
pub mod utils;
|
|
||||||
}
|
|
||||||
pub mod xml {
|
|
||||||
pub mod reader;
|
|
||||||
}
|
|
||||||
pub mod common;
|
|
||||||
pub mod extern_library;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod music_controller{
|
pub mod music_controller{
|
||||||
|
@ -25,3 +11,7 @@ pub mod music_controller{
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod music_player;
|
pub mod music_player;
|
||||||
|
pub mod config {
|
||||||
|
pub mod config;
|
||||||
|
pub mod other_settings;
|
||||||
|
}
|
||||||
|
|
13
src/music_storage/db_reader/mod.rs
Normal file
13
src/music_storage/db_reader/mod.rs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
pub mod foobar {
|
||||||
|
pub mod reader;
|
||||||
|
pub mod utils;
|
||||||
|
}
|
||||||
|
pub mod musicbee {
|
||||||
|
pub mod reader;
|
||||||
|
pub mod utils;
|
||||||
|
}
|
||||||
|
pub mod xml {
|
||||||
|
pub mod reader;
|
||||||
|
}
|
||||||
|
pub mod common;
|
||||||
|
pub mod extern_library;
|
|
@ -92,7 +92,6 @@ impl ExternalLibrary for XmlLibrary {
|
||||||
}
|
}
|
||||||
|
|
||||||
let text = e.unescape().unwrap().to_string();
|
let text = e.unescape().unwrap().to_string();
|
||||||
|
|
||||||
if text == count2.to_string() && !key_selected {
|
if text == count2.to_string() && !key_selected {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -118,8 +117,7 @@ impl ExternalLibrary for XmlLibrary {
|
||||||
buf.clear();
|
buf.clear();
|
||||||
}
|
}
|
||||||
let elasped = now.elapsed();
|
let elasped = now.elapsed();
|
||||||
println!("\n\nXMLReader\n=========================================\n\nDone!\n{} songs grabbed in {:#?}\nIDs Skipped: {}", count3, elasped, count4);
|
println!("\n\nXMLReader grabbed {} songs in {:#?} seconds\nIDs Skipped: {}", count3, elasped.as_secs(), count4);
|
||||||
// dbg!(folder);
|
|
||||||
let mut lib = XmlLibrary::new();
|
let mut lib = XmlLibrary::new();
|
||||||
lib.tracks.append(converted_songs.as_mut());
|
lib.tracks.append(converted_songs.as_mut());
|
||||||
lib
|
lib
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use super::music_collection::MusicCollection;
|
use super::music_collection::MusicCollection;
|
||||||
// Crate things
|
// Crate things
|
||||||
use super::utils::{find_images, normalize, read_library, write_library};
|
use super::utils::{find_images, normalize, read_library, write_library};
|
||||||
use crate::music_controller::config::Config;
|
|
||||||
|
|
||||||
// Various std things
|
// Various std things
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
|
@ -6,7 +6,6 @@ use super::{
|
||||||
library::{self, AlbumArt, Song, Tag},
|
library::{self, AlbumArt, Song, Tag},
|
||||||
music_collection::MusicCollection,
|
music_collection::MusicCollection,
|
||||||
};
|
};
|
||||||
use crate::music_controller::config::Config;
|
|
||||||
use crate::music_storage::db_reader::xml::reader::XmlLibrary;
|
use crate::music_storage::db_reader::xml::reader::XmlLibrary;
|
||||||
|
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
@ -86,7 +85,6 @@ impl<'a> Playlist<'a> {
|
||||||
.get_key_value(&Tag::Title)
|
.get_key_value(&Tag::Title)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.1
|
.1
|
||||||
.to_string()
|
|
||||||
.into(),
|
.into(),
|
||||||
),
|
),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -104,6 +102,7 @@ impl<'a> Playlist<'a> {
|
||||||
segments: seg.clone(),
|
segments: seg.clone(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
//TODO: change this to put in a real file path
|
||||||
let mut file = std::fs::OpenOptions::new()
|
let mut file = std::fs::OpenOptions::new()
|
||||||
.read(true)
|
.read(true)
|
||||||
.create(true)
|
.create(true)
|
||||||
|
@ -149,7 +148,7 @@ fn list_to_m3u8() {
|
||||||
));
|
));
|
||||||
let mut a = Playlist::new();
|
let mut a = Playlist::new();
|
||||||
let c = lib.to_songs();
|
let c = lib.to_songs();
|
||||||
let mut b = c.iter().map({ |song| song }).collect::<Vec<&Song>>();
|
let mut b = c.iter().map( |song| song ).collect::<Vec<&Song>>();
|
||||||
a.tracks.append(&mut b);
|
a.tracks.append(&mut b);
|
||||||
a.to_m3u8()
|
a.to_m3u8()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue