Refactor: move playable models to separate module

This commit is contained in:
Henrik Friedrichsen
2021-11-08 20:44:07 +01:00
parent 2d1923f4e7
commit 74b4e65b64
27 changed files with 86 additions and 83 deletions

View File

@@ -8,7 +8,7 @@ use log::{debug, error};
use platform_dirs::AppDirs; use platform_dirs::AppDirs;
use crate::command::{SortDirection, SortKey}; use crate::command::{SortDirection, SortKey};
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::queue; use crate::queue;
use crate::serialization::{Serializer, CBOR, TOML}; use crate::serialization::{Serializer, CBOR, TOML};

View File

@@ -10,16 +10,16 @@ use rspotify::model::Id;
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
use serde::Serialize; use serde::Serialize;
use crate::album::Album;
use crate::artist::Artist;
use crate::config; use crate::config;
use crate::config::Config; use crate::config::Config;
use crate::events::EventManager; use crate::events::EventManager;
use crate::playable::Playable; use crate::model::album::Album;
use crate::playlist::Playlist; use crate::model::artist::Artist;
use crate::show::Show; use crate::model::playable::Playable;
use crate::model::playlist::Playlist;
use crate::model::show::Show;
use crate::model::track::Track;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::track::Track;
const CACHE_TRACKS: &str = "tracks.db"; const CACHE_TRACKS: &str = "tracks.db";
const CACHE_ALBUMS: &str = "albums.db"; const CACHE_ALBUMS: &str = "albums.db";

View File

@@ -18,27 +18,21 @@ use librespot_core::cache::Cache;
use librespot_playback::audio_backend; use librespot_playback::audio_backend;
use log::{error, info, trace}; use log::{error, info, trace};
mod album;
mod artist;
mod authentication; mod authentication;
mod command; mod command;
mod commands; mod commands;
mod config; mod config;
mod episode;
mod events; mod events;
mod library; mod library;
mod playable; mod model;
mod playlist;
mod queue; mod queue;
mod serialization; mod serialization;
mod sharing; mod sharing;
mod show;
mod spotify; mod spotify;
mod spotify_api; mod spotify_api;
mod spotify_url; mod spotify_url;
mod spotify_worker; mod spotify_worker;
mod theme; mod theme;
mod track;
mod traits; mod traits;
mod ui; mod ui;
mod utils; mod utils;

View File

@@ -7,12 +7,12 @@ use chrono::{DateTime, Utc};
use log::debug; use log::debug;
use rspotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum}; use rspotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum};
use crate::artist::Artist;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::artist::Artist;
use crate::model::playable::Playable;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::track::Track;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};
use crate::ui::{album::AlbumView, listview::ListView}; use crate::ui::{album::AlbumView, listview::ListView};

View File

@@ -5,10 +5,10 @@ use rspotify::model::artist::{FullArtist, SimplifiedArtist};
use rspotify::model::Id; use rspotify::model::Id;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::track::Track;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};
use crate::ui::{artist::ArtistView, listview::ListView}; use crate::ui::{artist::ArtistView, listview::ListView};

View File

@@ -1,5 +1,5 @@
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::queue::Queue; use crate::queue::Queue;
use crate::traits::{ListItem, ViewExt}; use crate::traits::{ListItem, ViewExt};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};

7
src/model/mod.rs Normal file
View File

@@ -0,0 +1,7 @@
pub mod album;
pub mod artist;
pub mod episode;
pub mod playable;
pub mod playlist;
pub mod show;
pub mod track;

View File

@@ -1,12 +1,12 @@
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use rspotify::model::PlayableItem; use rspotify::model::PlayableItem;
use crate::album::Album;
use crate::artist::Artist;
use crate::episode::Episode;
use crate::library::Library; use crate::library::Library;
use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::episode::Episode;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::track::Track;
use crate::traits::{ListItem, ViewExt}; use crate::traits::{ListItem, ViewExt};
use std::fmt; use std::fmt;
use std::sync::Arc; use std::sync::Arc;

View File

