annotate src/beefweb.rs @ 6:482bd968725f default tip

beefweb: remove unnecessary (de)serialize derives
author Paper <paper@tflc.us>
date Mon, 06 Apr 2026 09:54:05 -0400
parents 26f695129c86
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
1
a5ee18c79a04 license
Paper <paper@tflc.us>
parents: 0
diff changeset
2 * Beefweb <-> mpris "compatibility" layer.
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
3 *
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
4 * Copyright (C) 2026 Paper
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
5 *
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
7 * modify it under the terms of the GNU General Public License
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
8 * as published by the Free Software Foundation; either version 2
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
9 * of the License, or (at your option) any later version.
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
10 *
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
14 * GNU General Public License for more details.
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
15 *
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
17 * along with this program; if not, see
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
18 * <https://www.gnu.org/licenses/>.
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
19 */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
20
2
Paper <paper@tflc.us>
parents: 1
diff changeset
21 /* Fuck off, I don't care. */
Paper <paper@tflc.us>
parents: 1
diff changeset
22 #![allow(nonstandard_style)]
Paper <paper@tflc.us>
parents: 1
diff changeset
23
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
24 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
25 pub struct PlayerInfo {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
26 pub name: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
27 pub title: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
28 pub version: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
29 // fuck camel case
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
30 #[serde(rename = "pluginVersion")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
31 pub plugin_version: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
32 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
33
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
34 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
35 pub struct ActiveItemInfo {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
36 #[serde(rename = "playlistId")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
37 pub playlist_id: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
38 #[serde(rename = "playlistIndex")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
39 pub playlist_index: i64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
40 pub index: i64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
41 pub position: f64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
42 pub duration: f64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
43 pub columns: Vec<String>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
44 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
45
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
46 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
47 pub enum VolumeType {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
48 #[serde(rename = "db")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
49 DB,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
50 #[serde(rename = "linear")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
51 LINEAR,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
52 #[serde(rename = "upDown")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
53 UPDOWN, /* ??? */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
54 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
55
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
56 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
57 pub struct VolumeInfo {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
58 pub r#type: VolumeType,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
59 pub min: f64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
60 pub max: f64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
61 pub value: f64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
62 #[serde(rename = "isMuted")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
63 pub muted: bool,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
64 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
65
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
66 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
67 pub struct ApiPermissions {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
68 #[serde(rename = "changePlaylists")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
69 pub change_playlists: bool,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
70 #[serde(rename = "changeOutput")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
71 pub change_output: bool,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
72 #[serde(rename = "changeClientConfig")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
73 pub change_client_config: bool,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
74 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
75
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
76 #[derive(serde::Deserialize, Debug)]
2
Paper <paper@tflc.us>
parents: 1
diff changeset
77 pub enum PlaybackState {
Paper <paper@tflc.us>
parents: 1
diff changeset
78 #[serde(rename = "stopped")]
Paper <paper@tflc.us>
parents: 1
diff changeset
79 STOPPED,
Paper <paper@tflc.us>
parents: 1
diff changeset
80 #[serde(rename = "playing")]
Paper <paper@tflc.us>
parents: 1
diff changeset
81 PLAYING,
Paper <paper@tflc.us>
parents: 1
diff changeset
82 #[serde(rename = "paused")]
Paper <paper@tflc.us>
parents: 1
diff changeset
83 PAUSED,
Paper <paper@tflc.us>
parents: 1
diff changeset
84 }
Paper <paper@tflc.us>
parents: 1
diff changeset
85
Paper <paper@tflc.us>
parents: 1
diff changeset
86 /* fb2k playback order */
Paper <paper@tflc.us>
parents: 1
diff changeset
87 #[derive(Debug)]
Paper <paper@tflc.us>
parents: 1
diff changeset
88 pub enum PlaybackOrder {
Paper <paper@tflc.us>
parents: 1
diff changeset
89 DEFAULT,
Paper <paper@tflc.us>
parents: 1
diff changeset
90 REPEAT_PLAYLIST,
Paper <paper@tflc.us>
parents: 1
diff changeset
91 REPEAT_TRACK,
Paper <paper@tflc.us>
parents: 1
diff changeset
92 RANDOM,
Paper <paper@tflc.us>
parents: 1
diff changeset
93 SHUFFLE_TRACKS,
Paper <paper@tflc.us>
parents: 1
diff changeset
94 SHUFFLE_ALBUMS,
Paper <paper@tflc.us>
parents: 1
diff changeset
95 SHUFFLE_FOLDERS,
Paper <paper@tflc.us>
parents: 1
diff changeset
96 }
Paper <paper@tflc.us>
parents: 1
diff changeset
97
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
98 #[derive(serde::Deserialize, Debug)]
2
Paper <paper@tflc.us>
parents: 1
diff changeset
99 #[serde(tag = "type")]
Paper <paper@tflc.us>
parents: 1
diff changeset
100 pub enum Options {
Paper <paper@tflc.us>
parents: 1
diff changeset
101 #[serde(rename = "enum")]
Paper <paper@tflc.us>
parents: 1
diff changeset
102 Enumeration {
Paper <paper@tflc.us>
parents: 1
diff changeset
103 #[serde(rename = "enumNames")]
Paper <paper@tflc.us>
parents: 1
diff changeset
104 enum_names: Vec<String>,
Paper <paper@tflc.us>
parents: 1
diff changeset
105 id: String,
Paper <paper@tflc.us>
parents: 1
diff changeset
106 name: String,
Paper <paper@tflc.us>
parents: 1
diff changeset
107 value: i64,
Paper <paper@tflc.us>
parents: 1
diff changeset
108 },
Paper <paper@tflc.us>
parents: 1
diff changeset
109 #[serde(rename = "bool")]
Paper <paper@tflc.us>
parents: 1
diff changeset
110 Boolean {
Paper <paper@tflc.us>
parents: 1
diff changeset
111 id: String,
Paper <paper@tflc.us>
parents: 1
diff changeset
112 name: String,
Paper <paper@tflc.us>
parents: 1
diff changeset
113 value: bool,
Paper <paper@tflc.us>
parents: 1
diff changeset
114 },
Paper <paper@tflc.us>
parents: 1
diff changeset
115 }
Paper <paper@tflc.us>
parents: 1
diff changeset
116
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
117 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
118 pub struct Player {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
119 pub info: PlayerInfo,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
120 #[serde(rename = "activeItem")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
121 pub active_item: ActiveItemInfo,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
122 /* XXX actually an enum */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
123 #[serde(rename = "playbackState")]
2
Paper <paper@tflc.us>
parents: 1
diff changeset
124 pub playback_state: PlaybackState,
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
125 pub volume: VolumeInfo,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
126 pub permissions: ApiPermissions,
2
Paper <paper@tflc.us>
parents: 1
diff changeset
127
Paper <paper@tflc.us>
parents: 1
diff changeset
128 options: Option<Vec<Options>>,
Paper <paper@tflc.us>
parents: 1
diff changeset
129
Paper <paper@tflc.us>
parents: 1
diff changeset
130 /* these two fields are deprecated,
Paper <paper@tflc.us>
parents: 1
diff changeset
131 * replaced with "options" array */
Paper <paper@tflc.us>
parents: 1
diff changeset
132 #[serde(skip_serializing_if = "Option::is_none")]
Paper <paper@tflc.us>
parents: 1
diff changeset
133 playbackMode: Option<i64>,
Paper <paper@tflc.us>
parents: 1
diff changeset
134
Paper <paper@tflc.us>
parents: 1
diff changeset
135 #[serde(skip_serializing_if = "Option::is_none")]
Paper <paper@tflc.us>
parents: 1
diff changeset
136 playbackModes: Option<Vec<String>>,
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
137 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
138
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
139 /* {"player": {struct Player}} */
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
140 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
141 struct PlayerHelper {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
142 player: Player,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
143 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
144
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
145 #[derive(serde::Serialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
146 #[serde(untagged)]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
147 enum SetPlayerOption {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
148 Integer { id: String, value: i64 },
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
149 Boolean { id: String, value: bool },
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
150 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
151
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
152 #[derive(serde::Serialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
153 #[serde_with::skip_serializing_none]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
154 struct SetPlayer {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
155 /* dB */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
156 volume: Option<f64>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
157 /* ??? */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
158 #[serde(rename = "relativeVolume")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
159 relative_volume: Option<f64>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
160 #[serde(rename = "isMuted")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
161 muted: Option<bool>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
162 position: Option<f64>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
163 #[serde(rename = "relativePosition")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
164 relative_position: Option<f64>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
165 /* teehee */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
166 options: Option<Vec<SetPlayerOption>>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
167 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
168
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
169 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
170 pub struct PlaylistItem {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
171 pub columns: Vec<String>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
172 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
173
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
174 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
175 pub struct PlaylistItems {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
176 pub offset: i64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
177 #[serde(rename = "totalCount")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
178 pub total_count: i64,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
179 pub items: Vec<PlaylistItem>,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
180 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
181
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
182 #[derive(serde::Deserialize, Debug)]
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
183 struct PlaylistItemsHelper {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
184 #[serde(rename = "playlistItems")]
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
185 playlist_items: PlaylistItems,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
186 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
187
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
188 #[derive(serde::Deserialize, Debug)]
4
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
189 pub struct Playlist {
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
190 pub id: String,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
191 pub index: i64,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
192 pub title: String,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
193 #[serde(rename = "isCurrent")]
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
194 pub current: bool,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
195 #[serde(rename = "itemCount")]
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
196 pub item_count: i64,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
197 #[serde(rename = "totalTime")]
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
198 pub total_time: f64,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
199 }
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
200
6
482bd968725f beefweb: remove unnecessary (de)serialize derives
Paper <paper@tflc.us>
parents: 4
diff changeset
201 #[derive(serde::Deserialize, Debug)]
4
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
202 pub struct Playlists {
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
203 pub playlists: Vec<Playlist>,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
204 }
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
205
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
206 /* --- NOW, THE ACTUAL BEEFWEB THING */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
207
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
208 pub struct Beefweb {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
209 client: reqwest::Client,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
210 base_url: String,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
211 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
212
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
213 impl Beefweb {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
214 pub fn new(base: &str) -> Beefweb
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
215 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
216 return Beefweb {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
217 client: reqwest::Client::new(),
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
218 base_url: base.to_string(),
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
219 };
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
220 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
221
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
222 pub async fn player(&self) -> Result<Player, anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
223 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
224 return Ok(self.client
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
225 .get(format!("{}/player", self.base_url))
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
226 .send()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
227 .await?
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
228 .json::<PlayerHelper>()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
229 .await?
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
230 .player);
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
231 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
232
2
Paper <paper@tflc.us>
parents: 1
diff changeset
233 fn playback_order_lookup(playback_order: &str) -> Option<PlaybackOrder>
Paper <paper@tflc.us>
parents: 1
diff changeset
234 {
Paper <paper@tflc.us>
parents: 1
diff changeset
235 return match playback_order {
Paper <paper@tflc.us>
parents: 1
diff changeset
236 "Default" => return Some(PlaybackOrder::DEFAULT),
Paper <paper@tflc.us>
parents: 1
diff changeset
237 "Repeat (playlist)" => return Some(PlaybackOrder::REPEAT_PLAYLIST),
Paper <paper@tflc.us>
parents: 1
diff changeset
238 "Repeat (track)" => return Some(PlaybackOrder::REPEAT_TRACK),
Paper <paper@tflc.us>
parents: 1
diff changeset
239 "Random" => return Some(PlaybackOrder::RANDOM),
Paper <paper@tflc.us>
parents: 1
diff changeset
240 "Shuffle (tracks)" => return Some(PlaybackOrder::SHUFFLE_TRACKS),
Paper <paper@tflc.us>
parents: 1
diff changeset
241 "Shuffle (albums)" => return Some(PlaybackOrder::SHUFFLE_ALBUMS),
Paper <paper@tflc.us>
parents: 1
diff changeset
242 "Shuffle (folders)" => return Some(PlaybackOrder::SHUFFLE_FOLDERS),
Paper <paper@tflc.us>
parents: 1
diff changeset
243 _ => None,
Paper <paper@tflc.us>
parents: 1
diff changeset
244 };
Paper <paper@tflc.us>
parents: 1
diff changeset
245 }
Paper <paper@tflc.us>
parents: 1
diff changeset
246
Paper <paper@tflc.us>
parents: 1
diff changeset
247 fn playback_order_cruft(v: &Vec<String>, s: i64) -> Option<PlaybackOrder>
Paper <paper@tflc.us>
parents: 1
diff changeset
248 {
Paper <paper@tflc.us>
parents: 1
diff changeset
249 let x = v.get(s as usize);
Paper <paper@tflc.us>
parents: 1
diff changeset
250
Paper <paper@tflc.us>
parents: 1
diff changeset
251 match x {
Paper <paper@tflc.us>
parents: 1
diff changeset
252 Some(y) => return Self::playback_order_lookup(y),
Paper <paper@tflc.us>
parents: 1
diff changeset
253 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
254 };
Paper <paper@tflc.us>
parents: 1
diff changeset
255
Paper <paper@tflc.us>
parents: 1
diff changeset
256 return None;
Paper <paper@tflc.us>
parents: 1
diff changeset
257 }
Paper <paper@tflc.us>
parents: 1
diff changeset
258
Paper <paper@tflc.us>
parents: 1
diff changeset
259 pub async fn playback_order(&self) -> Result<PlaybackOrder, anyhow::Error>
Paper <paper@tflc.us>
parents: 1
diff changeset
260 {
Paper <paper@tflc.us>
parents: 1
diff changeset
261 let p = self.player().await?;
Paper <paper@tflc.us>
parents: 1
diff changeset
262
Paper <paper@tflc.us>
parents: 1
diff changeset
263 match p.options {
Paper <paper@tflc.us>
parents: 1
diff changeset
264 Some(x) => {
Paper <paper@tflc.us>
parents: 1
diff changeset
265 for i in x {
Paper <paper@tflc.us>
parents: 1
diff changeset
266 match i {
Paper <paper@tflc.us>
parents: 1
diff changeset
267 Options::Enumeration { enum_names: e, id: id, name: _, value: v } => {
Paper <paper@tflc.us>
parents: 1
diff changeset
268 match id.as_str() {
Paper <paper@tflc.us>
parents: 1
diff changeset
269 "playbackOrder" => {
Paper <paper@tflc.us>
parents: 1
diff changeset
270 match Self::playback_order_cruft(&e, v) {
Paper <paper@tflc.us>
parents: 1
diff changeset
271 Some(z) => return Ok(z),
Paper <paper@tflc.us>
parents: 1
diff changeset
272 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
273 };
Paper <paper@tflc.us>
parents: 1
diff changeset
274 },
Paper <paper@tflc.us>
parents: 1
diff changeset
275 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
276 };
Paper <paper@tflc.us>
parents: 1
diff changeset
277 },
Paper <paper@tflc.us>
parents: 1
diff changeset
278 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
279 };
Paper <paper@tflc.us>
parents: 1
diff changeset
280 }
Paper <paper@tflc.us>
parents: 1
diff changeset
281 },
Paper <paper@tflc.us>
parents: 1
diff changeset
282 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
283 }
Paper <paper@tflc.us>
parents: 1
diff changeset
284
Paper <paper@tflc.us>
parents: 1
diff changeset
285 match p.playbackModes {
Paper <paper@tflc.us>
parents: 1
diff changeset
286 Some(x) => {
Paper <paper@tflc.us>
parents: 1
diff changeset
287 match p.playbackMode {
Paper <paper@tflc.us>
parents: 1
diff changeset
288 Some(y) => {
Paper <paper@tflc.us>
parents: 1
diff changeset
289 match Self::playback_order_cruft(&x, y) {
Paper <paper@tflc.us>
parents: 1
diff changeset
290 Some(v) => return Ok(v),
Paper <paper@tflc.us>
parents: 1
diff changeset
291 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
292 }
Paper <paper@tflc.us>
parents: 1
diff changeset
293 },
Paper <paper@tflc.us>
parents: 1
diff changeset
294 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
295 };
Paper <paper@tflc.us>
parents: 1
diff changeset
296 }
Paper <paper@tflc.us>
parents: 1
diff changeset
297 _ => (),
Paper <paper@tflc.us>
parents: 1
diff changeset
298 }
Paper <paper@tflc.us>
parents: 1
diff changeset
299
Paper <paper@tflc.us>
parents: 1
diff changeset
300 return Err(anyhow::anyhow!("Unknown or invalid playback order?"));
Paper <paper@tflc.us>
parents: 1
diff changeset
301 }
Paper <paper@tflc.us>
parents: 1
diff changeset
302
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
303 pub async fn volume(&self) -> Result<VolumeInfo, anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
304 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
305 return Ok(self.player().await?.volume);
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
306 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
307
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
308 pub async fn position(&self) -> Result<f64, anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
309 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
310 return Ok(self.player().await?.active_item.position);
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
311 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
312
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
313 /* XXX might be able to use macros for this? idk --paper */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
314 async fn play_pause_stop(&self, x: &str) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
315 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
316 self.client
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
317 .post(format!("{}/player/{}", self.base_url, x))
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
318 .send()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
319 .await?;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
320
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
321 return Ok(());
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
322 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
323
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
324 pub async fn play(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
325 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
326 return self.play_pause_stop("play").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
327 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
328
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
329 pub async fn pause(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
330 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
331 return self.play_pause_stop("pause").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
332 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
333
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
334 pub async fn stop(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
335 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
336 return self.play_pause_stop("stop").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
337 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
338
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
339 pub async fn play_pause(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
340 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
341 return self.play_pause_stop("play-pause").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
342 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
343
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
344 pub async fn next(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
345 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
346 return self.play_pause_stop("next").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
347 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
348
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
349 pub async fn previous(&self) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
350 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
351 return self.play_pause_stop("previous").await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
352 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
353
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
354 /* XXX what should this return? */
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
355 async fn set_player(&self, p: &SetPlayer) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
356 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
357 self.client
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
358 .post(format!("{}/player", self.base_url))
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
359 .json::<SetPlayer>(p)
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
360 .send()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
361 .await?;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
362
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
363 return Ok(());
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
364 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
365
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
366 pub async fn set_volume(&self, volume: f64) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
367 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
368 return self.set_player(&SetPlayer {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
369 volume: Some(volume),
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
370 relative_volume: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
371 muted: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
372 position: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
373 relative_position: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
374 options: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
375 }).await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
376 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
377
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
378 pub async fn set_position(&self, position: f64) -> Result<(), anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
379 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
380 return self.set_player(&SetPlayer {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
381 volume: None,
2
Paper <paper@tflc.us>
parents: 1
diff changeset
382 relative_volume: None,
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
383 muted: None,
2
Paper <paper@tflc.us>
parents: 1
diff changeset
384 position: Some(position),
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
385 relative_position: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
386 options: None,
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
387 }).await;
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
388 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
389
4
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
390 pub async fn seek(&self, position: f64) -> Result<(), anyhow::Error>
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
391 {
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
392 return self.set_player(&SetPlayer {
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
393 volume: None,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
394 relative_volume: None,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
395 muted: None,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
396 position: None,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
397 relative_position: Some(position),
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
398 options: None,
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
399 }).await;
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
400 }
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
401
2
Paper <paper@tflc.us>
parents: 1
diff changeset
402 /* TODO -- finish this; need to link between string and enum
Paper <paper@tflc.us>
parents: 1
diff changeset
403
Paper <paper@tflc.us>
parents: 1
diff changeset
404 pub async fn set_playback_order(&self, ) -> Result<(), anyhow::Error>
Paper <paper@tflc.us>
parents: 1
diff changeset
405 {
Paper <paper@tflc.us>
parents: 1
diff changeset
406 let p = self.set_player(&SetPlayer {
Paper <paper@tflc.us>
parents: 1
diff changeset
407 volume: None,
Paper <paper@tflc.us>
parents: 1
diff changeset
408 relative_volume: None,
Paper <paper@tflc.us>
parents: 1
diff changeset
409 muted: None,
Paper <paper@tflc.us>
parents: 1
diff changeset
410 position: None,
Paper <paper@tflc.us>
parents: 1
diff changeset
411 relative_position: None,
Paper <paper@tflc.us>
parents: 1
diff changeset
412 options:
Paper <paper@tflc.us>
parents: 1
diff changeset
413 })
Paper <paper@tflc.us>
parents: 1
diff changeset
414 }
Paper <paper@tflc.us>
parents: 1
diff changeset
415 */
Paper <paper@tflc.us>
parents: 1
diff changeset
416
3
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
417 pub async fn playlist_items(&self, playlist_id: &str, offset: i64, count: i64, columns: &Vec<&str>) -> Result<PlaylistItems, anyhow::Error>
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
418 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
419 return Ok(self.client
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
420 .get(format!("{}/playlists/{}/items/{}:{}", self.base_url, playlist_id, offset, count))
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
421 .query(&[("columns", columns.join(","))])
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
422 .send()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
423 .await?
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
424 .json::<PlaylistItemsHelper>()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
425 .await?
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
426 .playlist_items);
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
427 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
428
3
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
429 pub async fn playlist_item(&self, playlist_id: &str, index: i64, columns: &Vec<&str>) -> Result<PlaylistItems, anyhow::Error>
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
430 {
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
431 return self.playlist_items(playlist_id, index, 1, columns).await;
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
432 }
18f743c980fa make this a bit more sane
Paper <paper@tflc.us>
parents: 2
diff changeset
433
4
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
434 pub async fn playlists(&self) -> Result<Vec<Playlist>, anyhow::Error>
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
435 {
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
436 return Ok(self.client
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
437 .get(format!("{}/playlists", self.base_url))
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
438 .send()
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
439 .await?
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
440 .json::<Playlists>()
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
441 .await?
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
442 .playlists);
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
443 }
26f695129c86 *: fixes
Paper <paper@tflc.us>
parents: 3
diff changeset
444
0
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
445 pub async fn artwork(&self, playlist_id: &str, index: i64) -> Result<bytes::Bytes, anyhow::Error>
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
446 {
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
447 return Ok(self.client
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
448 .get(format!("{}/artwork/{}/{}", self.base_url, playlist_id, index))
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
449 .send()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
450 .await?
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
451 .bytes()
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
452 .await?);
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
453 }
d60ab8a4442f *: check in
Paper <paper@tflc.us>
parents:
diff changeset
454 }