librmo 0.4.4

A library to manage media files and play them
Documentation
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
use std::sync::mpsc::Sender;

use crate::app::settings::get_db_connection;
use crate::entity::album::Model as AlbumModel;
use crate::entity::album_group::Model as AlbumGroupModel;
use crate::entity::track::{self, Entity as TrackEntity, Model as TrackModel};
use crate::error::CustomError;

pub struct MusicLibrary {
    pub sender: Option<Sender<String>>,
}

impl MusicLibrary {
    pub fn new(tx: Option<Sender<String>>) -> Self {
        Self { sender: tx }
    }


    fn send(&self, message: String) {
        if self.sender.is_some() {
            let _ = self.sender.as_ref().unwrap().send(message);
        }
    }

    pub async fn get_albums_groups_by_mb_id(
        mb_id: String,
    ) -> Result<Vec<AlbumGroupModel>, CustomError> {
        todo!()
    }

    pub async fn get_album_groups() -> Result<Vec<AlbumGroupModel>, CustomError> {
        todo!()
    }

    pub async fn get_albums_by_group_mb_id(mb_id: String) -> Result<Vec<AlbumModel>, CustomError> {
        todo!()
    }

    pub async fn get_albums_by_mb_id(mb_id: String) -> Result<Vec<AlbumModel>, CustomError> {
        todo!()
    }

    pub async fn get_albums() -> Result<Vec<AlbumModel>, CustomError> {
        todo!()
    }

    pub async fn get_tracks_by_album_group_mb_id(
        mb_id: String,
    ) -> Result<Vec<TrackModel>, CustomError> {
        let db = get_db_connection().await?;
        let tracks = TrackEntity::find()
            .filter(track::Column::MbReleaseGroupId.eq(mb_id))
            .to_owned()
            .all(&db)
            .await?;
        Ok(tracks)
    }

    pub async fn get_tracks_by_album_mb_id(mb_id: String) -> Result<Vec<TrackModel>, CustomError> {
        let db = get_db_connection().await?;
        let tracks = TrackEntity::find()
            .filter(track::Column::MbReleaseId.eq(mb_id))
            .to_owned()
            .all(&db)
            .await?;
        Ok(tracks)
    }

    pub async fn get_tracks_by_mb_id(mb_id: String) -> Result<Vec<TrackModel>, CustomError> {
        let db = get_db_connection().await?;
        let tracks = TrackEntity::find()
            .filter(track::Column::MbTrackId.eq(mb_id))
            .to_owned()
            .all(&db)
            .await?;
        Ok(tracks)
    }

    pub async fn get_tracks() -> Result<Vec<TrackModel>, CustomError> {
        let db = get_db_connection().await?;
        let tracks = TrackEntity::find().all(&db).await?;
        Ok(tracks)
    }
}