@@ -8,10 +8,10 @@ use log::debug;
use rspotify::model::playlist::{FullPlaylist, SimplifiedPlaylist}; use rspotify::model::playlist::{FullPlaylist, SimplifiedPlaylist};
use rspotify::model::Id; use rspotify::model::Id;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::track::Track;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};
use crate::ui::{listview::ListView, playlist::PlaylistView}; use crate::ui::{listview::ListView, playlist::PlaylistView};
use crate::{command::SortDirection, command::SortKey, library::Library}; use crate::{command::SortDirection, command::SortKey, library::Library};

View File

@@ -1,6 +1,6 @@
use crate::episode::Episode;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::episode::Episode;
use crate::model::playable::Playable;
use crate::queue::Queue; use crate::queue::Queue;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};

View File

@@ -6,10 +6,10 @@ use rspotify::model::album::FullAlbum;
use rspotify::model::track::{FullTrack, SavedTrack, SimplifiedTrack}; use rspotify::model::track::{FullTrack, SavedTrack, SimplifiedTrack};
use rspotify::model::Id; use rspotify::model::Id;
use crate::album::Album;
use crate::artist::Artist;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::playable::Playable;
use crate::queue::Queue; use crate::queue::Queue;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};
use crate::ui::listview::ListView; use crate::ui::listview::ListView;

View File

@@ -10,16 +10,16 @@ use dbus::strings::Path;
use dbus_tree::{Access, Factory}; use dbus_tree::{Access, Factory};
use log::{debug, warn}; use log::{debug, warn};
use crate::album::Album;
use crate::episode::Episode;
use crate::events::EventManager; use crate::events::EventManager;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::album::Album;
use crate::playlist::Playlist; use crate::model::episode::Episode;
use crate::model::playable::Playable;
use crate::model::playlist::Playlist;
use crate::model::show::Show;
use crate::model::track::Track;
use crate::queue::{Queue, RepeatSetting}; use crate::queue::{Queue, RepeatSetting};
use crate::show::Show;
use crate::spotify::{PlayerEvent, Spotify, UriType, VOLUME_PERCENT}; use crate::spotify::{PlayerEvent, Spotify, UriType, VOLUME_PERCENT};
use crate::track::Track;
use crate::traits::ListItem; use crate::traits::ListItem;
use regex::Regex; use regex::Regex;

View File

@@ -8,7 +8,7 @@ use notify_rust::Notification;
use rand::prelude::*; use rand::prelude::*;
use strum_macros::Display; use strum_macros::Display;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::spotify::Spotify; use crate::spotify::Spotify;
use crate::{config::Config, spotify::PlayerEvent}; use crate::{config::Config, spotify::PlayerEvent};

View File

@@ -24,7 +24,7 @@ use std::time::{Duration, SystemTime};
use crate::config; use crate::config;
use crate::events::{Event, EventManager}; use crate::events::{Event, EventManager};
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::spotify_api::WebApi; use crate::spotify_api::WebApi;
use crate::spotify_worker::{Worker, WorkerCommand}; use crate::spotify_worker::{Worker, WorkerCommand};

View File

@@ -1,10 +1,10 @@
use crate::album::Album; use crate::model::album::Album;
use crate::artist::Artist; use crate::model::artist::Artist;
use crate::episode::Episode; use crate::model::episode::Episode;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::playlist::Playlist; use crate::model::playlist::Playlist;
use crate::model::track::Track;
use crate::spotify_worker::WorkerCommand; use crate::spotify_worker::WorkerCommand;
use crate::track::Track;
use crate::ui::pagination::{ApiPage, ApiResult}; use crate::ui::pagination::{ApiPage, ApiResult};
use chrono::{DateTime, Duration as ChronoDuration, Utc}; use chrono::{DateTime, Duration as ChronoDuration, Utc};
use futures::channel::oneshot; use futures::channel::oneshot;

View File

