Add details for building

This commit is contained in:
jude
2024-04-16 20:37:42 +01:00
parent 39dad2820d
commit 06ccea56d1
8 changed files with 355 additions and 23 deletions

View File

@ -1,9 +1,8 @@
use crate::listenbrainz;
use crate::listenbrainz::StatsRange;
use crate::models::TrackedPlaylist;
use crate::subsonic::Subsonic;
use crate::{listenbrainz, CONFIG};
use sqlx::postgres::PgPool;
use std::env;
use std::time::Duration;
use thiserror::Error;
use tokio::time::{interval, MissedTickBehavior};
@ -21,11 +20,19 @@ pub async fn update_playlists_daemon(
) -> Result<(), Box<dyn std::error::Error>> {
println!("Playlist daemon starting...");
let database = PgPool::connect(&env::var("DATABASE_URL").unwrap())
.await
.unwrap();
let database = PgPool::connect(
CONFIG
.get()
.unwrap()
.get::<String>("database.url")?
.as_str(),
)
.await
.unwrap();
let mut ticker = interval(Duration::from_secs(env::var("UPDATE_INTERVAL")?.parse()?));
let mut ticker = interval(Duration::from_secs(
CONFIG.get().unwrap().get::<u64>("daemon.interval")?,
));
ticker.set_missed_tick_behavior(MissedTickBehavior::Skip);
loop {

View File

@ -11,28 +11,40 @@ use crate::subsonic::SubsonicBuilder;
use axum::extract::State;
use axum::routing::{get, put};
use axum::{extract, Json, Router};
use config::Config;
use serde::Serialize;
use sqlx::postgres::PgPool;
use sqlx::Error;
use std::collections::HashMap;
use std::env;
use std::sync::Arc;
use tokio::sync::RwLock;
use std::sync::OnceLock;
#[derive(Clone)]
struct TrackState {
tracks: Arc<RwLock<HashMap<String, String>>>,
}
pub static CONFIG: OnceLock<Config> = OnceLock::new();
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let database = PgPool::connect(&env::var("DATABASE_URL")?).await?;
CONFIG
.set(
Config::builder()
.add_source(config::File::with_name("/etc/playlistd").required(false))
.add_source(config::Environment::default().separator("_"))
.build()
.unwrap(),
)
.unwrap();
let database = PgPool::connect(
CONFIG
.get()
.unwrap()
.get::<String>("database.url")?
.as_str(),
)
.await?;
sqlx::migrate!().run(&database).await?;
let media_client = SubsonicBuilder::new()
.base(env::var("SUBSONIC_BASE")?)
.username(env::var("SUBSONIC_USERNAME")?)
.password(env::var("SUBSONIC_PASSWORD")?)
.base(CONFIG.get().unwrap().get::<String>("subsonic.base")?)
.username(CONFIG.get().unwrap().get::<String>("subsonic.username")?)
.password(CONFIG.get().unwrap().get::<String>("subsonic.password")?)
.build()?;
tokio::spawn(async move {