1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use std::time::Duration;
4
5#[derive(Deserialize, Serialize, Debug, Default)]
6pub struct Playlist {
8 pub path: String,
9 pub last_modified: Option<DateTime<Utc>>,
10}
11
12#[derive(Deserialize, Serialize, Debug, Default)]
13pub struct Directory {
15 pub path: String,
16 pub last_modified: Option<DateTime<Utc>>,
17}
18
19#[derive(Deserialize, Serialize, Debug, PartialEq)]
20pub struct Status {
22 pub partition: Option<String>,
24 pub volume: Option<u8>,
26 pub repeat: bool,
27 pub random: bool,
28 pub single: String,
30 pub consume: bool,
31 pub playlist: u32,
33 pub playlistlength: u32,
34 pub song: Option<u32>,
35 pub songid: Option<u32>,
36 pub nextsong: Option<u32>,
37 pub nextsongid: Option<u32>,
38 pub time: Option<String>,
42 #[serde(default)]
43 pub elapsed: Option<Duration>,
44 #[serde(default)]
45 pub duration: Option<Duration>,
46 pub mixrampdb: f32,
47 pub mixrampdelay: Option<u32>,
49 pub state: State,
51 pub bitrate: Option<u16>,
53 pub xfade: Option<u32>,
55 pub audio: Option<String>,
56 pub updating_db: Option<u32>,
57 pub error: Option<String>,
58}
59
60#[derive(Deserialize, Serialize, Debug, PartialEq)]
61pub enum State {
63 Play,
64 Stop,
65 Pause,
66}
67
68impl Default for State {
69 fn default() -> Self {
70 State::Stop
71 }
72}
73
74#[derive(Deserialize, Serialize, Clone, Debug, Default)]
75pub struct Stats {
77 pub uptime: Duration,
78 pub playtime: Duration,
79 pub artists: u32,
80 pub albums: u32,
81 pub songs: u32,
82 pub db_playtime: Duration,
83 pub db_update: i32,
84}
85
86#[derive(Deserialize, Serialize, Clone, Debug, Default)]
87pub struct DatabaseVersion(pub u32);
88
89#[derive(Deserialize, Serialize, Clone, Debug, Default)]
90pub struct Track {
92 pub file: String,
93 pub artist_sort: Option<String>,
94 pub album_artist: Option<String>,
95 pub album_sort: Option<String>,
96 pub album_artist_sort: Option<String>,
97 pub performer: Vec<String>,
98 pub genre: Option<String>,
99 pub title: Option<String>,
100 pub track: Option<u32>,
101 pub album: Option<String>,
102 pub artist: Option<String>,
103 pub pos: Option<u32>,
104 pub id: Option<u32>,
105 pub last_modified: Option<DateTime<Utc>>,
106 pub original_date: Option<String>,
107 pub time: Option<String>,
108 pub format: Option<String>,
109 pub duration: Duration,
110 pub label: Option<String>,
111 pub date: Option<String>,
112 pub disc: Option<u32>,
113 pub musicbraiz_trackid: Option<String>,
114 pub musicbrainz_albumid: Option<String>,
115 pub musicbrainz_albumartistid: Option<String>,
116 pub musicbrainz_artistid: Option<String>,
117 pub musicbraiz_releasetrackid: Option<String>,
118 pub musicbraiz_workid: Option<String>,
119 pub composer: Vec<String>,
120}
121
122#[derive(Copy, Clone, Debug)]
123pub enum Tag {
125 Artist,
126 ArtistSort,
127 Album,
128 AlbumSort,
129 AlbumArtist,
130 AlbumSortOrder,
131 Title,
132 Track,
133 Name,
134 Genre,
135 Date,
136 Composer,
137 Performer,
138 Conductor,
139 Work,
140 Grouping,
141 Comment,
142 Disc,
143 Label,
144 MusicbrainzArtistId,
145 MusicbrainzAlbumId,
146 MusicbrainzAlbumArtistId,
147 MusicbrainzTrackId,
148 MusicbrainzReleaseTrackId,
149 MusicbrainzWorkId,
150 Any,
151}
152
153#[derive(Deserialize, Serialize, Debug)]
154pub enum Subsystem {
156 Database,
157 Player,
158 Mixer,
159 Options,
160 Update,
161 StoredPlaylist,
162 Playlist,
163 Output,
164 Partitions,
165 Sticker,
166 Subscription,
167 Message,
168
169 Other,
170}