@@ -1,6 +1,6 @@
use crate::config; use crate::config;
use crate::events::{Event, EventManager}; use crate::events::{Event, EventManager};
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::queue::QueueEvent; use crate::queue::QueueEvent;
use crate::spotify::PlayerEvent; use crate::spotify::PlayerEvent;
use futures::channel::oneshot; use futures::channel::oneshot;

View File

@@ -4,13 +4,13 @@ use cursive::view::{View, ViewWrapper};
use cursive::views::NamedView; use cursive::views::NamedView;
use cursive::Cursive; use cursive::Cursive;
use crate::album::Album;
use crate::artist::Artist;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::track::Track;
pub trait ListItem: Sync + Send + 'static { pub trait ListItem: Sync + Send + 'static {
fn is_playing(&self, queue: Arc<Queue>) -> bool; fn is_playing(&self, queue: Arc<Queue>) -> bool;

View File

@@ -3,11 +3,11 @@ use std::sync::{Arc, RwLock};
use cursive::view::ViewWrapper; use cursive::view::ViewWrapper;
use cursive::Cursive; use cursive::Cursive;
use crate::album::Album;
use crate::artist::Artist;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::queue::Queue; use crate::queue::Queue;
use crate::traits::ViewExt; use crate::traits::ViewExt;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;

View File

@@ -5,13 +5,13 @@ use cursive::view::ViewWrapper;
use cursive::Cursive; use cursive::Cursive;
use rspotify::model::AlbumType; use rspotify::model::AlbumType;
use crate::album::Album;
use crate::artist::Artist;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::track::Track;
use crate::traits::ViewExt; use crate::traits::ViewExt;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;
use crate::ui::tabview::TabView; use crate::ui::tabview::TabView;

View File

@@ -4,19 +4,20 @@ use cursive::view::{Margins, ViewWrapper};
use cursive::views::{Dialog, NamedView, ScrollView, SelectView}; use cursive::views::{Dialog, NamedView, ScrollView, SelectView};
use cursive::Cursive; use cursive::Cursive;
use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::artist::Artist;
use crate::model::playable::Playable;
use crate::model::playlist::Playlist;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
#[cfg(feature = "share_clipboard")] #[cfg(feature = "share_clipboard")]
use crate::sharing::write_share; use crate::sharing::write_share;
use crate::track::Track;
use crate::traits::{ListItem, ViewExt}; use crate::traits::{ListItem, ViewExt};
use crate::ui::layout::Layout; use crate::ui::layout::Layout;
use crate::ui::modal::Modal; use crate::ui::modal::Modal;
use crate::{artist::Artist, commands::CommandResult};
use crate::{ use crate::{
command::{Command, MoveAmount, MoveMode}, command::{Command, MoveAmount, MoveMode},
playlist::Playlist,
spotify::Spotify, spotify::Spotify,
}; };
use cursive::traits::{Finder, Nameable}; use cursive::traits::{Finder, Nameable};

View File

@@ -10,24 +10,25 @@ use cursive::view::ScrollBase;
use cursive::{Cursive, Printer, Rect, Vec2}; use cursive::{Cursive, Printer, Rect, Vec2};
use unicode_width::UnicodeWidthStr; use unicode_width::UnicodeWidthStr;
use crate::artist::Artist;
use crate::command::{Command, GotoMode, JumpMode, MoveAmount, MoveMode, TargetMode}; use crate::command::{Command, GotoMode, JumpMode, MoveAmount, MoveMode, TargetMode};
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::episode::Episode;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::album::Album;
use crate::playlist::Playlist; use crate::model::artist::Artist;
use crate::model::episode::Episode;
use crate::model::playable::Playable;
use crate::model::playlist::Playlist;
use crate::model::show::Show;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
#[cfg(feature = "share_clipboard")] #[cfg(feature = "share_clipboard")]
use crate::sharing::{read_share, write_share}; use crate::sharing::{read_share, write_share};
use crate::show::Show;
use crate::track::Track;
use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt};
use crate::ui::album::AlbumView; use crate::ui::album::AlbumView;
use crate::ui::artist::ArtistView; use crate::ui::artist::ArtistView;
use crate::ui::contextmenu::ContextMenu; use crate::ui::contextmenu::ContextMenu;
use crate::ui::pagination::Pagination; use crate::ui::pagination::Pagination;
use crate::{album::Album, spotify::UriType, spotify_url::SpotifyUrl}; use crate::{spotify::UriType, spotify_url::SpotifyUrl};
pub struct ListView<I: ListItem> { pub struct ListView<I: ListItem> {
content: Arc<RwLock<Vec<I>>>, content: Arc<RwLock<Vec<I>>>,

View File

@@ -6,8 +6,8 @@ use cursive::Cursive;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::playlist::Playlist; use crate::model::playlist::Playlist;
use crate::queue::Queue; use crate::queue::Queue;
use crate::spotify::Spotify; use crate::spotify::Spotify;

View File

@@ -7,7 +7,7 @@ use cursive::Cursive;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::playlist::Playlist; use crate::model::playlist::Playlist;
use crate::queue::Queue; use crate::queue::Queue;
use crate::traits::ViewExt; use crate::traits::ViewExt;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;

View File

@@ -9,7 +9,7 @@ use std::sync::Arc;
use crate::command::{Command, MoveMode, ShiftMode}; use crate::command::{Command, MoveMode, ShiftMode};
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::library::Library; use crate::library::Library;
use crate::playable::Playable; use crate::model::playable::Playable;
use crate::queue::Queue; use crate::queue::Queue;
use crate::traits::ViewExt; use crate::traits::ViewExt;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;

View File

@@ -9,18 +9,18 @@ use cursive::{Cursive, Printer, Vec2};
use std::cell::RefCell; use std::cell::RefCell;
use std::sync::{Arc, Mutex, RwLock}; use std::sync::{Arc, Mutex, RwLock};
use crate::album::Album;
use crate::artist::Artist;
use crate::command::{Command, MoveMode}; use crate::command::{Command, MoveMode};
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::episode::Episode;
use crate::events::EventManager; use crate::events::EventManager;
use crate::library::Library; use crate::library::Library;
use crate::playlist::Playlist; use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::episode::Episode;
use crate::model::playlist::Playlist;
use crate::model::show::Show;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::show::Show;
use crate::spotify::{Spotify, UriType}; use crate::spotify::{Spotify, UriType};
use crate::track::Track;
use crate::traits::{ListItem, ViewExt}; use crate::traits::{ListItem, ViewExt};
use crate::ui::layout::Layout; use crate::ui::layout::Layout;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;

View File

@@ -1,16 +1,16 @@
use crate::album::Album;
use crate::artist::Artist;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::episode::Episode;
use crate::events::EventManager; use crate::events::EventManager;
use crate::library::Library; use crate::library::Library;
use crate::playlist::Playlist; use crate::model::album::Album;
use crate::model::artist::Artist;
use crate::model::episode::Episode;
use crate::model::playlist::Playlist;
use crate::model::show::Show;
use crate::model::track::Track;
use crate::queue::Queue; use crate::queue::Queue;
use crate::show::Show;
use crate::spotify::{Spotify, UriType}; use crate::spotify::{Spotify, UriType};
use crate::spotify_url::SpotifyUrl; use crate::spotify_url::SpotifyUrl;
use crate::track::Track;
use crate::traits::{ListItem, ViewExt}; use crate::traits::{ListItem, ViewExt};
use crate::ui::listview::ListView; use crate::ui::listview::ListView;
use crate::ui::pagination::Pagination; use crate::ui::pagination::Pagination;

View File

@@ -5,10 +5,10 @@ use cursive::Cursive;
use crate::command::Command; use crate::command::Command;
use crate::commands::CommandResult; use crate::commands::CommandResult;
use crate::episode::Episode;
use crate::library::Library; use crate::library::Library;
use crate::model::episode::Episode;
use crate::model::show::Show;
use crate::queue::Queue; use crate::queue::Queue;
use crate::show::Show;
use crate::traits::ViewExt; use crate::traits::ViewExt;
use crate::ui::listview::ListView; use crate::ui::listview::ListView;