Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fallback to track path and apply UI theming

+3749 -2389
+13 -16
crates/graphql/src/schema/saved_playlist.rs
··· 50 50 for id in &track_ids { 51 51 if let Some(t) = repo::track::find(pool.clone(), id).await? { 52 52 tracks.push(Track::from(t)); 53 + } else if let Some(t) = repo::track::find_by_path(pool.clone(), id).await? { 54 + tracks.push(Track::from(t)); 53 55 } 54 56 } 55 57 Ok(tracks) ··· 64 66 Ok(store.get_track_ids(&playlist_id).await?) 65 67 } 66 68 67 - async fn playlist_folders( 68 - &self, 69 - ctx: &Context<'_>, 70 - ) -> Result<Vec<SavedPlaylistFolder>, Error> { 69 + async fn playlist_folders(&self, ctx: &Context<'_>) -> Result<Vec<SavedPlaylistFolder>, Error> { 71 70 let store = ctx.data::<PlaylistStore>()?; 72 71 let folders = store.list_folders().await?; 73 72 Ok(folders.into_iter().map(SavedPlaylistFolder::from).collect()) ··· 89 88 Ok(SavedPlaylistFolder::from(folder)) 90 89 } 91 90 92 - async fn delete_playlist_folder( 93 - &self, 94 - ctx: &Context<'_>, 95 - id: String, 96 - ) -> Result<bool, Error> { 91 + async fn delete_playlist_folder(&self, ctx: &Context<'_>, id: String) -> Result<bool, Error> { 97 92 let store = ctx.data::<PlaylistStore>()?; 98 93 store.delete_folder(&id).await?; 99 94 Ok(true) ··· 147 142 Ok(true) 148 143 } 149 144 150 - async fn delete_saved_playlist( 151 - &self, 152 - ctx: &Context<'_>, 153 - id: String, 154 - ) -> Result<bool, Error> { 145 + async fn delete_saved_playlist(&self, ctx: &Context<'_>, id: String) -> Result<bool, Error> { 155 146 let store = ctx.data::<PlaylistStore>()?; 156 - store.delete(&id).await.map_err(|e| async_graphql::Error::new(e.to_string())) 147 + store 148 + .delete(&id) 149 + .await 150 + .map_err(|e| async_graphql::Error::new(e.to_string())) 157 151 } 158 152 159 153 async fn add_tracks_to_saved_playlist( ··· 174 168 track_id: String, 175 169 ) -> Result<bool, Error> { 176 170 let store = ctx.data::<PlaylistStore>()?; 177 - store.remove_track(&playlist_id, &track_id).await.map_err(|e| async_graphql::Error::new(e.to_string())) 171 + store 172 + .remove_track(&playlist_id, &track_id) 173 + .await 174 + .map_err(|e| async_graphql::Error::new(e.to_string())) 178 175 } 179 176 180 177 async fn play_saved_playlist(
+20 -19
crates/graphql/src/schema/smart_playlist.rs
··· 33 33 .map(|s| (s.track_id.clone(), s)) 34 34 .collect(); 35 35 36 - let liked_ids: std::collections::HashSet<String> = 37 - repo::favourites::all_tracks(pool.clone()) 38 - .await? 39 - .into_iter() 40 - .map(|t| t.id) 41 - .collect(); 36 + let liked_ids: std::collections::HashSet<String> = repo::favourites::all_tracks(pool.clone()) 37 + .await? 38 + .into_iter() 39 + .map(|t| t.id) 40 + .collect(); 42 41 43 42 let candidates: Vec<Candidate> = all_tracks 44 43 .iter() ··· 70 69 71 70 Ok(resolved 72 71 .iter() 73 - .filter_map(|c| track_map.get(c.id.as_str()).map(|t| Track::from((*t).clone()))) 72 + .filter_map(|c| { 73 + track_map 74 + .get(c.id.as_str()) 75 + .map(|t| Track::from((*t).clone())) 76 + }) 74 77 .collect()) 75 78 } 76 79 ··· 91 94 id: String, 92 95 ) -> Result<Option<SmartPlaylist>, Error> { 93 96 let store = ctx.data::<PlaylistStore>()?; 94 - Ok(store.get_smart_playlist(&id).await?.map(SmartPlaylist::from)) 97 + Ok(store 98 + .get_smart_playlist(&id) 99 + .await? 100 + .map(SmartPlaylist::from)) 95 101 } 96 102 97 103 async fn smart_playlist_tracks( ··· 181 187 Ok(true) 182 188 } 183 189 184 - async fn delete_smart_playlist( 185 - &self, 186 - ctx: &Context<'_>, 187 - id: String, 188 - ) -> Result<bool, Error> { 190 + async fn delete_smart_playlist(&self, ctx: &Context<'_>, id: String) -> Result<bool, Error> { 189 191 let store = ctx.data::<PlaylistStore>()?; 190 - store.delete_smart_playlist(&id).await.map_err(|e| async_graphql::Error::new(e.to_string())) 192 + store 193 + .delete_smart_playlist(&id) 194 + .await 195 + .map_err(|e| async_graphql::Error::new(e.to_string())) 191 196 } 192 197 193 - async fn play_smart_playlist( 194 - &self, 195 - ctx: &Context<'_>, 196 - id: String, 197 - ) -> Result<bool, Error> { 198 + async fn play_smart_playlist(&self, ctx: &Context<'_>, id: String) -> Result<bool, Error> { 198 199 let client = ctx.data::<reqwest::Client>()?; 199 200 let url = format!("{}/smart-playlists/{}/play", rockbox_url(), id); 200 201 client.post(&url).send().await?;
+2532 -1255
crates/upnp/src/api/rockbox.v1alpha1.rs
··· 43 43 dead_code, 44 44 missing_docs, 45 45 clippy::wildcard_imports, 46 - clippy::let_unit_value 46 + clippy::let_unit_value, 47 47 )] 48 - use tonic::codegen::http::Uri; 49 48 use tonic::codegen::*; 49 + use tonic::codegen::http::Uri; 50 50 #[derive(Debug, Clone)] 51 51 pub struct BrowseServiceClient<T> { 52 52 inner: tonic::client::Grpc<T>, ··· 90 90 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 91 91 >, 92 92 >, 93 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 94 - Into<StdError> + std::marker::Send + std::marker::Sync, 93 + <T as tonic::codegen::Service< 94 + http::Request<tonic::body::BoxBody>, 95 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 95 96 { 96 97 BrowseServiceClient::new(InterceptedService::new(inner, interceptor)) 97 98 } ··· 129 130 pub async fn tree_get_entries( 130 131 &mut self, 131 132 request: impl tonic::IntoRequest<super::TreeGetEntriesRequest>, 132 - ) -> std::result::Result<tonic::Response<super::TreeGetEntriesResponse>, tonic::Status> 133 - { 134 - self.inner.ready().await.map_err(|e| { 135 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 136 - })?; 133 + ) -> std::result::Result< 134 + tonic::Response<super::TreeGetEntriesResponse>, 135 + tonic::Status, 136 + > { 137 + self.inner 138 + .ready() 139 + .await 140 + .map_err(|e| { 141 + tonic::Status::unknown( 142 + format!("Service was not ready: {}", e.into()), 143 + ) 144 + })?; 137 145 let codec = tonic::codec::ProstCodec::default(); 138 146 let path = http::uri::PathAndQuery::from_static( 139 147 "/rockbox.v1alpha1.BrowseService/TreeGetEntries", 140 148 ); 141 149 let mut req = request.into_request(); 142 - req.extensions_mut().insert(GrpcMethod::new( 143 - "rockbox.v1alpha1.BrowseService", 144 - "TreeGetEntries", 145 - )); 150 + req.extensions_mut() 151 + .insert( 152 + GrpcMethod::new("rockbox.v1alpha1.BrowseService", "TreeGetEntries"), 153 + ); 146 154 self.inner.unary(req, path, codec).await 147 155 } 148 156 } ··· 154 162 dead_code, 155 163 missing_docs, 156 164 clippy::wildcard_imports, 157 - clippy::let_unit_value 165 + clippy::let_unit_value, 158 166 )] 159 167 use tonic::codegen::*; 160 168 /// Generated trait containing gRPC methods that should be implemented for use with BrowseServiceServer. ··· 163 171 async fn tree_get_entries( 164 172 &self, 165 173 request: tonic::Request<super::TreeGetEntriesRequest>, 166 - ) -> std::result::Result<tonic::Response<super::TreeGetEntriesResponse>, tonic::Status>; 174 + ) -> std::result::Result< 175 + tonic::Response<super::TreeGetEntriesResponse>, 176 + tonic::Status, 177 + >; 167 178 } 168 179 #[derive(Debug)] 169 180 pub struct BrowseServiceServer<T> { ··· 186 197 max_encoding_message_size: None, 187 198 } 188 199 } 189 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 200 + pub fn with_interceptor<F>( 201 + inner: T, 202 + interceptor: F, 203 + ) -> InterceptedService<Self, F> 190 204 where 191 205 F: tonic::service::Interceptor, 192 206 { ··· 241 255 "/rockbox.v1alpha1.BrowseService/TreeGetEntries" => { 242 256 #[allow(non_camel_case_types)] 243 257 struct TreeGetEntriesSvc<T: BrowseService>(pub Arc<T>); 244 - impl<T: BrowseService> tonic::server::UnaryService<super::TreeGetEntriesRequest> 245 - for TreeGetEntriesSvc<T> 246 - { 258 + impl< 259 + T: BrowseService, 260 + > tonic::server::UnaryService<super::TreeGetEntriesRequest> 261 + for TreeGetEntriesSvc<T> { 247 262 type Response = super::TreeGetEntriesResponse; 248 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 263 + type Future = BoxFuture< 264 + tonic::Response<Self::Response>, 265 + tonic::Status, 266 + >; 249 267 fn call( 250 268 &mut self, 251 269 request: tonic::Request<super::TreeGetEntriesRequest>, 252 270 ) -> Self::Future { 253 271 let inner = Arc::clone(&self.0); 254 272 let fut = async move { 255 - <T as BrowseService>::tree_get_entries(&inner, request).await 273 + <T as BrowseService>::tree_get_entries(&inner, request) 274 + .await 256 275 }; 257 276 Box::pin(fut) 258 277 } ··· 279 298 }; 280 299 Box::pin(fut) 281 300 } 282 - _ => Box::pin(async move { 283 - let mut response = http::Response::new(empty_body()); 284 - let headers = response.headers_mut(); 285 - headers.insert( 286 - tonic::Status::GRPC_STATUS, 287 - (tonic::Code::Unimplemented as i32).into(), 288 - ); 289 - headers.insert( 290 - http::header::CONTENT_TYPE, 291 - tonic::metadata::GRPC_CONTENT_TYPE, 292 - ); 293 - Ok(response) 294 - }), 301 + _ => { 302 + Box::pin(async move { 303 + let mut response = http::Response::new(empty_body()); 304 + let headers = response.headers_mut(); 305 + headers 306 + .insert( 307 + tonic::Status::GRPC_STATUS, 308 + (tonic::Code::Unimplemented as i32).into(), 309 + ); 310 + headers 311 + .insert( 312 + http::header::CONTENT_TYPE, 313 + tonic::metadata::GRPC_CONTENT_TYPE, 314 + ); 315 + Ok(response) 316 + }) 317 + } 295 318 } 296 319 } 297 320 } ··· 548 571 dead_code, 549 572 missing_docs, 550 573 clippy::wildcard_imports, 551 - clippy::let_unit_value 574 + clippy::let_unit_value, 552 575 )] 553 - use tonic::codegen::http::Uri; 554 576 use tonic::codegen::*; 577 + use tonic::codegen::http::Uri; 555 578 #[derive(Debug, Clone)] 556 579 pub struct LibraryServiceClient<T> { 557 580 inner: tonic::client::Grpc<T>, ··· 595 618 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 596 619 >, 597 620 >, 598 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 599 - Into<StdError> + std::marker::Send + std::marker::Sync, 621 + <T as tonic::codegen::Service< 622 + http::Request<tonic::body::BoxBody>, 623 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 600 624 { 601 625 LibraryServiceClient::new(InterceptedService::new(inner, interceptor)) 602 626 } ··· 634 658 pub async fn get_albums( 635 659 &mut self, 636 660 request: impl tonic::IntoRequest<super::GetAlbumsRequest>, 637 - ) -> std::result::Result<tonic::Response<super::GetAlbumsResponse>, tonic::Status> { 638 - self.inner.ready().await.map_err(|e| { 639 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 640 - })?; 661 + ) -> std::result::Result< 662 + tonic::Response<super::GetAlbumsResponse>, 663 + tonic::Status, 664 + > { 665 + self.inner 666 + .ready() 667 + .await 668 + .map_err(|e| { 669 + tonic::Status::unknown( 670 + format!("Service was not ready: {}", e.into()), 671 + ) 672 + })?; 641 673 let codec = tonic::codec::ProstCodec::default(); 642 - let path = 643 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetAlbums"); 674 + let path = http::uri::PathAndQuery::from_static( 675 + "/rockbox.v1alpha1.LibraryService/GetAlbums", 676 + ); 644 677 let mut req = request.into_request(); 645 - req.extensions_mut().insert(GrpcMethod::new( 646 - "rockbox.v1alpha1.LibraryService", 647 - "GetAlbums", 648 - )); 678 + req.extensions_mut() 679 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetAlbums")); 649 680 self.inner.unary(req, path, codec).await 650 681 } 651 682 pub async fn get_artists( 652 683 &mut self, 653 684 request: impl tonic::IntoRequest<super::GetArtistsRequest>, 654 - ) -> std::result::Result<tonic::Response<super::GetArtistsResponse>, tonic::Status> 655 - { 656 - self.inner.ready().await.map_err(|e| { 657 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 658 - })?; 685 + ) -> std::result::Result< 686 + tonic::Response<super::GetArtistsResponse>, 687 + tonic::Status, 688 + > { 689 + self.inner 690 + .ready() 691 + .await 692 + .map_err(|e| { 693 + tonic::Status::unknown( 694 + format!("Service was not ready: {}", e.into()), 695 + ) 696 + })?; 659 697 let codec = tonic::codec::ProstCodec::default(); 660 - let path = 661 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetArtists"); 698 + let path = http::uri::PathAndQuery::from_static( 699 + "/rockbox.v1alpha1.LibraryService/GetArtists", 700 + ); 662 701 let mut req = request.into_request(); 663 - req.extensions_mut().insert(GrpcMethod::new( 664 - "rockbox.v1alpha1.LibraryService", 665 - "GetArtists", 666 - )); 702 + req.extensions_mut() 703 + .insert( 704 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetArtists"), 705 + ); 667 706 self.inner.unary(req, path, codec).await 668 707 } 669 708 pub async fn get_tracks( 670 709 &mut self, 671 710 request: impl tonic::IntoRequest<super::GetTracksRequest>, 672 - ) -> std::result::Result<tonic::Response<super::GetTracksResponse>, tonic::Status> { 673 - self.inner.ready().await.map_err(|e| { 674 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 675 - })?; 711 + ) -> std::result::Result< 712 + tonic::Response<super::GetTracksResponse>, 713 + tonic::Status, 714 + > { 715 + self.inner 716 + .ready() 717 + .await 718 + .map_err(|e| { 719 + tonic::Status::unknown( 720 + format!("Service was not ready: {}", e.into()), 721 + ) 722 + })?; 676 723 let codec = tonic::codec::ProstCodec::default(); 677 - let path = 678 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetTracks"); 724 + let path = http::uri::PathAndQuery::from_static( 725 + "/rockbox.v1alpha1.LibraryService/GetTracks", 726 + ); 679 727 let mut req = request.into_request(); 680 - req.extensions_mut().insert(GrpcMethod::new( 681 - "rockbox.v1alpha1.LibraryService", 682 - "GetTracks", 683 - )); 728 + req.extensions_mut() 729 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetTracks")); 684 730 self.inner.unary(req, path, codec).await 685 731 } 686 732 pub async fn get_album( 687 733 &mut self, 688 734 request: impl tonic::IntoRequest<super::GetAlbumRequest>, 689 - ) -> std::result::Result<tonic::Response<super::GetAlbumResponse>, tonic::Status> { 690 - self.inner.ready().await.map_err(|e| { 691 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 692 - })?; 735 + ) -> std::result::Result< 736 + tonic::Response<super::GetAlbumResponse>, 737 + tonic::Status, 738 + > { 739 + self.inner 740 + .ready() 741 + .await 742 + .map_err(|e| { 743 + tonic::Status::unknown( 744 + format!("Service was not ready: {}", e.into()), 745 + ) 746 + })?; 693 747 let codec = tonic::codec::ProstCodec::default(); 694 - let path = 695 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetAlbum"); 748 + let path = http::uri::PathAndQuery::from_static( 749 + "/rockbox.v1alpha1.LibraryService/GetAlbum", 750 + ); 696 751 let mut req = request.into_request(); 697 - req.extensions_mut().insert(GrpcMethod::new( 698 - "rockbox.v1alpha1.LibraryService", 699 - "GetAlbum", 700 - )); 752 + req.extensions_mut() 753 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetAlbum")); 701 754 self.inner.unary(req, path, codec).await 702 755 } 703 756 pub async fn get_artist( 704 757 &mut self, 705 758 request: impl tonic::IntoRequest<super::GetArtistRequest>, 706 - ) -> std::result::Result<tonic::Response<super::GetArtistResponse>, tonic::Status> { 707 - self.inner.ready().await.map_err(|e| { 708 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 709 - })?; 759 + ) -> std::result::Result< 760 + tonic::Response<super::GetArtistResponse>, 761 + tonic::Status, 762 + > { 763 + self.inner 764 + .ready() 765 + .await 766 + .map_err(|e| { 767 + tonic::Status::unknown( 768 + format!("Service was not ready: {}", e.into()), 769 + ) 770 + })?; 710 771 let codec = tonic::codec::ProstCodec::default(); 711 - let path = 712 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetArtist"); 772 + let path = http::uri::PathAndQuery::from_static( 773 + "/rockbox.v1alpha1.LibraryService/GetArtist", 774 + ); 713 775 let mut req = request.into_request(); 714 - req.extensions_mut().insert(GrpcMethod::new( 715 - "rockbox.v1alpha1.LibraryService", 716 - "GetArtist", 717 - )); 776 + req.extensions_mut() 777 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetArtist")); 718 778 self.inner.unary(req, path, codec).await 719 779 } 720 780 pub async fn get_track( 721 781 &mut self, 722 782 request: impl tonic::IntoRequest<super::GetTrackRequest>, 723 - ) -> std::result::Result<tonic::Response<super::GetTrackResponse>, tonic::Status> { 724 - self.inner.ready().await.map_err(|e| { 725 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 726 - })?; 783 + ) -> std::result::Result< 784 + tonic::Response<super::GetTrackResponse>, 785 + tonic::Status, 786 + > { 787 + self.inner 788 + .ready() 789 + .await 790 + .map_err(|e| { 791 + tonic::Status::unknown( 792 + format!("Service was not ready: {}", e.into()), 793 + ) 794 + })?; 727 795 let codec = tonic::codec::ProstCodec::default(); 728 - let path = 729 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/GetTrack"); 796 + let path = http::uri::PathAndQuery::from_static( 797 + "/rockbox.v1alpha1.LibraryService/GetTrack", 798 + ); 730 799 let mut req = request.into_request(); 731 - req.extensions_mut().insert(GrpcMethod::new( 732 - "rockbox.v1alpha1.LibraryService", 733 - "GetTrack", 734 - )); 800 + req.extensions_mut() 801 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetTrack")); 735 802 self.inner.unary(req, path, codec).await 736 803 } 737 804 pub async fn like_track( 738 805 &mut self, 739 806 request: impl tonic::IntoRequest<super::LikeTrackRequest>, 740 - ) -> std::result::Result<tonic::Response<super::LikeTrackResponse>, tonic::Status> { 741 - self.inner.ready().await.map_err(|e| { 742 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 743 - })?; 807 + ) -> std::result::Result< 808 + tonic::Response<super::LikeTrackResponse>, 809 + tonic::Status, 810 + > { 811 + self.inner 812 + .ready() 813 + .await 814 + .map_err(|e| { 815 + tonic::Status::unknown( 816 + format!("Service was not ready: {}", e.into()), 817 + ) 818 + })?; 744 819 let codec = tonic::codec::ProstCodec::default(); 745 - let path = 746 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/LikeTrack"); 820 + let path = http::uri::PathAndQuery::from_static( 821 + "/rockbox.v1alpha1.LibraryService/LikeTrack", 822 + ); 747 823 let mut req = request.into_request(); 748 - req.extensions_mut().insert(GrpcMethod::new( 749 - "rockbox.v1alpha1.LibraryService", 750 - "LikeTrack", 751 - )); 824 + req.extensions_mut() 825 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "LikeTrack")); 752 826 self.inner.unary(req, path, codec).await 753 827 } 754 828 pub async fn unlike_track( 755 829 &mut self, 756 830 request: impl tonic::IntoRequest<super::UnlikeTrackRequest>, 757 - ) -> std::result::Result<tonic::Response<super::UnlikeTrackResponse>, tonic::Status> 758 - { 759 - self.inner.ready().await.map_err(|e| { 760 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 761 - })?; 831 + ) -> std::result::Result< 832 + tonic::Response<super::UnlikeTrackResponse>, 833 + tonic::Status, 834 + > { 835 + self.inner 836 + .ready() 837 + .await 838 + .map_err(|e| { 839 + tonic::Status::unknown( 840 + format!("Service was not ready: {}", e.into()), 841 + ) 842 + })?; 762 843 let codec = tonic::codec::ProstCodec::default(); 763 844 let path = http::uri::PathAndQuery::from_static( 764 845 "/rockbox.v1alpha1.LibraryService/UnlikeTrack", 765 846 ); 766 847 let mut req = request.into_request(); 767 - req.extensions_mut().insert(GrpcMethod::new( 768 - "rockbox.v1alpha1.LibraryService", 769 - "UnlikeTrack", 770 - )); 848 + req.extensions_mut() 849 + .insert( 850 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "UnlikeTrack"), 851 + ); 771 852 self.inner.unary(req, path, codec).await 772 853 } 773 854 pub async fn like_album( 774 855 &mut self, 775 856 request: impl tonic::IntoRequest<super::LikeAlbumRequest>, 776 - ) -> std::result::Result<tonic::Response<super::LikeAlbumResponse>, tonic::Status> { 777 - self.inner.ready().await.map_err(|e| { 778 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 779 - })?; 857 + ) -> std::result::Result< 858 + tonic::Response<super::LikeAlbumResponse>, 859 + tonic::Status, 860 + > { 861 + self.inner 862 + .ready() 863 + .await 864 + .map_err(|e| { 865 + tonic::Status::unknown( 866 + format!("Service was not ready: {}", e.into()), 867 + ) 868 + })?; 780 869 let codec = tonic::codec::ProstCodec::default(); 781 - let path = 782 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/LikeAlbum"); 870 + let path = http::uri::PathAndQuery::from_static( 871 + "/rockbox.v1alpha1.LibraryService/LikeAlbum", 872 + ); 783 873 let mut req = request.into_request(); 784 - req.extensions_mut().insert(GrpcMethod::new( 785 - "rockbox.v1alpha1.LibraryService", 786 - "LikeAlbum", 787 - )); 874 + req.extensions_mut() 875 + .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "LikeAlbum")); 788 876 self.inner.unary(req, path, codec).await 789 877 } 790 878 pub async fn unlike_album( 791 879 &mut self, 792 880 request: impl tonic::IntoRequest<super::UnlikeAlbumRequest>, 793 - ) -> std::result::Result<tonic::Response<super::UnlikeAlbumResponse>, tonic::Status> 794 - { 795 - self.inner.ready().await.map_err(|e| { 796 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 797 - })?; 881 + ) -> std::result::Result< 882 + tonic::Response<super::UnlikeAlbumResponse>, 883 + tonic::Status, 884 + > { 885 + self.inner 886 + .ready() 887 + .await 888 + .map_err(|e| { 889 + tonic::Status::unknown( 890 + format!("Service was not ready: {}", e.into()), 891 + ) 892 + })?; 798 893 let codec = tonic::codec::ProstCodec::default(); 799 894 let path = http::uri::PathAndQuery::from_static( 800 895 "/rockbox.v1alpha1.LibraryService/UnlikeAlbum", 801 896 ); 802 897 let mut req = request.into_request(); 803 - req.extensions_mut().insert(GrpcMethod::new( 804 - "rockbox.v1alpha1.LibraryService", 805 - "UnlikeAlbum", 806 - )); 898 + req.extensions_mut() 899 + .insert( 900 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "UnlikeAlbum"), 901 + ); 807 902 self.inner.unary(req, path, codec).await 808 903 } 809 904 pub async fn get_liked_tracks( 810 905 &mut self, 811 906 request: impl tonic::IntoRequest<super::GetLikedTracksRequest>, 812 - ) -> std::result::Result<tonic::Response<super::GetLikedTracksResponse>, tonic::Status> 813 - { 814 - self.inner.ready().await.map_err(|e| { 815 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 816 - })?; 907 + ) -> std::result::Result< 908 + tonic::Response<super::GetLikedTracksResponse>, 909 + tonic::Status, 910 + > { 911 + self.inner 912 + .ready() 913 + .await 914 + .map_err(|e| { 915 + tonic::Status::unknown( 916 + format!("Service was not ready: {}", e.into()), 917 + ) 918 + })?; 817 919 let codec = tonic::codec::ProstCodec::default(); 818 920 let path = http::uri::PathAndQuery::from_static( 819 921 "/rockbox.v1alpha1.LibraryService/GetLikedTracks", 820 922 ); 821 923 let mut req = request.into_request(); 822 - req.extensions_mut().insert(GrpcMethod::new( 823 - "rockbox.v1alpha1.LibraryService", 824 - "GetLikedTracks", 825 - )); 924 + req.extensions_mut() 925 + .insert( 926 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetLikedTracks"), 927 + ); 826 928 self.inner.unary(req, path, codec).await 827 929 } 828 930 pub async fn get_liked_albums( 829 931 &mut self, 830 932 request: impl tonic::IntoRequest<super::GetLikedAlbumsRequest>, 831 - ) -> std::result::Result<tonic::Response<super::GetLikedAlbumsResponse>, tonic::Status> 832 - { 833 - self.inner.ready().await.map_err(|e| { 834 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 835 - })?; 933 + ) -> std::result::Result< 934 + tonic::Response<super::GetLikedAlbumsResponse>, 935 + tonic::Status, 936 + > { 937 + self.inner 938 + .ready() 939 + .await 940 + .map_err(|e| { 941 + tonic::Status::unknown( 942 + format!("Service was not ready: {}", e.into()), 943 + ) 944 + })?; 836 945 let codec = tonic::codec::ProstCodec::default(); 837 946 let path = http::uri::PathAndQuery::from_static( 838 947 "/rockbox.v1alpha1.LibraryService/GetLikedAlbums", 839 948 ); 840 949 let mut req = request.into_request(); 841 - req.extensions_mut().insert(GrpcMethod::new( 842 - "rockbox.v1alpha1.LibraryService", 843 - "GetLikedAlbums", 844 - )); 950 + req.extensions_mut() 951 + .insert( 952 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "GetLikedAlbums"), 953 + ); 845 954 self.inner.unary(req, path, codec).await 846 955 } 847 956 pub async fn scan_library( 848 957 &mut self, 849 958 request: impl tonic::IntoRequest<super::ScanLibraryRequest>, 850 - ) -> std::result::Result<tonic::Response<super::ScanLibraryResponse>, tonic::Status> 851 - { 852 - self.inner.ready().await.map_err(|e| { 853 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 854 - })?; 959 + ) -> std::result::Result< 960 + tonic::Response<super::ScanLibraryResponse>, 961 + tonic::Status, 962 + > { 963 + self.inner 964 + .ready() 965 + .await 966 + .map_err(|e| { 967 + tonic::Status::unknown( 968 + format!("Service was not ready: {}", e.into()), 969 + ) 970 + })?; 855 971 let codec = tonic::codec::ProstCodec::default(); 856 972 let path = http::uri::PathAndQuery::from_static( 857 973 "/rockbox.v1alpha1.LibraryService/ScanLibrary", 858 974 ); 859 975 let mut req = request.into_request(); 860 - req.extensions_mut().insert(GrpcMethod::new( 861 - "rockbox.v1alpha1.LibraryService", 862 - "ScanLibrary", 863 - )); 976 + req.extensions_mut() 977 + .insert( 978 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "ScanLibrary"), 979 + ); 864 980 self.inner.unary(req, path, codec).await 865 981 } 866 982 pub async fn stream_library( ··· 870 986 tonic::Response<tonic::codec::Streaming<super::StreamLibraryResponse>>, 871 987 tonic::Status, 872 988 > { 873 - self.inner.ready().await.map_err(|e| { 874 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 875 - })?; 989 + self.inner 990 + .ready() 991 + .await 992 + .map_err(|e| { 993 + tonic::Status::unknown( 994 + format!("Service was not ready: {}", e.into()), 995 + ) 996 + })?; 876 997 let codec = tonic::codec::ProstCodec::default(); 877 998 let path = http::uri::PathAndQuery::from_static( 878 999 "/rockbox.v1alpha1.LibraryService/StreamLibrary", 879 1000 ); 880 1001 let mut req = request.into_request(); 881 - req.extensions_mut().insert(GrpcMethod::new( 882 - "rockbox.v1alpha1.LibraryService", 883 - "StreamLibrary", 884 - )); 1002 + req.extensions_mut() 1003 + .insert( 1004 + GrpcMethod::new("rockbox.v1alpha1.LibraryService", "StreamLibrary"), 1005 + ); 885 1006 self.inner.server_streaming(req, path, codec).await 886 1007 } 887 1008 pub async fn search( 888 1009 &mut self, 889 1010 request: impl tonic::IntoRequest<super::SearchRequest>, 890 1011 ) -> std::result::Result<tonic::Response<super::SearchResponse>, tonic::Status> { 891 - self.inner.ready().await.map_err(|e| { 892 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 893 - })?; 1012 + self.inner 1013 + .ready() 1014 + .await 1015 + .map_err(|e| { 1016 + tonic::Status::unknown( 1017 + format!("Service was not ready: {}", e.into()), 1018 + ) 1019 + })?; 894 1020 let codec = tonic::codec::ProstCodec::default(); 895 - let path = 896 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.LibraryService/Search"); 1021 + let path = http::uri::PathAndQuery::from_static( 1022 + "/rockbox.v1alpha1.LibraryService/Search", 1023 + ); 897 1024 let mut req = request.into_request(); 898 1025 req.extensions_mut() 899 1026 .insert(GrpcMethod::new("rockbox.v1alpha1.LibraryService", "Search")); ··· 908 1035 dead_code, 909 1036 missing_docs, 910 1037 clippy::wildcard_imports, 911 - clippy::let_unit_value 1038 + clippy::let_unit_value, 912 1039 )] 913 1040 use tonic::codegen::*; 914 1041 /// Generated trait containing gRPC methods that should be implemented for use with LibraryServiceServer. ··· 917 1044 async fn get_albums( 918 1045 &self, 919 1046 request: tonic::Request<super::GetAlbumsRequest>, 920 - ) -> std::result::Result<tonic::Response<super::GetAlbumsResponse>, tonic::Status>; 1047 + ) -> std::result::Result< 1048 + tonic::Response<super::GetAlbumsResponse>, 1049 + tonic::Status, 1050 + >; 921 1051 async fn get_artists( 922 1052 &self, 923 1053 request: tonic::Request<super::GetArtistsRequest>, 924 - ) -> std::result::Result<tonic::Response<super::GetArtistsResponse>, tonic::Status>; 1054 + ) -> std::result::Result< 1055 + tonic::Response<super::GetArtistsResponse>, 1056 + tonic::Status, 1057 + >; 925 1058 async fn get_tracks( 926 1059 &self, 927 1060 request: tonic::Request<super::GetTracksRequest>, 928 - ) -> std::result::Result<tonic::Response<super::GetTracksResponse>, tonic::Status>; 1061 + ) -> std::result::Result< 1062 + tonic::Response<super::GetTracksResponse>, 1063 + tonic::Status, 1064 + >; 929 1065 async fn get_album( 930 1066 &self, 931 1067 request: tonic::Request<super::GetAlbumRequest>, 932 - ) -> std::result::Result<tonic::Response<super::GetAlbumResponse>, tonic::Status>; 1068 + ) -> std::result::Result< 1069 + tonic::Response<super::GetAlbumResponse>, 1070 + tonic::Status, 1071 + >; 933 1072 async fn get_artist( 934 1073 &self, 935 1074 request: tonic::Request<super::GetArtistRequest>, 936 - ) -> std::result::Result<tonic::Response<super::GetArtistResponse>, tonic::Status>; 1075 + ) -> std::result::Result< 1076 + tonic::Response<super::GetArtistResponse>, 1077 + tonic::Status, 1078 + >; 937 1079 async fn get_track( 938 1080 &self, 939 1081 request: tonic::Request<super::GetTrackRequest>, 940 - ) -> std::result::Result<tonic::Response<super::GetTrackResponse>, tonic::Status>; 1082 + ) -> std::result::Result< 1083 + tonic::Response<super::GetTrackResponse>, 1084 + tonic::Status, 1085 + >; 941 1086 async fn like_track( 942 1087 &self, 943 1088 request: tonic::Request<super::LikeTrackRequest>, 944 - ) -> std::result::Result<tonic::Response<super::LikeTrackResponse>, tonic::Status>; 1089 + ) -> std::result::Result< 1090 + tonic::Response<super::LikeTrackResponse>, 1091 + tonic::Status, 1092 + >; 945 1093 async fn unlike_track( 946 1094 &self, 947 1095 request: tonic::Request<super::UnlikeTrackRequest>, 948 - ) -> std::result::Result<tonic::Response<super::UnlikeTrackResponse>, tonic::Status>; 1096 + ) -> std::result::Result< 1097 + tonic::Response<super::UnlikeTrackResponse>, 1098 + tonic::Status, 1099 + >; 949 1100 async fn like_album( 950 1101 &self, 951 1102 request: tonic::Request<super::LikeAlbumRequest>, 952 - ) -> std::result::Result<tonic::Response<super::LikeAlbumResponse>, tonic::Status>; 1103 + ) -> std::result::Result< 1104 + tonic::Response<super::LikeAlbumResponse>, 1105 + tonic::Status, 1106 + >; 953 1107 async fn unlike_album( 954 1108 &self, 955 1109 request: tonic::Request<super::UnlikeAlbumRequest>, 956 - ) -> std::result::Result<tonic::Response<super::UnlikeAlbumResponse>, tonic::Status>; 1110 + ) -> std::result::Result< 1111 + tonic::Response<super::UnlikeAlbumResponse>, 1112 + tonic::Status, 1113 + >; 957 1114 async fn get_liked_tracks( 958 1115 &self, 959 1116 request: tonic::Request<super::GetLikedTracksRequest>, 960 - ) -> std::result::Result<tonic::Response<super::GetLikedTracksResponse>, tonic::Status>; 1117 + ) -> std::result::Result< 1118 + tonic::Response<super::GetLikedTracksResponse>, 1119 + tonic::Status, 1120 + >; 961 1121 async fn get_liked_albums( 962 1122 &self, 963 1123 request: tonic::Request<super::GetLikedAlbumsRequest>, 964 - ) -> std::result::Result<tonic::Response<super::GetLikedAlbumsResponse>, tonic::Status>; 1124 + ) -> std::result::Result< 1125 + tonic::Response<super::GetLikedAlbumsResponse>, 1126 + tonic::Status, 1127 + >; 965 1128 async fn scan_library( 966 1129 &self, 967 1130 request: tonic::Request<super::ScanLibraryRequest>, 968 - ) -> std::result::Result<tonic::Response<super::ScanLibraryResponse>, tonic::Status>; 1131 + ) -> std::result::Result< 1132 + tonic::Response<super::ScanLibraryResponse>, 1133 + tonic::Status, 1134 + >; 969 1135 /// Server streaming response type for the StreamLibrary method. 970 1136 type StreamLibraryStream: tonic::codegen::tokio_stream::Stream< 971 1137 Item = std::result::Result<super::StreamLibraryResponse, tonic::Status>, 972 - > + std::marker::Send 1138 + > 1139 + + std::marker::Send 973 1140 + 'static; 974 1141 async fn stream_library( 975 1142 &self, 976 1143 request: tonic::Request<super::StreamLibraryRequest>, 977 - ) -> std::result::Result<tonic::Response<Self::StreamLibraryStream>, tonic::Status>; 1144 + ) -> std::result::Result< 1145 + tonic::Response<Self::StreamLibraryStream>, 1146 + tonic::Status, 1147 + >; 978 1148 async fn search( 979 1149 &self, 980 1150 request: tonic::Request<super::SearchRequest>, ··· 1001 1171 max_encoding_message_size: None, 1002 1172 } 1003 1173 } 1004 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 1174 + pub fn with_interceptor<F>( 1175 + inner: T, 1176 + interceptor: F, 1177 + ) -> InterceptedService<Self, F> 1005 1178 where 1006 1179 F: tonic::service::Interceptor, 1007 1180 { ··· 1056 1229 "/rockbox.v1alpha1.LibraryService/GetAlbums" => { 1057 1230 #[allow(non_camel_case_types)] 1058 1231 struct GetAlbumsSvc<T: LibraryService>(pub Arc<T>); 1059 - impl<T: LibraryService> tonic::server::UnaryService<super::GetAlbumsRequest> for GetAlbumsSvc<T> { 1232 + impl< 1233 + T: LibraryService, 1234 + > tonic::server::UnaryService<super::GetAlbumsRequest> 1235 + for GetAlbumsSvc<T> { 1060 1236 type Response = super::GetAlbumsResponse; 1061 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1237 + type Future = BoxFuture< 1238 + tonic::Response<Self::Response>, 1239 + tonic::Status, 1240 + >; 1062 1241 fn call( 1063 1242 &mut self, 1064 1243 request: tonic::Request<super::GetAlbumsRequest>, ··· 1095 1274 "/rockbox.v1alpha1.LibraryService/GetArtists" => { 1096 1275 #[allow(non_camel_case_types)] 1097 1276 struct GetArtistsSvc<T: LibraryService>(pub Arc<T>); 1098 - impl<T: LibraryService> tonic::server::UnaryService<super::GetArtistsRequest> for GetArtistsSvc<T> { 1277 + impl< 1278 + T: LibraryService, 1279 + > tonic::server::UnaryService<super::GetArtistsRequest> 1280 + for GetArtistsSvc<T> { 1099 1281 type Response = super::GetArtistsResponse; 1100 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1282 + type Future = BoxFuture< 1283 + tonic::Response<Self::Response>, 1284 + tonic::Status, 1285 + >; 1101 1286 fn call( 1102 1287 &mut self, 1103 1288 request: tonic::Request<super::GetArtistsRequest>, ··· 1134 1319 "/rockbox.v1alpha1.LibraryService/GetTracks" => { 1135 1320 #[allow(non_camel_case_types)] 1136 1321 struct GetTracksSvc<T: LibraryService>(pub Arc<T>); 1137 - impl<T: LibraryService> tonic::server::UnaryService<super::GetTracksRequest> for GetTracksSvc<T> { 1322 + impl< 1323 + T: LibraryService, 1324 + > tonic::server::UnaryService<super::GetTracksRequest> 1325 + for GetTracksSvc<T> { 1138 1326 type Response = super::GetTracksResponse; 1139 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1327 + type Future = BoxFuture< 1328 + tonic::Response<Self::Response>, 1329 + tonic::Status, 1330 + >; 1140 1331 fn call( 1141 1332 &mut self, 1142 1333 request: tonic::Request<super::GetTracksRequest>, ··· 1173 1364 "/rockbox.v1alpha1.LibraryService/GetAlbum" => { 1174 1365 #[allow(non_camel_case_types)] 1175 1366 struct GetAlbumSvc<T: LibraryService>(pub Arc<T>); 1176 - impl<T: LibraryService> tonic::server::UnaryService<super::GetAlbumRequest> for GetAlbumSvc<T> { 1367 + impl< 1368 + T: LibraryService, 1369 + > tonic::server::UnaryService<super::GetAlbumRequest> 1370 + for GetAlbumSvc<T> { 1177 1371 type Response = super::GetAlbumResponse; 1178 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1372 + type Future = BoxFuture< 1373 + tonic::Response<Self::Response>, 1374 + tonic::Status, 1375 + >; 1179 1376 fn call( 1180 1377 &mut self, 1181 1378 request: tonic::Request<super::GetAlbumRequest>, ··· 1212 1409 "/rockbox.v1alpha1.LibraryService/GetArtist" => { 1213 1410 #[allow(non_camel_case_types)] 1214 1411 struct GetArtistSvc<T: LibraryService>(pub Arc<T>); 1215 - impl<T: LibraryService> tonic::server::UnaryService<super::GetArtistRequest> for GetArtistSvc<T> { 1412 + impl< 1413 + T: LibraryService, 1414 + > tonic::server::UnaryService<super::GetArtistRequest> 1415 + for GetArtistSvc<T> { 1216 1416 type Response = super::GetArtistResponse; 1217 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1417 + type Future = BoxFuture< 1418 + tonic::Response<Self::Response>, 1419 + tonic::Status, 1420 + >; 1218 1421 fn call( 1219 1422 &mut self, 1220 1423 request: tonic::Request<super::GetArtistRequest>, ··· 1251 1454 "/rockbox.v1alpha1.LibraryService/GetTrack" => { 1252 1455 #[allow(non_camel_case_types)] 1253 1456 struct GetTrackSvc<T: LibraryService>(pub Arc<T>); 1254 - impl<T: LibraryService> tonic::server::UnaryService<super::GetTrackRequest> for GetTrackSvc<T> { 1457 + impl< 1458 + T: LibraryService, 1459 + > tonic::server::UnaryService<super::GetTrackRequest> 1460 + for GetTrackSvc<T> { 1255 1461 type Response = super::GetTrackResponse; 1256 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1462 + type Future = BoxFuture< 1463 + tonic::Response<Self::Response>, 1464 + tonic::Status, 1465 + >; 1257 1466 fn call( 1258 1467 &mut self, 1259 1468 request: tonic::Request<super::GetTrackRequest>, ··· 1290 1499 "/rockbox.v1alpha1.LibraryService/LikeTrack" => { 1291 1500 #[allow(non_camel_case_types)] 1292 1501 struct LikeTrackSvc<T: LibraryService>(pub Arc<T>); 1293 - impl<T: LibraryService> tonic::server::UnaryService<super::LikeTrackRequest> for LikeTrackSvc<T> { 1502 + impl< 1503 + T: LibraryService, 1504 + > tonic::server::UnaryService<super::LikeTrackRequest> 1505 + for LikeTrackSvc<T> { 1294 1506 type Response = super::LikeTrackResponse; 1295 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1507 + type Future = BoxFuture< 1508 + tonic::Response<Self::Response>, 1509 + tonic::Status, 1510 + >; 1296 1511 fn call( 1297 1512 &mut self, 1298 1513 request: tonic::Request<super::LikeTrackRequest>, ··· 1329 1544 "/rockbox.v1alpha1.LibraryService/UnlikeTrack" => { 1330 1545 #[allow(non_camel_case_types)] 1331 1546 struct UnlikeTrackSvc<T: LibraryService>(pub Arc<T>); 1332 - impl<T: LibraryService> tonic::server::UnaryService<super::UnlikeTrackRequest> 1333 - for UnlikeTrackSvc<T> 1334 - { 1547 + impl< 1548 + T: LibraryService, 1549 + > tonic::server::UnaryService<super::UnlikeTrackRequest> 1550 + for UnlikeTrackSvc<T> { 1335 1551 type Response = super::UnlikeTrackResponse; 1336 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1552 + type Future = BoxFuture< 1553 + tonic::Response<Self::Response>, 1554 + tonic::Status, 1555 + >; 1337 1556 fn call( 1338 1557 &mut self, 1339 1558 request: tonic::Request<super::UnlikeTrackRequest>, ··· 1370 1589 "/rockbox.v1alpha1.LibraryService/LikeAlbum" => { 1371 1590 #[allow(non_camel_case_types)] 1372 1591 struct LikeAlbumSvc<T: LibraryService>(pub Arc<T>); 1373 - impl<T: LibraryService> tonic::server::UnaryService<super::LikeAlbumRequest> for LikeAlbumSvc<T> { 1592 + impl< 1593 + T: LibraryService, 1594 + > tonic::server::UnaryService<super::LikeAlbumRequest> 1595 + for LikeAlbumSvc<T> { 1374 1596 type Response = super::LikeAlbumResponse; 1375 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1597 + type Future = BoxFuture< 1598 + tonic::Response<Self::Response>, 1599 + tonic::Status, 1600 + >; 1376 1601 fn call( 1377 1602 &mut self, 1378 1603 request: tonic::Request<super::LikeAlbumRequest>, ··· 1409 1634 "/rockbox.v1alpha1.LibraryService/UnlikeAlbum" => { 1410 1635 #[allow(non_camel_case_types)] 1411 1636 struct UnlikeAlbumSvc<T: LibraryService>(pub Arc<T>); 1412 - impl<T: LibraryService> tonic::server::UnaryService<super::UnlikeAlbumRequest> 1413 - for UnlikeAlbumSvc<T> 1414 - { 1637 + impl< 1638 + T: LibraryService, 1639 + > tonic::server::UnaryService<super::UnlikeAlbumRequest> 1640 + for UnlikeAlbumSvc<T> { 1415 1641 type Response = super::UnlikeAlbumResponse; 1416 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1642 + type Future = BoxFuture< 1643 + tonic::Response<Self::Response>, 1644 + tonic::Status, 1645 + >; 1417 1646 fn call( 1418 1647 &mut self, 1419 1648 request: tonic::Request<super::UnlikeAlbumRequest>, ··· 1450 1679 "/rockbox.v1alpha1.LibraryService/GetLikedTracks" => { 1451 1680 #[allow(non_camel_case_types)] 1452 1681 struct GetLikedTracksSvc<T: LibraryService>(pub Arc<T>); 1453 - impl<T: LibraryService> 1454 - tonic::server::UnaryService<super::GetLikedTracksRequest> 1455 - for GetLikedTracksSvc<T> 1456 - { 1682 + impl< 1683 + T: LibraryService, 1684 + > tonic::server::UnaryService<super::GetLikedTracksRequest> 1685 + for GetLikedTracksSvc<T> { 1457 1686 type Response = super::GetLikedTracksResponse; 1458 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1687 + type Future = BoxFuture< 1688 + tonic::Response<Self::Response>, 1689 + tonic::Status, 1690 + >; 1459 1691 fn call( 1460 1692 &mut self, 1461 1693 request: tonic::Request<super::GetLikedTracksRequest>, 1462 1694 ) -> Self::Future { 1463 1695 let inner = Arc::clone(&self.0); 1464 1696 let fut = async move { 1465 - <T as LibraryService>::get_liked_tracks(&inner, request).await 1697 + <T as LibraryService>::get_liked_tracks(&inner, request) 1698 + .await 1466 1699 }; 1467 1700 Box::pin(fut) 1468 1701 } ··· 1492 1725 "/rockbox.v1alpha1.LibraryService/GetLikedAlbums" => { 1493 1726 #[allow(non_camel_case_types)] 1494 1727 struct GetLikedAlbumsSvc<T: LibraryService>(pub Arc<T>); 1495 - impl<T: LibraryService> 1496 - tonic::server::UnaryService<super::GetLikedAlbumsRequest> 1497 - for GetLikedAlbumsSvc<T> 1498 - { 1728 + impl< 1729 + T: LibraryService, 1730 + > tonic::server::UnaryService<super::GetLikedAlbumsRequest> 1731 + for GetLikedAlbumsSvc<T> { 1499 1732 type Response = super::GetLikedAlbumsResponse; 1500 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1733 + type Future = BoxFuture< 1734 + tonic::Response<Self::Response>, 1735 + tonic::Status, 1736 + >; 1501 1737 fn call( 1502 1738 &mut self, 1503 1739 request: tonic::Request<super::GetLikedAlbumsRequest>, 1504 1740 ) -> Self::Future { 1505 1741 let inner = Arc::clone(&self.0); 1506 1742 let fut = async move { 1507 - <T as LibraryService>::get_liked_albums(&inner, request).await 1743 + <T as LibraryService>::get_liked_albums(&inner, request) 1744 + .await 1508 1745 }; 1509 1746 Box::pin(fut) 1510 1747 } ··· 1534 1771 "/rockbox.v1alpha1.LibraryService/ScanLibrary" => { 1535 1772 #[allow(non_camel_case_types)] 1536 1773 struct ScanLibrarySvc<T: LibraryService>(pub Arc<T>); 1537 - impl<T: LibraryService> tonic::server::UnaryService<super::ScanLibraryRequest> 1538 - for ScanLibrarySvc<T> 1539 - { 1774 + impl< 1775 + T: LibraryService, 1776 + > tonic::server::UnaryService<super::ScanLibraryRequest> 1777 + for ScanLibrarySvc<T> { 1540 1778 type Response = super::ScanLibraryResponse; 1541 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1779 + type Future = BoxFuture< 1780 + tonic::Response<Self::Response>, 1781 + tonic::Status, 1782 + >; 1542 1783 fn call( 1543 1784 &mut self, 1544 1785 request: tonic::Request<super::ScanLibraryRequest>, ··· 1575 1816 "/rockbox.v1alpha1.LibraryService/StreamLibrary" => { 1576 1817 #[allow(non_camel_case_types)] 1577 1818 struct StreamLibrarySvc<T: LibraryService>(pub Arc<T>); 1578 - impl<T: LibraryService> 1579 - tonic::server::ServerStreamingService<super::StreamLibraryRequest> 1580 - for StreamLibrarySvc<T> 1581 - { 1819 + impl< 1820 + T: LibraryService, 1821 + > tonic::server::ServerStreamingService<super::StreamLibraryRequest> 1822 + for StreamLibrarySvc<T> { 1582 1823 type Response = super::StreamLibraryResponse; 1583 1824 type ResponseStream = T::StreamLibraryStream; 1584 - type Future = 1585 - BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>; 1825 + type Future = BoxFuture< 1826 + tonic::Response<Self::ResponseStream>, 1827 + tonic::Status, 1828 + >; 1586 1829 fn call( 1587 1830 &mut self, 1588 1831 request: tonic::Request<super::StreamLibraryRequest>, ··· 1619 1862 "/rockbox.v1alpha1.LibraryService/Search" => { 1620 1863 #[allow(non_camel_case_types)] 1621 1864 struct SearchSvc<T: LibraryService>(pub Arc<T>); 1622 - impl<T: LibraryService> tonic::server::UnaryService<super::SearchRequest> for SearchSvc<T> { 1865 + impl< 1866 + T: LibraryService, 1867 + > tonic::server::UnaryService<super::SearchRequest> 1868 + for SearchSvc<T> { 1623 1869 type Response = super::SearchResponse; 1624 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 1870 + type Future = BoxFuture< 1871 + tonic::Response<Self::Response>, 1872 + tonic::Status, 1873 + >; 1625 1874 fn call( 1626 1875 &mut self, 1627 1876 request: tonic::Request<super::SearchRequest>, 1628 1877 ) -> Self::Future { 1629 1878 let inner = Arc::clone(&self.0); 1630 - let fut = 1631 - async move { <T as LibraryService>::search(&inner, request).await }; 1879 + let fut = async move { 1880 + <T as LibraryService>::search(&inner, request).await 1881 + }; 1632 1882 Box::pin(fut) 1633 1883 } 1634 1884 } ··· 1654 1904 }; 1655 1905 Box::pin(fut) 1656 1906 } 1657 - _ => Box::pin(async move { 1658 - let mut response = http::Response::new(empty_body()); 1659 - let headers = response.headers_mut(); 1660 - headers.insert( 1661 - tonic::Status::GRPC_STATUS, 1662 - (tonic::Code::Unimplemented as i32).into(), 1663 - ); 1664 - headers.insert( 1665 - http::header::CONTENT_TYPE, 1666 - tonic::metadata::GRPC_CONTENT_TYPE, 1667 - ); 1668 - Ok(response) 1669 - }), 1907 + _ => { 1908 + Box::pin(async move { 1909 + let mut response = http::Response::new(empty_body()); 1910 + let headers = response.headers_mut(); 1911 + headers 1912 + .insert( 1913 + tonic::Status::GRPC_STATUS, 1914 + (tonic::Code::Unimplemented as i32).into(), 1915 + ); 1916 + headers 1917 + .insert( 1918 + http::header::CONTENT_TYPE, 1919 + tonic::metadata::GRPC_CONTENT_TYPE, 1920 + ); 1921 + Ok(response) 1922 + }) 1923 + } 1670 1924 } 1671 1925 } 1672 1926 } ··· 1695 1949 dead_code, 1696 1950 missing_docs, 1697 1951 clippy::wildcard_imports, 1698 - clippy::let_unit_value 1952 + clippy::let_unit_value, 1699 1953 )] 1700 - use tonic::codegen::http::Uri; 1701 1954 use tonic::codegen::*; 1955 + use tonic::codegen::http::Uri; 1702 1956 #[derive(Debug, Clone)] 1703 1957 pub struct MetadataServiceClient<T> { 1704 1958 inner: tonic::client::Grpc<T>, ··· 1742 1996 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 1743 1997 >, 1744 1998 >, 1745 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 1746 - Into<StdError> + std::marker::Send + std::marker::Sync, 1999 + <T as tonic::codegen::Service< 2000 + http::Request<tonic::body::BoxBody>, 2001 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 1747 2002 { 1748 2003 MetadataServiceClient::new(InterceptedService::new(inner, interceptor)) 1749 2004 } ··· 1787 2042 dead_code, 1788 2043 missing_docs, 1789 2044 clippy::wildcard_imports, 1790 - clippy::let_unit_value 2045 + clippy::let_unit_value, 1791 2046 )] 1792 2047 use tonic::codegen::*; 1793 2048 /// Generated trait containing gRPC methods that should be implemented for use with MetadataServiceServer. ··· 1814 2069 max_encoding_message_size: None, 1815 2070 } 1816 2071 } 1817 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 2072 + pub fn with_interceptor<F>( 2073 + inner: T, 2074 + interceptor: F, 2075 + ) -> InterceptedService<Self, F> 1818 2076 where 1819 2077 F: tonic::service::Interceptor, 1820 2078 { ··· 1866 2124 } 1867 2125 fn call(&mut self, req: http::Request<B>) -> Self::Future { 1868 2126 match req.uri().path() { 1869 - _ => Box::pin(async move { 1870 - let mut response = http::Response::new(empty_body()); 1871 - let headers = response.headers_mut(); 1872 - headers.insert( 1873 - tonic::Status::GRPC_STATUS, 1874 - (tonic::Code::Unimplemented as i32).into(), 1875 - ); 1876 - headers.insert( 1877 - http::header::CONTENT_TYPE, 1878 - tonic::metadata::GRPC_CONTENT_TYPE, 1879 - ); 1880 - Ok(response) 1881 - }), 2127 + _ => { 2128 + Box::pin(async move { 2129 + let mut response = http::Response::new(empty_body()); 2130 + let headers = response.headers_mut(); 2131 + headers 2132 + .insert( 2133 + tonic::Status::GRPC_STATUS, 2134 + (tonic::Code::Unimplemented as i32).into(), 2135 + ); 2136 + headers 2137 + .insert( 2138 + http::header::CONTENT_TYPE, 2139 + tonic::metadata::GRPC_CONTENT_TYPE, 2140 + ); 2141 + Ok(response) 2142 + }) 2143 + } 1882 2144 } 1883 2145 } 1884 2146 } ··· 2162 2424 dead_code, 2163 2425 missing_docs, 2164 2426 clippy::wildcard_imports, 2165 - clippy::let_unit_value 2427 + clippy::let_unit_value, 2166 2428 )] 2167 - use tonic::codegen::http::Uri; 2168 2429 use tonic::codegen::*; 2430 + use tonic::codegen::http::Uri; 2169 2431 #[derive(Debug, Clone)] 2170 2432 pub struct PlaybackServiceClient<T> { 2171 2433 inner: tonic::client::Grpc<T>, ··· 2209 2471 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 2210 2472 >, 2211 2473 >, 2212 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 2213 - Into<StdError> + std::marker::Send + std::marker::Sync, 2474 + <T as tonic::codegen::Service< 2475 + http::Request<tonic::body::BoxBody>, 2476 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 2214 2477 { 2215 2478 PlaybackServiceClient::new(InterceptedService::new(inner, interceptor)) 2216 2479 } ··· 2249 2512 &mut self, 2250 2513 request: impl tonic::IntoRequest<super::PlayRequest>, 2251 2514 ) -> std::result::Result<tonic::Response<super::PlayResponse>, tonic::Status> { 2252 - self.inner.ready().await.map_err(|e| { 2253 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2254 - })?; 2515 + self.inner 2516 + .ready() 2517 + .await 2518 + .map_err(|e| { 2519 + tonic::Status::unknown( 2520 + format!("Service was not ready: {}", e.into()), 2521 + ) 2522 + })?; 2255 2523 let codec = tonic::codec::ProstCodec::default(); 2256 - let path = 2257 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Play"); 2524 + let path = http::uri::PathAndQuery::from_static( 2525 + "/rockbox.v1alpha1.PlaybackService/Play", 2526 + ); 2258 2527 let mut req = request.into_request(); 2259 2528 req.extensions_mut() 2260 2529 .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Play")); ··· 2264 2533 &mut self, 2265 2534 request: impl tonic::IntoRequest<super::PauseRequest>, 2266 2535 ) -> std::result::Result<tonic::Response<super::PauseResponse>, tonic::Status> { 2267 - self.inner.ready().await.map_err(|e| { 2268 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2269 - })?; 2536 + self.inner 2537 + .ready() 2538 + .await 2539 + .map_err(|e| { 2540 + tonic::Status::unknown( 2541 + format!("Service was not ready: {}", e.into()), 2542 + ) 2543 + })?; 2270 2544 let codec = tonic::codec::ProstCodec::default(); 2271 - let path = 2272 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Pause"); 2545 + let path = http::uri::PathAndQuery::from_static( 2546 + "/rockbox.v1alpha1.PlaybackService/Pause", 2547 + ); 2273 2548 let mut req = request.into_request(); 2274 2549 req.extensions_mut() 2275 2550 .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Pause")); ··· 2278 2553 pub async fn play_or_pause( 2279 2554 &mut self, 2280 2555 request: impl tonic::IntoRequest<super::PlayOrPauseRequest>, 2281 - ) -> std::result::Result<tonic::Response<super::PlayOrPauseResponse>, tonic::Status> 2282 - { 2283 - self.inner.ready().await.map_err(|e| { 2284 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2285 - })?; 2556 + ) -> std::result::Result< 2557 + tonic::Response<super::PlayOrPauseResponse>, 2558 + tonic::Status, 2559 + > { 2560 + self.inner 2561 + .ready() 2562 + .await 2563 + .map_err(|e| { 2564 + tonic::Status::unknown( 2565 + format!("Service was not ready: {}", e.into()), 2566 + ) 2567 + })?; 2286 2568 let codec = tonic::codec::ProstCodec::default(); 2287 2569 let path = http::uri::PathAndQuery::from_static( 2288 2570 "/rockbox.v1alpha1.PlaybackService/PlayOrPause", 2289 2571 ); 2290 2572 let mut req = request.into_request(); 2291 - req.extensions_mut().insert(GrpcMethod::new( 2292 - "rockbox.v1alpha1.PlaybackService", 2293 - "PlayOrPause", 2294 - )); 2573 + req.extensions_mut() 2574 + .insert( 2575 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayOrPause"), 2576 + ); 2295 2577 self.inner.unary(req, path, codec).await 2296 2578 } 2297 2579 pub async fn resume( 2298 2580 &mut self, 2299 2581 request: impl tonic::IntoRequest<super::ResumeRequest>, 2300 2582 ) -> std::result::Result<tonic::Response<super::ResumeResponse>, tonic::Status> { 2301 - self.inner.ready().await.map_err(|e| { 2302 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2303 - })?; 2583 + self.inner 2584 + .ready() 2585 + .await 2586 + .map_err(|e| { 2587 + tonic::Status::unknown( 2588 + format!("Service was not ready: {}", e.into()), 2589 + ) 2590 + })?; 2304 2591 let codec = tonic::codec::ProstCodec::default(); 2305 - let path = 2306 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Resume"); 2592 + let path = http::uri::PathAndQuery::from_static( 2593 + "/rockbox.v1alpha1.PlaybackService/Resume", 2594 + ); 2307 2595 let mut req = request.into_request(); 2308 - req.extensions_mut().insert(GrpcMethod::new( 2309 - "rockbox.v1alpha1.PlaybackService", 2310 - "Resume", 2311 - )); 2596 + req.extensions_mut() 2597 + .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Resume")); 2312 2598 self.inner.unary(req, path, codec).await 2313 2599 } 2314 2600 pub async fn next( 2315 2601 &mut self, 2316 2602 request: impl tonic::IntoRequest<super::NextRequest>, 2317 2603 ) -> std::result::Result<tonic::Response<super::NextResponse>, tonic::Status> { 2318 - self.inner.ready().await.map_err(|e| { 2319 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2320 - })?; 2604 + self.inner 2605 + .ready() 2606 + .await 2607 + .map_err(|e| { 2608 + tonic::Status::unknown( 2609 + format!("Service was not ready: {}", e.into()), 2610 + ) 2611 + })?; 2321 2612 let codec = tonic::codec::ProstCodec::default(); 2322 - let path = 2323 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Next"); 2613 + let path = http::uri::PathAndQuery::from_static( 2614 + "/rockbox.v1alpha1.PlaybackService/Next", 2615 + ); 2324 2616 let mut req = request.into_request(); 2325 2617 req.extensions_mut() 2326 2618 .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Next")); ··· 2329 2621 pub async fn previous( 2330 2622 &mut self, 2331 2623 request: impl tonic::IntoRequest<super::PreviousRequest>, 2332 - ) -> std::result::Result<tonic::Response<super::PreviousResponse>, tonic::Status> { 2333 - self.inner.ready().await.map_err(|e| { 2334 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2335 - })?; 2624 + ) -> std::result::Result< 2625 + tonic::Response<super::PreviousResponse>, 2626 + tonic::Status, 2627 + > { 2628 + self.inner 2629 + .ready() 2630 + .await 2631 + .map_err(|e| { 2632 + tonic::Status::unknown( 2633 + format!("Service was not ready: {}", e.into()), 2634 + ) 2635 + })?; 2336 2636 let codec = tonic::codec::ProstCodec::default(); 2337 - let path = 2338 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Previous"); 2637 + let path = http::uri::PathAndQuery::from_static( 2638 + "/rockbox.v1alpha1.PlaybackService/Previous", 2639 + ); 2339 2640 let mut req = request.into_request(); 2340 - req.extensions_mut().insert(GrpcMethod::new( 2341 - "rockbox.v1alpha1.PlaybackService", 2342 - "Previous", 2343 - )); 2641 + req.extensions_mut() 2642 + .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Previous")); 2344 2643 self.inner.unary(req, path, codec).await 2345 2644 } 2346 2645 pub async fn fast_forward_rewind( 2347 2646 &mut self, 2348 2647 request: impl tonic::IntoRequest<super::FastForwardRewindRequest>, 2349 - ) -> std::result::Result<tonic::Response<super::FastForwardRewindResponse>, tonic::Status> 2350 - { 2351 - self.inner.ready().await.map_err(|e| { 2352 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2353 - })?; 2648 + ) -> std::result::Result< 2649 + tonic::Response<super::FastForwardRewindResponse>, 2650 + tonic::Status, 2651 + > { 2652 + self.inner 2653 + .ready() 2654 + .await 2655 + .map_err(|e| { 2656 + tonic::Status::unknown( 2657 + format!("Service was not ready: {}", e.into()), 2658 + ) 2659 + })?; 2354 2660 let codec = tonic::codec::ProstCodec::default(); 2355 2661 let path = http::uri::PathAndQuery::from_static( 2356 2662 "/rockbox.v1alpha1.PlaybackService/FastForwardRewind", 2357 2663 ); 2358 2664 let mut req = request.into_request(); 2359 - req.extensions_mut().insert(GrpcMethod::new( 2360 - "rockbox.v1alpha1.PlaybackService", 2361 - "FastForwardRewind", 2362 - )); 2665 + req.extensions_mut() 2666 + .insert( 2667 + GrpcMethod::new( 2668 + "rockbox.v1alpha1.PlaybackService", 2669 + "FastForwardRewind", 2670 + ), 2671 + ); 2363 2672 self.inner.unary(req, path, codec).await 2364 2673 } 2365 2674 pub async fn status( 2366 2675 &mut self, 2367 2676 request: impl tonic::IntoRequest<super::StatusRequest>, 2368 2677 ) -> std::result::Result<tonic::Response<super::StatusResponse>, tonic::Status> { 2369 - self.inner.ready().await.map_err(|e| { 2370 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2371 - })?; 2678 + self.inner 2679 + .ready() 2680 + .await 2681 + .map_err(|e| { 2682 + tonic::Status::unknown( 2683 + format!("Service was not ready: {}", e.into()), 2684 + ) 2685 + })?; 2372 2686 let codec = tonic::codec::ProstCodec::default(); 2373 - let path = 2374 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/Status"); 2687 + let path = http::uri::PathAndQuery::from_static( 2688 + "/rockbox.v1alpha1.PlaybackService/Status", 2689 + ); 2375 2690 let mut req = request.into_request(); 2376 - req.extensions_mut().insert(GrpcMethod::new( 2377 - "rockbox.v1alpha1.PlaybackService", 2378 - "Status", 2379 - )); 2691 + req.extensions_mut() 2692 + .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "Status")); 2380 2693 self.inner.unary(req, path, codec).await 2381 2694 } 2382 2695 pub async fn current_track( 2383 2696 &mut self, 2384 2697 request: impl tonic::IntoRequest<super::CurrentTrackRequest>, 2385 - ) -> std::result::Result<tonic::Response<super::CurrentTrackResponse>, tonic::Status> 2386 - { 2387 - self.inner.ready().await.map_err(|e| { 2388 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2389 - })?; 2698 + ) -> std::result::Result< 2699 + tonic::Response<super::CurrentTrackResponse>, 2700 + tonic::Status, 2701 + > { 2702 + self.inner 2703 + .ready() 2704 + .await 2705 + .map_err(|e| { 2706 + tonic::Status::unknown( 2707 + format!("Service was not ready: {}", e.into()), 2708 + ) 2709 + })?; 2390 2710 let codec = tonic::codec::ProstCodec::default(); 2391 2711 let path = http::uri::PathAndQuery::from_static( 2392 2712 "/rockbox.v1alpha1.PlaybackService/CurrentTrack", 2393 2713 ); 2394 2714 let mut req = request.into_request(); 2395 - req.extensions_mut().insert(GrpcMethod::new( 2396 - "rockbox.v1alpha1.PlaybackService", 2397 - "CurrentTrack", 2398 - )); 2715 + req.extensions_mut() 2716 + .insert( 2717 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "CurrentTrack"), 2718 + ); 2399 2719 self.inner.unary(req, path, codec).await 2400 2720 } 2401 2721 pub async fn next_track( 2402 2722 &mut self, 2403 2723 request: impl tonic::IntoRequest<super::NextTrackRequest>, 2404 - ) -> std::result::Result<tonic::Response<super::NextTrackResponse>, tonic::Status> { 2405 - self.inner.ready().await.map_err(|e| { 2406 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2407 - })?; 2724 + ) -> std::result::Result< 2725 + tonic::Response<super::NextTrackResponse>, 2726 + tonic::Status, 2727 + > { 2728 + self.inner 2729 + .ready() 2730 + .await 2731 + .map_err(|e| { 2732 + tonic::Status::unknown( 2733 + format!("Service was not ready: {}", e.into()), 2734 + ) 2735 + })?; 2408 2736 let codec = tonic::codec::ProstCodec::default(); 2409 - let path = 2410 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/NextTrack"); 2737 + let path = http::uri::PathAndQuery::from_static( 2738 + "/rockbox.v1alpha1.PlaybackService/NextTrack", 2739 + ); 2411 2740 let mut req = request.into_request(); 2412 - req.extensions_mut().insert(GrpcMethod::new( 2413 - "rockbox.v1alpha1.PlaybackService", 2414 - "NextTrack", 2415 - )); 2741 + req.extensions_mut() 2742 + .insert( 2743 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "NextTrack"), 2744 + ); 2416 2745 self.inner.unary(req, path, codec).await 2417 2746 } 2418 2747 pub async fn flush_and_reload_tracks( 2419 2748 &mut self, 2420 2749 request: impl tonic::IntoRequest<super::FlushAndReloadTracksRequest>, 2421 - ) -> std::result::Result<tonic::Response<super::FlushAndReloadTracksResponse>, tonic::Status> 2422 - { 2423 - self.inner.ready().await.map_err(|e| { 2424 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2425 - })?; 2750 + ) -> std::result::Result< 2751 + tonic::Response<super::FlushAndReloadTracksResponse>, 2752 + tonic::Status, 2753 + > { 2754 + self.inner 2755 + .ready() 2756 + .await 2757 + .map_err(|e| { 2758 + tonic::Status::unknown( 2759 + format!("Service was not ready: {}", e.into()), 2760 + ) 2761 + })?; 2426 2762 let codec = tonic::codec::ProstCodec::default(); 2427 2763 let path = http::uri::PathAndQuery::from_static( 2428 2764 "/rockbox.v1alpha1.PlaybackService/FlushAndReloadTracks", 2429 2765 ); 2430 2766 let mut req = request.into_request(); 2431 - req.extensions_mut().insert(GrpcMethod::new( 2432 - "rockbox.v1alpha1.PlaybackService", 2433 - "FlushAndReloadTracks", 2434 - )); 2767 + req.extensions_mut() 2768 + .insert( 2769 + GrpcMethod::new( 2770 + "rockbox.v1alpha1.PlaybackService", 2771 + "FlushAndReloadTracks", 2772 + ), 2773 + ); 2435 2774 self.inner.unary(req, path, codec).await 2436 2775 } 2437 2776 pub async fn get_file_position( 2438 2777 &mut self, 2439 2778 request: impl tonic::IntoRequest<super::GetFilePositionRequest>, 2440 - ) -> std::result::Result<tonic::Response<super::GetFilePositionResponse>, tonic::Status> 2441 - { 2442 - self.inner.ready().await.map_err(|e| { 2443 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2444 - })?; 2779 + ) -> std::result::Result< 2780 + tonic::Response<super::GetFilePositionResponse>, 2781 + tonic::Status, 2782 + > { 2783 + self.inner 2784 + .ready() 2785 + .await 2786 + .map_err(|e| { 2787 + tonic::Status::unknown( 2788 + format!("Service was not ready: {}", e.into()), 2789 + ) 2790 + })?; 2445 2791 let codec = tonic::codec::ProstCodec::default(); 2446 2792 let path = http::uri::PathAndQuery::from_static( 2447 2793 "/rockbox.v1alpha1.PlaybackService/GetFilePosition", 2448 2794 ); 2449 2795 let mut req = request.into_request(); 2450 - req.extensions_mut().insert(GrpcMethod::new( 2451 - "rockbox.v1alpha1.PlaybackService", 2452 - "GetFilePosition", 2453 - )); 2796 + req.extensions_mut() 2797 + .insert( 2798 + GrpcMethod::new( 2799 + "rockbox.v1alpha1.PlaybackService", 2800 + "GetFilePosition", 2801 + ), 2802 + ); 2454 2803 self.inner.unary(req, path, codec).await 2455 2804 } 2456 2805 pub async fn hard_stop( 2457 2806 &mut self, 2458 2807 request: impl tonic::IntoRequest<super::HardStopRequest>, 2459 - ) -> std::result::Result<tonic::Response<super::HardStopResponse>, tonic::Status> { 2460 - self.inner.ready().await.map_err(|e| { 2461 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2462 - })?; 2808 + ) -> std::result::Result< 2809 + tonic::Response<super::HardStopResponse>, 2810 + tonic::Status, 2811 + > { 2812 + self.inner 2813 + .ready() 2814 + .await 2815 + .map_err(|e| { 2816 + tonic::Status::unknown( 2817 + format!("Service was not ready: {}", e.into()), 2818 + ) 2819 + })?; 2463 2820 let codec = tonic::codec::ProstCodec::default(); 2464 - let path = 2465 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/HardStop"); 2821 + let path = http::uri::PathAndQuery::from_static( 2822 + "/rockbox.v1alpha1.PlaybackService/HardStop", 2823 + ); 2466 2824 let mut req = request.into_request(); 2467 - req.extensions_mut().insert(GrpcMethod::new( 2468 - "rockbox.v1alpha1.PlaybackService", 2469 - "HardStop", 2470 - )); 2825 + req.extensions_mut() 2826 + .insert(GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "HardStop")); 2471 2827 self.inner.unary(req, path, codec).await 2472 2828 } 2473 2829 pub async fn play_album( 2474 2830 &mut self, 2475 2831 request: impl tonic::IntoRequest<super::PlayAlbumRequest>, 2476 - ) -> std::result::Result<tonic::Response<super::PlayAlbumResponse>, tonic::Status> { 2477 - self.inner.ready().await.map_err(|e| { 2478 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2479 - })?; 2832 + ) -> std::result::Result< 2833 + tonic::Response<super::PlayAlbumResponse>, 2834 + tonic::Status, 2835 + > { 2836 + self.inner 2837 + .ready() 2838 + .await 2839 + .map_err(|e| { 2840 + tonic::Status::unknown( 2841 + format!("Service was not ready: {}", e.into()), 2842 + ) 2843 + })?; 2480 2844 let codec = tonic::codec::ProstCodec::default(); 2481 - let path = 2482 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/PlayAlbum"); 2845 + let path = http::uri::PathAndQuery::from_static( 2846 + "/rockbox.v1alpha1.PlaybackService/PlayAlbum", 2847 + ); 2483 2848 let mut req = request.into_request(); 2484 - req.extensions_mut().insert(GrpcMethod::new( 2485 - "rockbox.v1alpha1.PlaybackService", 2486 - "PlayAlbum", 2487 - )); 2849 + req.extensions_mut() 2850 + .insert( 2851 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayAlbum"), 2852 + ); 2488 2853 self.inner.unary(req, path, codec).await 2489 2854 } 2490 2855 pub async fn play_artist_tracks( 2491 2856 &mut self, 2492 2857 request: impl tonic::IntoRequest<super::PlayArtistTracksRequest>, 2493 - ) -> std::result::Result<tonic::Response<super::PlayArtistTracksResponse>, tonic::Status> 2494 - { 2495 - self.inner.ready().await.map_err(|e| { 2496 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2497 - })?; 2858 + ) -> std::result::Result< 2859 + tonic::Response<super::PlayArtistTracksResponse>, 2860 + tonic::Status, 2861 + > { 2862 + self.inner 2863 + .ready() 2864 + .await 2865 + .map_err(|e| { 2866 + tonic::Status::unknown( 2867 + format!("Service was not ready: {}", e.into()), 2868 + ) 2869 + })?; 2498 2870 let codec = tonic::codec::ProstCodec::default(); 2499 2871 let path = http::uri::PathAndQuery::from_static( 2500 2872 "/rockbox.v1alpha1.PlaybackService/PlayArtistTracks", 2501 2873 ); 2502 2874 let mut req = request.into_request(); 2503 - req.extensions_mut().insert(GrpcMethod::new( 2504 - "rockbox.v1alpha1.PlaybackService", 2505 - "PlayArtistTracks", 2506 - )); 2875 + req.extensions_mut() 2876 + .insert( 2877 + GrpcMethod::new( 2878 + "rockbox.v1alpha1.PlaybackService", 2879 + "PlayArtistTracks", 2880 + ), 2881 + ); 2507 2882 self.inner.unary(req, path, codec).await 2508 2883 } 2509 2884 pub async fn play_playlist( 2510 2885 &mut self, 2511 2886 request: impl tonic::IntoRequest<super::PlayPlaylistRequest>, 2512 - ) -> std::result::Result<tonic::Response<super::PlayPlaylistResponse>, tonic::Status> 2513 - { 2514 - self.inner.ready().await.map_err(|e| { 2515 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2516 - })?; 2887 + ) -> std::result::Result< 2888 + tonic::Response<super::PlayPlaylistResponse>, 2889 + tonic::Status, 2890 + > { 2891 + self.inner 2892 + .ready() 2893 + .await 2894 + .map_err(|e| { 2895 + tonic::Status::unknown( 2896 + format!("Service was not ready: {}", e.into()), 2897 + ) 2898 + })?; 2517 2899 let codec = tonic::codec::ProstCodec::default(); 2518 2900 let path = http::uri::PathAndQuery::from_static( 2519 2901 "/rockbox.v1alpha1.PlaybackService/PlayPlaylist", 2520 2902 ); 2521 2903 let mut req = request.into_request(); 2522 - req.extensions_mut().insert(GrpcMethod::new( 2523 - "rockbox.v1alpha1.PlaybackService", 2524 - "PlayPlaylist", 2525 - )); 2904 + req.extensions_mut() 2905 + .insert( 2906 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayPlaylist"), 2907 + ); 2526 2908 self.inner.unary(req, path, codec).await 2527 2909 } 2528 2910 pub async fn play_directory( 2529 2911 &mut self, 2530 2912 request: impl tonic::IntoRequest<super::PlayDirectoryRequest>, 2531 - ) -> std::result::Result<tonic::Response<super::PlayDirectoryResponse>, tonic::Status> 2532 - { 2533 - self.inner.ready().await.map_err(|e| { 2534 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2535 - })?; 2913 + ) -> std::result::Result< 2914 + tonic::Response<super::PlayDirectoryResponse>, 2915 + tonic::Status, 2916 + > { 2917 + self.inner 2918 + .ready() 2919 + .await 2920 + .map_err(|e| { 2921 + tonic::Status::unknown( 2922 + format!("Service was not ready: {}", e.into()), 2923 + ) 2924 + })?; 2536 2925 let codec = tonic::codec::ProstCodec::default(); 2537 2926 let path = http::uri::PathAndQuery::from_static( 2538 2927 "/rockbox.v1alpha1.PlaybackService/PlayDirectory", 2539 2928 ); 2540 2929 let mut req = request.into_request(); 2541 - req.extensions_mut().insert(GrpcMethod::new( 2542 - "rockbox.v1alpha1.PlaybackService", 2543 - "PlayDirectory", 2544 - )); 2930 + req.extensions_mut() 2931 + .insert( 2932 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayDirectory"), 2933 + ); 2545 2934 self.inner.unary(req, path, codec).await 2546 2935 } 2547 2936 pub async fn play_music_directory( 2548 2937 &mut self, 2549 2938 request: impl tonic::IntoRequest<super::PlayMusicDirectoryRequest>, 2550 - ) -> std::result::Result<tonic::Response<super::PlayMusicDirectoryResponse>, tonic::Status> 2551 - { 2552 - self.inner.ready().await.map_err(|e| { 2553 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2554 - })?; 2939 + ) -> std::result::Result< 2940 + tonic::Response<super::PlayMusicDirectoryResponse>, 2941 + tonic::Status, 2942 + > { 2943 + self.inner 2944 + .ready() 2945 + .await 2946 + .map_err(|e| { 2947 + tonic::Status::unknown( 2948 + format!("Service was not ready: {}", e.into()), 2949 + ) 2950 + })?; 2555 2951 let codec = tonic::codec::ProstCodec::default(); 2556 2952 let path = http::uri::PathAndQuery::from_static( 2557 2953 "/rockbox.v1alpha1.PlaybackService/PlayMusicDirectory", 2558 2954 ); 2559 2955 let mut req = request.into_request(); 2560 - req.extensions_mut().insert(GrpcMethod::new( 2561 - "rockbox.v1alpha1.PlaybackService", 2562 - "PlayMusicDirectory", 2563 - )); 2956 + req.extensions_mut() 2957 + .insert( 2958 + GrpcMethod::new( 2959 + "rockbox.v1alpha1.PlaybackService", 2960 + "PlayMusicDirectory", 2961 + ), 2962 + ); 2564 2963 self.inner.unary(req, path, codec).await 2565 2964 } 2566 2965 pub async fn play_track( 2567 2966 &mut self, 2568 2967 request: impl tonic::IntoRequest<super::PlayTrackRequest>, 2569 - ) -> std::result::Result<tonic::Response<super::PlayTrackResponse>, tonic::Status> { 2570 - self.inner.ready().await.map_err(|e| { 2571 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2572 - })?; 2968 + ) -> std::result::Result< 2969 + tonic::Response<super::PlayTrackResponse>, 2970 + tonic::Status, 2971 + > { 2972 + self.inner 2973 + .ready() 2974 + .await 2975 + .map_err(|e| { 2976 + tonic::Status::unknown( 2977 + format!("Service was not ready: {}", e.into()), 2978 + ) 2979 + })?; 2573 2980 let codec = tonic::codec::ProstCodec::default(); 2574 - let path = 2575 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaybackService/PlayTrack"); 2981 + let path = http::uri::PathAndQuery::from_static( 2982 + "/rockbox.v1alpha1.PlaybackService/PlayTrack", 2983 + ); 2576 2984 let mut req = request.into_request(); 2577 - req.extensions_mut().insert(GrpcMethod::new( 2578 - "rockbox.v1alpha1.PlaybackService", 2579 - "PlayTrack", 2580 - )); 2985 + req.extensions_mut() 2986 + .insert( 2987 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayTrack"), 2988 + ); 2581 2989 self.inner.unary(req, path, codec).await 2582 2990 } 2583 2991 pub async fn play_liked_tracks( 2584 2992 &mut self, 2585 2993 request: impl tonic::IntoRequest<super::PlayLikedTracksRequest>, 2586 - ) -> std::result::Result<tonic::Response<super::PlayLikedTracksResponse>, tonic::Status> 2587 - { 2588 - self.inner.ready().await.map_err(|e| { 2589 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2590 - })?; 2994 + ) -> std::result::Result< 2995 + tonic::Response<super::PlayLikedTracksResponse>, 2996 + tonic::Status, 2997 + > { 2998 + self.inner 2999 + .ready() 3000 + .await 3001 + .map_err(|e| { 3002 + tonic::Status::unknown( 3003 + format!("Service was not ready: {}", e.into()), 3004 + ) 3005 + })?; 2591 3006 let codec = tonic::codec::ProstCodec::default(); 2592 3007 let path = http::uri::PathAndQuery::from_static( 2593 3008 "/rockbox.v1alpha1.PlaybackService/PlayLikedTracks", 2594 3009 ); 2595 3010 let mut req = request.into_request(); 2596 - req.extensions_mut().insert(GrpcMethod::new( 2597 - "rockbox.v1alpha1.PlaybackService", 2598 - "PlayLikedTracks", 2599 - )); 3011 + req.extensions_mut() 3012 + .insert( 3013 + GrpcMethod::new( 3014 + "rockbox.v1alpha1.PlaybackService", 3015 + "PlayLikedTracks", 3016 + ), 3017 + ); 2600 3018 self.inner.unary(req, path, codec).await 2601 3019 } 2602 3020 pub async fn play_all_tracks( 2603 3021 &mut self, 2604 3022 request: impl tonic::IntoRequest<super::PlayAllTracksRequest>, 2605 - ) -> std::result::Result<tonic::Response<super::PlayAllTracksResponse>, tonic::Status> 2606 - { 2607 - self.inner.ready().await.map_err(|e| { 2608 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2609 - })?; 3023 + ) -> std::result::Result< 3024 + tonic::Response<super::PlayAllTracksResponse>, 3025 + tonic::Status, 3026 + > { 3027 + self.inner 3028 + .ready() 3029 + .await 3030 + .map_err(|e| { 3031 + tonic::Status::unknown( 3032 + format!("Service was not ready: {}", e.into()), 3033 + ) 3034 + })?; 2610 3035 let codec = tonic::codec::ProstCodec::default(); 2611 3036 let path = http::uri::PathAndQuery::from_static( 2612 3037 "/rockbox.v1alpha1.PlaybackService/PlayAllTracks", 2613 3038 ); 2614 3039 let mut req = request.into_request(); 2615 - req.extensions_mut().insert(GrpcMethod::new( 2616 - "rockbox.v1alpha1.PlaybackService", 2617 - "PlayAllTracks", 2618 - )); 3040 + req.extensions_mut() 3041 + .insert( 3042 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "PlayAllTracks"), 3043 + ); 2619 3044 self.inner.unary(req, path, codec).await 2620 3045 } 2621 3046 pub async fn stream_current_track( ··· 2625 3050 tonic::Response<tonic::codec::Streaming<super::CurrentTrackResponse>>, 2626 3051 tonic::Status, 2627 3052 > { 2628 - self.inner.ready().await.map_err(|e| { 2629 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2630 - })?; 3053 + self.inner 3054 + .ready() 3055 + .await 3056 + .map_err(|e| { 3057 + tonic::Status::unknown( 3058 + format!("Service was not ready: {}", e.into()), 3059 + ) 3060 + })?; 2631 3061 let codec = tonic::codec::ProstCodec::default(); 2632 3062 let path = http::uri::PathAndQuery::from_static( 2633 3063 "/rockbox.v1alpha1.PlaybackService/StreamCurrentTrack", 2634 3064 ); 2635 3065 let mut req = request.into_request(); 2636 - req.extensions_mut().insert(GrpcMethod::new( 2637 - "rockbox.v1alpha1.PlaybackService", 2638 - "StreamCurrentTrack", 2639 - )); 3066 + req.extensions_mut() 3067 + .insert( 3068 + GrpcMethod::new( 3069 + "rockbox.v1alpha1.PlaybackService", 3070 + "StreamCurrentTrack", 3071 + ), 3072 + ); 2640 3073 self.inner.server_streaming(req, path, codec).await 2641 3074 } 2642 3075 pub async fn stream_status( ··· 2646 3079 tonic::Response<tonic::codec::Streaming<super::StatusResponse>>, 2647 3080 tonic::Status, 2648 3081 > { 2649 - self.inner.ready().await.map_err(|e| { 2650 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2651 - })?; 3082 + self.inner 3083 + .ready() 3084 + .await 3085 + .map_err(|e| { 3086 + tonic::Status::unknown( 3087 + format!("Service was not ready: {}", e.into()), 3088 + ) 3089 + })?; 2652 3090 let codec = tonic::codec::ProstCodec::default(); 2653 3091 let path = http::uri::PathAndQuery::from_static( 2654 3092 "/rockbox.v1alpha1.PlaybackService/StreamStatus", 2655 3093 ); 2656 3094 let mut req = request.into_request(); 2657 - req.extensions_mut().insert(GrpcMethod::new( 2658 - "rockbox.v1alpha1.PlaybackService", 2659 - "StreamStatus", 2660 - )); 3095 + req.extensions_mut() 3096 + .insert( 3097 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "StreamStatus"), 3098 + ); 2661 3099 self.inner.server_streaming(req, path, codec).await 2662 3100 } 2663 3101 pub async fn stream_playlist( ··· 2667 3105 tonic::Response<tonic::codec::Streaming<super::PlaylistResponse>>, 2668 3106 tonic::Status, 2669 3107 > { 2670 - self.inner.ready().await.map_err(|e| { 2671 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 2672 - })?; 3108 + self.inner 3109 + .ready() 3110 + .await 3111 + .map_err(|e| { 3112 + tonic::Status::unknown( 3113 + format!("Service was not ready: {}", e.into()), 3114 + ) 3115 + })?; 2673 3116 let codec = tonic::codec::ProstCodec::default(); 2674 3117 let path = http::uri::PathAndQuery::from_static( 2675 3118 "/rockbox.v1alpha1.PlaybackService/StreamPlaylist", 2676 3119 ); 2677 3120 let mut req = request.into_request(); 2678 - req.extensions_mut().insert(GrpcMethod::new( 2679 - "rockbox.v1alpha1.PlaybackService", 2680 - "StreamPlaylist", 2681 - )); 3121 + req.extensions_mut() 3122 + .insert( 3123 + GrpcMethod::new("rockbox.v1alpha1.PlaybackService", "StreamPlaylist"), 3124 + ); 2682 3125 self.inner.server_streaming(req, path, codec).await 2683 3126 } 2684 3127 } ··· 2690 3133 dead_code, 2691 3134 missing_docs, 2692 3135 clippy::wildcard_imports, 2693 - clippy::let_unit_value 3136 + clippy::let_unit_value, 2694 3137 )] 2695 3138 use tonic::codegen::*; 2696 3139 /// Generated trait containing gRPC methods that should be implemented for use with PlaybackServiceServer. ··· 2707 3150 async fn play_or_pause( 2708 3151 &self, 2709 3152 request: tonic::Request<super::PlayOrPauseRequest>, 2710 - ) -> std::result::Result<tonic::Response<super::PlayOrPauseResponse>, tonic::Status>; 3153 + ) -> std::result::Result< 3154 + tonic::Response<super::PlayOrPauseResponse>, 3155 + tonic::Status, 3156 + >; 2711 3157 async fn resume( 2712 3158 &self, 2713 3159 request: tonic::Request<super::ResumeRequest>, ··· 2719 3165 async fn previous( 2720 3166 &self, 2721 3167 request: tonic::Request<super::PreviousRequest>, 2722 - ) -> std::result::Result<tonic::Response<super::PreviousResponse>, tonic::Status>; 3168 + ) -> std::result::Result< 3169 + tonic::Response<super::PreviousResponse>, 3170 + tonic::Status, 3171 + >; 2723 3172 async fn fast_forward_rewind( 2724 3173 &self, 2725 3174 request: tonic::Request<super::FastForwardRewindRequest>, 2726 - ) -> std::result::Result<tonic::Response<super::FastForwardRewindResponse>, tonic::Status>; 3175 + ) -> std::result::Result< 3176 + tonic::Response<super::FastForwardRewindResponse>, 3177 + tonic::Status, 3178 + >; 2727 3179 async fn status( 2728 3180 &self, 2729 3181 request: tonic::Request<super::StatusRequest>, ··· 2731 3183 async fn current_track( 2732 3184 &self, 2733 3185 request: tonic::Request<super::CurrentTrackRequest>, 2734 - ) -> std::result::Result<tonic::Response<super::CurrentTrackResponse>, tonic::Status>; 3186 + ) -> std::result::Result< 3187 + tonic::Response<super::CurrentTrackResponse>, 3188 + tonic::Status, 3189 + >; 2735 3190 async fn next_track( 2736 3191 &self, 2737 3192 request: tonic::Request<super::NextTrackRequest>, 2738 - ) -> std::result::Result<tonic::Response<super::NextTrackResponse>, tonic::Status>; 3193 + ) -> std::result::Result< 3194 + tonic::Response<super::NextTrackResponse>, 3195 + tonic::Status, 3196 + >; 2739 3197 async fn flush_and_reload_tracks( 2740 3198 &self, 2741 3199 request: tonic::Request<super::FlushAndReloadTracksRequest>, 2742 - ) -> std::result::Result<tonic::Response<super::FlushAndReloadTracksResponse>, tonic::Status>; 3200 + ) -> std::result::Result< 3201 + tonic::Response<super::FlushAndReloadTracksResponse>, 3202 + tonic::Status, 3203 + >; 2743 3204 async fn get_file_position( 2744 3205 &self, 2745 3206 request: tonic::Request<super::GetFilePositionRequest>, 2746 - ) -> std::result::Result<tonic::Response<super::GetFilePositionResponse>, tonic::Status>; 3207 + ) -> std::result::Result< 3208 + tonic::Response<super::GetFilePositionResponse>, 3209 + tonic::Status, 3210 + >; 2747 3211 async fn hard_stop( 2748 3212 &self, 2749 3213 request: tonic::Request<super::HardStopRequest>, 2750 - ) -> std::result::Result<tonic::Response<super::HardStopResponse>, tonic::Status>; 3214 + ) -> std::result::Result< 3215 + tonic::Response<super::HardStopResponse>, 3216 + tonic::Status, 3217 + >; 2751 3218 async fn play_album( 2752 3219 &self, 2753 3220 request: tonic::Request<super::PlayAlbumRequest>, 2754 - ) -> std::result::Result<tonic::Response<super::PlayAlbumResponse>, tonic::Status>; 3221 + ) -> std::result::Result< 3222 + tonic::Response<super::PlayAlbumResponse>, 3223 + tonic::Status, 3224 + >; 2755 3225 async fn play_artist_tracks( 2756 3226 &self, 2757 3227 request: tonic::Request<super::PlayArtistTracksRequest>, 2758 - ) -> std::result::Result<tonic::Response<super::PlayArtistTracksResponse>, tonic::Status>; 3228 + ) -> std::result::Result< 3229 + tonic::Response<super::PlayArtistTracksResponse>, 3230 + tonic::Status, 3231 + >; 2759 3232 async fn play_playlist( 2760 3233 &self, 2761 3234 request: tonic::Request<super::PlayPlaylistRequest>, 2762 - ) -> std::result::Result<tonic::Response<super::PlayPlaylistResponse>, tonic::Status>; 3235 + ) -> std::result::Result< 3236 + tonic::Response<super::PlayPlaylistResponse>, 3237 + tonic::Status, 3238 + >; 2763 3239 async fn play_directory( 2764 3240 &self, 2765 3241 request: tonic::Request<super::PlayDirectoryRequest>, 2766 - ) -> std::result::Result<tonic::Response<super::PlayDirectoryResponse>, tonic::Status>; 3242 + ) -> std::result::Result< 3243 + tonic::Response<super::PlayDirectoryResponse>, 3244 + tonic::Status, 3245 + >; 2767 3246 async fn play_music_directory( 2768 3247 &self, 2769 3248 request: tonic::Request<super::PlayMusicDirectoryRequest>, 2770 - ) -> std::result::Result<tonic::Response<super::PlayMusicDirectoryResponse>, tonic::Status>; 3249 + ) -> std::result::Result< 3250 + tonic::Response<super::PlayMusicDirectoryResponse>, 3251 + tonic::Status, 3252 + >; 2771 3253 async fn play_track( 2772 3254 &self, 2773 3255 request: tonic::Request<super::PlayTrackRequest>, 2774 - ) -> std::result::Result<tonic::Response<super::PlayTrackResponse>, tonic::Status>; 3256 + ) -> std::result::Result< 3257 + tonic::Response<super::PlayTrackResponse>, 3258 + tonic::Status, 3259 + >; 2775 3260 async fn play_liked_tracks( 2776 3261 &self, 2777 3262 request: tonic::Request<super::PlayLikedTracksRequest>, 2778 - ) -> std::result::Result<tonic::Response<super::PlayLikedTracksResponse>, tonic::Status>; 3263 + ) -> std::result::Result< 3264 + tonic::Response<super::PlayLikedTracksResponse>, 3265 + tonic::Status, 3266 + >; 2779 3267 async fn play_all_tracks( 2780 3268 &self, 2781 3269 request: tonic::Request<super::PlayAllTracksRequest>, 2782 - ) -> std::result::Result<tonic::Response<super::PlayAllTracksResponse>, tonic::Status>; 3270 + ) -> std::result::Result< 3271 + tonic::Response<super::PlayAllTracksResponse>, 3272 + tonic::Status, 3273 + >; 2783 3274 /// Server streaming response type for the StreamCurrentTrack method. 2784 3275 type StreamCurrentTrackStream: tonic::codegen::tokio_stream::Stream< 2785 3276 Item = std::result::Result<super::CurrentTrackResponse, tonic::Status>, 2786 - > + std::marker::Send 3277 + > 3278 + + std::marker::Send 2787 3279 + 'static; 2788 3280 async fn stream_current_track( 2789 3281 &self, 2790 3282 request: tonic::Request<super::StreamCurrentTrackRequest>, 2791 - ) -> std::result::Result<tonic::Response<Self::StreamCurrentTrackStream>, tonic::Status>; 3283 + ) -> std::result::Result< 3284 + tonic::Response<Self::StreamCurrentTrackStream>, 3285 + tonic::Status, 3286 + >; 2792 3287 /// Server streaming response type for the StreamStatus method. 2793 3288 type StreamStatusStream: tonic::codegen::tokio_stream::Stream< 2794 3289 Item = std::result::Result<super::StatusResponse, tonic::Status>, 2795 - > + std::marker::Send 3290 + > 3291 + + std::marker::Send 2796 3292 + 'static; 2797 3293 async fn stream_status( 2798 3294 &self, 2799 3295 request: tonic::Request<super::StreamStatusRequest>, 2800 - ) -> std::result::Result<tonic::Response<Self::StreamStatusStream>, tonic::Status>; 3296 + ) -> std::result::Result< 3297 + tonic::Response<Self::StreamStatusStream>, 3298 + tonic::Status, 3299 + >; 2801 3300 /// Server streaming response type for the StreamPlaylist method. 2802 3301 type StreamPlaylistStream: tonic::codegen::tokio_stream::Stream< 2803 3302 Item = std::result::Result<super::PlaylistResponse, tonic::Status>, 2804 - > + std::marker::Send 3303 + > 3304 + + std::marker::Send 2805 3305 + 'static; 2806 3306 async fn stream_playlist( 2807 3307 &self, 2808 3308 request: tonic::Request<super::StreamPlaylistRequest>, 2809 - ) -> std::result::Result<tonic::Response<Self::StreamPlaylistStream>, tonic::Status>; 3309 + ) -> std::result::Result< 3310 + tonic::Response<Self::StreamPlaylistStream>, 3311 + tonic::Status, 3312 + >; 2810 3313 } 2811 3314 #[derive(Debug)] 2812 3315 pub struct PlaybackServiceServer<T> { ··· 2829 3332 max_encoding_message_size: None, 2830 3333 } 2831 3334 } 2832 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 3335 + pub fn with_interceptor<F>( 3336 + inner: T, 3337 + interceptor: F, 3338 + ) -> InterceptedService<Self, F> 2833 3339 where 2834 3340 F: tonic::service::Interceptor, 2835 3341 { ··· 2884 3390 "/rockbox.v1alpha1.PlaybackService/Play" => { 2885 3391 #[allow(non_camel_case_types)] 2886 3392 struct PlaySvc<T: PlaybackService>(pub Arc<T>); 2887 - impl<T: PlaybackService> tonic::server::UnaryService<super::PlayRequest> for PlaySvc<T> { 3393 + impl< 3394 + T: PlaybackService, 3395 + > tonic::server::UnaryService<super::PlayRequest> for PlaySvc<T> { 2888 3396 type Response = super::PlayResponse; 2889 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3397 + type Future = BoxFuture< 3398 + tonic::Response<Self::Response>, 3399 + tonic::Status, 3400 + >; 2890 3401 fn call( 2891 3402 &mut self, 2892 3403 request: tonic::Request<super::PlayRequest>, 2893 3404 ) -> Self::Future { 2894 3405 let inner = Arc::clone(&self.0); 2895 - let fut = 2896 - async move { <T as PlaybackService>::play(&inner, request).await }; 3406 + let fut = async move { 3407 + <T as PlaybackService>::play(&inner, request).await 3408 + }; 2897 3409 Box::pin(fut) 2898 3410 } 2899 3411 } ··· 2922 3434 "/rockbox.v1alpha1.PlaybackService/Pause" => { 2923 3435 #[allow(non_camel_case_types)] 2924 3436 struct PauseSvc<T: PlaybackService>(pub Arc<T>); 2925 - impl<T: PlaybackService> tonic::server::UnaryService<super::PauseRequest> for PauseSvc<T> { 3437 + impl< 3438 + T: PlaybackService, 3439 + > tonic::server::UnaryService<super::PauseRequest> for PauseSvc<T> { 2926 3440 type Response = super::PauseResponse; 2927 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3441 + type Future = BoxFuture< 3442 + tonic::Response<Self::Response>, 3443 + tonic::Status, 3444 + >; 2928 3445 fn call( 2929 3446 &mut self, 2930 3447 request: tonic::Request<super::PauseRequest>, 2931 3448 ) -> Self::Future { 2932 3449 let inner = Arc::clone(&self.0); 2933 - let fut = 2934 - async move { <T as PlaybackService>::pause(&inner, request).await }; 3450 + let fut = async move { 3451 + <T as PlaybackService>::pause(&inner, request).await 3452 + }; 2935 3453 Box::pin(fut) 2936 3454 } 2937 3455 } ··· 2960 3478 "/rockbox.v1alpha1.PlaybackService/PlayOrPause" => { 2961 3479 #[allow(non_camel_case_types)] 2962 3480 struct PlayOrPauseSvc<T: PlaybackService>(pub Arc<T>); 2963 - impl<T: PlaybackService> tonic::server::UnaryService<super::PlayOrPauseRequest> 2964 - for PlayOrPauseSvc<T> 2965 - { 3481 + impl< 3482 + T: PlaybackService, 3483 + > tonic::server::UnaryService<super::PlayOrPauseRequest> 3484 + for PlayOrPauseSvc<T> { 2966 3485 type Response = super::PlayOrPauseResponse; 2967 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3486 + type Future = BoxFuture< 3487 + tonic::Response<Self::Response>, 3488 + tonic::Status, 3489 + >; 2968 3490 fn call( 2969 3491 &mut self, 2970 3492 request: tonic::Request<super::PlayOrPauseRequest>, ··· 3001 3523 "/rockbox.v1alpha1.PlaybackService/Resume" => { 3002 3524 #[allow(non_camel_case_types)] 3003 3525 struct ResumeSvc<T: PlaybackService>(pub Arc<T>); 3004 - impl<T: PlaybackService> tonic::server::UnaryService<super::ResumeRequest> for ResumeSvc<T> { 3526 + impl< 3527 + T: PlaybackService, 3528 + > tonic::server::UnaryService<super::ResumeRequest> 3529 + for ResumeSvc<T> { 3005 3530 type Response = super::ResumeResponse; 3006 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3531 + type Future = BoxFuture< 3532 + tonic::Response<Self::Response>, 3533 + tonic::Status, 3534 + >; 3007 3535 fn call( 3008 3536 &mut self, 3009 3537 request: tonic::Request<super::ResumeRequest>, ··· 3040 3568 "/rockbox.v1alpha1.PlaybackService/Next" => { 3041 3569 #[allow(non_camel_case_types)] 3042 3570 struct NextSvc<T: PlaybackService>(pub Arc<T>); 3043 - impl<T: PlaybackService> tonic::server::UnaryService<super::NextRequest> for NextSvc<T> { 3571 + impl< 3572 + T: PlaybackService, 3573 + > tonic::server::UnaryService<super::NextRequest> for NextSvc<T> { 3044 3574 type Response = super::NextResponse; 3045 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3575 + type Future = BoxFuture< 3576 + tonic::Response<Self::Response>, 3577 + tonic::Status, 3578 + >; 3046 3579 fn call( 3047 3580 &mut self, 3048 3581 request: tonic::Request<super::NextRequest>, 3049 3582 ) -> Self::Future { 3050 3583 let inner = Arc::clone(&self.0); 3051 - let fut = 3052 - async move { <T as PlaybackService>::next(&inner, request).await }; 3584 + let fut = async move { 3585 + <T as PlaybackService>::next(&inner, request).await 3586 + }; 3053 3587 Box::pin(fut) 3054 3588 } 3055 3589 } ··· 3078 3612 "/rockbox.v1alpha1.PlaybackService/Previous" => { 3079 3613 #[allow(non_camel_case_types)] 3080 3614 struct PreviousSvc<T: PlaybackService>(pub Arc<T>); 3081 - impl<T: PlaybackService> tonic::server::UnaryService<super::PreviousRequest> for PreviousSvc<T> { 3615 + impl< 3616 + T: PlaybackService, 3617 + > tonic::server::UnaryService<super::PreviousRequest> 3618 + for PreviousSvc<T> { 3082 3619 type Response = super::PreviousResponse; 3083 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3620 + type Future = BoxFuture< 3621 + tonic::Response<Self::Response>, 3622 + tonic::Status, 3623 + >; 3084 3624 fn call( 3085 3625 &mut self, 3086 3626 request: tonic::Request<super::PreviousRequest>, ··· 3117 3657 "/rockbox.v1alpha1.PlaybackService/FastForwardRewind" => { 3118 3658 #[allow(non_camel_case_types)] 3119 3659 struct FastForwardRewindSvc<T: PlaybackService>(pub Arc<T>); 3120 - impl<T: PlaybackService> 3121 - tonic::server::UnaryService<super::FastForwardRewindRequest> 3122 - for FastForwardRewindSvc<T> 3123 - { 3660 + impl< 3661 + T: PlaybackService, 3662 + > tonic::server::UnaryService<super::FastForwardRewindRequest> 3663 + for FastForwardRewindSvc<T> { 3124 3664 type Response = super::FastForwardRewindResponse; 3125 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3665 + type Future = BoxFuture< 3666 + tonic::Response<Self::Response>, 3667 + tonic::Status, 3668 + >; 3126 3669 fn call( 3127 3670 &mut self, 3128 3671 request: tonic::Request<super::FastForwardRewindRequest>, 3129 3672 ) -> Self::Future { 3130 3673 let inner = Arc::clone(&self.0); 3131 3674 let fut = async move { 3132 - <T as PlaybackService>::fast_forward_rewind(&inner, request).await 3675 + <T as PlaybackService>::fast_forward_rewind(&inner, request) 3676 + .await 3133 3677 }; 3134 3678 Box::pin(fut) 3135 3679 } ··· 3159 3703 "/rockbox.v1alpha1.PlaybackService/Status" => { 3160 3704 #[allow(non_camel_case_types)] 3161 3705 struct StatusSvc<T: PlaybackService>(pub Arc<T>); 3162 - impl<T: PlaybackService> tonic::server::UnaryService<super::StatusRequest> for StatusSvc<T> { 3706 + impl< 3707 + T: PlaybackService, 3708 + > tonic::server::UnaryService<super::StatusRequest> 3709 + for StatusSvc<T> { 3163 3710 type Response = super::StatusResponse; 3164 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3711 + type Future = BoxFuture< 3712 + tonic::Response<Self::Response>, 3713 + tonic::Status, 3714 + >; 3165 3715 fn call( 3166 3716 &mut self, 3167 3717 request: tonic::Request<super::StatusRequest>, ··· 3198 3748 "/rockbox.v1alpha1.PlaybackService/CurrentTrack" => { 3199 3749 #[allow(non_camel_case_types)] 3200 3750 struct CurrentTrackSvc<T: PlaybackService>(pub Arc<T>); 3201 - impl<T: PlaybackService> tonic::server::UnaryService<super::CurrentTrackRequest> 3202 - for CurrentTrackSvc<T> 3203 - { 3751 + impl< 3752 + T: PlaybackService, 3753 + > tonic::server::UnaryService<super::CurrentTrackRequest> 3754 + for CurrentTrackSvc<T> { 3204 3755 type Response = super::CurrentTrackResponse; 3205 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3756 + type Future = BoxFuture< 3757 + tonic::Response<Self::Response>, 3758 + tonic::Status, 3759 + >; 3206 3760 fn call( 3207 3761 &mut self, 3208 3762 request: tonic::Request<super::CurrentTrackRequest>, ··· 3239 3793 "/rockbox.v1alpha1.PlaybackService/NextTrack" => { 3240 3794 #[allow(non_camel_case_types)] 3241 3795 struct NextTrackSvc<T: PlaybackService>(pub Arc<T>); 3242 - impl<T: PlaybackService> tonic::server::UnaryService<super::NextTrackRequest> for NextTrackSvc<T> { 3796 + impl< 3797 + T: PlaybackService, 3798 + > tonic::server::UnaryService<super::NextTrackRequest> 3799 + for NextTrackSvc<T> { 3243 3800 type Response = super::NextTrackResponse; 3244 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3801 + type Future = BoxFuture< 3802 + tonic::Response<Self::Response>, 3803 + tonic::Status, 3804 + >; 3245 3805 fn call( 3246 3806 &mut self, 3247 3807 request: tonic::Request<super::NextTrackRequest>, ··· 3278 3838 "/rockbox.v1alpha1.PlaybackService/FlushAndReloadTracks" => { 3279 3839 #[allow(non_camel_case_types)] 3280 3840 struct FlushAndReloadTracksSvc<T: PlaybackService>(pub Arc<T>); 3281 - impl<T: PlaybackService> 3282 - tonic::server::UnaryService<super::FlushAndReloadTracksRequest> 3283 - for FlushAndReloadTracksSvc<T> 3284 - { 3841 + impl< 3842 + T: PlaybackService, 3843 + > tonic::server::UnaryService<super::FlushAndReloadTracksRequest> 3844 + for FlushAndReloadTracksSvc<T> { 3285 3845 type Response = super::FlushAndReloadTracksResponse; 3286 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3846 + type Future = BoxFuture< 3847 + tonic::Response<Self::Response>, 3848 + tonic::Status, 3849 + >; 3287 3850 fn call( 3288 3851 &mut self, 3289 3852 request: tonic::Request<super::FlushAndReloadTracksRequest>, 3290 3853 ) -> Self::Future { 3291 3854 let inner = Arc::clone(&self.0); 3292 3855 let fut = async move { 3293 - <T as PlaybackService>::flush_and_reload_tracks(&inner, request) 3856 + <T as PlaybackService>::flush_and_reload_tracks( 3857 + &inner, 3858 + request, 3859 + ) 3294 3860 .await 3295 3861 }; 3296 3862 Box::pin(fut) ··· 3321 3887 "/rockbox.v1alpha1.PlaybackService/GetFilePosition" => { 3322 3888 #[allow(non_camel_case_types)] 3323 3889 struct GetFilePositionSvc<T: PlaybackService>(pub Arc<T>); 3324 - impl<T: PlaybackService> 3325 - tonic::server::UnaryService<super::GetFilePositionRequest> 3326 - for GetFilePositionSvc<T> 3327 - { 3890 + impl< 3891 + T: PlaybackService, 3892 + > tonic::server::UnaryService<super::GetFilePositionRequest> 3893 + for GetFilePositionSvc<T> { 3328 3894 type Response = super::GetFilePositionResponse; 3329 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3895 + type Future = BoxFuture< 3896 + tonic::Response<Self::Response>, 3897 + tonic::Status, 3898 + >; 3330 3899 fn call( 3331 3900 &mut self, 3332 3901 request: tonic::Request<super::GetFilePositionRequest>, 3333 3902 ) -> Self::Future { 3334 3903 let inner = Arc::clone(&self.0); 3335 3904 let fut = async move { 3336 - <T as PlaybackService>::get_file_position(&inner, request).await 3905 + <T as PlaybackService>::get_file_position(&inner, request) 3906 + .await 3337 3907 }; 3338 3908 Box::pin(fut) 3339 3909 } ··· 3363 3933 "/rockbox.v1alpha1.PlaybackService/HardStop" => { 3364 3934 #[allow(non_camel_case_types)] 3365 3935 struct HardStopSvc<T: PlaybackService>(pub Arc<T>); 3366 - impl<T: PlaybackService> tonic::server::UnaryService<super::HardStopRequest> for HardStopSvc<T> { 3936 + impl< 3937 + T: PlaybackService, 3938 + > tonic::server::UnaryService<super::HardStopRequest> 3939 + for HardStopSvc<T> { 3367 3940 type Response = super::HardStopResponse; 3368 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3941 + type Future = BoxFuture< 3942 + tonic::Response<Self::Response>, 3943 + tonic::Status, 3944 + >; 3369 3945 fn call( 3370 3946 &mut self, 3371 3947 request: tonic::Request<super::HardStopRequest>, ··· 3402 3978 "/rockbox.v1alpha1.PlaybackService/PlayAlbum" => { 3403 3979 #[allow(non_camel_case_types)] 3404 3980 struct PlayAlbumSvc<T: PlaybackService>(pub Arc<T>); 3405 - impl<T: PlaybackService> tonic::server::UnaryService<super::PlayAlbumRequest> for PlayAlbumSvc<T> { 3981 + impl< 3982 + T: PlaybackService, 3983 + > tonic::server::UnaryService<super::PlayAlbumRequest> 3984 + for PlayAlbumSvc<T> { 3406 3985 type Response = super::PlayAlbumResponse; 3407 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 3986 + type Future = BoxFuture< 3987 + tonic::Response<Self::Response>, 3988 + tonic::Status, 3989 + >; 3408 3990 fn call( 3409 3991 &mut self, 3410 3992 request: tonic::Request<super::PlayAlbumRequest>, ··· 3441 4023 "/rockbox.v1alpha1.PlaybackService/PlayArtistTracks" => { 3442 4024 #[allow(non_camel_case_types)] 3443 4025 struct PlayArtistTracksSvc<T: PlaybackService>(pub Arc<T>); 3444 - impl<T: PlaybackService> 3445 - tonic::server::UnaryService<super::PlayArtistTracksRequest> 3446 - for PlayArtistTracksSvc<T> 3447 - { 4026 + impl< 4027 + T: PlaybackService, 4028 + > tonic::server::UnaryService<super::PlayArtistTracksRequest> 4029 + for PlayArtistTracksSvc<T> { 3448 4030 type Response = super::PlayArtistTracksResponse; 3449 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4031 + type Future = BoxFuture< 4032 + tonic::Response<Self::Response>, 4033 + tonic::Status, 4034 + >; 3450 4035 fn call( 3451 4036 &mut self, 3452 4037 request: tonic::Request<super::PlayArtistTracksRequest>, 3453 4038 ) -> Self::Future { 3454 4039 let inner = Arc::clone(&self.0); 3455 4040 let fut = async move { 3456 - <T as PlaybackService>::play_artist_tracks(&inner, request).await 4041 + <T as PlaybackService>::play_artist_tracks(&inner, request) 4042 + .await 3457 4043 }; 3458 4044 Box::pin(fut) 3459 4045 } ··· 3483 4069 "/rockbox.v1alpha1.PlaybackService/PlayPlaylist" => { 3484 4070 #[allow(non_camel_case_types)] 3485 4071 struct PlayPlaylistSvc<T: PlaybackService>(pub Arc<T>); 3486 - impl<T: PlaybackService> tonic::server::UnaryService<super::PlayPlaylistRequest> 3487 - for PlayPlaylistSvc<T> 3488 - { 4072 + impl< 4073 + T: PlaybackService, 4074 + > tonic::server::UnaryService<super::PlayPlaylistRequest> 4075 + for PlayPlaylistSvc<T> { 3489 4076 type Response = super::PlayPlaylistResponse; 3490 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4077 + type Future = BoxFuture< 4078 + tonic::Response<Self::Response>, 4079 + tonic::Status, 4080 + >; 3491 4081 fn call( 3492 4082 &mut self, 3493 4083 request: tonic::Request<super::PlayPlaylistRequest>, ··· 3524 4114 "/rockbox.v1alpha1.PlaybackService/PlayDirectory" => { 3525 4115 #[allow(non_camel_case_types)] 3526 4116 struct PlayDirectorySvc<T: PlaybackService>(pub Arc<T>); 3527 - impl<T: PlaybackService> 3528 - tonic::server::UnaryService<super::PlayDirectoryRequest> 3529 - for PlayDirectorySvc<T> 3530 - { 4117 + impl< 4118 + T: PlaybackService, 4119 + > tonic::server::UnaryService<super::PlayDirectoryRequest> 4120 + for PlayDirectorySvc<T> { 3531 4121 type Response = super::PlayDirectoryResponse; 3532 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4122 + type Future = BoxFuture< 4123 + tonic::Response<Self::Response>, 4124 + tonic::Status, 4125 + >; 3533 4126 fn call( 3534 4127 &mut self, 3535 4128 request: tonic::Request<super::PlayDirectoryRequest>, 3536 4129 ) -> Self::Future { 3537 4130 let inner = Arc::clone(&self.0); 3538 4131 let fut = async move { 3539 - <T as PlaybackService>::play_directory(&inner, request).await 4132 + <T as PlaybackService>::play_directory(&inner, request) 4133 + .await 3540 4134 }; 3541 4135 Box::pin(fut) 3542 4136 } ··· 3566 4160 "/rockbox.v1alpha1.PlaybackService/PlayMusicDirectory" => { 3567 4161 #[allow(non_camel_case_types)] 3568 4162 struct PlayMusicDirectorySvc<T: PlaybackService>(pub Arc<T>); 3569 - impl<T: PlaybackService> 3570 - tonic::server::UnaryService<super::PlayMusicDirectoryRequest> 3571 - for PlayMusicDirectorySvc<T> 3572 - { 4163 + impl< 4164 + T: PlaybackService, 4165 + > tonic::server::UnaryService<super::PlayMusicDirectoryRequest> 4166 + for PlayMusicDirectorySvc<T> { 3573 4167 type Response = super::PlayMusicDirectoryResponse; 3574 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4168 + type Future = BoxFuture< 4169 + tonic::Response<Self::Response>, 4170 + tonic::Status, 4171 + >; 3575 4172 fn call( 3576 4173 &mut self, 3577 4174 request: tonic::Request<super::PlayMusicDirectoryRequest>, 3578 4175 ) -> Self::Future { 3579 4176 let inner = Arc::clone(&self.0); 3580 4177 let fut = async move { 3581 - <T as PlaybackService>::play_music_directory(&inner, request).await 4178 + <T as PlaybackService>::play_music_directory( 4179 + &inner, 4180 + request, 4181 + ) 4182 + .await 3582 4183 }; 3583 4184 Box::pin(fut) 3584 4185 } ··· 3608 4209 "/rockbox.v1alpha1.PlaybackService/PlayTrack" => { 3609 4210 #[allow(non_camel_case_types)] 3610 4211 struct PlayTrackSvc<T: PlaybackService>(pub Arc<T>); 3611 - impl<T: PlaybackService> tonic::server::UnaryService<super::PlayTrackRequest> for PlayTrackSvc<T> { 4212 + impl< 4213 + T: PlaybackService, 4214 + > tonic::server::UnaryService<super::PlayTrackRequest> 4215 + for PlayTrackSvc<T> { 3612 4216 type Response = super::PlayTrackResponse; 3613 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4217 + type Future = BoxFuture< 4218 + tonic::Response<Self::Response>, 4219 + tonic::Status, 4220 + >; 3614 4221 fn call( 3615 4222 &mut self, 3616 4223 request: tonic::Request<super::PlayTrackRequest>, ··· 3647 4254 "/rockbox.v1alpha1.PlaybackService/PlayLikedTracks" => { 3648 4255 #[allow(non_camel_case_types)] 3649 4256 struct PlayLikedTracksSvc<T: PlaybackService>(pub Arc<T>); 3650 - impl<T: PlaybackService> 3651 - tonic::server::UnaryService<super::PlayLikedTracksRequest> 3652 - for PlayLikedTracksSvc<T> 3653 - { 4257 + impl< 4258 + T: PlaybackService, 4259 + > tonic::server::UnaryService<super::PlayLikedTracksRequest> 4260 + for PlayLikedTracksSvc<T> { 3654 4261 type Response = super::PlayLikedTracksResponse; 3655 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4262 + type Future = BoxFuture< 4263 + tonic::Response<Self::Response>, 4264 + tonic::Status, 4265 + >; 3656 4266 fn call( 3657 4267 &mut self, 3658 4268 request: tonic::Request<super::PlayLikedTracksRequest>, 3659 4269 ) -> Self::Future { 3660 4270 let inner = Arc::clone(&self.0); 3661 4271 let fut = async move { 3662 - <T as PlaybackService>::play_liked_tracks(&inner, request).await 4272 + <T as PlaybackService>::play_liked_tracks(&inner, request) 4273 + .await 3663 4274 }; 3664 4275 Box::pin(fut) 3665 4276 } ··· 3689 4300 "/rockbox.v1alpha1.PlaybackService/PlayAllTracks" => { 3690 4301 #[allow(non_camel_case_types)] 3691 4302 struct PlayAllTracksSvc<T: PlaybackService>(pub Arc<T>); 3692 - impl<T: PlaybackService> 3693 - tonic::server::UnaryService<super::PlayAllTracksRequest> 3694 - for PlayAllTracksSvc<T> 3695 - { 4303 + impl< 4304 + T: PlaybackService, 4305 + > tonic::server::UnaryService<super::PlayAllTracksRequest> 4306 + for PlayAllTracksSvc<T> { 3696 4307 type Response = super::PlayAllTracksResponse; 3697 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 4308 + type Future = BoxFuture< 4309 + tonic::Response<Self::Response>, 4310 + tonic::Status, 4311 + >; 3698 4312 fn call( 3699 4313 &mut self, 3700 4314 request: tonic::Request<super::PlayAllTracksRequest>, 3701 4315 ) -> Self::Future { 3702 4316 let inner = Arc::clone(&self.0); 3703 4317 let fut = async move { 3704 - <T as PlaybackService>::play_all_tracks(&inner, request).await 4318 + <T as PlaybackService>::play_all_tracks(&inner, request) 4319 + .await 3705 4320 }; 3706 4321 Box::pin(fut) 3707 4322 } ··· 3731 4346 "/rockbox.v1alpha1.PlaybackService/StreamCurrentTrack" => { 3732 4347 #[allow(non_camel_case_types)] 3733 4348 struct StreamCurrentTrackSvc<T: PlaybackService>(pub Arc<T>); 3734 - impl<T: PlaybackService> 3735 - tonic::server::ServerStreamingService<super::StreamCurrentTrackRequest> 3736 - for StreamCurrentTrackSvc<T> 3737 - { 4349 + impl< 4350 + T: PlaybackService, 4351 + > tonic::server::ServerStreamingService< 4352 + super::StreamCurrentTrackRequest, 4353 + > for StreamCurrentTrackSvc<T> { 3738 4354 type Response = super::CurrentTrackResponse; 3739 4355 type ResponseStream = T::StreamCurrentTrackStream; 3740 - type Future = 3741 - BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>; 4356 + type Future = BoxFuture< 4357 + tonic::Response<Self::ResponseStream>, 4358 + tonic::Status, 4359 + >; 3742 4360 fn call( 3743 4361 &mut self, 3744 4362 request: tonic::Request<super::StreamCurrentTrackRequest>, 3745 4363 ) -> Self::Future { 3746 4364 let inner = Arc::clone(&self.0); 3747 4365 let fut = async move { 3748 - <T as PlaybackService>::stream_current_track(&inner, request).await 4366 + <T as PlaybackService>::stream_current_track( 4367 + &inner, 4368 + request, 4369 + ) 4370 + .await 3749 4371 }; 3750 4372 Box::pin(fut) 3751 4373 } ··· 3775 4397 "/rockbox.v1alpha1.PlaybackService/StreamStatus" => { 3776 4398 #[allow(non_camel_case_types)] 3777 4399 struct StreamStatusSvc<T: PlaybackService>(pub Arc<T>); 3778 - impl<T: PlaybackService> 3779 - tonic::server::ServerStreamingService<super::StreamStatusRequest> 3780 - for StreamStatusSvc<T> 3781 - { 4400 + impl< 4401 + T: PlaybackService, 4402 + > tonic::server::ServerStreamingService<super::StreamStatusRequest> 4403 + for StreamStatusSvc<T> { 3782 4404 type Response = super::StatusResponse; 3783 4405 type ResponseStream = T::StreamStatusStream; 3784 - type Future = 3785 - BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>; 4406 + type Future = BoxFuture< 4407 + tonic::Response<Self::ResponseStream>, 4408 + tonic::Status, 4409 + >; 3786 4410 fn call( 3787 4411 &mut self, 3788 4412 request: tonic::Request<super::StreamStatusRequest>, ··· 3819 4443 "/rockbox.v1alpha1.PlaybackService/StreamPlaylist" => { 3820 4444 #[allow(non_camel_case_types)] 3821 4445 struct StreamPlaylistSvc<T: PlaybackService>(pub Arc<T>); 3822 - impl<T: PlaybackService> 3823 - tonic::server::ServerStreamingService<super::StreamPlaylistRequest> 3824 - for StreamPlaylistSvc<T> 3825 - { 4446 + impl< 4447 + T: PlaybackService, 4448 + > tonic::server::ServerStreamingService<super::StreamPlaylistRequest> 4449 + for StreamPlaylistSvc<T> { 3826 4450 type Response = super::PlaylistResponse; 3827 4451 type ResponseStream = T::StreamPlaylistStream; 3828 - type Future = 3829 - BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>; 4452 + type Future = BoxFuture< 4453 + tonic::Response<Self::ResponseStream>, 4454 + tonic::Status, 4455 + >; 3830 4456 fn call( 3831 4457 &mut self, 3832 4458 request: tonic::Request<super::StreamPlaylistRequest>, 3833 4459 ) -> Self::Future { 3834 4460 let inner = Arc::clone(&self.0); 3835 4461 let fut = async move { 3836 - <T as PlaybackService>::stream_playlist(&inner, request).await 4462 + <T as PlaybackService>::stream_playlist(&inner, request) 4463 + .await 3837 4464 }; 3838 4465 Box::pin(fut) 3839 4466 } ··· 3860 4487 }; 3861 4488 Box::pin(fut) 3862 4489 } 3863 - _ => Box::pin(async move { 3864 - let mut response = http::Response::new(empty_body()); 3865 - let headers = response.headers_mut(); 3866 - headers.insert( 3867 - tonic::Status::GRPC_STATUS, 3868 - (tonic::Code::Unimplemented as i32).into(), 3869 - ); 3870 - headers.insert( 3871 - http::header::CONTENT_TYPE, 3872 - tonic::metadata::GRPC_CONTENT_TYPE, 3873 - ); 3874 - Ok(response) 3875 - }), 4490 + _ => { 4491 + Box::pin(async move { 4492 + let mut response = http::Response::new(empty_body()); 4493 + let headers = response.headers_mut(); 4494 + headers 4495 + .insert( 4496 + tonic::Status::GRPC_STATUS, 4497 + (tonic::Code::Unimplemented as i32).into(), 4498 + ); 4499 + headers 4500 + .insert( 4501 + http::header::CONTENT_TYPE, 4502 + tonic::metadata::GRPC_CONTENT_TYPE, 4503 + ); 4504 + Ok(response) 4505 + }) 4506 + } 3876 4507 } 3877 4508 } 3878 4509 } ··· 4079 4710 dead_code, 4080 4711 missing_docs, 4081 4712 clippy::wildcard_imports, 4082 - clippy::let_unit_value 4713 + clippy::let_unit_value, 4083 4714 )] 4084 - use tonic::codegen::http::Uri; 4085 4715 use tonic::codegen::*; 4716 + use tonic::codegen::http::Uri; 4086 4717 #[derive(Debug, Clone)] 4087 4718 pub struct PlaylistServiceClient<T> { 4088 4719 inner: tonic::client::Grpc<T>, ··· 4126 4757 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 4127 4758 >, 4128 4759 >, 4129 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 4130 - Into<StdError> + std::marker::Send + std::marker::Sync, 4760 + <T as tonic::codegen::Service< 4761 + http::Request<tonic::body::BoxBody>, 4762 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 4131 4763 { 4132 4764 PlaylistServiceClient::new(InterceptedService::new(inner, interceptor)) 4133 4765 } ··· 4165 4797 pub async fn get_current( 4166 4798 &mut self, 4167 4799 request: impl tonic::IntoRequest<super::GetCurrentRequest>, 4168 - ) -> std::result::Result<tonic::Response<super::GetCurrentResponse>, tonic::Status> 4169 - { 4170 - self.inner.ready().await.map_err(|e| { 4171 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4172 - })?; 4800 + ) -> std::result::Result< 4801 + tonic::Response<super::GetCurrentResponse>, 4802 + tonic::Status, 4803 + > { 4804 + self.inner 4805 + .ready() 4806 + .await 4807 + .map_err(|e| { 4808 + tonic::Status::unknown( 4809 + format!("Service was not ready: {}", e.into()), 4810 + ) 4811 + })?; 4173 4812 let codec = tonic::codec::ProstCodec::default(); 4174 4813 let path = http::uri::PathAndQuery::from_static( 4175 4814 "/rockbox.v1alpha1.PlaylistService/GetCurrent", 4176 4815 ); 4177 4816 let mut req = request.into_request(); 4178 - req.extensions_mut().insert(GrpcMethod::new( 4179 - "rockbox.v1alpha1.PlaylistService", 4180 - "GetCurrent", 4181 - )); 4817 + req.extensions_mut() 4818 + .insert( 4819 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "GetCurrent"), 4820 + ); 4182 4821 self.inner.unary(req, path, codec).await 4183 4822 } 4184 4823 pub async fn get_resume_info( 4185 4824 &mut self, 4186 4825 request: impl tonic::IntoRequest<super::GetResumeInfoRequest>, 4187 - ) -> std::result::Result<tonic::Response<super::GetResumeInfoResponse>, tonic::Status> 4188 - { 4189 - self.inner.ready().await.map_err(|e| { 4190 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4191 - })?; 4826 + ) -> std::result::Result< 4827 + tonic::Response<super::GetResumeInfoResponse>, 4828 + tonic::Status, 4829 + > { 4830 + self.inner 4831 + .ready() 4832 + .await 4833 + .map_err(|e| { 4834 + tonic::Status::unknown( 4835 + format!("Service was not ready: {}", e.into()), 4836 + ) 4837 + })?; 4192 4838 let codec = tonic::codec::ProstCodec::default(); 4193 4839 let path = http::uri::PathAndQuery::from_static( 4194 4840 "/rockbox.v1alpha1.PlaylistService/GetResumeInfo", 4195 4841 ); 4196 4842 let mut req = request.into_request(); 4197 - req.extensions_mut().insert(GrpcMethod::new( 4198 - "rockbox.v1alpha1.PlaylistService", 4199 - "GetResumeInfo", 4200 - )); 4843 + req.extensions_mut() 4844 + .insert( 4845 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "GetResumeInfo"), 4846 + ); 4201 4847 self.inner.unary(req, path, codec).await 4202 4848 } 4203 4849 pub async fn get_track_info( 4204 4850 &mut self, 4205 4851 request: impl tonic::IntoRequest<super::GetTrackInfoRequest>, 4206 - ) -> std::result::Result<tonic::Response<super::GetTrackInfoResponse>, tonic::Status> 4207 - { 4208 - self.inner.ready().await.map_err(|e| { 4209 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4210 - })?; 4852 + ) -> std::result::Result< 4853 + tonic::Response<super::GetTrackInfoResponse>, 4854 + tonic::Status, 4855 + > { 4856 + self.inner 4857 + .ready() 4858 + .await 4859 + .map_err(|e| { 4860 + tonic::Status::unknown( 4861 + format!("Service was not ready: {}", e.into()), 4862 + ) 4863 + })?; 4211 4864 let codec = tonic::codec::ProstCodec::default(); 4212 4865 let path = http::uri::PathAndQuery::from_static( 4213 4866 "/rockbox.v1alpha1.PlaylistService/GetTrackInfo", 4214 4867 ); 4215 4868 let mut req = request.into_request(); 4216 - req.extensions_mut().insert(GrpcMethod::new( 4217 - "rockbox.v1alpha1.PlaylistService", 4218 - "GetTrackInfo", 4219 - )); 4869 + req.extensions_mut() 4870 + .insert( 4871 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "GetTrackInfo"), 4872 + ); 4220 4873 self.inner.unary(req, path, codec).await 4221 4874 } 4222 4875 pub async fn get_first_index( 4223 4876 &mut self, 4224 4877 request: impl tonic::IntoRequest<super::GetFirstIndexRequest>, 4225 - ) -> std::result::Result<tonic::Response<super::GetFirstIndexResponse>, tonic::Status> 4226 - { 4227 - self.inner.ready().await.map_err(|e| { 4228 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4229 - })?; 4878 + ) -> std::result::Result< 4879 + tonic::Response<super::GetFirstIndexResponse>, 4880 + tonic::Status, 4881 + > { 4882 + self.inner 4883 + .ready() 4884 + .await 4885 + .map_err(|e| { 4886 + tonic::Status::unknown( 4887 + format!("Service was not ready: {}", e.into()), 4888 + ) 4889 + })?; 4230 4890 let codec = tonic::codec::ProstCodec::default(); 4231 4891 let path = http::uri::PathAndQuery::from_static( 4232 4892 "/rockbox.v1alpha1.PlaylistService/GetFirstIndex", 4233 4893 ); 4234 4894 let mut req = request.into_request(); 4235 - req.extensions_mut().insert(GrpcMethod::new( 4236 - "rockbox.v1alpha1.PlaylistService", 4237 - "GetFirstIndex", 4238 - )); 4895 + req.extensions_mut() 4896 + .insert( 4897 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "GetFirstIndex"), 4898 + ); 4239 4899 self.inner.unary(req, path, codec).await 4240 4900 } 4241 4901 pub async fn get_display_index( 4242 4902 &mut self, 4243 4903 request: impl tonic::IntoRequest<super::GetDisplayIndexRequest>, 4244 - ) -> std::result::Result<tonic::Response<super::GetDisplayIndexResponse>, tonic::Status> 4245 - { 4246 - self.inner.ready().await.map_err(|e| { 4247 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4248 - })?; 4904 + ) -> std::result::Result< 4905 + tonic::Response<super::GetDisplayIndexResponse>, 4906 + tonic::Status, 4907 + > { 4908 + self.inner 4909 + .ready() 4910 + .await 4911 + .map_err(|e| { 4912 + tonic::Status::unknown( 4913 + format!("Service was not ready: {}", e.into()), 4914 + ) 4915 + })?; 4249 4916 let codec = tonic::codec::ProstCodec::default(); 4250 4917 let path = http::uri::PathAndQuery::from_static( 4251 4918 "/rockbox.v1alpha1.PlaylistService/GetDisplayIndex", 4252 4919 ); 4253 4920 let mut req = request.into_request(); 4254 - req.extensions_mut().insert(GrpcMethod::new( 4255 - "rockbox.v1alpha1.PlaylistService", 4256 - "GetDisplayIndex", 4257 - )); 4921 + req.extensions_mut() 4922 + .insert( 4923 + GrpcMethod::new( 4924 + "rockbox.v1alpha1.PlaylistService", 4925 + "GetDisplayIndex", 4926 + ), 4927 + ); 4258 4928 self.inner.unary(req, path, codec).await 4259 4929 } 4260 4930 pub async fn amount( 4261 4931 &mut self, 4262 4932 request: impl tonic::IntoRequest<super::AmountRequest>, 4263 4933 ) -> std::result::Result<tonic::Response<super::AmountResponse>, tonic::Status> { 4264 - self.inner.ready().await.map_err(|e| { 4265 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4266 - })?; 4934 + self.inner 4935 + .ready() 4936 + .await 4937 + .map_err(|e| { 4938 + tonic::Status::unknown( 4939 + format!("Service was not ready: {}", e.into()), 4940 + ) 4941 + })?; 4267 4942 let codec = tonic::codec::ProstCodec::default(); 4268 - let path = 4269 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaylistService/Amount"); 4943 + let path = http::uri::PathAndQuery::from_static( 4944 + "/rockbox.v1alpha1.PlaylistService/Amount", 4945 + ); 4270 4946 let mut req = request.into_request(); 4271 - req.extensions_mut().insert(GrpcMethod::new( 4272 - "rockbox.v1alpha1.PlaylistService", 4273 - "Amount", 4274 - )); 4947 + req.extensions_mut() 4948 + .insert(GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "Amount")); 4275 4949 self.inner.unary(req, path, codec).await 4276 4950 } 4277 4951 pub async fn playlist_resume( 4278 4952 &mut self, 4279 4953 request: impl tonic::IntoRequest<super::PlaylistResumeRequest>, 4280 - ) -> std::result::Result<tonic::Response<super::PlaylistResumeResponse>, tonic::Status> 4281 - { 4282 - self.inner.ready().await.map_err(|e| { 4283 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4284 - })?; 4954 + ) -> std::result::Result< 4955 + tonic::Response<super::PlaylistResumeResponse>, 4956 + tonic::Status, 4957 + > { 4958 + self.inner 4959 + .ready() 4960 + .await 4961 + .map_err(|e| { 4962 + tonic::Status::unknown( 4963 + format!("Service was not ready: {}", e.into()), 4964 + ) 4965 + })?; 4285 4966 let codec = tonic::codec::ProstCodec::default(); 4286 4967 let path = http::uri::PathAndQuery::from_static( 4287 4968 "/rockbox.v1alpha1.PlaylistService/PlaylistResume", 4288 4969 ); 4289 4970 let mut req = request.into_request(); 4290 - req.extensions_mut().insert(GrpcMethod::new( 4291 - "rockbox.v1alpha1.PlaylistService", 4292 - "PlaylistResume", 4293 - )); 4971 + req.extensions_mut() 4972 + .insert( 4973 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "PlaylistResume"), 4974 + ); 4294 4975 self.inner.unary(req, path, codec).await 4295 4976 } 4296 4977 pub async fn resume_track( 4297 4978 &mut self, 4298 4979 request: impl tonic::IntoRequest<super::ResumeTrackRequest>, 4299 - ) -> std::result::Result<tonic::Response<super::ResumeTrackResponse>, tonic::Status> 4300 - { 4301 - self.inner.ready().await.map_err(|e| { 4302 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4303 - })?; 4980 + ) -> std::result::Result< 4981 + tonic::Response<super::ResumeTrackResponse>, 4982 + tonic::Status, 4983 + > { 4984 + self.inner 4985 + .ready() 4986 + .await 4987 + .map_err(|e| { 4988 + tonic::Status::unknown( 4989 + format!("Service was not ready: {}", e.into()), 4990 + ) 4991 + })?; 4304 4992 let codec = tonic::codec::ProstCodec::default(); 4305 4993 let path = http::uri::PathAndQuery::from_static( 4306 4994 "/rockbox.v1alpha1.PlaylistService/ResumeTrack", 4307 4995 ); 4308 4996 let mut req = request.into_request(); 4309 - req.extensions_mut().insert(GrpcMethod::new( 4310 - "rockbox.v1alpha1.PlaylistService", 4311 - "ResumeTrack", 4312 - )); 4997 + req.extensions_mut() 4998 + .insert( 4999 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "ResumeTrack"), 5000 + ); 4313 5001 self.inner.unary(req, path, codec).await 4314 5002 } 4315 5003 pub async fn set_modified( 4316 5004 &mut self, 4317 5005 request: impl tonic::IntoRequest<super::SetModifiedRequest>, 4318 - ) -> std::result::Result<tonic::Response<super::SetModifiedResponse>, tonic::Status> 4319 - { 4320 - self.inner.ready().await.map_err(|e| { 4321 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4322 - })?; 5006 + ) -> std::result::Result< 5007 + tonic::Response<super::SetModifiedResponse>, 5008 + tonic::Status, 5009 + > { 5010 + self.inner 5011 + .ready() 5012 + .await 5013 + .map_err(|e| { 5014 + tonic::Status::unknown( 5015 + format!("Service was not ready: {}", e.into()), 5016 + ) 5017 + })?; 4323 5018 let codec = tonic::codec::ProstCodec::default(); 4324 5019 let path = http::uri::PathAndQuery::from_static( 4325 5020 "/rockbox.v1alpha1.PlaylistService/SetModified", 4326 5021 ); 4327 5022 let mut req = request.into_request(); 4328 - req.extensions_mut().insert(GrpcMethod::new( 4329 - "rockbox.v1alpha1.PlaylistService", 4330 - "SetModified", 4331 - )); 5023 + req.extensions_mut() 5024 + .insert( 5025 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "SetModified"), 5026 + ); 4332 5027 self.inner.unary(req, path, codec).await 4333 5028 } 4334 5029 pub async fn start( 4335 5030 &mut self, 4336 5031 request: impl tonic::IntoRequest<super::StartRequest>, 4337 5032 ) -> std::result::Result<tonic::Response<super::StartResponse>, tonic::Status> { 4338 - self.inner.ready().await.map_err(|e| { 4339 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4340 - })?; 5033 + self.inner 5034 + .ready() 5035 + .await 5036 + .map_err(|e| { 5037 + tonic::Status::unknown( 5038 + format!("Service was not ready: {}", e.into()), 5039 + ) 5040 + })?; 4341 5041 let codec = tonic::codec::ProstCodec::default(); 4342 - let path = 4343 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaylistService/Start"); 5042 + let path = http::uri::PathAndQuery::from_static( 5043 + "/rockbox.v1alpha1.PlaylistService/Start", 5044 + ); 4344 5045 let mut req = request.into_request(); 4345 5046 req.extensions_mut() 4346 5047 .insert(GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "Start")); ··· 4350 5051 &mut self, 4351 5052 request: impl tonic::IntoRequest<super::SyncRequest>, 4352 5053 ) -> std::result::Result<tonic::Response<super::SyncResponse>, tonic::Status> { 4353 - self.inner.ready().await.map_err(|e| { 4354 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4355 - })?; 5054 + self.inner 5055 + .ready() 5056 + .await 5057 + .map_err(|e| { 5058 + tonic::Status::unknown( 5059 + format!("Service was not ready: {}", e.into()), 5060 + ) 5061 + })?; 4356 5062 let codec = tonic::codec::ProstCodec::default(); 4357 - let path = 4358 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.PlaylistService/Sync"); 5063 + let path = http::uri::PathAndQuery::from_static( 5064 + "/rockbox.v1alpha1.PlaylistService/Sync", 5065 + ); 4359 5066 let mut req = request.into_request(); 4360 5067 req.extensions_mut() 4361 5068 .insert(GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "Sync")); ··· 4364 5071 pub async fn remove_all_tracks( 4365 5072 &mut self, 4366 5073 request: impl tonic::IntoRequest<super::RemoveAllTracksRequest>, 4367 - ) -> std::result::Result<tonic::Response<super::RemoveAllTracksResponse>, tonic::Status> 4368 - { 4369 - self.inner.ready().await.map_err(|e| { 4370 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4371 - })?; 5074 + ) -> std::result::Result< 5075 + tonic::Response<super::RemoveAllTracksResponse>, 5076 + tonic::Status, 5077 + > { 5078 + self.inner 5079 + .ready() 5080 + .await 5081 + .map_err(|e| { 5082 + tonic::Status::unknown( 5083 + format!("Service was not ready: {}", e.into()), 5084 + ) 5085 + })?; 4372 5086 let codec = tonic::codec::ProstCodec::default(); 4373 5087 let path = http::uri::PathAndQuery::from_static( 4374 5088 "/rockbox.v1alpha1.PlaylistService/RemoveAllTracks", 4375 5089 ); 4376 5090 let mut req = request.into_request(); 4377 - req.extensions_mut().insert(GrpcMethod::new( 4378 - "rockbox.v1alpha1.PlaylistService", 4379 - "RemoveAllTracks", 4380 - )); 5091 + req.extensions_mut() 5092 + .insert( 5093 + GrpcMethod::new( 5094 + "rockbox.v1alpha1.PlaylistService", 5095 + "RemoveAllTracks", 5096 + ), 5097 + ); 4381 5098 self.inner.unary(req, path, codec).await 4382 5099 } 4383 5100 pub async fn remove_tracks( 4384 5101 &mut self, 4385 5102 request: impl tonic::IntoRequest<super::RemoveTracksRequest>, 4386 - ) -> std::result::Result<tonic::Response<super::RemoveTracksResponse>, tonic::Status> 4387 - { 4388 - self.inner.ready().await.map_err(|e| { 4389 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4390 - })?; 5103 + ) -> std::result::Result< 5104 + tonic::Response<super::RemoveTracksResponse>, 5105 + tonic::Status, 5106 + > { 5107 + self.inner 5108 + .ready() 5109 + .await 5110 + .map_err(|e| { 5111 + tonic::Status::unknown( 5112 + format!("Service was not ready: {}", e.into()), 5113 + ) 5114 + })?; 4391 5115 let codec = tonic::codec::ProstCodec::default(); 4392 5116 let path = http::uri::PathAndQuery::from_static( 4393 5117 "/rockbox.v1alpha1.PlaylistService/RemoveTracks", 4394 5118 ); 4395 5119 let mut req = request.into_request(); 4396 - req.extensions_mut().insert(GrpcMethod::new( 4397 - "rockbox.v1alpha1.PlaylistService", 4398 - "RemoveTracks", 4399 - )); 5120 + req.extensions_mut() 5121 + .insert( 5122 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "RemoveTracks"), 5123 + ); 4400 5124 self.inner.unary(req, path, codec).await 4401 5125 } 4402 5126 pub async fn create_playlist( 4403 5127 &mut self, 4404 5128 request: impl tonic::IntoRequest<super::CreatePlaylistRequest>, 4405 - ) -> std::result::Result<tonic::Response<super::CreatePlaylistResponse>, tonic::Status> 4406 - { 4407 - self.inner.ready().await.map_err(|e| { 4408 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4409 - })?; 5129 + ) -> std::result::Result< 5130 + tonic::Response<super::CreatePlaylistResponse>, 5131 + tonic::Status, 5132 + > { 5133 + self.inner 5134 + .ready() 5135 + .await 5136 + .map_err(|e| { 5137 + tonic::Status::unknown( 5138 + format!("Service was not ready: {}", e.into()), 5139 + ) 5140 + })?; 4410 5141 let codec = tonic::codec::ProstCodec::default(); 4411 5142 let path = http::uri::PathAndQuery::from_static( 4412 5143 "/rockbox.v1alpha1.PlaylistService/CreatePlaylist", 4413 5144 ); 4414 5145 let mut req = request.into_request(); 4415 - req.extensions_mut().insert(GrpcMethod::new( 4416 - "rockbox.v1alpha1.PlaylistService", 4417 - "CreatePlaylist", 4418 - )); 5146 + req.extensions_mut() 5147 + .insert( 5148 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "CreatePlaylist"), 5149 + ); 4419 5150 self.inner.unary(req, path, codec).await 4420 5151 } 4421 5152 pub async fn insert_tracks( 4422 5153 &mut self, 4423 5154 request: impl tonic::IntoRequest<super::InsertTracksRequest>, 4424 - ) -> std::result::Result<tonic::Response<super::InsertTracksResponse>, tonic::Status> 4425 - { 4426 - self.inner.ready().await.map_err(|e| { 4427 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4428 - })?; 5155 + ) -> std::result::Result< 5156 + tonic::Response<super::InsertTracksResponse>, 5157 + tonic::Status, 5158 + > { 5159 + self.inner 5160 + .ready() 5161 + .await 5162 + .map_err(|e| { 5163 + tonic::Status::unknown( 5164 + format!("Service was not ready: {}", e.into()), 5165 + ) 5166 + })?; 4429 5167 let codec = tonic::codec::ProstCodec::default(); 4430 5168 let path = http::uri::PathAndQuery::from_static( 4431 5169 "/rockbox.v1alpha1.PlaylistService/InsertTracks", 4432 5170 ); 4433 5171 let mut req = request.into_request(); 4434 - req.extensions_mut().insert(GrpcMethod::new( 4435 - "rockbox.v1alpha1.PlaylistService", 4436 - "InsertTracks", 4437 - )); 5172 + req.extensions_mut() 5173 + .insert( 5174 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "InsertTracks"), 5175 + ); 4438 5176 self.inner.unary(req, path, codec).await 4439 5177 } 4440 5178 pub async fn insert_directory( 4441 5179 &mut self, 4442 5180 request: impl tonic::IntoRequest<super::InsertDirectoryRequest>, 4443 - ) -> std::result::Result<tonic::Response<super::InsertDirectoryResponse>, tonic::Status> 4444 - { 4445 - self.inner.ready().await.map_err(|e| { 4446 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4447 - })?; 5181 + ) -> std::result::Result< 5182 + tonic::Response<super::InsertDirectoryResponse>, 5183 + tonic::Status, 5184 + > { 5185 + self.inner 5186 + .ready() 5187 + .await 5188 + .map_err(|e| { 5189 + tonic::Status::unknown( 5190 + format!("Service was not ready: {}", e.into()), 5191 + ) 5192 + })?; 4448 5193 let codec = tonic::codec::ProstCodec::default(); 4449 5194 let path = http::uri::PathAndQuery::from_static( 4450 5195 "/rockbox.v1alpha1.PlaylistService/InsertDirectory", 4451 5196 ); 4452 5197 let mut req = request.into_request(); 4453 - req.extensions_mut().insert(GrpcMethod::new( 4454 - "rockbox.v1alpha1.PlaylistService", 4455 - "InsertDirectory", 4456 - )); 5198 + req.extensions_mut() 5199 + .insert( 5200 + GrpcMethod::new( 5201 + "rockbox.v1alpha1.PlaylistService", 5202 + "InsertDirectory", 5203 + ), 5204 + ); 4457 5205 self.inner.unary(req, path, codec).await 4458 5206 } 4459 5207 pub async fn insert_playlist( 4460 5208 &mut self, 4461 5209 request: impl tonic::IntoRequest<super::InsertPlaylistRequest>, 4462 - ) -> std::result::Result<tonic::Response<super::InsertPlaylistResponse>, tonic::Status> 4463 - { 4464 - self.inner.ready().await.map_err(|e| { 4465 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4466 - })?; 5210 + ) -> std::result::Result< 5211 + tonic::Response<super::InsertPlaylistResponse>, 5212 + tonic::Status, 5213 + > { 5214 + self.inner 5215 + .ready() 5216 + .await 5217 + .map_err(|e| { 5218 + tonic::Status::unknown( 5219 + format!("Service was not ready: {}", e.into()), 5220 + ) 5221 + })?; 4467 5222 let codec = tonic::codec::ProstCodec::default(); 4468 5223 let path = http::uri::PathAndQuery::from_static( 4469 5224 "/rockbox.v1alpha1.PlaylistService/InsertPlaylist", 4470 5225 ); 4471 5226 let mut req = request.into_request(); 4472 - req.extensions_mut().insert(GrpcMethod::new( 4473 - "rockbox.v1alpha1.PlaylistService", 4474 - "InsertPlaylist", 4475 - )); 5227 + req.extensions_mut() 5228 + .insert( 5229 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "InsertPlaylist"), 5230 + ); 4476 5231 self.inner.unary(req, path, codec).await 4477 5232 } 4478 5233 pub async fn insert_album( 4479 5234 &mut self, 4480 5235 request: impl tonic::IntoRequest<super::InsertAlbumRequest>, 4481 - ) -> std::result::Result<tonic::Response<super::InsertAlbumResponse>, tonic::Status> 4482 - { 4483 - self.inner.ready().await.map_err(|e| { 4484 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4485 - })?; 5236 + ) -> std::result::Result< 5237 + tonic::Response<super::InsertAlbumResponse>, 5238 + tonic::Status, 5239 + > { 5240 + self.inner 5241 + .ready() 5242 + .await 5243 + .map_err(|e| { 5244 + tonic::Status::unknown( 5245 + format!("Service was not ready: {}", e.into()), 5246 + ) 5247 + })?; 4486 5248 let codec = tonic::codec::ProstCodec::default(); 4487 5249 let path = http::uri::PathAndQuery::from_static( 4488 5250 "/rockbox.v1alpha1.PlaylistService/InsertAlbum", 4489 5251 ); 4490 5252 let mut req = request.into_request(); 4491 - req.extensions_mut().insert(GrpcMethod::new( 4492 - "rockbox.v1alpha1.PlaylistService", 4493 - "InsertAlbum", 4494 - )); 5253 + req.extensions_mut() 5254 + .insert( 5255 + GrpcMethod::new("rockbox.v1alpha1.PlaylistService", "InsertAlbum"), 5256 + ); 4495 5257 self.inner.unary(req, path, codec).await 4496 5258 } 4497 5259 pub async fn insert_artist_tracks( 4498 5260 &mut self, 4499 5261 request: impl tonic::IntoRequest<super::InsertArtistTracksRequest>, 4500 - ) -> std::result::Result<tonic::Response<super::InsertArtistTracksResponse>, tonic::Status> 4501 - { 4502 - self.inner.ready().await.map_err(|e| { 4503 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4504 - })?; 5262 + ) -> std::result::Result< 5263 + tonic::Response<super::InsertArtistTracksResponse>, 5264 + tonic::Status, 5265 + > { 5266 + self.inner 5267 + .ready() 5268 + .await 5269 + .map_err(|e| { 5270 + tonic::Status::unknown( 5271 + format!("Service was not ready: {}", e.into()), 5272 + ) 5273 + })?; 4505 5274 let codec = tonic::codec::ProstCodec::default(); 4506 5275 let path = http::uri::PathAndQuery::from_static( 4507 5276 "/rockbox.v1alpha1.PlaylistService/InsertArtistTracks", 4508 5277 ); 4509 5278 let mut req = request.into_request(); 4510 - req.extensions_mut().insert(GrpcMethod::new( 4511 - "rockbox.v1alpha1.PlaylistService", 4512 - "InsertArtistTracks", 4513 - )); 5279 + req.extensions_mut() 5280 + .insert( 5281 + GrpcMethod::new( 5282 + "rockbox.v1alpha1.PlaylistService", 5283 + "InsertArtistTracks", 5284 + ), 5285 + ); 4514 5286 self.inner.unary(req, path, codec).await 4515 5287 } 4516 5288 pub async fn shuffle_playlist( 4517 5289 &mut self, 4518 5290 request: impl tonic::IntoRequest<super::ShufflePlaylistRequest>, 4519 - ) -> std::result::Result<tonic::Response<super::ShufflePlaylistResponse>, tonic::Status> 4520 - { 4521 - self.inner.ready().await.map_err(|e| { 4522 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 4523 - })?; 5291 + ) -> std::result::Result< 5292 + tonic::Response<super::ShufflePlaylistResponse>, 5293 + tonic::Status, 5294 + > { 5295 + self.inner 5296 + .ready() 5297 + .await 5298 + .map_err(|e| { 5299 + tonic::Status::unknown( 5300 + format!("Service was not ready: {}", e.into()), 5301 + ) 5302 + })?; 4524 5303 let codec = tonic::codec::ProstCodec::default(); 4525 5304 let path = http::uri::PathAndQuery::from_static( 4526 5305 "/rockbox.v1alpha1.PlaylistService/ShufflePlaylist", 4527 5306 ); 4528 5307 let mut req = request.into_request(); 4529 - req.extensions_mut().insert(GrpcMethod::new( 4530 - "rockbox.v1alpha1.PlaylistService", 4531 - "ShufflePlaylist", 4532 - )); 5308 + req.extensions_mut() 5309 + .insert( 5310 + GrpcMethod::new( 5311 + "rockbox.v1alpha1.PlaylistService", 5312 + "ShufflePlaylist", 5313 + ), 5314 + ); 4533 5315 self.inner.unary(req, path, codec).await 4534 5316 } 4535 5317 } ··· 4541 5323 dead_code, 4542 5324 missing_docs, 4543 5325 clippy::wildcard_imports, 4544 - clippy::let_unit_value 5326 + clippy::let_unit_value, 4545 5327 )] 4546 5328 use tonic::codegen::*; 4547 5329 /// Generated trait containing gRPC methods that should be implemented for use with PlaylistServiceServer. ··· 4550 5332 async fn get_current( 4551 5333 &self, 4552 5334 request: tonic::Request<super::GetCurrentRequest>, 4553 - ) -> std::result::Result<tonic::Response<super::GetCurrentResponse>, tonic::Status>; 5335 + ) -> std::result::Result< 5336 + tonic::Response<super::GetCurrentResponse>, 5337 + tonic::Status, 5338 + >; 4554 5339 async fn get_resume_info( 4555 5340 &self, 4556 5341 request: tonic::Request<super::GetResumeInfoRequest>, 4557 - ) -> std::result::Result<tonic::Response<super::GetResumeInfoResponse>, tonic::Status>; 5342 + ) -> std::result::Result< 5343 + tonic::Response<super::GetResumeInfoResponse>, 5344 + tonic::Status, 5345 + >; 4558 5346 async fn get_track_info( 4559 5347 &self, 4560 5348 request: tonic::Request<super::GetTrackInfoRequest>, 4561 - ) -> std::result::Result<tonic::Response<super::GetTrackInfoResponse>, tonic::Status>; 5349 + ) -> std::result::Result< 5350 + tonic::Response<super::GetTrackInfoResponse>, 5351 + tonic::Status, 5352 + >; 4562 5353 async fn get_first_index( 4563 5354 &self, 4564 5355 request: tonic::Request<super::GetFirstIndexRequest>, 4565 - ) -> std::result::Result<tonic::Response<super::GetFirstIndexResponse>, tonic::Status>; 5356 + ) -> std::result::Result< 5357 + tonic::Response<super::GetFirstIndexResponse>, 5358 + tonic::Status, 5359 + >; 4566 5360 async fn get_display_index( 4567 5361 &self, 4568 5362 request: tonic::Request<super::GetDisplayIndexRequest>, 4569 - ) -> std::result::Result<tonic::Response<super::GetDisplayIndexResponse>, tonic::Status>; 5363 + ) -> std::result::Result< 5364 + tonic::Response<super::GetDisplayIndexResponse>, 5365 + tonic::Status, 5366 + >; 4570 5367 async fn amount( 4571 5368 &self, 4572 5369 request: tonic::Request<super::AmountRequest>, ··· 4574 5371 async fn playlist_resume( 4575 5372 &self, 4576 5373 request: tonic::Request<super::PlaylistResumeRequest>, 4577 - ) -> std::result::Result<tonic::Response<super::PlaylistResumeResponse>, tonic::Status>; 5374 + ) -> std::result::Result< 5375 + tonic::Response<super::PlaylistResumeResponse>, 5376 + tonic::Status, 5377 + >; 4578 5378 async fn resume_track( 4579 5379 &self, 4580 5380 request: tonic::Request<super::ResumeTrackRequest>, 4581 - ) -> std::result::Result<tonic::Response<super::ResumeTrackResponse>, tonic::Status>; 5381 + ) -> std::result::Result< 5382 + tonic::Response<super::ResumeTrackResponse>, 5383 + tonic::Status, 5384 + >; 4582 5385 async fn set_modified( 4583 5386 &self, 4584 5387 request: tonic::Request<super::SetModifiedRequest>, 4585 - ) -> std::result::Result<tonic::Response<super::SetModifiedResponse>, tonic::Status>; 5388 + ) -> std::result::Result< 5389 + tonic::Response<super::SetModifiedResponse>, 5390 + tonic::Status, 5391 + >; 4586 5392 async fn start( 4587 5393 &self, 4588 5394 request: tonic::Request<super::StartRequest>, ··· 4594 5400 async fn remove_all_tracks( 4595 5401 &self, 4596 5402 request: tonic::Request<super::RemoveAllTracksRequest>, 4597 - ) -> std::result::Result<tonic::Response<super::RemoveAllTracksResponse>, tonic::Status>; 5403 + ) -> std::result::Result< 5404 + tonic::Response<super::RemoveAllTracksResponse>, 5405 + tonic::Status, 5406 + >; 4598 5407 async fn remove_tracks( 4599 5408 &self, 4600 5409 request: tonic::Request<super::RemoveTracksRequest>, 4601 - ) -> std::result::Result<tonic::Response<super::RemoveTracksResponse>, tonic::Status>; 5410 + ) -> std::result::Result< 5411 + tonic::Response<super::RemoveTracksResponse>, 5412 + tonic::Status, 5413 + >; 4602 5414 async fn create_playlist( 4603 5415 &self, 4604 5416 request: tonic::Request<super::CreatePlaylistRequest>, 4605 - ) -> std::result::Result<tonic::Response<super::CreatePlaylistResponse>, tonic::Status>; 5417 + ) -> std::result::Result< 5418 + tonic::Response<super::CreatePlaylistResponse>, 5419 + tonic::Status, 5420 + >; 4606 5421 async fn insert_tracks( 4607 5422 &self, 4608 5423 request: tonic::Request<super::InsertTracksRequest>, 4609 - ) -> std::result::Result<tonic::Response<super::InsertTracksResponse>, tonic::Status>; 5424 + ) -> std::result::Result< 5425 + tonic::Response<super::InsertTracksResponse>, 5426 + tonic::Status, 5427 + >; 4610 5428 async fn insert_directory( 4611 5429 &self, 4612 5430 request: tonic::Request<super::InsertDirectoryRequest>, 4613 - ) -> std::result::Result<tonic::Response<super::InsertDirectoryResponse>, tonic::Status>; 5431 + ) -> std::result::Result< 5432 + tonic::Response<super::InsertDirectoryResponse>, 5433 + tonic::Status, 5434 + >; 4614 5435 async fn insert_playlist( 4615 5436 &self, 4616 5437 request: tonic::Request<super::InsertPlaylistRequest>, 4617 - ) -> std::result::Result<tonic::Response<super::InsertPlaylistResponse>, tonic::Status>; 5438 + ) -> std::result::Result< 5439 + tonic::Response<super::InsertPlaylistResponse>, 5440 + tonic::Status, 5441 + >; 4618 5442 async fn insert_album( 4619 5443 &self, 4620 5444 request: tonic::Request<super::InsertAlbumRequest>, 4621 - ) -> std::result::Result<tonic::Response<super::InsertAlbumResponse>, tonic::Status>; 5445 + ) -> std::result::Result< 5446 + tonic::Response<super::InsertAlbumResponse>, 5447 + tonic::Status, 5448 + >; 4622 5449 async fn insert_artist_tracks( 4623 5450 &self, 4624 5451 request: tonic::Request<super::InsertArtistTracksRequest>, 4625 - ) -> std::result::Result<tonic::Response<super::InsertArtistTracksResponse>, tonic::Status>; 5452 + ) -> std::result::Result< 5453 + tonic::Response<super::InsertArtistTracksResponse>, 5454 + tonic::Status, 5455 + >; 4626 5456 async fn shuffle_playlist( 4627 5457 &self, 4628 5458 request: tonic::Request<super::ShufflePlaylistRequest>, 4629 - ) -> std::result::Result<tonic::Response<super::ShufflePlaylistResponse>, tonic::Status>; 5459 + ) -> std::result::Result< 5460 + tonic::Response<super::ShufflePlaylistResponse>, 5461 + tonic::Status, 5462 + >; 4630 5463 } 4631 5464 #[derive(Debug)] 4632 5465 pub struct PlaylistServiceServer<T> { ··· 4649 5482 max_encoding_message_size: None, 4650 5483 } 4651 5484 } 4652 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 5485 + pub fn with_interceptor<F>( 5486 + inner: T, 5487 + interceptor: F, 5488 + ) -> InterceptedService<Self, F> 4653 5489 where 4654 5490 F: tonic::service::Interceptor, 4655 5491 { ··· 4704 5540 "/rockbox.v1alpha1.PlaylistService/GetCurrent" => { 4705 5541 #[allow(non_camel_case_types)] 4706 5542 struct GetCurrentSvc<T: PlaylistService>(pub Arc<T>); 4707 - impl<T: PlaylistService> tonic::server::UnaryService<super::GetCurrentRequest> 4708 - for GetCurrentSvc<T> 4709 - { 5543 + impl< 5544 + T: PlaylistService, 5545 + > tonic::server::UnaryService<super::GetCurrentRequest> 5546 + for GetCurrentSvc<T> { 4710 5547 type Response = super::GetCurrentResponse; 4711 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5548 + type Future = BoxFuture< 5549 + tonic::Response<Self::Response>, 5550 + tonic::Status, 5551 + >; 4712 5552 fn call( 4713 5553 &mut self, 4714 5554 request: tonic::Request<super::GetCurrentRequest>, ··· 4745 5585 "/rockbox.v1alpha1.PlaylistService/GetResumeInfo" => { 4746 5586 #[allow(non_camel_case_types)] 4747 5587 struct GetResumeInfoSvc<T: PlaylistService>(pub Arc<T>); 4748 - impl<T: PlaylistService> 4749 - tonic::server::UnaryService<super::GetResumeInfoRequest> 4750 - for GetResumeInfoSvc<T> 4751 - { 5588 + impl< 5589 + T: PlaylistService, 5590 + > tonic::server::UnaryService<super::GetResumeInfoRequest> 5591 + for GetResumeInfoSvc<T> { 4752 5592 type Response = super::GetResumeInfoResponse; 4753 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5593 + type Future = BoxFuture< 5594 + tonic::Response<Self::Response>, 5595 + tonic::Status, 5596 + >; 4754 5597 fn call( 4755 5598 &mut self, 4756 5599 request: tonic::Request<super::GetResumeInfoRequest>, 4757 5600 ) -> Self::Future { 4758 5601 let inner = Arc::clone(&self.0); 4759 5602 let fut = async move { 4760 - <T as PlaylistService>::get_resume_info(&inner, request).await 5603 + <T as PlaylistService>::get_resume_info(&inner, request) 5604 + .await 4761 5605 }; 4762 5606 Box::pin(fut) 4763 5607 } ··· 4787 5631 "/rockbox.v1alpha1.PlaylistService/GetTrackInfo" => { 4788 5632 #[allow(non_camel_case_types)] 4789 5633 struct GetTrackInfoSvc<T: PlaylistService>(pub Arc<T>); 4790 - impl<T: PlaylistService> tonic::server::UnaryService<super::GetTrackInfoRequest> 4791 - for GetTrackInfoSvc<T> 4792 - { 5634 + impl< 5635 + T: PlaylistService, 5636 + > tonic::server::UnaryService<super::GetTrackInfoRequest> 5637 + for GetTrackInfoSvc<T> { 4793 5638 type Response = super::GetTrackInfoResponse; 4794 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5639 + type Future = BoxFuture< 5640 + tonic::Response<Self::Response>, 5641 + tonic::Status, 5642 + >; 4795 5643 fn call( 4796 5644 &mut self, 4797 5645 request: tonic::Request<super::GetTrackInfoRequest>, 4798 5646 ) -> Self::Future { 4799 5647 let inner = Arc::clone(&self.0); 4800 5648 let fut = async move { 4801 - <T as PlaylistService>::get_track_info(&inner, request).await 5649 + <T as PlaylistService>::get_track_info(&inner, request) 5650 + .await 4802 5651 }; 4803 5652 Box::pin(fut) 4804 5653 } ··· 4828 5677 "/rockbox.v1alpha1.PlaylistService/GetFirstIndex" => { 4829 5678 #[allow(non_camel_case_types)] 4830 5679 struct GetFirstIndexSvc<T: PlaylistService>(pub Arc<T>); 4831 - impl<T: PlaylistService> 4832 - tonic::server::UnaryService<super::GetFirstIndexRequest> 4833 - for GetFirstIndexSvc<T> 4834 - { 5680 + impl< 5681 + T: PlaylistService, 5682 + > tonic::server::UnaryService<super::GetFirstIndexRequest> 5683 + for GetFirstIndexSvc<T> { 4835 5684 type Response = super::GetFirstIndexResponse; 4836 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5685 + type Future = BoxFuture< 5686 + tonic::Response<Self::Response>, 5687 + tonic::Status, 5688 + >; 4837 5689 fn call( 4838 5690 &mut self, 4839 5691 request: tonic::Request<super::GetFirstIndexRequest>, 4840 5692 ) -> Self::Future { 4841 5693 let inner = Arc::clone(&self.0); 4842 5694 let fut = async move { 4843 - <T as PlaylistService>::get_first_index(&inner, request).await 5695 + <T as PlaylistService>::get_first_index(&inner, request) 5696 + .await 4844 5697 }; 4845 5698 Box::pin(fut) 4846 5699 } ··· 4870 5723 "/rockbox.v1alpha1.PlaylistService/GetDisplayIndex" => { 4871 5724 #[allow(non_camel_case_types)] 4872 5725 struct GetDisplayIndexSvc<T: PlaylistService>(pub Arc<T>); 4873 - impl<T: PlaylistService> 4874 - tonic::server::UnaryService<super::GetDisplayIndexRequest> 4875 - for GetDisplayIndexSvc<T> 4876 - { 5726 + impl< 5727 + T: PlaylistService, 5728 + > tonic::server::UnaryService<super::GetDisplayIndexRequest> 5729 + for GetDisplayIndexSvc<T> { 4877 5730 type Response = super::GetDisplayIndexResponse; 4878 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5731 + type Future = BoxFuture< 5732 + tonic::Response<Self::Response>, 5733 + tonic::Status, 5734 + >; 4879 5735 fn call( 4880 5736 &mut self, 4881 5737 request: tonic::Request<super::GetDisplayIndexRequest>, 4882 5738 ) -> Self::Future { 4883 5739 let inner = Arc::clone(&self.0); 4884 5740 let fut = async move { 4885 - <T as PlaylistService>::get_display_index(&inner, request).await 5741 + <T as PlaylistService>::get_display_index(&inner, request) 5742 + .await 4886 5743 }; 4887 5744 Box::pin(fut) 4888 5745 } ··· 4912 5769 "/rockbox.v1alpha1.PlaylistService/Amount" => { 4913 5770 #[allow(non_camel_case_types)] 4914 5771 struct AmountSvc<T: PlaylistService>(pub Arc<T>); 4915 - impl<T: PlaylistService> tonic::server::UnaryService<super::AmountRequest> for AmountSvc<T> { 5772 + impl< 5773 + T: PlaylistService, 5774 + > tonic::server::UnaryService<super::AmountRequest> 5775 + for AmountSvc<T> { 4916 5776 type Response = super::AmountResponse; 4917 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5777 + type Future = BoxFuture< 5778 + tonic::Response<Self::Response>, 5779 + tonic::Status, 5780 + >; 4918 5781 fn call( 4919 5782 &mut self, 4920 5783 request: tonic::Request<super::AmountRequest>, ··· 4951 5814 "/rockbox.v1alpha1.PlaylistService/PlaylistResume" => { 4952 5815 #[allow(non_camel_case_types)] 4953 5816 struct PlaylistResumeSvc<T: PlaylistService>(pub Arc<T>); 4954 - impl<T: PlaylistService> 4955 - tonic::server::UnaryService<super::PlaylistResumeRequest> 4956 - for PlaylistResumeSvc<T> 4957 - { 5817 + impl< 5818 + T: PlaylistService, 5819 + > tonic::server::UnaryService<super::PlaylistResumeRequest> 5820 + for PlaylistResumeSvc<T> { 4958 5821 type Response = super::PlaylistResumeResponse; 4959 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5822 + type Future = BoxFuture< 5823 + tonic::Response<Self::Response>, 5824 + tonic::Status, 5825 + >; 4960 5826 fn call( 4961 5827 &mut self, 4962 5828 request: tonic::Request<super::PlaylistResumeRequest>, 4963 5829 ) -> Self::Future { 4964 5830 let inner = Arc::clone(&self.0); 4965 5831 let fut = async move { 4966 - <T as PlaylistService>::playlist_resume(&inner, request).await 5832 + <T as PlaylistService>::playlist_resume(&inner, request) 5833 + .await 4967 5834 }; 4968 5835 Box::pin(fut) 4969 5836 } ··· 4993 5860 "/rockbox.v1alpha1.PlaylistService/ResumeTrack" => { 4994 5861 #[allow(non_camel_case_types)] 4995 5862 struct ResumeTrackSvc<T: PlaylistService>(pub Arc<T>); 4996 - impl<T: PlaylistService> tonic::server::UnaryService<super::ResumeTrackRequest> 4997 - for ResumeTrackSvc<T> 4998 - { 5863 + impl< 5864 + T: PlaylistService, 5865 + > tonic::server::UnaryService<super::ResumeTrackRequest> 5866 + for ResumeTrackSvc<T> { 4999 5867 type Response = super::ResumeTrackResponse; 5000 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5868 + type Future = BoxFuture< 5869 + tonic::Response<Self::Response>, 5870 + tonic::Status, 5871 + >; 5001 5872 fn call( 5002 5873 &mut self, 5003 5874 request: tonic::Request<super::ResumeTrackRequest>, ··· 5034 5905 "/rockbox.v1alpha1.PlaylistService/SetModified" => { 5035 5906 #[allow(non_camel_case_types)] 5036 5907 struct SetModifiedSvc<T: PlaylistService>(pub Arc<T>); 5037 - impl<T: PlaylistService> tonic::server::UnaryService<super::SetModifiedRequest> 5038 - for SetModifiedSvc<T> 5039 - { 5908 + impl< 5909 + T: PlaylistService, 5910 + > tonic::server::UnaryService<super::SetModifiedRequest> 5911 + for SetModifiedSvc<T> { 5040 5912 type Response = super::SetModifiedResponse; 5041 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5913 + type Future = BoxFuture< 5914 + tonic::Response<Self::Response>, 5915 + tonic::Status, 5916 + >; 5042 5917 fn call( 5043 5918 &mut self, 5044 5919 request: tonic::Request<super::SetModifiedRequest>, ··· 5075 5950 "/rockbox.v1alpha1.PlaylistService/Start" => { 5076 5951 #[allow(non_camel_case_types)] 5077 5952 struct StartSvc<T: PlaylistService>(pub Arc<T>); 5078 - impl<T: PlaylistService> tonic::server::UnaryService<super::StartRequest> for StartSvc<T> { 5953 + impl< 5954 + T: PlaylistService, 5955 + > tonic::server::UnaryService<super::StartRequest> for StartSvc<T> { 5079 5956 type Response = super::StartResponse; 5080 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 5957 + type Future = BoxFuture< 5958 + tonic::Response<Self::Response>, 5959 + tonic::Status, 5960 + >; 5081 5961 fn call( 5082 5962 &mut self, 5083 5963 request: tonic::Request<super::StartRequest>, 5084 5964 ) -> Self::Future { 5085 5965 let inner = Arc::clone(&self.0); 5086 - let fut = 5087 - async move { <T as PlaylistService>::start(&inner, request).await }; 5966 + let fut = async move { 5967 + <T as PlaylistService>::start(&inner, request).await 5968 + }; 5088 5969 Box::pin(fut) 5089 5970 } 5090 5971 } ··· 5113 5994 "/rockbox.v1alpha1.PlaylistService/Sync" => { 5114 5995 #[allow(non_camel_case_types)] 5115 5996 struct SyncSvc<T: PlaylistService>(pub Arc<T>); 5116 - impl<T: PlaylistService> tonic::server::UnaryService<super::SyncRequest> for SyncSvc<T> { 5997 + impl< 5998 + T: PlaylistService, 5999 + > tonic::server::UnaryService<super::SyncRequest> for SyncSvc<T> { 5117 6000 type Response = super::SyncResponse; 5118 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6001 + type Future = BoxFuture< 6002 + tonic::Response<Self::Response>, 6003 + tonic::Status, 6004 + >; 5119 6005 fn call( 5120 6006 &mut self, 5121 6007 request: tonic::Request<super::SyncRequest>, 5122 6008 ) -> Self::Future { 5123 6009 let inner = Arc::clone(&self.0); 5124 - let fut = 5125 - async move { <T as PlaylistService>::sync(&inner, request).await }; 6010 + let fut = async move { 6011 + <T as PlaylistService>::sync(&inner, request).await 6012 + }; 5126 6013 Box::pin(fut) 5127 6014 } 5128 6015 } ··· 5151 6038 "/rockbox.v1alpha1.PlaylistService/RemoveAllTracks" => { 5152 6039 #[allow(non_camel_case_types)] 5153 6040 struct RemoveAllTracksSvc<T: PlaylistService>(pub Arc<T>); 5154 - impl<T: PlaylistService> 5155 - tonic::server::UnaryService<super::RemoveAllTracksRequest> 5156 - for RemoveAllTracksSvc<T> 5157 - { 6041 + impl< 6042 + T: PlaylistService, 6043 + > tonic::server::UnaryService<super::RemoveAllTracksRequest> 6044 + for RemoveAllTracksSvc<T> { 5158 6045 type Response = super::RemoveAllTracksResponse; 5159 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6046 + type Future = BoxFuture< 6047 + tonic::Response<Self::Response>, 6048 + tonic::Status, 6049 + >; 5160 6050 fn call( 5161 6051 &mut self, 5162 6052 request: tonic::Request<super::RemoveAllTracksRequest>, 5163 6053 ) -> Self::Future { 5164 6054 let inner = Arc::clone(&self.0); 5165 6055 let fut = async move { 5166 - <T as PlaylistService>::remove_all_tracks(&inner, request).await 6056 + <T as PlaylistService>::remove_all_tracks(&inner, request) 6057 + .await 5167 6058 }; 5168 6059 Box::pin(fut) 5169 6060 } ··· 5193 6084 "/rockbox.v1alpha1.PlaylistService/RemoveTracks" => { 5194 6085 #[allow(non_camel_case_types)] 5195 6086 struct RemoveTracksSvc<T: PlaylistService>(pub Arc<T>); 5196 - impl<T: PlaylistService> tonic::server::UnaryService<super::RemoveTracksRequest> 5197 - for RemoveTracksSvc<T> 5198 - { 6087 + impl< 6088 + T: PlaylistService, 6089 + > tonic::server::UnaryService<super::RemoveTracksRequest> 6090 + for RemoveTracksSvc<T> { 5199 6091 type Response = super::RemoveTracksResponse; 5200 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6092 + type Future = BoxFuture< 6093 + tonic::Response<Self::Response>, 6094 + tonic::Status, 6095 + >; 5201 6096 fn call( 5202 6097 &mut self, 5203 6098 request: tonic::Request<super::RemoveTracksRequest>, ··· 5234 6129 "/rockbox.v1alpha1.PlaylistService/CreatePlaylist" => { 5235 6130 #[allow(non_camel_case_types)] 5236 6131 struct CreatePlaylistSvc<T: PlaylistService>(pub Arc<T>); 5237 - impl<T: PlaylistService> 5238 - tonic::server::UnaryService<super::CreatePlaylistRequest> 5239 - for CreatePlaylistSvc<T> 5240 - { 6132 + impl< 6133 + T: PlaylistService, 6134 + > tonic::server::UnaryService<super::CreatePlaylistRequest> 6135 + for CreatePlaylistSvc<T> { 5241 6136 type Response = super::CreatePlaylistResponse; 5242 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6137 + type Future = BoxFuture< 6138 + tonic::Response<Self::Response>, 6139 + tonic::Status, 6140 + >; 5243 6141 fn call( 5244 6142 &mut self, 5245 6143 request: tonic::Request<super::CreatePlaylistRequest>, 5246 6144 ) -> Self::Future { 5247 6145 let inner = Arc::clone(&self.0); 5248 6146 let fut = async move { 5249 - <T as PlaylistService>::create_playlist(&inner, request).await 6147 + <T as PlaylistService>::create_playlist(&inner, request) 6148 + .await 5250 6149 }; 5251 6150 Box::pin(fut) 5252 6151 } ··· 5276 6175 "/rockbox.v1alpha1.PlaylistService/InsertTracks" => { 5277 6176 #[allow(non_camel_case_types)] 5278 6177 struct InsertTracksSvc<T: PlaylistService>(pub Arc<T>); 5279 - impl<T: PlaylistService> tonic::server::UnaryService<super::InsertTracksRequest> 5280 - for InsertTracksSvc<T> 5281 - { 6178 + impl< 6179 + T: PlaylistService, 6180 + > tonic::server::UnaryService<super::InsertTracksRequest> 6181 + for InsertTracksSvc<T> { 5282 6182 type Response = super::InsertTracksResponse; 5283 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6183 + type Future = BoxFuture< 6184 + tonic::Response<Self::Response>, 6185 + tonic::Status, 6186 + >; 5284 6187 fn call( 5285 6188 &mut self, 5286 6189 request: tonic::Request<super::InsertTracksRequest>, ··· 5317 6220 "/rockbox.v1alpha1.PlaylistService/InsertDirectory" => { 5318 6221 #[allow(non_camel_case_types)] 5319 6222 struct InsertDirectorySvc<T: PlaylistService>(pub Arc<T>); 5320 - impl<T: PlaylistService> 5321 - tonic::server::UnaryService<super::InsertDirectoryRequest> 5322 - for InsertDirectorySvc<T> 5323 - { 6223 + impl< 6224 + T: PlaylistService, 6225 + > tonic::server::UnaryService<super::InsertDirectoryRequest> 6226 + for InsertDirectorySvc<T> { 5324 6227 type Response = super::InsertDirectoryResponse; 5325 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6228 + type Future = BoxFuture< 6229 + tonic::Response<Self::Response>, 6230 + tonic::Status, 6231 + >; 5326 6232 fn call( 5327 6233 &mut self, 5328 6234 request: tonic::Request<super::InsertDirectoryRequest>, 5329 6235 ) -> Self::Future { 5330 6236 let inner = Arc::clone(&self.0); 5331 6237 let fut = async move { 5332 - <T as PlaylistService>::insert_directory(&inner, request).await 6238 + <T as PlaylistService>::insert_directory(&inner, request) 6239 + .await 5333 6240 }; 5334 6241 Box::pin(fut) 5335 6242 } ··· 5359 6266 "/rockbox.v1alpha1.PlaylistService/InsertPlaylist" => { 5360 6267 #[allow(non_camel_case_types)] 5361 6268 struct InsertPlaylistSvc<T: PlaylistService>(pub Arc<T>); 5362 - impl<T: PlaylistService> 5363 - tonic::server::UnaryService<super::InsertPlaylistRequest> 5364 - for InsertPlaylistSvc<T> 5365 - { 6269 + impl< 6270 + T: PlaylistService, 6271 + > tonic::server::UnaryService<super::InsertPlaylistRequest> 6272 + for InsertPlaylistSvc<T> { 5366 6273 type Response = super::InsertPlaylistResponse; 5367 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6274 + type Future = BoxFuture< 6275 + tonic::Response<Self::Response>, 6276 + tonic::Status, 6277 + >; 5368 6278 fn call( 5369 6279 &mut self, 5370 6280 request: tonic::Request<super::InsertPlaylistRequest>, 5371 6281 ) -> Self::Future { 5372 6282 let inner = Arc::clone(&self.0); 5373 6283 let fut = async move { 5374 - <T as PlaylistService>::insert_playlist(&inner, request).await 6284 + <T as PlaylistService>::insert_playlist(&inner, request) 6285 + .await 5375 6286 }; 5376 6287 Box::pin(fut) 5377 6288 } ··· 5401 6312 "/rockbox.v1alpha1.PlaylistService/InsertAlbum" => { 5402 6313 #[allow(non_camel_case_types)] 5403 6314 struct InsertAlbumSvc<T: PlaylistService>(pub Arc<T>); 5404 - impl<T: PlaylistService> tonic::server::UnaryService<super::InsertAlbumRequest> 5405 - for InsertAlbumSvc<T> 5406 - { 6315 + impl< 6316 + T: PlaylistService, 6317 + > tonic::server::UnaryService<super::InsertAlbumRequest> 6318 + for InsertAlbumSvc<T> { 5407 6319 type Response = super::InsertAlbumResponse; 5408 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6320 + type Future = BoxFuture< 6321 + tonic::Response<Self::Response>, 6322 + tonic::Status, 6323 + >; 5409 6324 fn call( 5410 6325 &mut self, 5411 6326 request: tonic::Request<super::InsertAlbumRequest>, ··· 5442 6357 "/rockbox.v1alpha1.PlaylistService/InsertArtistTracks" => { 5443 6358 #[allow(non_camel_case_types)] 5444 6359 struct InsertArtistTracksSvc<T: PlaylistService>(pub Arc<T>); 5445 - impl<T: PlaylistService> 5446 - tonic::server::UnaryService<super::InsertArtistTracksRequest> 5447 - for InsertArtistTracksSvc<T> 5448 - { 6360 + impl< 6361 + T: PlaylistService, 6362 + > tonic::server::UnaryService<super::InsertArtistTracksRequest> 6363 + for InsertArtistTracksSvc<T> { 5449 6364 type Response = super::InsertArtistTracksResponse; 5450 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6365 + type Future = BoxFuture< 6366 + tonic::Response<Self::Response>, 6367 + tonic::Status, 6368 + >; 5451 6369 fn call( 5452 6370 &mut self, 5453 6371 request: tonic::Request<super::InsertArtistTracksRequest>, 5454 6372 ) -> Self::Future { 5455 6373 let inner = Arc::clone(&self.0); 5456 6374 let fut = async move { 5457 - <T as PlaylistService>::insert_artist_tracks(&inner, request).await 6375 + <T as PlaylistService>::insert_artist_tracks( 6376 + &inner, 6377 + request, 6378 + ) 6379 + .await 5458 6380 }; 5459 6381 Box::pin(fut) 5460 6382 } ··· 5484 6406 "/rockbox.v1alpha1.PlaylistService/ShufflePlaylist" => { 5485 6407 #[allow(non_camel_case_types)] 5486 6408 struct ShufflePlaylistSvc<T: PlaylistService>(pub Arc<T>); 5487 - impl<T: PlaylistService> 5488 - tonic::server::UnaryService<super::ShufflePlaylistRequest> 5489 - for ShufflePlaylistSvc<T> 5490 - { 6409 + impl< 6410 + T: PlaylistService, 6411 + > tonic::server::UnaryService<super::ShufflePlaylistRequest> 6412 + for ShufflePlaylistSvc<T> { 5491 6413 type Response = super::ShufflePlaylistResponse; 5492 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 6414 + type Future = BoxFuture< 6415 + tonic::Response<Self::Response>, 6416 + tonic::Status, 6417 + >; 5493 6418 fn call( 5494 6419 &mut self, 5495 6420 request: tonic::Request<super::ShufflePlaylistRequest>, 5496 6421 ) -> Self::Future { 5497 6422 let inner = Arc::clone(&self.0); 5498 6423 let fut = async move { 5499 - <T as PlaylistService>::shuffle_playlist(&inner, request).await 6424 + <T as PlaylistService>::shuffle_playlist(&inner, request) 6425 + .await 5500 6426 }; 5501 6427 Box::pin(fut) 5502 6428 } ··· 5523 6449 }; 5524 6450 Box::pin(fut) 5525 6451 } 5526 - _ => Box::pin(async move { 5527 - let mut response = http::Response::new(empty_body()); 5528 - let headers = response.headers_mut(); 5529 - headers.insert( 5530 - tonic::Status::GRPC_STATUS, 5531 - (tonic::Code::Unimplemented as i32).into(), 5532 - ); 5533 - headers.insert( 5534 - http::header::CONTENT_TYPE, 5535 - tonic::metadata::GRPC_CONTENT_TYPE, 5536 - ); 5537 - Ok(response) 5538 - }), 6452 + _ => { 6453 + Box::pin(async move { 6454 + let mut response = http::Response::new(empty_body()); 6455 + let headers = response.headers_mut(); 6456 + headers 6457 + .insert( 6458 + tonic::Status::GRPC_STATUS, 6459 + (tonic::Code::Unimplemented as i32).into(), 6460 + ); 6461 + headers 6462 + .insert( 6463 + http::header::CONTENT_TYPE, 6464 + tonic::metadata::GRPC_CONTENT_TYPE, 6465 + ); 6466 + Ok(response) 6467 + }) 6468 + } 5539 6469 } 5540 6470 } 5541 6471 } ··· 6045 6975 dead_code, 6046 6976 missing_docs, 6047 6977 clippy::wildcard_imports, 6048 - clippy::let_unit_value 6978 + clippy::let_unit_value, 6049 6979 )] 6050 - use tonic::codegen::http::Uri; 6051 6980 use tonic::codegen::*; 6981 + use tonic::codegen::http::Uri; 6052 6982 #[derive(Debug, Clone)] 6053 6983 pub struct SettingsServiceClient<T> { 6054 6984 inner: tonic::client::Grpc<T>, ··· 6092 7022 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 6093 7023 >, 6094 7024 >, 6095 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 6096 - Into<StdError> + std::marker::Send + std::marker::Sync, 7025 + <T as tonic::codegen::Service< 7026 + http::Request<tonic::body::BoxBody>, 7027 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 6097 7028 { 6098 7029 SettingsServiceClient::new(InterceptedService::new(inner, interceptor)) 6099 7030 } ··· 6131 7062 pub async fn get_settings_list( 6132 7063 &mut self, 6133 7064 request: impl tonic::IntoRequest<super::GetSettingsListRequest>, 6134 - ) -> std::result::Result<tonic::Response<super::GetSettingsListResponse>, tonic::Status> 6135 - { 6136 - self.inner.ready().await.map_err(|e| { 6137 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6138 - })?; 7065 + ) -> std::result::Result< 7066 + tonic::Response<super::GetSettingsListResponse>, 7067 + tonic::Status, 7068 + > { 7069 + self.inner 7070 + .ready() 7071 + .await 7072 + .map_err(|e| { 7073 + tonic::Status::unknown( 7074 + format!("Service was not ready: {}", e.into()), 7075 + ) 7076 + })?; 6139 7077 let codec = tonic::codec::ProstCodec::default(); 6140 7078 let path = http::uri::PathAndQuery::from_static( 6141 7079 "/rockbox.v1alpha1.SettingsService/GetSettingsList", 6142 7080 ); 6143 7081 let mut req = request.into_request(); 6144 - req.extensions_mut().insert(GrpcMethod::new( 6145 - "rockbox.v1alpha1.SettingsService", 6146 - "GetSettingsList", 6147 - )); 7082 + req.extensions_mut() 7083 + .insert( 7084 + GrpcMethod::new( 7085 + "rockbox.v1alpha1.SettingsService", 7086 + "GetSettingsList", 7087 + ), 7088 + ); 6148 7089 self.inner.unary(req, path, codec).await 6149 7090 } 6150 7091 pub async fn get_global_settings( 6151 7092 &mut self, 6152 7093 request: impl tonic::IntoRequest<super::GetGlobalSettingsRequest>, 6153 - ) -> std::result::Result<tonic::Response<super::GetGlobalSettingsResponse>, tonic::Status> 6154 - { 6155 - self.inner.ready().await.map_err(|e| { 6156 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6157 - })?; 7094 + ) -> std::result::Result< 7095 + tonic::Response<super::GetGlobalSettingsResponse>, 7096 + tonic::Status, 7097 + > { 7098 + self.inner 7099 + .ready() 7100 + .await 7101 + .map_err(|e| { 7102 + tonic::Status::unknown( 7103 + format!("Service was not ready: {}", e.into()), 7104 + ) 7105 + })?; 6158 7106 let codec = tonic::codec::ProstCodec::default(); 6159 7107 let path = http::uri::PathAndQuery::from_static( 6160 7108 "/rockbox.v1alpha1.SettingsService/GetGlobalSettings", 6161 7109 ); 6162 7110 let mut req = request.into_request(); 6163 - req.extensions_mut().insert(GrpcMethod::new( 6164 - "rockbox.v1alpha1.SettingsService", 6165 - "GetGlobalSettings", 6166 - )); 7111 + req.extensions_mut() 7112 + .insert( 7113 + GrpcMethod::new( 7114 + "rockbox.v1alpha1.SettingsService", 7115 + "GetGlobalSettings", 7116 + ), 7117 + ); 6167 7118 self.inner.unary(req, path, codec).await 6168 7119 } 6169 7120 pub async fn save_settings( 6170 7121 &mut self, 6171 7122 request: impl tonic::IntoRequest<super::SaveSettingsRequest>, 6172 - ) -> std::result::Result<tonic::Response<super::SaveSettingsResponse>, tonic::Status> 6173 - { 6174 - self.inner.ready().await.map_err(|e| { 6175 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6176 - })?; 7123 + ) -> std::result::Result< 7124 + tonic::Response<super::SaveSettingsResponse>, 7125 + tonic::Status, 7126 + > { 7127 + self.inner 7128 + .ready() 7129 + .await 7130 + .map_err(|e| { 7131 + tonic::Status::unknown( 7132 + format!("Service was not ready: {}", e.into()), 7133 + ) 7134 + })?; 6177 7135 let codec = tonic::codec::ProstCodec::default(); 6178 7136 let path = http::uri::PathAndQuery::from_static( 6179 7137 "/rockbox.v1alpha1.SettingsService/SaveSettings", 6180 7138 ); 6181 7139 let mut req = request.into_request(); 6182 - req.extensions_mut().insert(GrpcMethod::new( 6183 - "rockbox.v1alpha1.SettingsService", 6184 - "SaveSettings", 6185 - )); 7140 + req.extensions_mut() 7141 + .insert( 7142 + GrpcMethod::new("rockbox.v1alpha1.SettingsService", "SaveSettings"), 7143 + ); 6186 7144 self.inner.unary(req, path, codec).await 6187 7145 } 6188 7146 } ··· 6194 7152 dead_code, 6195 7153 missing_docs, 6196 7154 clippy::wildcard_imports, 6197 - clippy::let_unit_value 7155 + clippy::let_unit_value, 6198 7156 )] 6199 7157 use tonic::codegen::*; 6200 7158 /// Generated trait containing gRPC methods that should be implemented for use with SettingsServiceServer. ··· 6203 7161 async fn get_settings_list( 6204 7162 &self, 6205 7163 request: tonic::Request<super::GetSettingsListRequest>, 6206 - ) -> std::result::Result<tonic::Response<super::GetSettingsListResponse>, tonic::Status>; 7164 + ) -> std::result::Result< 7165 + tonic::Response<super::GetSettingsListResponse>, 7166 + tonic::Status, 7167 + >; 6207 7168 async fn get_global_settings( 6208 7169 &self, 6209 7170 request: tonic::Request<super::GetGlobalSettingsRequest>, 6210 - ) -> std::result::Result<tonic::Response<super::GetGlobalSettingsResponse>, tonic::Status>; 7171 + ) -> std::result::Result< 7172 + tonic::Response<super::GetGlobalSettingsResponse>, 7173 + tonic::Status, 7174 + >; 6211 7175 async fn save_settings( 6212 7176 &self, 6213 7177 request: tonic::Request<super::SaveSettingsRequest>, 6214 - ) -> std::result::Result<tonic::Response<super::SaveSettingsResponse>, tonic::Status>; 7178 + ) -> std::result::Result< 7179 + tonic::Response<super::SaveSettingsResponse>, 7180 + tonic::Status, 7181 + >; 6215 7182 } 6216 7183 #[derive(Debug)] 6217 7184 pub struct SettingsServiceServer<T> { ··· 6234 7201 max_encoding_message_size: None, 6235 7202 } 6236 7203 } 6237 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 7204 + pub fn with_interceptor<F>( 7205 + inner: T, 7206 + interceptor: F, 7207 + ) -> InterceptedService<Self, F> 6238 7208 where 6239 7209 F: tonic::service::Interceptor, 6240 7210 { ··· 6289 7259 "/rockbox.v1alpha1.SettingsService/GetSettingsList" => { 6290 7260 #[allow(non_camel_case_types)] 6291 7261 struct GetSettingsListSvc<T: SettingsService>(pub Arc<T>); 6292 - impl<T: SettingsService> 6293 - tonic::server::UnaryService<super::GetSettingsListRequest> 6294 - for GetSettingsListSvc<T> 6295 - { 7262 + impl< 7263 + T: SettingsService, 7264 + > tonic::server::UnaryService<super::GetSettingsListRequest> 7265 + for GetSettingsListSvc<T> { 6296 7266 type Response = super::GetSettingsListResponse; 6297 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 7267 + type Future = BoxFuture< 7268 + tonic::Response<Self::Response>, 7269 + tonic::Status, 7270 + >; 6298 7271 fn call( 6299 7272 &mut self, 6300 7273 request: tonic::Request<super::GetSettingsListRequest>, 6301 7274 ) -> Self::Future { 6302 7275 let inner = Arc::clone(&self.0); 6303 7276 let fut = async move { 6304 - <T as SettingsService>::get_settings_list(&inner, request).await 7277 + <T as SettingsService>::get_settings_list(&inner, request) 7278 + .await 6305 7279 }; 6306 7280 Box::pin(fut) 6307 7281 } ··· 6331 7305 "/rockbox.v1alpha1.SettingsService/GetGlobalSettings" => { 6332 7306 #[allow(non_camel_case_types)] 6333 7307 struct GetGlobalSettingsSvc<T: SettingsService>(pub Arc<T>); 6334 - impl<T: SettingsService> 6335 - tonic::server::UnaryService<super::GetGlobalSettingsRequest> 6336 - for GetGlobalSettingsSvc<T> 6337 - { 7308 + impl< 7309 + T: SettingsService, 7310 + > tonic::server::UnaryService<super::GetGlobalSettingsRequest> 7311 + for GetGlobalSettingsSvc<T> { 6338 7312 type Response = super::GetGlobalSettingsResponse; 6339 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 7313 + type Future = BoxFuture< 7314 + tonic::Response<Self::Response>, 7315 + tonic::Status, 7316 + >; 6340 7317 fn call( 6341 7318 &mut self, 6342 7319 request: tonic::Request<super::GetGlobalSettingsRequest>, 6343 7320 ) -> Self::Future { 6344 7321 let inner = Arc::clone(&self.0); 6345 7322 let fut = async move { 6346 - <T as SettingsService>::get_global_settings(&inner, request).await 7323 + <T as SettingsService>::get_global_settings(&inner, request) 7324 + .await 6347 7325 }; 6348 7326 Box::pin(fut) 6349 7327 } ··· 6373 7351 "/rockbox.v1alpha1.SettingsService/SaveSettings" => { 6374 7352 #[allow(non_camel_case_types)] 6375 7353 struct SaveSettingsSvc<T: SettingsService>(pub Arc<T>); 6376 - impl<T: SettingsService> tonic::server::UnaryService<super::SaveSettingsRequest> 6377 - for SaveSettingsSvc<T> 6378 - { 7354 + impl< 7355 + T: SettingsService, 7356 + > tonic::server::UnaryService<super::SaveSettingsRequest> 7357 + for SaveSettingsSvc<T> { 6379 7358 type Response = super::SaveSettingsResponse; 6380 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 7359 + type Future = BoxFuture< 7360 + tonic::Response<Self::Response>, 7361 + tonic::Status, 7362 + >; 6381 7363 fn call( 6382 7364 &mut self, 6383 7365 request: tonic::Request<super::SaveSettingsRequest>, ··· 6411 7393 }; 6412 7394 Box::pin(fut) 6413 7395 } 6414 - _ => Box::pin(async move { 6415 - let mut response = http::Response::new(empty_body()); 6416 - let headers = response.headers_mut(); 6417 - headers.insert( 6418 - tonic::Status::GRPC_STATUS, 6419 - (tonic::Code::Unimplemented as i32).into(), 6420 - ); 6421 - headers.insert( 6422 - http::header::CONTENT_TYPE, 6423 - tonic::metadata::GRPC_CONTENT_TYPE, 6424 - ); 6425 - Ok(response) 6426 - }), 7396 + _ => { 7397 + Box::pin(async move { 7398 + let mut response = http::Response::new(empty_body()); 7399 + let headers = response.headers_mut(); 7400 + headers 7401 + .insert( 7402 + tonic::Status::GRPC_STATUS, 7403 + (tonic::Code::Unimplemented as i32).into(), 7404 + ); 7405 + headers 7406 + .insert( 7407 + http::header::CONTENT_TYPE, 7408 + tonic::metadata::GRPC_CONTENT_TYPE, 7409 + ); 7410 + Ok(response) 7411 + }) 7412 + } 6427 7413 } 6428 7414 } 6429 7415 } ··· 6581 7567 dead_code, 6582 7568 missing_docs, 6583 7569 clippy::wildcard_imports, 6584 - clippy::let_unit_value 7570 + clippy::let_unit_value, 6585 7571 )] 6586 - use tonic::codegen::http::Uri; 6587 7572 use tonic::codegen::*; 7573 + use tonic::codegen::http::Uri; 6588 7574 #[derive(Debug, Clone)] 6589 7575 pub struct SoundServiceClient<T> { 6590 7576 inner: tonic::client::Grpc<T>, ··· 6628 7614 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 6629 7615 >, 6630 7616 >, 6631 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 6632 - Into<StdError> + std::marker::Send + std::marker::Sync, 7617 + <T as tonic::codegen::Service< 7618 + http::Request<tonic::body::BoxBody>, 7619 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 6633 7620 { 6634 7621 SoundServiceClient::new(InterceptedService::new(inner, interceptor)) 6635 7622 } ··· 6667 7654 pub async fn adjust_volume( 6668 7655 &mut self, 6669 7656 request: impl tonic::IntoRequest<super::AdjustVolumeRequest>, 6670 - ) -> std::result::Result<tonic::Response<super::AdjustVolumeResponse>, tonic::Status> 6671 - { 6672 - self.inner.ready().await.map_err(|e| { 6673 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6674 - })?; 7657 + ) -> std::result::Result< 7658 + tonic::Response<super::AdjustVolumeResponse>, 7659 + tonic::Status, 7660 + > { 7661 + self.inner 7662 + .ready() 7663 + .await 7664 + .map_err(|e| { 7665 + tonic::Status::unknown( 7666 + format!("Service was not ready: {}", e.into()), 7667 + ) 7668 + })?; 6675 7669 let codec = tonic::codec::ProstCodec::default(); 6676 - let path = 6677 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/AdjustVolume"); 7670 + let path = http::uri::PathAndQuery::from_static( 7671 + "/rockbox.v1alpha1.SoundService/AdjustVolume", 7672 + ); 6678 7673 let mut req = request.into_request(); 6679 - req.extensions_mut().insert(GrpcMethod::new( 6680 - "rockbox.v1alpha1.SoundService", 6681 - "AdjustVolume", 6682 - )); 7674 + req.extensions_mut() 7675 + .insert( 7676 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "AdjustVolume"), 7677 + ); 6683 7678 self.inner.unary(req, path, codec).await 6684 7679 } 6685 7680 pub async fn sound_set( 6686 7681 &mut self, 6687 7682 request: impl tonic::IntoRequest<super::SoundSetRequest>, 6688 - ) -> std::result::Result<tonic::Response<super::SoundSetResponse>, tonic::Status> { 6689 - self.inner.ready().await.map_err(|e| { 6690 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6691 - })?; 7683 + ) -> std::result::Result< 7684 + tonic::Response<super::SoundSetResponse>, 7685 + tonic::Status, 7686 + > { 7687 + self.inner 7688 + .ready() 7689 + .await 7690 + .map_err(|e| { 7691 + tonic::Status::unknown( 7692 + format!("Service was not ready: {}", e.into()), 7693 + ) 7694 + })?; 6692 7695 let codec = tonic::codec::ProstCodec::default(); 6693 - let path = 6694 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundSet"); 7696 + let path = http::uri::PathAndQuery::from_static( 7697 + "/rockbox.v1alpha1.SoundService/SoundSet", 7698 + ); 6695 7699 let mut req = request.into_request(); 6696 7700 req.extensions_mut() 6697 7701 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundSet")); ··· 6700 7704 pub async fn sound_current( 6701 7705 &mut self, 6702 7706 request: impl tonic::IntoRequest<super::SoundCurrentRequest>, 6703 - ) -> std::result::Result<tonic::Response<super::SoundCurrentResponse>, tonic::Status> 6704 - { 6705 - self.inner.ready().await.map_err(|e| { 6706 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6707 - })?; 7707 + ) -> std::result::Result< 7708 + tonic::Response<super::SoundCurrentResponse>, 7709 + tonic::Status, 7710 + > { 7711 + self.inner 7712 + .ready() 7713 + .await 7714 + .map_err(|e| { 7715 + tonic::Status::unknown( 7716 + format!("Service was not ready: {}", e.into()), 7717 + ) 7718 + })?; 6708 7719 let codec = tonic::codec::ProstCodec::default(); 6709 - let path = 6710 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundCurrent"); 7720 + let path = http::uri::PathAndQuery::from_static( 7721 + "/rockbox.v1alpha1.SoundService/SoundCurrent", 7722 + ); 6711 7723 let mut req = request.into_request(); 6712 - req.extensions_mut().insert(GrpcMethod::new( 6713 - "rockbox.v1alpha1.SoundService", 6714 - "SoundCurrent", 6715 - )); 7724 + req.extensions_mut() 7725 + .insert( 7726 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundCurrent"), 7727 + ); 6716 7728 self.inner.unary(req, path, codec).await 6717 7729 } 6718 7730 pub async fn sound_default( 6719 7731 &mut self, 6720 7732 request: impl tonic::IntoRequest<super::SoundDefaultRequest>, 6721 - ) -> std::result::Result<tonic::Response<super::SoundDefaultResponse>, tonic::Status> 6722 - { 6723 - self.inner.ready().await.map_err(|e| { 6724 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6725 - })?; 7733 + ) -> std::result::Result< 7734 + tonic::Response<super::SoundDefaultResponse>, 7735 + tonic::Status, 7736 + > { 7737 + self.inner 7738 + .ready() 7739 + .await 7740 + .map_err(|e| { 7741 + tonic::Status::unknown( 7742 + format!("Service was not ready: {}", e.into()), 7743 + ) 7744 + })?; 6726 7745 let codec = tonic::codec::ProstCodec::default(); 6727 - let path = 6728 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundDefault"); 7746 + let path = http::uri::PathAndQuery::from_static( 7747 + "/rockbox.v1alpha1.SoundService/SoundDefault", 7748 + ); 6729 7749 let mut req = request.into_request(); 6730 - req.extensions_mut().insert(GrpcMethod::new( 6731 - "rockbox.v1alpha1.SoundService", 6732 - "SoundDefault", 6733 - )); 7750 + req.extensions_mut() 7751 + .insert( 7752 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundDefault"), 7753 + ); 6734 7754 self.inner.unary(req, path, codec).await 6735 7755 } 6736 7756 pub async fn sound_min( 6737 7757 &mut self, 6738 7758 request: impl tonic::IntoRequest<super::SoundMinRequest>, 6739 - ) -> std::result::Result<tonic::Response<super::SoundMinResponse>, tonic::Status> { 6740 - self.inner.ready().await.map_err(|e| { 6741 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6742 - })?; 7759 + ) -> std::result::Result< 7760 + tonic::Response<super::SoundMinResponse>, 7761 + tonic::Status, 7762 + > { 7763 + self.inner 7764 + .ready() 7765 + .await 7766 + .map_err(|e| { 7767 + tonic::Status::unknown( 7768 + format!("Service was not ready: {}", e.into()), 7769 + ) 7770 + })?; 6743 7771 let codec = tonic::codec::ProstCodec::default(); 6744 - let path = 6745 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundMin"); 7772 + let path = http::uri::PathAndQuery::from_static( 7773 + "/rockbox.v1alpha1.SoundService/SoundMin", 7774 + ); 6746 7775 let mut req = request.into_request(); 6747 7776 req.extensions_mut() 6748 7777 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundMin")); ··· 6751 7780 pub async fn sound_max( 6752 7781 &mut self, 6753 7782 request: impl tonic::IntoRequest<super::SoundMaxRequest>, 6754 - ) -> std::result::Result<tonic::Response<super::SoundMaxResponse>, tonic::Status> { 6755 - self.inner.ready().await.map_err(|e| { 6756 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6757 - })?; 7783 + ) -> std::result::Result< 7784 + tonic::Response<super::SoundMaxResponse>, 7785 + tonic::Status, 7786 + > { 7787 + self.inner 7788 + .ready() 7789 + .await 7790 + .map_err(|e| { 7791 + tonic::Status::unknown( 7792 + format!("Service was not ready: {}", e.into()), 7793 + ) 7794 + })?; 6758 7795 let codec = tonic::codec::ProstCodec::default(); 6759 - let path = 6760 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundMax"); 7796 + let path = http::uri::PathAndQuery::from_static( 7797 + "/rockbox.v1alpha1.SoundService/SoundMax", 7798 + ); 6761 7799 let mut req = request.into_request(); 6762 7800 req.extensions_mut() 6763 7801 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundMax")); ··· 6766 7804 pub async fn sound_unit( 6767 7805 &mut self, 6768 7806 request: impl tonic::IntoRequest<super::SoundUnitRequest>, 6769 - ) -> std::result::Result<tonic::Response<super::SoundUnitResponse>, tonic::Status> { 6770 - self.inner.ready().await.map_err(|e| { 6771 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6772 - })?; 7807 + ) -> std::result::Result< 7808 + tonic::Response<super::SoundUnitResponse>, 7809 + tonic::Status, 7810 + > { 7811 + self.inner 7812 + .ready() 7813 + .await 7814 + .map_err(|e| { 7815 + tonic::Status::unknown( 7816 + format!("Service was not ready: {}", e.into()), 7817 + ) 7818 + })?; 6773 7819 let codec = tonic::codec::ProstCodec::default(); 6774 - let path = 6775 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SoundUnit"); 7820 + let path = http::uri::PathAndQuery::from_static( 7821 + "/rockbox.v1alpha1.SoundService/SoundUnit", 7822 + ); 6776 7823 let mut req = request.into_request(); 6777 - req.extensions_mut().insert(GrpcMethod::new( 6778 - "rockbox.v1alpha1.SoundService", 6779 - "SoundUnit", 6780 - )); 7824 + req.extensions_mut() 7825 + .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundUnit")); 6781 7826 self.inner.unary(req, path, codec).await 6782 7827 } 6783 7828 pub async fn sound_val2_phys( 6784 7829 &mut self, 6785 7830 request: impl tonic::IntoRequest<super::SoundVal2PhysRequest>, 6786 - ) -> std::result::Result<tonic::Response<super::SoundVal2PhysResponse>, tonic::Status> 6787 - { 6788 - self.inner.ready().await.map_err(|e| { 6789 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6790 - })?; 7831 + ) -> std::result::Result< 7832 + tonic::Response<super::SoundVal2PhysResponse>, 7833 + tonic::Status, 7834 + > { 7835 + self.inner 7836 + .ready() 7837 + .await 7838 + .map_err(|e| { 7839 + tonic::Status::unknown( 7840 + format!("Service was not ready: {}", e.into()), 7841 + ) 7842 + })?; 6791 7843 let codec = tonic::codec::ProstCodec::default(); 6792 7844 let path = http::uri::PathAndQuery::from_static( 6793 7845 "/rockbox.v1alpha1.SoundService/SoundVal2Phys", 6794 7846 ); 6795 7847 let mut req = request.into_request(); 6796 - req.extensions_mut().insert(GrpcMethod::new( 6797 - "rockbox.v1alpha1.SoundService", 6798 - "SoundVal2Phys", 6799 - )); 7848 + req.extensions_mut() 7849 + .insert( 7850 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "SoundVal2Phys"), 7851 + ); 6800 7852 self.inner.unary(req, path, codec).await 6801 7853 } 6802 7854 pub async fn get_pitch( 6803 7855 &mut self, 6804 7856 request: impl tonic::IntoRequest<super::GetPitchRequest>, 6805 - ) -> std::result::Result<tonic::Response<super::GetPitchResponse>, tonic::Status> { 6806 - self.inner.ready().await.map_err(|e| { 6807 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6808 - })?; 7857 + ) -> std::result::Result< 7858 + tonic::Response<super::GetPitchResponse>, 7859 + tonic::Status, 7860 + > { 7861 + self.inner 7862 + .ready() 7863 + .await 7864 + .map_err(|e| { 7865 + tonic::Status::unknown( 7866 + format!("Service was not ready: {}", e.into()), 7867 + ) 7868 + })?; 6809 7869 let codec = tonic::codec::ProstCodec::default(); 6810 - let path = 6811 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/GetPitch"); 7870 + let path = http::uri::PathAndQuery::from_static( 7871 + "/rockbox.v1alpha1.SoundService/GetPitch", 7872 + ); 6812 7873 let mut req = request.into_request(); 6813 7874 req.extensions_mut() 6814 7875 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "GetPitch")); ··· 6817 7878 pub async fn set_pitch( 6818 7879 &mut self, 6819 7880 request: impl tonic::IntoRequest<super::SetPitchRequest>, 6820 - ) -> std::result::Result<tonic::Response<super::SetPitchResponse>, tonic::Status> { 6821 - self.inner.ready().await.map_err(|e| { 6822 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6823 - })?; 7881 + ) -> std::result::Result< 7882 + tonic::Response<super::SetPitchResponse>, 7883 + tonic::Status, 7884 + > { 7885 + self.inner 7886 + .ready() 7887 + .await 7888 + .map_err(|e| { 7889 + tonic::Status::unknown( 7890 + format!("Service was not ready: {}", e.into()), 7891 + ) 7892 + })?; 6824 7893 let codec = tonic::codec::ProstCodec::default(); 6825 - let path = 6826 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/SetPitch"); 7894 + let path = http::uri::PathAndQuery::from_static( 7895 + "/rockbox.v1alpha1.SoundService/SetPitch", 7896 + ); 6827 7897 let mut req = request.into_request(); 6828 7898 req.extensions_mut() 6829 7899 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "SetPitch")); ··· 6832 7902 pub async fn beep_play( 6833 7903 &mut self, 6834 7904 request: impl tonic::IntoRequest<super::BeepPlayRequest>, 6835 - ) -> std::result::Result<tonic::Response<super::BeepPlayResponse>, tonic::Status> { 6836 - self.inner.ready().await.map_err(|e| { 6837 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6838 - })?; 7905 + ) -> std::result::Result< 7906 + tonic::Response<super::BeepPlayResponse>, 7907 + tonic::Status, 7908 + > { 7909 + self.inner 7910 + .ready() 7911 + .await 7912 + .map_err(|e| { 7913 + tonic::Status::unknown( 7914 + format!("Service was not ready: {}", e.into()), 7915 + ) 7916 + })?; 6839 7917 let codec = tonic::codec::ProstCodec::default(); 6840 - let path = 6841 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/BeepPlay"); 7918 + let path = http::uri::PathAndQuery::from_static( 7919 + "/rockbox.v1alpha1.SoundService/BeepPlay", 7920 + ); 6842 7921 let mut req = request.into_request(); 6843 7922 req.extensions_mut() 6844 7923 .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "BeepPlay")); ··· 6847 7926 pub async fn pcmbuf_fade( 6848 7927 &mut self, 6849 7928 request: impl tonic::IntoRequest<super::PcmbufFadeRequest>, 6850 - ) -> std::result::Result<tonic::Response<super::PcmbufFadeResponse>, tonic::Status> 6851 - { 6852 - self.inner.ready().await.map_err(|e| { 6853 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6854 - })?; 7929 + ) -> std::result::Result< 7930 + tonic::Response<super::PcmbufFadeResponse>, 7931 + tonic::Status, 7932 + > { 7933 + self.inner 7934 + .ready() 7935 + .await 7936 + .map_err(|e| { 7937 + tonic::Status::unknown( 7938 + format!("Service was not ready: {}", e.into()), 7939 + ) 7940 + })?; 6855 7941 let codec = tonic::codec::ProstCodec::default(); 6856 - let path = 6857 - http::uri::PathAndQuery::from_static("/rockbox.v1alpha1.SoundService/PcmbufFade"); 7942 + let path = http::uri::PathAndQuery::from_static( 7943 + "/rockbox.v1alpha1.SoundService/PcmbufFade", 7944 + ); 6858 7945 let mut req = request.into_request(); 6859 - req.extensions_mut().insert(GrpcMethod::new( 6860 - "rockbox.v1alpha1.SoundService", 6861 - "PcmbufFade", 6862 - )); 7946 + req.extensions_mut() 7947 + .insert(GrpcMethod::new("rockbox.v1alpha1.SoundService", "PcmbufFade")); 6863 7948 self.inner.unary(req, path, codec).await 6864 7949 } 6865 7950 pub async fn pcmbuf_set_low_latency( 6866 7951 &mut self, 6867 7952 request: impl tonic::IntoRequest<super::PcmbufSetLowLatencyRequest>, 6868 - ) -> std::result::Result<tonic::Response<super::PcmbufSetLowLatencyResponse>, tonic::Status> 6869 - { 6870 - self.inner.ready().await.map_err(|e| { 6871 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6872 - })?; 7953 + ) -> std::result::Result< 7954 + tonic::Response<super::PcmbufSetLowLatencyResponse>, 7955 + tonic::Status, 7956 + > { 7957 + self.inner 7958 + .ready() 7959 + .await 7960 + .map_err(|e| { 7961 + tonic::Status::unknown( 7962 + format!("Service was not ready: {}", e.into()), 7963 + ) 7964 + })?; 6873 7965 let codec = tonic::codec::ProstCodec::default(); 6874 7966 let path = http::uri::PathAndQuery::from_static( 6875 7967 "/rockbox.v1alpha1.SoundService/PcmbufSetLowLatency", 6876 7968 ); 6877 7969 let mut req = request.into_request(); 6878 - req.extensions_mut().insert(GrpcMethod::new( 6879 - "rockbox.v1alpha1.SoundService", 6880 - "PcmbufSetLowLatency", 6881 - )); 7970 + req.extensions_mut() 7971 + .insert( 7972 + GrpcMethod::new( 7973 + "rockbox.v1alpha1.SoundService", 7974 + "PcmbufSetLowLatency", 7975 + ), 7976 + ); 6882 7977 self.inner.unary(req, path, codec).await 6883 7978 } 6884 7979 pub async fn system_sound_play( 6885 7980 &mut self, 6886 7981 request: impl tonic::IntoRequest<super::SystemSoundPlayRequest>, 6887 - ) -> std::result::Result<tonic::Response<super::SystemSoundPlayResponse>, tonic::Status> 6888 - { 6889 - self.inner.ready().await.map_err(|e| { 6890 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6891 - })?; 7982 + ) -> std::result::Result< 7983 + tonic::Response<super::SystemSoundPlayResponse>, 7984 + tonic::Status, 7985 + > { 7986 + self.inner 7987 + .ready() 7988 + .await 7989 + .map_err(|e| { 7990 + tonic::Status::unknown( 7991 + format!("Service was not ready: {}", e.into()), 7992 + ) 7993 + })?; 6892 7994 let codec = tonic::codec::ProstCodec::default(); 6893 7995 let path = http::uri::PathAndQuery::from_static( 6894 7996 "/rockbox.v1alpha1.SoundService/SystemSoundPlay", 6895 7997 ); 6896 7998 let mut req = request.into_request(); 6897 - req.extensions_mut().insert(GrpcMethod::new( 6898 - "rockbox.v1alpha1.SoundService", 6899 - "SystemSoundPlay", 6900 - )); 7999 + req.extensions_mut() 8000 + .insert( 8001 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "SystemSoundPlay"), 8002 + ); 6901 8003 self.inner.unary(req, path, codec).await 6902 8004 } 6903 8005 pub async fn keyclick_click( 6904 8006 &mut self, 6905 8007 request: impl tonic::IntoRequest<super::KeyclickClickRequest>, 6906 - ) -> std::result::Result<tonic::Response<super::KeyclickClickResponse>, tonic::Status> 6907 - { 6908 - self.inner.ready().await.map_err(|e| { 6909 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 6910 - })?; 8008 + ) -> std::result::Result< 8009 + tonic::Response<super::KeyclickClickResponse>, 8010 + tonic::Status, 8011 + > { 8012 + self.inner 8013 + .ready() 8014 + .await 8015 + .map_err(|e| { 8016 + tonic::Status::unknown( 8017 + format!("Service was not ready: {}", e.into()), 8018 + ) 8019 + })?; 6911 8020 let codec = tonic::codec::ProstCodec::default(); 6912 8021 let path = http::uri::PathAndQuery::from_static( 6913 8022 "/rockbox.v1alpha1.SoundService/KeyclickClick", 6914 8023 ); 6915 8024 let mut req = request.into_request(); 6916 - req.extensions_mut().insert(GrpcMethod::new( 6917 - "rockbox.v1alpha1.SoundService", 6918 - "KeyclickClick", 6919 - )); 8025 + req.extensions_mut() 8026 + .insert( 8027 + GrpcMethod::new("rockbox.v1alpha1.SoundService", "KeyclickClick"), 8028 + ); 6920 8029 self.inner.unary(req, path, codec).await 6921 8030 } 6922 8031 } ··· 6928 8037 dead_code, 6929 8038 missing_docs, 6930 8039 clippy::wildcard_imports, 6931 - clippy::let_unit_value 8040 + clippy::let_unit_value, 6932 8041 )] 6933 8042 use tonic::codegen::*; 6934 8043 /// Generated trait containing gRPC methods that should be implemented for use with SoundServiceServer. ··· 6937 8046 async fn adjust_volume( 6938 8047 &self, 6939 8048 request: tonic::Request<super::AdjustVolumeRequest>, 6940 - ) -> std::result::Result<tonic::Response<super::AdjustVolumeResponse>, tonic::Status>; 8049 + ) -> std::result::Result< 8050 + tonic::Response<super::AdjustVolumeResponse>, 8051 + tonic::Status, 8052 + >; 6941 8053 async fn sound_set( 6942 8054 &self, 6943 8055 request: tonic::Request<super::SoundSetRequest>, 6944 - ) -> std::result::Result<tonic::Response<super::SoundSetResponse>, tonic::Status>; 8056 + ) -> std::result::Result< 8057 + tonic::Response<super::SoundSetResponse>, 8058 + tonic::Status, 8059 + >; 6945 8060 async fn sound_current( 6946 8061 &self, 6947 8062 request: tonic::Request<super::SoundCurrentRequest>, 6948 - ) -> std::result::Result<tonic::Response<super::SoundCurrentResponse>, tonic::Status>; 8063 + ) -> std::result::Result< 8064 + tonic::Response<super::SoundCurrentResponse>, 8065 + tonic::Status, 8066 + >; 6949 8067 async fn sound_default( 6950 8068 &self, 6951 8069 request: tonic::Request<super::SoundDefaultRequest>, 6952 - ) -> std::result::Result<tonic::Response<super::SoundDefaultResponse>, tonic::Status>; 8070 + ) -> std::result::Result< 8071 + tonic::Response<super::SoundDefaultResponse>, 8072 + tonic::Status, 8073 + >; 6953 8074 async fn sound_min( 6954 8075 &self, 6955 8076 request: tonic::Request<super::SoundMinRequest>, 6956 - ) -> std::result::Result<tonic::Response<super::SoundMinResponse>, tonic::Status>; 8077 + ) -> std::result::Result< 8078 + tonic::Response<super::SoundMinResponse>, 8079 + tonic::Status, 8080 + >; 6957 8081 async fn sound_max( 6958 8082 &self, 6959 8083 request: tonic::Request<super::SoundMaxRequest>, 6960 - ) -> std::result::Result<tonic::Response<super::SoundMaxResponse>, tonic::Status>; 8084 + ) -> std::result::Result< 8085 + tonic::Response<super::SoundMaxResponse>, 8086 + tonic::Status, 8087 + >; 6961 8088 async fn sound_unit( 6962 8089 &self, 6963 8090 request: tonic::Request<super::SoundUnitRequest>, 6964 - ) -> std::result::Result<tonic::Response<super::SoundUnitResponse>, tonic::Status>; 8091 + ) -> std::result::Result< 8092 + tonic::Response<super::SoundUnitResponse>, 8093 + tonic::Status, 8094 + >; 6965 8095 async fn sound_val2_phys( 6966 8096 &self, 6967 8097 request: tonic::Request<super::SoundVal2PhysRequest>, 6968 - ) -> std::result::Result<tonic::Response<super::SoundVal2PhysResponse>, tonic::Status>; 8098 + ) -> std::result::Result< 8099 + tonic::Response<super::SoundVal2PhysResponse>, 8100 + tonic::Status, 8101 + >; 6969 8102 async fn get_pitch( 6970 8103 &self, 6971 8104 request: tonic::Request<super::GetPitchRequest>, 6972 - ) -> std::result::Result<tonic::Response<super::GetPitchResponse>, tonic::Status>; 8105 + ) -> std::result::Result< 8106 + tonic::Response<super::GetPitchResponse>, 8107 + tonic::Status, 8108 + >; 6973 8109 async fn set_pitch( 6974 8110 &self, 6975 8111 request: tonic::Request<super::SetPitchRequest>, 6976 - ) -> std::result::Result<tonic::Response<super::SetPitchResponse>, tonic::Status>; 8112 + ) -> std::result::Result< 8113 + tonic::Response<super::SetPitchResponse>, 8114 + tonic::Status, 8115 + >; 6977 8116 async fn beep_play( 6978 8117 &self, 6979 8118 request: tonic::Request<super::BeepPlayRequest>, 6980 - ) -> std::result::Result<tonic::Response<super::BeepPlayResponse>, tonic::Status>; 8119 + ) -> std::result::Result< 8120 + tonic::Response<super::BeepPlayResponse>, 8121 + tonic::Status, 8122 + >; 6981 8123 async fn pcmbuf_fade( 6982 8124 &self, 6983 8125 request: tonic::Request<super::PcmbufFadeRequest>, 6984 - ) -> std::result::Result<tonic::Response<super::PcmbufFadeResponse>, tonic::Status>; 8126 + ) -> std::result::Result< 8127 + tonic::Response<super::PcmbufFadeResponse>, 8128 + tonic::Status, 8129 + >; 6985 8130 async fn pcmbuf_set_low_latency( 6986 8131 &self, 6987 8132 request: tonic::Request<super::PcmbufSetLowLatencyRequest>, 6988 - ) -> std::result::Result<tonic::Response<super::PcmbufSetLowLatencyResponse>, tonic::Status>; 8133 + ) -> std::result::Result< 8134 + tonic::Response<super::PcmbufSetLowLatencyResponse>, 8135 + tonic::Status, 8136 + >; 6989 8137 async fn system_sound_play( 6990 8138 &self, 6991 8139 request: tonic::Request<super::SystemSoundPlayRequest>, 6992 - ) -> std::result::Result<tonic::Response<super::SystemSoundPlayResponse>, tonic::Status>; 8140 + ) -> std::result::Result< 8141 + tonic::Response<super::SystemSoundPlayResponse>, 8142 + tonic::Status, 8143 + >; 6993 8144 async fn keyclick_click( 6994 8145 &self, 6995 8146 request: tonic::Request<super::KeyclickClickRequest>, 6996 - ) -> std::result::Result<tonic::Response<super::KeyclickClickResponse>, tonic::Status>; 8147 + ) -> std::result::Result< 8148 + tonic::Response<super::KeyclickClickResponse>, 8149 + tonic::Status, 8150 + >; 6997 8151 } 6998 8152 #[derive(Debug)] 6999 8153 pub struct SoundServiceServer<T> { ··· 7016 8170 max_encoding_message_size: None, 7017 8171 } 7018 8172 } 7019 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 8173 + pub fn with_interceptor<F>( 8174 + inner: T, 8175 + interceptor: F, 8176 + ) -> InterceptedService<Self, F> 7020 8177 where 7021 8178 F: tonic::service::Interceptor, 7022 8179 { ··· 7071 8228 "/rockbox.v1alpha1.SoundService/AdjustVolume" => { 7072 8229 #[allow(non_camel_case_types)] 7073 8230 struct AdjustVolumeSvc<T: SoundService>(pub Arc<T>); 7074 - impl<T: SoundService> tonic::server::UnaryService<super::AdjustVolumeRequest> 7075 - for AdjustVolumeSvc<T> 7076 - { 8231 + impl< 8232 + T: SoundService, 8233 + > tonic::server::UnaryService<super::AdjustVolumeRequest> 8234 + for AdjustVolumeSvc<T> { 7077 8235 type Response = super::AdjustVolumeResponse; 7078 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8236 + type Future = BoxFuture< 8237 + tonic::Response<Self::Response>, 8238 + tonic::Status, 8239 + >; 7079 8240 fn call( 7080 8241 &mut self, 7081 8242 request: tonic::Request<super::AdjustVolumeRequest>, ··· 7112 8273 "/rockbox.v1alpha1.SoundService/SoundSet" => { 7113 8274 #[allow(non_camel_case_types)] 7114 8275 struct SoundSetSvc<T: SoundService>(pub Arc<T>); 7115 - impl<T: SoundService> tonic::server::UnaryService<super::SoundSetRequest> for SoundSetSvc<T> { 8276 + impl< 8277 + T: SoundService, 8278 + > tonic::server::UnaryService<super::SoundSetRequest> 8279 + for SoundSetSvc<T> { 7116 8280 type Response = super::SoundSetResponse; 7117 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8281 + type Future = BoxFuture< 8282 + tonic::Response<Self::Response>, 8283 + tonic::Status, 8284 + >; 7118 8285 fn call( 7119 8286 &mut self, 7120 8287 request: tonic::Request<super::SoundSetRequest>, ··· 7151 8318 "/rockbox.v1alpha1.SoundService/SoundCurrent" => { 7152 8319 #[allow(non_camel_case_types)] 7153 8320 struct SoundCurrentSvc<T: SoundService>(pub Arc<T>); 7154 - impl<T: SoundService> tonic::server::UnaryService<super::SoundCurrentRequest> 7155 - for SoundCurrentSvc<T> 7156 - { 8321 + impl< 8322 + T: SoundService, 8323 + > tonic::server::UnaryService<super::SoundCurrentRequest> 8324 + for SoundCurrentSvc<T> { 7157 8325 type Response = super::SoundCurrentResponse; 7158 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8326 + type Future = BoxFuture< 8327 + tonic::Response<Self::Response>, 8328 + tonic::Status, 8329 + >; 7159 8330 fn call( 7160 8331 &mut self, 7161 8332 request: tonic::Request<super::SoundCurrentRequest>, ··· 7192 8363 "/rockbox.v1alpha1.SoundService/SoundDefault" => { 7193 8364 #[allow(non_camel_case_types)] 7194 8365 struct SoundDefaultSvc<T: SoundService>(pub Arc<T>); 7195 - impl<T: SoundService> tonic::server::UnaryService<super::SoundDefaultRequest> 7196 - for SoundDefaultSvc<T> 7197 - { 8366 + impl< 8367 + T: SoundService, 8368 + > tonic::server::UnaryService<super::SoundDefaultRequest> 8369 + for SoundDefaultSvc<T> { 7198 8370 type Response = super::SoundDefaultResponse; 7199 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8371 + type Future = BoxFuture< 8372 + tonic::Response<Self::Response>, 8373 + tonic::Status, 8374 + >; 7200 8375 fn call( 7201 8376 &mut self, 7202 8377 request: tonic::Request<super::SoundDefaultRequest>, ··· 7233 8408 "/rockbox.v1alpha1.SoundService/SoundMin" => { 7234 8409 #[allow(non_camel_case_types)] 7235 8410 struct SoundMinSvc<T: SoundService>(pub Arc<T>); 7236 - impl<T: SoundService> tonic::server::UnaryService<super::SoundMinRequest> for SoundMinSvc<T> { 8411 + impl< 8412 + T: SoundService, 8413 + > tonic::server::UnaryService<super::SoundMinRequest> 8414 + for SoundMinSvc<T> { 7237 8415 type Response = super::SoundMinResponse; 7238 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8416 + type Future = BoxFuture< 8417 + tonic::Response<Self::Response>, 8418 + tonic::Status, 8419 + >; 7239 8420 fn call( 7240 8421 &mut self, 7241 8422 request: tonic::Request<super::SoundMinRequest>, ··· 7272 8453 "/rockbox.v1alpha1.SoundService/SoundMax" => { 7273 8454 #[allow(non_camel_case_types)] 7274 8455 struct SoundMaxSvc<T: SoundService>(pub Arc<T>); 7275 - impl<T: SoundService> tonic::server::UnaryService<super::SoundMaxRequest> for SoundMaxSvc<T> { 8456 + impl< 8457 + T: SoundService, 8458 + > tonic::server::UnaryService<super::SoundMaxRequest> 8459 + for SoundMaxSvc<T> { 7276 8460 type Response = super::SoundMaxResponse; 7277 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8461 + type Future = BoxFuture< 8462 + tonic::Response<Self::Response>, 8463 + tonic::Status, 8464 + >; 7278 8465 fn call( 7279 8466 &mut self, 7280 8467 request: tonic::Request<super::SoundMaxRequest>, ··· 7311 8498 "/rockbox.v1alpha1.SoundService/SoundUnit" => { 7312 8499 #[allow(non_camel_case_types)] 7313 8500 struct SoundUnitSvc<T: SoundService>(pub Arc<T>); 7314 - impl<T: SoundService> tonic::server::UnaryService<super::SoundUnitRequest> for SoundUnitSvc<T> { 8501 + impl< 8502 + T: SoundService, 8503 + > tonic::server::UnaryService<super::SoundUnitRequest> 8504 + for SoundUnitSvc<T> { 7315 8505 type Response = super::SoundUnitResponse; 7316 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8506 + type Future = BoxFuture< 8507 + tonic::Response<Self::Response>, 8508 + tonic::Status, 8509 + >; 7317 8510 fn call( 7318 8511 &mut self, 7319 8512 request: tonic::Request<super::SoundUnitRequest>, ··· 7350 8543 "/rockbox.v1alpha1.SoundService/SoundVal2Phys" => { 7351 8544 #[allow(non_camel_case_types)] 7352 8545 struct SoundVal2PhysSvc<T: SoundService>(pub Arc<T>); 7353 - impl<T: SoundService> tonic::server::UnaryService<super::SoundVal2PhysRequest> 7354 - for SoundVal2PhysSvc<T> 7355 - { 8546 + impl< 8547 + T: SoundService, 8548 + > tonic::server::UnaryService<super::SoundVal2PhysRequest> 8549 + for SoundVal2PhysSvc<T> { 7356 8550 type Response = super::SoundVal2PhysResponse; 7357 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8551 + type Future = BoxFuture< 8552 + tonic::Response<Self::Response>, 8553 + tonic::Status, 8554 + >; 7358 8555 fn call( 7359 8556 &mut self, 7360 8557 request: tonic::Request<super::SoundVal2PhysRequest>, ··· 7391 8588 "/rockbox.v1alpha1.SoundService/GetPitch" => { 7392 8589 #[allow(non_camel_case_types)] 7393 8590 struct GetPitchSvc<T: SoundService>(pub Arc<T>); 7394 - impl<T: SoundService> tonic::server::UnaryService<super::GetPitchRequest> for GetPitchSvc<T> { 8591 + impl< 8592 + T: SoundService, 8593 + > tonic::server::UnaryService<super::GetPitchRequest> 8594 + for GetPitchSvc<T> { 7395 8595 type Response = super::GetPitchResponse; 7396 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8596 + type Future = BoxFuture< 8597 + tonic::Response<Self::Response>, 8598 + tonic::Status, 8599 + >; 7397 8600 fn call( 7398 8601 &mut self, 7399 8602 request: tonic::Request<super::GetPitchRequest>, ··· 7430 8633 "/rockbox.v1alpha1.SoundService/SetPitch" => { 7431 8634 #[allow(non_camel_case_types)] 7432 8635 struct SetPitchSvc<T: SoundService>(pub Arc<T>); 7433 - impl<T: SoundService> tonic::server::UnaryService<super::SetPitchRequest> for SetPitchSvc<T> { 8636 + impl< 8637 + T: SoundService, 8638 + > tonic::server::UnaryService<super::SetPitchRequest> 8639 + for SetPitchSvc<T> { 7434 8640 type Response = super::SetPitchResponse; 7435 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8641 + type Future = BoxFuture< 8642 + tonic::Response<Self::Response>, 8643 + tonic::Status, 8644 + >; 7436 8645 fn call( 7437 8646 &mut self, 7438 8647 request: tonic::Request<super::SetPitchRequest>, ··· 7469 8678 "/rockbox.v1alpha1.SoundService/BeepPlay" => { 7470 8679 #[allow(non_camel_case_types)] 7471 8680 struct BeepPlaySvc<T: SoundService>(pub Arc<T>); 7472 - impl<T: SoundService> tonic::server::UnaryService<super::BeepPlayRequest> for BeepPlaySvc<T> { 8681 + impl< 8682 + T: SoundService, 8683 + > tonic::server::UnaryService<super::BeepPlayRequest> 8684 + for BeepPlaySvc<T> { 7473 8685 type Response = super::BeepPlayResponse; 7474 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8686 + type Future = BoxFuture< 8687 + tonic::Response<Self::Response>, 8688 + tonic::Status, 8689 + >; 7475 8690 fn call( 7476 8691 &mut self, 7477 8692 request: tonic::Request<super::BeepPlayRequest>, ··· 7508 8723 "/rockbox.v1alpha1.SoundService/PcmbufFade" => { 7509 8724 #[allow(non_camel_case_types)] 7510 8725 struct PcmbufFadeSvc<T: SoundService>(pub Arc<T>); 7511 - impl<T: SoundService> tonic::server::UnaryService<super::PcmbufFadeRequest> for PcmbufFadeSvc<T> { 8726 + impl< 8727 + T: SoundService, 8728 + > tonic::server::UnaryService<super::PcmbufFadeRequest> 8729 + for PcmbufFadeSvc<T> { 7512 8730 type Response = super::PcmbufFadeResponse; 7513 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8731 + type Future = BoxFuture< 8732 + tonic::Response<Self::Response>, 8733 + tonic::Status, 8734 + >; 7514 8735 fn call( 7515 8736 &mut self, 7516 8737 request: tonic::Request<super::PcmbufFadeRequest>, ··· 7547 8768 "/rockbox.v1alpha1.SoundService/PcmbufSetLowLatency" => { 7548 8769 #[allow(non_camel_case_types)] 7549 8770 struct PcmbufSetLowLatencySvc<T: SoundService>(pub Arc<T>); 7550 - impl<T: SoundService> 7551 - tonic::server::UnaryService<super::PcmbufSetLowLatencyRequest> 7552 - for PcmbufSetLowLatencySvc<T> 7553 - { 8771 + impl< 8772 + T: SoundService, 8773 + > tonic::server::UnaryService<super::PcmbufSetLowLatencyRequest> 8774 + for PcmbufSetLowLatencySvc<T> { 7554 8775 type Response = super::PcmbufSetLowLatencyResponse; 7555 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8776 + type Future = BoxFuture< 8777 + tonic::Response<Self::Response>, 8778 + tonic::Status, 8779 + >; 7556 8780 fn call( 7557 8781 &mut self, 7558 8782 request: tonic::Request<super::PcmbufSetLowLatencyRequest>, 7559 8783 ) -> Self::Future { 7560 8784 let inner = Arc::clone(&self.0); 7561 8785 let fut = async move { 7562 - <T as SoundService>::pcmbuf_set_low_latency(&inner, request).await 8786 + <T as SoundService>::pcmbuf_set_low_latency(&inner, request) 8787 + .await 7563 8788 }; 7564 8789 Box::pin(fut) 7565 8790 } ··· 7589 8814 "/rockbox.v1alpha1.SoundService/SystemSoundPlay" => { 7590 8815 #[allow(non_camel_case_types)] 7591 8816 struct SystemSoundPlaySvc<T: SoundService>(pub Arc<T>); 7592 - impl<T: SoundService> tonic::server::UnaryService<super::SystemSoundPlayRequest> 7593 - for SystemSoundPlaySvc<T> 7594 - { 8817 + impl< 8818 + T: SoundService, 8819 + > tonic::server::UnaryService<super::SystemSoundPlayRequest> 8820 + for SystemSoundPlaySvc<T> { 7595 8821 type Response = super::SystemSoundPlayResponse; 7596 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8822 + type Future = BoxFuture< 8823 + tonic::Response<Self::Response>, 8824 + tonic::Status, 8825 + >; 7597 8826 fn call( 7598 8827 &mut self, 7599 8828 request: tonic::Request<super::SystemSoundPlayRequest>, 7600 8829 ) -> Self::Future { 7601 8830 let inner = Arc::clone(&self.0); 7602 8831 let fut = async move { 7603 - <T as SoundService>::system_sound_play(&inner, request).await 8832 + <T as SoundService>::system_sound_play(&inner, request) 8833 + .await 7604 8834 }; 7605 8835 Box::pin(fut) 7606 8836 } ··· 7630 8860 "/rockbox.v1alpha1.SoundService/KeyclickClick" => { 7631 8861 #[allow(non_camel_case_types)] 7632 8862 struct KeyclickClickSvc<T: SoundService>(pub Arc<T>); 7633 - impl<T: SoundService> tonic::server::UnaryService<super::KeyclickClickRequest> 7634 - for KeyclickClickSvc<T> 7635 - { 8863 + impl< 8864 + T: SoundService, 8865 + > tonic::server::UnaryService<super::KeyclickClickRequest> 8866 + for KeyclickClickSvc<T> { 7636 8867 type Response = super::KeyclickClickResponse; 7637 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 8868 + type Future = BoxFuture< 8869 + tonic::Response<Self::Response>, 8870 + tonic::Status, 8871 + >; 7638 8872 fn call( 7639 8873 &mut self, 7640 8874 request: tonic::Request<super::KeyclickClickRequest>, ··· 7668 8902 }; 7669 8903 Box::pin(fut) 7670 8904 } 7671 - _ => Box::pin(async move { 7672 - let mut response = http::Response::new(empty_body()); 7673 - let headers = response.headers_mut(); 7674 - headers.insert( 7675 - tonic::Status::GRPC_STATUS, 7676 - (tonic::Code::Unimplemented as i32).into(), 7677 - ); 7678 - headers.insert( 7679 - http::header::CONTENT_TYPE, 7680 - tonic::metadata::GRPC_CONTENT_TYPE, 7681 - ); 7682 - Ok(response) 7683 - }), 8905 + _ => { 8906 + Box::pin(async move { 8907 + let mut response = http::Response::new(empty_body()); 8908 + let headers = response.headers_mut(); 8909 + headers 8910 + .insert( 8911 + tonic::Status::GRPC_STATUS, 8912 + (tonic::Code::Unimplemented as i32).into(), 8913 + ); 8914 + headers 8915 + .insert( 8916 + http::header::CONTENT_TYPE, 8917 + tonic::metadata::GRPC_CONTENT_TYPE, 8918 + ); 8919 + Ok(response) 8920 + }) 8921 + } 7684 8922 } 7685 8923 } 7686 8924 } ··· 7741 8979 dead_code, 7742 8980 missing_docs, 7743 8981 clippy::wildcard_imports, 7744 - clippy::let_unit_value 8982 + clippy::let_unit_value, 7745 8983 )] 7746 - use tonic::codegen::http::Uri; 7747 8984 use tonic::codegen::*; 8985 + use tonic::codegen::http::Uri; 7748 8986 #[derive(Debug, Clone)] 7749 8987 pub struct SystemServiceClient<T> { 7750 8988 inner: tonic::client::Grpc<T>, ··· 7788 9026 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody, 7789 9027 >, 7790 9028 >, 7791 - <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error: 7792 - Into<StdError> + std::marker::Send + std::marker::Sync, 9029 + <T as tonic::codegen::Service< 9030 + http::Request<tonic::body::BoxBody>, 9031 + >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync, 7793 9032 { 7794 9033 SystemServiceClient::new(InterceptedService::new(inner, interceptor)) 7795 9034 } ··· 7827 9066 pub async fn get_rockbox_version( 7828 9067 &mut self, 7829 9068 request: impl tonic::IntoRequest<super::GetRockboxVersionRequest>, 7830 - ) -> std::result::Result<tonic::Response<super::GetRockboxVersionResponse>, tonic::Status> 7831 - { 7832 - self.inner.ready().await.map_err(|e| { 7833 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 7834 - })?; 9069 + ) -> std::result::Result< 9070 + tonic::Response<super::GetRockboxVersionResponse>, 9071 + tonic::Status, 9072 + > { 9073 + self.inner 9074 + .ready() 9075 + .await 9076 + .map_err(|e| { 9077 + tonic::Status::unknown( 9078 + format!("Service was not ready: {}", e.into()), 9079 + ) 9080 + })?; 7835 9081 let codec = tonic::codec::ProstCodec::default(); 7836 9082 let path = http::uri::PathAndQuery::from_static( 7837 9083 "/rockbox.v1alpha1.SystemService/GetRockboxVersion", 7838 9084 ); 7839 9085 let mut req = request.into_request(); 7840 - req.extensions_mut().insert(GrpcMethod::new( 7841 - "rockbox.v1alpha1.SystemService", 7842 - "GetRockboxVersion", 7843 - )); 9086 + req.extensions_mut() 9087 + .insert( 9088 + GrpcMethod::new( 9089 + "rockbox.v1alpha1.SystemService", 9090 + "GetRockboxVersion", 9091 + ), 9092 + ); 7844 9093 self.inner.unary(req, path, codec).await 7845 9094 } 7846 9095 pub async fn get_global_status( 7847 9096 &mut self, 7848 9097 request: impl tonic::IntoRequest<super::GetGlobalStatusRequest>, 7849 - ) -> std::result::Result<tonic::Response<super::GetGlobalStatusResponse>, tonic::Status> 7850 - { 7851 - self.inner.ready().await.map_err(|e| { 7852 - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) 7853 - })?; 9098 + ) -> std::result::Result< 9099 + tonic::Response<super::GetGlobalStatusResponse>, 9100 + tonic::Status, 9101 + > { 9102 + self.inner 9103 + .ready() 9104 + .await 9105 + .map_err(|e| { 9106 + tonic::Status::unknown( 9107 + format!("Service was not ready: {}", e.into()), 9108 + ) 9109 + })?; 7854 9110 let codec = tonic::codec::ProstCodec::default(); 7855 9111 let path = http::uri::PathAndQuery::from_static( 7856 9112 "/rockbox.v1alpha1.SystemService/GetGlobalStatus", 7857 9113 ); 7858 9114 let mut req = request.into_request(); 7859 - req.extensions_mut().insert(GrpcMethod::new( 7860 - "rockbox.v1alpha1.SystemService", 7861 - "GetGlobalStatus", 7862 - )); 9115 + req.extensions_mut() 9116 + .insert( 9117 + GrpcMethod::new("rockbox.v1alpha1.SystemService", "GetGlobalStatus"), 9118 + ); 7863 9119 self.inner.unary(req, path, codec).await 7864 9120 } 7865 9121 } ··· 7871 9127 dead_code, 7872 9128 missing_docs, 7873 9129 clippy::wildcard_imports, 7874 - clippy::let_unit_value 9130 + clippy::let_unit_value, 7875 9131 )] 7876 9132 use tonic::codegen::*; 7877 9133 /// Generated trait containing gRPC methods that should be implemented for use with SystemServiceServer. ··· 7880 9136 async fn get_rockbox_version( 7881 9137 &self, 7882 9138 request: tonic::Request<super::GetRockboxVersionRequest>, 7883 - ) -> std::result::Result<tonic::Response<super::GetRockboxVersionResponse>, tonic::Status>; 9139 + ) -> std::result::Result< 9140 + tonic::Response<super::GetRockboxVersionResponse>, 9141 + tonic::Status, 9142 + >; 7884 9143 async fn get_global_status( 7885 9144 &self, 7886 9145 request: tonic::Request<super::GetGlobalStatusRequest>, 7887 - ) -> std::result::Result<tonic::Response<super::GetGlobalStatusResponse>, tonic::Status>; 9146 + ) -> std::result::Result< 9147 + tonic::Response<super::GetGlobalStatusResponse>, 9148 + tonic::Status, 9149 + >; 7888 9150 } 7889 9151 #[derive(Debug)] 7890 9152 pub struct SystemServiceServer<T> { ··· 7907 9169 max_encoding_message_size: None, 7908 9170 } 7909 9171 } 7910 - pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F> 9172 + pub fn with_interceptor<F>( 9173 + inner: T, 9174 + interceptor: F, 9175 + ) -> InterceptedService<Self, F> 7911 9176 where 7912 9177 F: tonic::service::Interceptor, 7913 9178 { ··· 7962 9227 "/rockbox.v1alpha1.SystemService/GetRockboxVersion" => { 7963 9228 #[allow(non_camel_case_types)] 7964 9229 struct GetRockboxVersionSvc<T: SystemService>(pub Arc<T>); 7965 - impl<T: SystemService> 7966 - tonic::server::UnaryService<super::GetRockboxVersionRequest> 7967 - for GetRockboxVersionSvc<T> 7968 - { 9230 + impl< 9231 + T: SystemService, 9232 + > tonic::server::UnaryService<super::GetRockboxVersionRequest> 9233 + for GetRockboxVersionSvc<T> { 7969 9234 type Response = super::GetRockboxVersionResponse; 7970 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 9235 + type Future = BoxFuture< 9236 + tonic::Response<Self::Response>, 9237 + tonic::Status, 9238 + >; 7971 9239 fn call( 7972 9240 &mut self, 7973 9241 request: tonic::Request<super::GetRockboxVersionRequest>, 7974 9242 ) -> Self::Future { 7975 9243 let inner = Arc::clone(&self.0); 7976 9244 let fut = async move { 7977 - <T as SystemService>::get_rockbox_version(&inner, request).await 9245 + <T as SystemService>::get_rockbox_version(&inner, request) 9246 + .await 7978 9247 }; 7979 9248 Box::pin(fut) 7980 9249 } ··· 8004 9273 "/rockbox.v1alpha1.SystemService/GetGlobalStatus" => { 8005 9274 #[allow(non_camel_case_types)] 8006 9275 struct GetGlobalStatusSvc<T: SystemService>(pub Arc<T>); 8007 - impl<T: SystemService> 8008 - tonic::server::UnaryService<super::GetGlobalStatusRequest> 8009 - for GetGlobalStatusSvc<T> 8010 - { 9276 + impl< 9277 + T: SystemService, 9278 + > tonic::server::UnaryService<super::GetGlobalStatusRequest> 9279 + for GetGlobalStatusSvc<T> { 8011 9280 type Response = super::GetGlobalStatusResponse; 8012 - type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>; 9281 + type Future = BoxFuture< 9282 + tonic::Response<Self::Response>, 9283 + tonic::Status, 9284 + >; 8013 9285 fn call( 8014 9286 &mut self, 8015 9287 request: tonic::Request<super::GetGlobalStatusRequest>, 8016 9288 ) -> Self::Future { 8017 9289 let inner = Arc::clone(&self.0); 8018 9290 let fut = async move { 8019 - <T as SystemService>::get_global_status(&inner, request).await 9291 + <T as SystemService>::get_global_status(&inner, request) 9292 + .await 8020 9293 }; 8021 9294 Box::pin(fut) 8022 9295 } ··· 8043 9316 }; 8044 9317 Box::pin(fut) 8045 9318 } 8046 - _ => Box::pin(async move { 8047 - let mut response = http::Response::new(empty_body()); 8048 - let headers = response.headers_mut(); 8049 - headers.insert( 8050 - tonic::Status::GRPC_STATUS, 8051 - (tonic::Code::Unimplemented as i32).into(), 8052 - ); 8053 - headers.insert( 8054 - http::header::CONTENT_TYPE, 8055 - tonic::metadata::GRPC_CONTENT_TYPE, 8056 - ); 8057 - Ok(response) 8058 - }), 9319 + _ => { 9320 + Box::pin(async move { 9321 + let mut response = http::Response::new(empty_body()); 9322 + let headers = response.headers_mut(); 9323 + headers 9324 + .insert( 9325 + tonic::Status::GRPC_STATUS, 9326 + (tonic::Code::Unimplemented as i32).into(), 9327 + ); 9328 + headers 9329 + .insert( 9330 + http::header::CONTENT_TYPE, 9331 + tonic::metadata::GRPC_CONTENT_TYPE, 9332 + ); 9333 + Ok(response) 9334 + }) 9335 + } 8059 9336 } 8060 9337 } 8061 9338 }
+39 -33
webui/rockbox/src/Components/Album/Album.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { 4 5 AlbumCover, 5 6 AlbumFooterMenu, ··· 26 27 }; 27 28 28 29 const Album: FC<AlbumProps> = (props) => { 30 + const theme = useTheme(); 29 31 return ( 30 - <div style={{ position: "relative", width: "100%" }}> 31 - <Hover> 32 - <AlbumFooterMenu> 33 - <div 34 - style={{ 35 - backgroundColor: "#ffffffda", 36 - height: 40, 37 - width: 40, 38 - borderRadius: 20, 39 - display: "flex", 40 - justifyContent: "center", 41 - alignItems: "center", 42 - }} 43 - onClick={() => props.onPlay(props.album)} 44 - > 45 - <Play small color="#000" /> 46 - </div> 47 - <ContextMenu item={props.album} /> 48 - {!props.liked && ( 49 - <FloatingButton onClick={() => props.onLike(props.album)}> 50 - <HeartOutline color="#fff" size={20} /> 51 - </FloatingButton> 52 - )} 53 - {props.liked && ( 54 - <FloatingButton onClick={() => props.onUnLike(props.album)}> 55 - <Heart color="#fe09a3" size={20} /> 56 - </FloatingButton> 32 + <div style={{ width: "100%" }}> 33 + <div style={{ position: "relative" }}> 34 + <Hover> 35 + <AlbumFooterMenu> 36 + <div 37 + style={{ 38 + backgroundColor: theme.colors.surface, 39 + height: 40, 40 + width: 40, 41 + borderRadius: 20, 42 + display: "flex", 43 + justifyContent: "center", 44 + alignItems: "center", 45 + }} 46 + onClick={() => props.onPlay(props.album)} 47 + > 48 + <Play small color={theme.colors.icon} /> 49 + </div> 50 + <ContextMenu item={props.album} /> 51 + {!props.liked && ( 52 + <FloatingButton onClick={() => props.onLike(props.album)}> 53 + <HeartOutline color="#fff" size={20} /> 54 + </FloatingButton> 55 + )} 56 + {props.liked && ( 57 + <FloatingButton onClick={() => props.onUnLike(props.album)}> 58 + <Heart color="#6F00FF" size={20} /> 59 + </FloatingButton> 60 + )} 61 + </AlbumFooterMenu> 62 + </Hover> 63 + <Link to={`/albums/${props.album.id}`}> 64 + {props.album.cover && ( 65 + <AlbumCover src={props.album.cover} effect="opacity" /> 57 66 )} 58 - </AlbumFooterMenu> 59 - </Hover> 67 + {!props.album.cover && <NoAlbumCover src={AlbumArt} />} 68 + </Link> 69 + </div> 60 70 <Link to={`/albums/${props.album.id}`}> 61 - {props.album.cover && ( 62 - <AlbumCover src={props.album.cover} effect="opacity" /> 63 - )} 64 - {!props.album.cover && <NoAlbumCover src={AlbumArt} />} 65 71 <AlbumTitle>{props.album.title}</AlbumTitle> 66 72 </Link> 67 73 <Artist to={`/artists/${props.album.artistId}`}>
+1 -1
webui/rockbox/src/Components/Album/ContextMenu/ContextMenu.stories.tsx
··· 26 26 }, 27 27 onPlayNext: fn(), 28 28 onCreatePlaylist: fn(), 29 - onAddTrackToPlaylist: fn(), 29 + onAddAlbumToPlaylist: fn(), 30 30 onPlayLast: fn(), 31 31 onAddShuffled: fn(), 32 32 onPlayLastShuffled: fn(),
+1 -1
webui/rockbox/src/Components/Album/ContextMenu/ContextMenu.test.tsx
··· 16 16 }} 17 17 onPlayNext={vi.fn()} 18 18 onCreatePlaylist={vi.fn()} 19 - onAddTrackToPlaylist={vi.fn()} 19 + onAddAlbumToPlaylist={vi.fn()} 20 20 onPlayLast={vi.fn()} 21 21 onAddShuffled={vi.fn()} 22 22 onPlayLastShuffled={vi.fn()}
+17 -14
webui/rockbox/src/Components/Album/ContextMenu/ContextMenu.tsx
··· 6 6 import { useTheme } from "@emotion/react"; 7 7 import ChildMenu from "./ChildMenu"; 8 8 import { FC, useState } from "react"; 9 + import PlaylistModal from "../../Playlists/PlaylistModal"; 9 10 import { 10 11 AlbumCover, 11 12 AlbumCoverAlt, ··· 21 22 export type ContextMenuProps = { 22 23 album: any; 23 24 onPlayNext: (id: string) => void; 24 - onCreatePlaylist: (name: string, description?: string) => void; 25 - onAddTrackToPlaylist: (playlistId: string, trackId: string) => void; 25 + onCreatePlaylist: (name: string, albumId: string, description?: string) => void; 26 + onAddAlbumToPlaylist: (playlistId: string, albumId: string) => void; 26 27 onPlayLast: (id: string) => void; 27 28 onPlayShuffled: (id: string) => void; 28 29 onAddShuffled: (id: string) => void; ··· 33 34 const ContextMenu: FC<ContextMenuProps> = ({ 34 35 album, 35 36 onPlayNext, 36 - // onCreatePlaylist, 37 + onCreatePlaylist, 37 38 onPlayLast, 38 - onAddTrackToPlaylist, 39 + onAddAlbumToPlaylist, 39 40 onPlayShuffled, 40 41 onAddShuffled, 41 42 onPlayLastShuffled, 42 43 recentPlaylists, 43 44 }) => { 44 45 const theme = useTheme(); 45 - const [, setIsNewPlaylistModalOpen] = useState(false); 46 + const [isNewPlaylistModalOpen, setIsNewPlaylistModalOpen] = useState(false); 46 47 return ( 47 48 <Container> 48 49 <Hover> ··· 90 91 if (item.label === "Create new playlist") { 91 92 setIsNewPlaylistModalOpen(true); 92 93 } else { 93 - onAddTrackToPlaylist(item.id, album.id); 94 + onAddAlbumToPlaylist(item.id, album.id); 94 95 } 95 96 close(); 96 97 }} ··· 170 171 </Icon> 171 172 </StatefulPopover> 172 173 </Hover> 173 - {/*<NewPlaylistModal 174 - onClose={() => { 175 - setIsNewPlaylistModalOpen(false); 176 - }} 177 - isOpen={isNewPlaylistModalOpen} 178 - onCreatePlaylist={onCreatePlaylist} 179 - /> 180 - */} 174 + {isNewPlaylistModalOpen && ( 175 + <PlaylistModal 176 + title="New Playlist" 177 + onClose={() => setIsNewPlaylistModalOpen(false)} 178 + onSave={async (name, description) => { 179 + await onCreatePlaylist(name, album.id, description); 180 + setIsNewPlaylistModalOpen(false); 181 + }} 182 + /> 183 + )} 181 184 </Container> 182 185 ); 183 186 };
+35 -33
webui/rockbox/src/Components/Album/ContextMenu/ContextMenuWithData.tsx
··· 3 3 import { 4 4 useInsertAlbumMutation, 5 5 usePlayAlbumMutation, 6 + useGetSavedPlaylistsQuery, 7 + useAddTracksToSavedPlaylistMutation, 8 + useCreateSavedPlaylistMutation, 9 + useGetAlbumLazyQuery, 6 10 } from "../../../Hooks/GraphQL"; 7 11 import { 8 12 PLAYLIST_INSERT_FIRST, ··· 19 23 const ContextMenuWithData: FC<ContextMenuWithDataProps> = ({ item }) => { 20 24 const [playAlbum] = usePlayAlbumMutation(); 21 25 const [insertAlbum] = useInsertAlbumMutation(); 26 + const [addTracksToPlaylist] = useAddTracksToSavedPlaylistMutation(); 27 + const [createPlaylist] = useCreateSavedPlaylistMutation(); 28 + const [getAlbum] = useGetAlbumLazyQuery(); 29 + const { data: playlistsData } = useGetSavedPlaylistsQuery({ 30 + fetchPolicy: "cache-and-network", 31 + }); 22 32 23 33 const onPlayShuffled = (albumId: string) => { 24 - playAlbum({ 25 - variables: { 26 - albumId, 27 - shuffle: true, 28 - }, 29 - }); 34 + playAlbum({ variables: { albumId, shuffle: true } }); 30 35 }; 31 36 32 37 const onPlayNext = (albumId: string) => { 33 - insertAlbum({ 34 - variables: { 35 - albumId, 36 - position: PLAYLIST_INSERT_FIRST, 37 - }, 38 - }); 38 + insertAlbum({ variables: { albumId, position: PLAYLIST_INSERT_FIRST } }); 39 39 }; 40 40 41 41 const onPlayLast = (albumId: string) => { 42 - insertAlbum({ 43 - variables: { 44 - albumId, 45 - position: PLAYLIST_INSERT_LAST, 46 - }, 47 - }); 42 + insertAlbum({ variables: { albumId, position: PLAYLIST_INSERT_LAST } }); 48 43 }; 49 44 50 45 const onAddShuffled = (albumId: string) => { 51 - insertAlbum({ 52 - variables: { 53 - albumId, 54 - position: PLAYLIST_INSERT_SHUFFLED, 55 - }, 56 - }); 46 + insertAlbum({ variables: { albumId, position: PLAYLIST_INSERT_SHUFFLED } }); 57 47 }; 58 48 59 49 const onPlayLastShuffled = (albumId: string) => { 60 - insertAlbum({ 61 - variables: { 62 - albumId, 63 - position: PLAYLIST_INSERT_LAST_SHUFFLED, 64 - }, 65 - }); 50 + insertAlbum({ variables: { albumId, position: PLAYLIST_INSERT_LAST_SHUFFLED } }); 51 + }; 52 + 53 + const getAlbumTrackPaths = async (albumId: string): Promise<string[]> => { 54 + const result = await getAlbum({ variables: { id: albumId } }); 55 + return (result.data?.album?.tracks ?? []).map((t) => t.path).filter(Boolean) as string[]; 56 + }; 57 + 58 + const onAddAlbumToPlaylist = async (playlistId: string, albumId: string) => { 59 + const paths = await getAlbumTrackPaths(albumId); 60 + if (paths.length > 0) { 61 + addTracksToPlaylist({ variables: { playlistId, trackIds: paths } }); 62 + } 63 + }; 64 + 65 + const onCreatePlaylist = async (name: string, albumId: string, description?: string) => { 66 + const paths = await getAlbumTrackPaths(albumId); 67 + await createPlaylist({ variables: { name, description, trackIds: paths } }); 66 68 }; 67 69 68 70 return ( 69 71 <ContextMenu 70 72 album={item} 71 73 onPlayNext={onPlayNext} 72 - onCreatePlaylist={() => {}} 73 - onAddTrackToPlaylist={() => {}} 74 + onCreatePlaylist={onCreatePlaylist} 75 + onAddAlbumToPlaylist={onAddAlbumToPlaylist} 74 76 onPlayLast={onPlayLast} 75 77 onAddShuffled={onAddShuffled} 76 78 onPlayLastShuffled={onPlayLastShuffled} 77 79 onPlayShuffled={onPlayShuffled} 78 - recentPlaylists={[]} 80 + recentPlaylists={playlistsData?.savedPlaylists ?? []} 79 81 /> 80 82 ); 81 83 };
+4 -2
webui/rockbox/src/Components/Album/ContextMenu/styles.tsx
··· 11 11 `; 12 12 13 13 export const Hover = styled.button` 14 - color: transparent; 14 + color: ${(props) => props.theme.colors.icon}; 15 15 background-color: transparent; 16 16 border: none; 17 + cursor: pointer; 17 18 &:hover, 18 19 &:focus { 19 - color: #000; 20 + color: ${(props) => props.theme.colors.text}; 20 21 } 21 22 `; 22 23 ··· 75 76 white-space: nowrap; 76 77 overflow: hidden; 77 78 max-width: 125px; 79 + color: ${(props) => props.theme.colors.text}; 78 80 `; 79 81 80 82 export const TrackInfos = styled.div`
+5 -5
webui/rockbox/src/Components/Album/__snapshots__/Album.test.tsx.snap
··· 9 9 style="position: relative; width: 100%;" 10 10 > 11 11 <button 12 - class="css-12ezcoy" 12 + class="css-1a0m235" 13 13 > 14 14 <div 15 - class="css-15yrfky" 15 + class="css-1jrgpod" 16 16 > 17 17 <div 18 18 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 120 120 /> 121 121 </span> 122 122 <div 123 - class="css-e68bk5" 123 + class="css-1e8jyh" 124 124 > 125 125 The End, So Far 126 126 </div> 127 127 </a> 128 128 <a 129 - class="css-9sbfuc" 129 + class="css-aqpx5g" 130 130 href="/artists/1" 131 131 > 132 132 Slipknot 133 133 </a> 134 134 <div 135 - class="css-1q570sn" 135 + class="css-8zte4g" 136 136 > 137 137 2022 138 138 </div>
+8 -6
webui/rockbox/src/Components/Album/styles.tsx
··· 15 15 `; 16 16 17 17 export const Artist = styled(RouterLink)` 18 - color: #828282; 18 + color: ${(props) => props.theme.colors.secondaryText}; 19 19 font-size: 14px; 20 20 text-overflow: ellipsis; 21 21 overflow: hidden; ··· 25 25 `; 26 26 27 27 export const Year = styled.div` 28 - color: #828282; 28 + color: ${(props) => props.theme.colors.secondaryText}; 29 29 font-size: 12px; 30 30 font-weight: 400; 31 31 margin-bottom: 56px; ··· 37 37 overflow: hidden; 38 38 white-space: nowrap; 39 39 cursor: pointer; 40 - color: #000; 40 + color: ${(props) => props.theme.colors.text}; 41 41 `; 42 42 43 43 export const AlbumFooterMenu = styled.div` 44 44 position: absolute; 45 - bottom: 60px; 45 + bottom: 0; 46 46 left: 10px; 47 47 height: 60px; 48 48 display: flex; ··· 50 50 align-items: center; 51 51 justify-content: space-between; 52 52 width: calc(100% - 20px); 53 - z-index: 1; 54 53 `; 55 54 56 55 export const Hover = styled.button` 56 + position: absolute; 57 + inset: 0; 57 58 color: transparent; 58 59 background-color: transparent; 59 60 border: none; 60 61 opacity: 0 !important; 61 62 cursor: pointer; 63 + z-index: 1; 62 64 &:hover, 63 65 &:focus { 64 - color: #000; 66 + color: ${(props) => props.theme.colors.text}; 65 67 opacity: 1 !important; 66 68 } 67 69 `;
+7 -5
webui/rockbox/src/Components/AlbumDetails/AlbumDetails.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { createColumnHelper } from "@tanstack/react-table"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 45 46 }; 46 47 47 48 const AlbumDetails: FC<AlbumDetailsProps> = (props) => { 49 + const theme = useTheme(); 48 50 const columns = [ 49 51 columnHelper.accessor("trackNumber", { 50 52 header: "#", ··· 61 63 ) 62 64 } 63 65 > 64 - <Play color="#000" small /> 66 + <Play color={theme.colors.icon} small /> 65 67 </div> 66 68 </div> 67 69 ), ··· 79 81 overflow: "hidden", 80 82 whiteSpace: "nowrap", 81 83 cursor: "pointer", 82 - color: "#000", 84 + color: theme.colors.text, 83 85 }} 84 86 > 85 87 {info.getValue()} ··· 99 101 textOverflow: "ellipsis", 100 102 whiteSpace: "nowrap", 101 103 cursor: "pointer", 102 - color: "#000", 104 + color: theme.colors.text, 103 105 }} 104 106 > 105 107 <Link to={`/artists/${info.row.original.artistId}`}> ··· 145 147 <ContentWrapper> 146 148 <BackButton onClick={() => props.onGoBack()}> 147 149 <div style={{ marginTop: 2 }}> 148 - <ArrowBack color={"#000"} /> 150 + <ArrowBack color={theme.colors.icon} /> 149 151 </div> 150 152 </BackButton> 151 153 <div style={{ marginBottom: 100 }}> ··· 179 181 <Separator /> 180 182 <Button onClick={() => props.onShuffleAll()} kind="secondary"> 181 183 <Label> 182 - <Shuffle color="#fe099c" /> 184 + <Shuffle color="#6F00FF" /> 183 185 <div style={{ marginLeft: 7 }}>Shuffle</div> 184 186 </Label> 185 187 </Button>
+140 -145
webui/rockbox/src/Components/AlbumDetails/__snapshots__/AlbumDetails.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-8v05qj" 53 - color="#fe099c" 52 + class="css-1hl5flw" 53 + color="#6F00FF" 54 54 href="/albums" 55 55 > 56 56 <svg 57 57 aria-hidden="true" 58 58 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="#fe099c" 59 + color="#6F00FF" 60 60 fill="currentColor" 61 61 focusable="false" 62 62 height="20" ··· 77 77 </div> 78 78 </a> 79 79 <a 80 - class="css-tujm8o" 81 - color="initial" 80 + class="css-j9huyi" 82 81 href="/artists" 83 82 > 84 83 <svg ··· 89 88 > 90 89 <path 91 90 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="initial" 91 + fill="#9090a0" 93 92 /> 94 93 </svg> 95 94 <div ··· 99 98 </div> 100 99 </a> 101 100 <a 102 - class="css-tujm8o" 103 - color="initial" 101 + class="css-j9huyi" 104 102 href="/tracks" 105 103 > 106 104 <svg ··· 110 108 > 111 109 <path 112 110 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="initial" 111 + fill="#9090a0" 114 112 /> 115 113 </svg> 116 114 <div ··· 120 118 </div> 121 119 </a> 122 120 <a 123 - class="css-tujm8o" 124 - color="initial" 121 + class="css-j9huyi" 125 122 href="/likes" 126 123 > 127 124 <svg ··· 133 130 > 134 131 <g 135 132 class="ionicon" 136 - style="fill: initial;" 133 + style="fill: #9090a0;" 137 134 > 138 135 <path 139 136 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 146 stroke="currentColor" 150 147 stroke-linecap="round" 151 148 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 149 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 150 /> 154 151 </g> 155 152 </svg> ··· 160 157 </div> 161 158 </a> 162 159 <a 163 - class="css-tujm8o" 164 - color="initial" 160 + class="css-j9huyi" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="initial" 166 + color="#9090a0" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 232 227 </a> 233 228 </div> 234 229 <div 235 - class="css-y9r6ap" 230 + class="css-joklj2" 236 231 > 237 232 <div 238 233 class="css-19i1zwv" ··· 260 255 <path 261 256 clip-rule="evenodd" 262 257 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 263 - fill="#000" 258 + fill="#9090a0" 264 259 fill-rule="evenodd" 265 260 /> 266 261 </svg> ··· 277 272 <path 278 273 class="ionicon" 279 274 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 280 - style="fill: #000;" 275 + style="fill: #9090a0;" 281 276 /> 282 277 </svg> 283 278 </button> ··· 292 287 > 293 288 <path 294 289 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 295 - style="fill: #000;" 290 + style="fill: #9090a0;" 296 291 /> 297 292 </svg> 298 293 </button> ··· 308 303 <path 309 304 class="ionicon" 310 305 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 311 - style="fill: #000;" 306 + style="fill: #9090a0;" 312 307 /> 313 308 </svg> 314 309 </button> ··· 326 321 <path 327 322 clip-rule="evenodd" 328 323 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 329 - fill="#000" 324 + fill="#9090a0" 330 325 fill-rule="evenodd" 331 326 /> 332 327 </svg> ··· 334 329 </div> 335 330 </div> 336 331 <div 337 - class="css-frud38" 332 + class="css-1qa5636" 338 333 > 339 334 <div 340 - class="css-4ijxew" 335 + class="css-19t4u9x" 341 336 > 342 337 <svg 343 338 height="28" ··· 371 366 style="width: 100px; margin-top: 5px;" 372 367 > 373 368 <span 374 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 369 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 375 370 > 376 371 <span 377 372 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 411 406 <svg 412 407 aria-hidden="true" 413 408 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 414 - color="#000" 409 + color="#9090a0" 415 410 fill="currentColor" 416 411 focusable="false" 417 412 height="18" ··· 453 448 class="css-1w99uby" 454 449 > 455 450 <button 456 - class="css-12583pf" 451 + class="css-1049mou" 457 452 > 458 453 <div 459 454 style="margin-top: 2px;" ··· 465 460 xmlns="http://www.w3.org/2000/svg" 466 461 > 467 462 <g 468 - style="fill: #000;" 463 + style="fill: #9090a0;" 469 464 > 470 465 <path 471 466 d="M0 0h20v20H0Z" ··· 474 469 /> 475 470 <path 476 471 d="M16 9.25H6.873l4.192-4.193L10 4l-6 6 6 6 1.058-1.058-4.185-4.192H16v-1.5Z" 477 - style="fill: #000;" 472 + style="fill: #9090a0;" 478 473 /> 479 474 </g> 480 475 </svg> ··· 497 492 style="display: flex; flex-direction: column; justify-content: center; height: calc(240px - 12px);" 498 493 > 499 494 <div 500 - class="css-1jigsdw" 495 + class="css-qce6uy" 501 496 > 502 497 One Cold Night (Live) 503 498 </div> 504 499 <a 505 - class="css-5ta7nt" 500 + class="css-r1nnke" 506 501 href="/artists/1" 507 502 > 508 503 Seether 509 504 </a> 510 505 <div 511 - class="css-24o0m5" 506 + class="css-1okz8ku" 512 507 > 513 508 13 514 509 TRACKS 515 510 </div> 516 511 <div 517 - class="css-ac0euz" 512 + class="css-1829osv" 518 513 > 519 514 2006 520 515 </div> ··· 569 564 <path 570 565 clip-rule="evenodd" 571 566 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 572 - fill="#fe099c" 567 + fill="#6F00FF" 573 568 fill-rule="evenodd" 574 569 /> 575 570 </svg> ··· 588 583 > 589 584 <thead> 590 585 <tr 591 - style="height: 36px; color: rgba(0, 0, 0, 0.54);" 586 + style="height: 36px; color: rgb(120, 120, 160);" 592 587 > 593 588 <th 594 589 style="text-align: left; width: 20px;" ··· 642 637 <path 643 638 class="ionicon" 644 639 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 645 - style="fill: #000;" 640 + style="fill: #9090a0;" 646 641 /> 647 642 </svg> 648 643 </div> ··· 652 647 style="width: 150px; overflow: hidden;" 653 648 > 654 649 <div 655 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 650 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 656 651 > 657 652 Gasoline (Live) 658 653 </div> ··· 661 656 style="width: 150px; overflow: hidden;" 662 657 > 663 658 <div 664 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 659 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 665 660 > 666 661 <a 667 - class="css-i74fgx" 662 + class="css-1ohnlkn" 668 663 href="/artists/undefined" 669 664 > 670 665 Seether ··· 736 731 > 737 732 <g 738 733 class="ionicon" 739 - style="fill: #000;" 734 + style="fill: #9090a0;" 740 735 > 741 736 <path 742 737 d="M11 5v12m6-6H5" ··· 752 747 stroke="currentColor" 753 748 stroke-linecap="round" 754 749 stroke-linejoin="round" 755 - style="fill: none; stroke-width: 2; stroke: #000;" 750 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 756 751 /> 757 752 </g> 758 753 </svg> ··· 772 767 > 773 768 <g 774 769 class="ionicon" 775 - style="fill: #000;" 770 + style="fill: #9090a0;" 776 771 > 777 772 <path 778 773 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 788 783 stroke="currentColor" 789 784 stroke-linecap="round" 790 785 stroke-linejoin="round" 791 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 786 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 792 787 /> 793 788 </g> 794 789 </svg> ··· 823 818 <path 824 819 class="ionicon" 825 820 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 826 - style="fill: #000;" 821 + style="fill: #9090a0;" 827 822 /> 828 823 </svg> 829 824 </div> ··· 833 828 style="width: 150px; overflow: hidden;" 834 829 > 835 830 <div 836 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 831 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 837 832 > 838 833 Driven Under (Live) 839 834 </div> ··· 842 837 style="width: 150px; overflow: hidden;" 843 838 > 844 839 <div 845 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 840 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 846 841 > 847 842 <a 848 - class="css-i74fgx" 843 + class="css-1ohnlkn" 849 844 href="/artists/undefined" 850 845 > 851 846 Seether ··· 917 912 > 918 913 <g 919 914 class="ionicon" 920 - style="fill: #000;" 915 + style="fill: #9090a0;" 921 916 > 922 917 <path 923 918 d="M11 5v12m6-6H5" ··· 933 928 stroke="currentColor" 934 929 stroke-linecap="round" 935 930 stroke-linejoin="round" 936 - style="fill: none; stroke-width: 2; stroke: #000;" 931 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 937 932 /> 938 933 </g> 939 934 </svg> ··· 953 948 > 954 949 <g 955 950 class="ionicon" 956 - style="fill: #000;" 951 + style="fill: #9090a0;" 957 952 > 958 953 <path 959 954 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 969 964 stroke="currentColor" 970 965 stroke-linecap="round" 971 966 stroke-linejoin="round" 972 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 967 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 973 968 /> 974 969 </g> 975 970 </svg> ··· 1004 999 <path 1005 1000 class="ionicon" 1006 1001 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1007 - style="fill: #000;" 1002 + style="fill: #9090a0;" 1008 1003 /> 1009 1004 </svg> 1010 1005 </div> ··· 1014 1009 style="width: 150px; overflow: hidden;" 1015 1010 > 1016 1011 <div 1017 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1012 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1018 1013 > 1019 1014 Diseased (Live) 1020 1015 </div> ··· 1023 1018 style="width: 150px; overflow: hidden;" 1024 1019 > 1025 1020 <div 1026 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1021 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1027 1022 > 1028 1023 <a 1029 - class="css-i74fgx" 1024 + class="css-1ohnlkn" 1030 1025 href="/artists/undefined" 1031 1026 > 1032 1027 Seether ··· 1098 1093 > 1099 1094 <g 1100 1095 class="ionicon" 1101 - style="fill: #000;" 1096 + style="fill: #9090a0;" 1102 1097 > 1103 1098 <path 1104 1099 d="M11 5v12m6-6H5" ··· 1114 1109 stroke="currentColor" 1115 1110 stroke-linecap="round" 1116 1111 stroke-linejoin="round" 1117 - style="fill: none; stroke-width: 2; stroke: #000;" 1112 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1118 1113 /> 1119 1114 </g> 1120 1115 </svg> ··· 1134 1129 > 1135 1130 <g 1136 1131 class="ionicon" 1137 - style="fill: #000;" 1132 + style="fill: #9090a0;" 1138 1133 > 1139 1134 <path 1140 1135 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1150 1145 stroke="currentColor" 1151 1146 stroke-linecap="round" 1152 1147 stroke-linejoin="round" 1153 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1148 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1154 1149 /> 1155 1150 </g> 1156 1151 </svg> ··· 1185 1180 <path 1186 1181 class="ionicon" 1187 1182 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1188 - style="fill: #000;" 1183 + style="fill: #9090a0;" 1189 1184 /> 1190 1185 </svg> 1191 1186 </div> ··· 1195 1190 style="width: 150px; overflow: hidden;" 1196 1191 > 1197 1192 <div 1198 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1193 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1199 1194 > 1200 1195 Truth (Live) 1201 1196 </div> ··· 1204 1199 style="width: 150px; overflow: hidden;" 1205 1200 > 1206 1201 <div 1207 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1202 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1208 1203 > 1209 1204 <a 1210 - class="css-i74fgx" 1205 + class="css-1ohnlkn" 1211 1206 href="/artists/undefined" 1212 1207 > 1213 1208 Seether ··· 1279 1274 > 1280 1275 <g 1281 1276 class="ionicon" 1282 - style="fill: #000;" 1277 + style="fill: #9090a0;" 1283 1278 > 1284 1279 <path 1285 1280 d="M11 5v12m6-6H5" ··· 1295 1290 stroke="currentColor" 1296 1291 stroke-linecap="round" 1297 1292 stroke-linejoin="round" 1298 - style="fill: none; stroke-width: 2; stroke: #000;" 1293 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1299 1294 /> 1300 1295 </g> 1301 1296 </svg> ··· 1315 1310 > 1316 1311 <g 1317 1312 class="ionicon" 1318 - style="fill: #000;" 1313 + style="fill: #9090a0;" 1319 1314 > 1320 1315 <path 1321 1316 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1331 1326 stroke="currentColor" 1332 1327 stroke-linecap="round" 1333 1328 stroke-linejoin="round" 1334 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1329 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1335 1330 /> 1336 1331 </g> 1337 1332 </svg> ··· 1366 1361 <path 1367 1362 class="ionicon" 1368 1363 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1369 - style="fill: #000;" 1364 + style="fill: #9090a0;" 1370 1365 /> 1371 1366 </svg> 1372 1367 </div> ··· 1376 1371 style="width: 150px; overflow: hidden;" 1377 1372 > 1378 1373 <div 1379 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1374 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1380 1375 > 1381 1376 Immortality (Live) 1382 1377 </div> ··· 1385 1380 style="width: 150px; overflow: hidden;" 1386 1381 > 1387 1382 <div 1388 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1383 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1389 1384 > 1390 1385 <a 1391 - class="css-i74fgx" 1386 + class="css-1ohnlkn" 1392 1387 href="/artists/undefined" 1393 1388 > 1394 1389 Seether ··· 1460 1455 > 1461 1456 <g 1462 1457 class="ionicon" 1463 - style="fill: #000;" 1458 + style="fill: #9090a0;" 1464 1459 > 1465 1460 <path 1466 1461 d="M11 5v12m6-6H5" ··· 1476 1471 stroke="currentColor" 1477 1472 stroke-linecap="round" 1478 1473 stroke-linejoin="round" 1479 - style="fill: none; stroke-width: 2; stroke: #000;" 1474 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1480 1475 /> 1481 1476 </g> 1482 1477 </svg> ··· 1496 1491 > 1497 1492 <g 1498 1493 class="ionicon" 1499 - style="fill: #000;" 1494 + style="fill: #9090a0;" 1500 1495 > 1501 1496 <path 1502 1497 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1512 1507 stroke="currentColor" 1513 1508 stroke-linecap="round" 1514 1509 stroke-linejoin="round" 1515 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1510 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1516 1511 /> 1517 1512 </g> 1518 1513 </svg> ··· 1547 1542 <path 1548 1543 class="ionicon" 1549 1544 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1550 - style="fill: #000;" 1545 + style="fill: #9090a0;" 1551 1546 /> 1552 1547 </svg> 1553 1548 </div> ··· 1557 1552 style="width: 150px; overflow: hidden;" 1558 1553 > 1559 1554 <div 1560 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1555 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1561 1556 > 1562 1557 Tied My Hands (Live) 1563 1558 </div> ··· 1566 1561 style="width: 150px; overflow: hidden;" 1567 1562 > 1568 1563 <div 1569 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1564 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1570 1565 > 1571 1566 <a 1572 - class="css-i74fgx" 1567 + class="css-1ohnlkn" 1573 1568 href="/artists/undefined" 1574 1569 > 1575 1570 Seether ··· 1641 1636 > 1642 1637 <g 1643 1638 class="ionicon" 1644 - style="fill: #000;" 1639 + style="fill: #9090a0;" 1645 1640 > 1646 1641 <path 1647 1642 d="M11 5v12m6-6H5" ··· 1657 1652 stroke="currentColor" 1658 1653 stroke-linecap="round" 1659 1654 stroke-linejoin="round" 1660 - style="fill: none; stroke-width: 2; stroke: #000;" 1655 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1661 1656 /> 1662 1657 </g> 1663 1658 </svg> ··· 1677 1672 > 1678 1673 <g 1679 1674 class="ionicon" 1680 - style="fill: #000;" 1675 + style="fill: #9090a0;" 1681 1676 > 1682 1677 <path 1683 1678 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1693 1688 stroke="currentColor" 1694 1689 stroke-linecap="round" 1695 1690 stroke-linejoin="round" 1696 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1691 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1697 1692 /> 1698 1693 </g> 1699 1694 </svg> ··· 1728 1723 <path 1729 1724 class="ionicon" 1730 1725 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1731 - style="fill: #000;" 1726 + style="fill: #9090a0;" 1732 1727 /> 1733 1728 </svg> 1734 1729 </div> ··· 1738 1733 style="width: 150px; overflow: hidden;" 1739 1734 > 1740 1735 <div 1741 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1736 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1742 1737 > 1743 1738 Sympathetic (Live) 1744 1739 </div> ··· 1747 1742 style="width: 150px; overflow: hidden;" 1748 1743 > 1749 1744 <div 1750 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1745 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1751 1746 > 1752 1747 <a 1753 - class="css-i74fgx" 1748 + class="css-1ohnlkn" 1754 1749 href="/artists/undefined" 1755 1750 > 1756 1751 Seether ··· 1822 1817 > 1823 1818 <g 1824 1819 class="ionicon" 1825 - style="fill: #000;" 1820 + style="fill: #9090a0;" 1826 1821 > 1827 1822 <path 1828 1823 d="M11 5v12m6-6H5" ··· 1838 1833 stroke="currentColor" 1839 1834 stroke-linecap="round" 1840 1835 stroke-linejoin="round" 1841 - style="fill: none; stroke-width: 2; stroke: #000;" 1836 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1842 1837 /> 1843 1838 </g> 1844 1839 </svg> ··· 1858 1853 > 1859 1854 <g 1860 1855 class="ionicon" 1861 - style="fill: #000;" 1856 + style="fill: #9090a0;" 1862 1857 > 1863 1858 <path 1864 1859 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1874 1869 stroke="currentColor" 1875 1870 stroke-linecap="round" 1876 1871 stroke-linejoin="round" 1877 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1872 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1878 1873 /> 1879 1874 </g> 1880 1875 </svg> ··· 1909 1904 <path 1910 1905 class="ionicon" 1911 1906 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 1912 - style="fill: #000;" 1907 + style="fill: #9090a0;" 1913 1908 /> 1914 1909 </svg> 1915 1910 </div> ··· 1919 1914 style="width: 150px; overflow: hidden;" 1920 1915 > 1921 1916 <div 1922 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1917 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1923 1918 > 1924 1919 Fine Again (Live) 1925 1920 </div> ··· 1928 1923 style="width: 150px; overflow: hidden;" 1929 1924 > 1930 1925 <div 1931 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1926 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1932 1927 > 1933 1928 <a 1934 - class="css-i74fgx" 1929 + class="css-1ohnlkn" 1935 1930 href="/artists/undefined" 1936 1931 > 1937 1932 Seether ··· 2003 1998 > 2004 1999 <g 2005 2000 class="ionicon" 2006 - style="fill: #000;" 2001 + style="fill: #9090a0;" 2007 2002 > 2008 2003 <path 2009 2004 d="M11 5v12m6-6H5" ··· 2019 2014 stroke="currentColor" 2020 2015 stroke-linecap="round" 2021 2016 stroke-linejoin="round" 2022 - style="fill: none; stroke-width: 2; stroke: #000;" 2017 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2023 2018 /> 2024 2019 </g> 2025 2020 </svg> ··· 2039 2034 > 2040 2035 <g 2041 2036 class="ionicon" 2042 - style="fill: #000;" 2037 + style="fill: #9090a0;" 2043 2038 > 2044 2039 <path 2045 2040 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2055 2050 stroke="currentColor" 2056 2051 stroke-linecap="round" 2057 2052 stroke-linejoin="round" 2058 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2053 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2059 2054 /> 2060 2055 </g> 2061 2056 </svg> ··· 2090 2085 <path 2091 2086 class="ionicon" 2092 2087 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 2093 - style="fill: #000;" 2088 + style="fill: #9090a0;" 2094 2089 /> 2095 2090 </svg> 2096 2091 </div> ··· 2100 2095 style="width: 150px; overflow: hidden;" 2101 2096 > 2102 2097 <div 2103 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2098 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2104 2099 > 2105 2100 Broken (Live) 2106 2101 </div> ··· 2109 2104 style="width: 150px; overflow: hidden;" 2110 2105 > 2111 2106 <div 2112 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2107 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2113 2108 > 2114 2109 <a 2115 - class="css-i74fgx" 2110 + class="css-1ohnlkn" 2116 2111 href="/artists/undefined" 2117 2112 > 2118 2113 Seether ··· 2184 2179 > 2185 2180 <g 2186 2181 class="ionicon" 2187 - style="fill: #000;" 2182 + style="fill: #9090a0;" 2188 2183 > 2189 2184 <path 2190 2185 d="M11 5v12m6-6H5" ··· 2200 2195 stroke="currentColor" 2201 2196 stroke-linecap="round" 2202 2197 stroke-linejoin="round" 2203 - style="fill: none; stroke-width: 2; stroke: #000;" 2198 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2204 2199 /> 2205 2200 </g> 2206 2201 </svg> ··· 2220 2215 > 2221 2216 <g 2222 2217 class="ionicon" 2223 - style="fill: #000;" 2218 + style="fill: #9090a0;" 2224 2219 > 2225 2220 <path 2226 2221 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2236 2231 stroke="currentColor" 2237 2232 stroke-linecap="round" 2238 2233 stroke-linejoin="round" 2239 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2234 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2240 2235 /> 2241 2236 </g> 2242 2237 </svg> ··· 2271 2266 <path 2272 2267 class="ionicon" 2273 2268 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 2274 - style="fill: #000;" 2269 + style="fill: #9090a0;" 2275 2270 /> 2276 2271 </svg> 2277 2272 </div> ··· 2281 2276 style="width: 150px; overflow: hidden;" 2282 2277 > 2283 2278 <div 2284 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2279 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2285 2280 > 2286 2281 The Gift (Live) 2287 2282 </div> ··· 2290 2285 style="width: 150px; overflow: hidden;" 2291 2286 > 2292 2287 <div 2293 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2288 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2294 2289 > 2295 2290 <a 2296 - class="css-i74fgx" 2291 + class="css-1ohnlkn" 2297 2292 href="/artists/undefined" 2298 2293 > 2299 2294 Seether ··· 2365 2360 > 2366 2361 <g 2367 2362 class="ionicon" 2368 - style="fill: #000;" 2363 + style="fill: #9090a0;" 2369 2364 > 2370 2365 <path 2371 2366 d="M11 5v12m6-6H5" ··· 2381 2376 stroke="currentColor" 2382 2377 stroke-linecap="round" 2383 2378 stroke-linejoin="round" 2384 - style="fill: none; stroke-width: 2; stroke: #000;" 2379 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2385 2380 /> 2386 2381 </g> 2387 2382 </svg> ··· 2401 2396 > 2402 2397 <g 2403 2398 class="ionicon" 2404 - style="fill: #000;" 2399 + style="fill: #9090a0;" 2405 2400 > 2406 2401 <path 2407 2402 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2417 2412 stroke="currentColor" 2418 2413 stroke-linecap="round" 2419 2414 stroke-linejoin="round" 2420 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2415 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2421 2416 /> 2422 2417 </g> 2423 2418 </svg> ··· 2452 2447 <path 2453 2448 class="ionicon" 2454 2449 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 2455 - style="fill: #000;" 2450 + style="fill: #9090a0;" 2456 2451 /> 2457 2452 </svg> 2458 2453 </div> ··· 2462 2457 style="width: 150px; overflow: hidden;" 2463 2458 > 2464 2459 <div 2465 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2460 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2466 2461 > 2467 2462 Remedy (Live) 2468 2463 </div> ··· 2471 2466 style="width: 150px; overflow: hidden;" 2472 2467 > 2473 2468 <div 2474 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2469 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2475 2470 > 2476 2471 <a 2477 - class="css-i74fgx" 2472 + class="css-1ohnlkn" 2478 2473 href="/artists/undefined" 2479 2474 > 2480 2475 Seether ··· 2546 2541 > 2547 2542 <g 2548 2543 class="ionicon" 2549 - style="fill: #000;" 2544 + style="fill: #9090a0;" 2550 2545 > 2551 2546 <path 2552 2547 d="M11 5v12m6-6H5" ··· 2562 2557 stroke="currentColor" 2563 2558 stroke-linecap="round" 2564 2559 stroke-linejoin="round" 2565 - style="fill: none; stroke-width: 2; stroke: #000;" 2560 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2566 2561 /> 2567 2562 </g> 2568 2563 </svg> ··· 2582 2577 > 2583 2578 <g 2584 2579 class="ionicon" 2585 - style="fill: #000;" 2580 + style="fill: #9090a0;" 2586 2581 > 2587 2582 <path 2588 2583 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2598 2593 stroke="currentColor" 2599 2594 stroke-linecap="round" 2600 2595 stroke-linejoin="round" 2601 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2596 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2602 2597 /> 2603 2598 </g> 2604 2599 </svg> ··· 2633 2628 <path 2634 2629 class="ionicon" 2635 2630 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 2636 - style="fill: #000;" 2631 + style="fill: #9090a0;" 2637 2632 /> 2638 2633 </svg> 2639 2634 </div> ··· 2643 2638 style="width: 150px; overflow: hidden;" 2644 2639 > 2645 2640 <div 2646 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2641 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2647 2642 > 2648 2643 Plastic Man (Live) 2649 2644 </div> ··· 2652 2647 style="width: 150px; overflow: hidden;" 2653 2648 > 2654 2649 <div 2655 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2650 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2656 2651 > 2657 2652 <a 2658 - class="css-i74fgx" 2653 + class="css-1ohnlkn" 2659 2654 href="/artists/undefined" 2660 2655 > 2661 2656 Seether ··· 2727 2722 > 2728 2723 <g 2729 2724 class="ionicon" 2730 - style="fill: #000;" 2725 + style="fill: #9090a0;" 2731 2726 > 2732 2727 <path 2733 2728 d="M11 5v12m6-6H5" ··· 2743 2738 stroke="currentColor" 2744 2739 stroke-linecap="round" 2745 2740 stroke-linejoin="round" 2746 - style="fill: none; stroke-width: 2; stroke: #000;" 2741 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2747 2742 /> 2748 2743 </g> 2749 2744 </svg> ··· 2763 2758 > 2764 2759 <g 2765 2760 class="ionicon" 2766 - style="fill: #000;" 2761 + style="fill: #9090a0;" 2767 2762 > 2768 2763 <path 2769 2764 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2779 2774 stroke="currentColor" 2780 2775 stroke-linecap="round" 2781 2776 stroke-linejoin="round" 2782 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2777 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2783 2778 /> 2784 2779 </g> 2785 2780 </svg> ··· 2814 2809 <path 2815 2810 class="ionicon" 2816 2811 d="M7.386 16c-.23 0-.456-.057-.656-.165-.45-.24-.73-.706-.73-1.213V4.378a1.387 1.387 0 0 1 2.071-1.197l9.296 5.241c.394.232.633.64.633 1.077 0 .438-.239.845-.633 1.078L8.07 15.819a1.39 1.39 0 0 1-.684.181Z" 2817 - style="fill: #000;" 2812 + style="fill: #9090a0;" 2818 2813 /> 2819 2814 </svg> 2820 2815 </div> ··· 2824 2819 style="width: 150px; overflow: hidden;" 2825 2820 > 2826 2821 <div 2827 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2822 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2828 2823 > 2829 2824 The Gist (Alternate Mix) 2830 2825 </div> ··· 2833 2828 style="width: 150px; overflow: hidden;" 2834 2829 > 2835 2830 <div 2836 - style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 2831 + style="min-width: 150px; width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 2837 2832 > 2838 2833 <a 2839 - class="css-i74fgx" 2834 + class="css-1ohnlkn" 2840 2835 href="/artists/undefined" 2841 2836 > 2842 2837 Seether ··· 2908 2903 > 2909 2904 <g 2910 2905 class="ionicon" 2911 - style="fill: #000;" 2906 + style="fill: #9090a0;" 2912 2907 > 2913 2908 <path 2914 2909 d="M11 5v12m6-6H5" ··· 2924 2919 stroke="currentColor" 2925 2920 stroke-linecap="round" 2926 2921 stroke-linejoin="round" 2927 - style="fill: none; stroke-width: 2; stroke: #000;" 2922 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 2928 2923 /> 2929 2924 </g> 2930 2925 </svg> ··· 2944 2939 > 2945 2940 <g 2946 2941 class="ionicon" 2947 - style="fill: #000;" 2942 + style="fill: #9090a0;" 2948 2943 > 2949 2944 <path 2950 2945 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 2960 2955 stroke="currentColor" 2961 2956 stroke-linecap="round" 2962 2957 stroke-linejoin="round" 2963 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 2958 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 2964 2959 /> 2965 2960 </g> 2966 2961 </svg>
+7 -4
webui/rockbox/src/Components/AlbumDetails/styles.tsx
··· 24 24 export const AlbumTitle = styled.div` 25 25 font-size: 32px; 26 26 font-family: RockfordSansBold; 27 + color: ${(props) => props.theme.colors.text}; 27 28 `; 28 29 29 30 export const Artist = styled(RouterLink)` 30 - color: #000; 31 + color: ${(props) => props.theme.colors.text}; 31 32 text-decoration: none; 32 33 font-family: RockfordSansMedium; 33 34 font-size: 14px; ··· 41 42 margin-top: 25px; 42 43 font-weight: 400; 43 44 font-size: 14px; 45 + color: ${(props) => props.theme.colors.secondaryText}; 44 46 `; 45 47 46 48 export const Year = styled.div` ··· 48 50 font-weight: 400; 49 51 font-size: 14px; 50 52 margin-bottom: 10px; 53 + color: ${(props) => props.theme.colors.secondaryText}; 51 54 `; 52 55 53 56 export const Header = styled.div` ··· 85 88 height: 30px; 86 89 width: 30px; 87 90 border-radius: 15px; 88 - background-color: #f7f7f8; 91 + background-color: ${(props) => props.theme.colors.backButton}; 89 92 margin-top: 26px; 90 93 margin-bottom: 46px; 91 94 position: absolute; ··· 112 115 cursor: pointer; 113 116 &:hover, 114 117 &:focus { 115 - color: #000; 118 + color: ${(props) => props.theme.colors.text}; 116 119 opacity: 1 !important; 117 120 } 118 121 `; ··· 124 127 `; 125 128 126 129 export const Link = styled(RouterLink)` 127 - color: #000; 130 + color: ${(props) => props.theme.colors.text}; 128 131 text-decoration: none; 129 132 font-family: RockfordSansRegular; 130 133 &:hover {
+252 -257
webui/rockbox/src/Components/Albums/__snapshots__/Albums.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-8v05qj" 53 - color="#fe099c" 52 + class="css-1hl5flw" 53 + color="#6F00FF" 54 54 href="/albums" 55 55 > 56 56 <svg 57 57 aria-hidden="true" 58 58 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="#fe099c" 59 + color="#6F00FF" 60 60 fill="currentColor" 61 61 focusable="false" 62 62 height="20" ··· 77 77 </div> 78 78 </a> 79 79 <a 80 - class="css-tujm8o" 81 - color="initial" 80 + class="css-j9huyi" 82 81 href="/artists" 83 82 > 84 83 <svg ··· 89 88 > 90 89 <path 91 90 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="initial" 91 + fill="#9090a0" 93 92 /> 94 93 </svg> 95 94 <div ··· 99 98 </div> 100 99 </a> 101 100 <a 102 - class="css-tujm8o" 103 - color="initial" 101 + class="css-j9huyi" 104 102 href="/tracks" 105 103 > 106 104 <svg ··· 110 108 > 111 109 <path 112 110 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="initial" 111 + fill="#9090a0" 114 112 /> 115 113 </svg> 116 114 <div ··· 120 118 </div> 121 119 </a> 122 120 <a 123 - class="css-tujm8o" 124 - color="initial" 121 + class="css-j9huyi" 125 122 href="/likes" 126 123 > 127 124 <svg ··· 133 130 > 134 131 <g 135 132 class="ionicon" 136 - style="fill: initial;" 133 + style="fill: #9090a0;" 137 134 > 138 135 <path 139 136 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 146 stroke="currentColor" 150 147 stroke-linecap="round" 151 148 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 149 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 150 /> 154 151 </g> 155 152 </svg> ··· 160 157 </div> 161 158 </a> 162 159 <a 163 - class="css-tujm8o" 164 - color="initial" 160 + class="css-j9huyi" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="initial" 166 + color="#9090a0" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 232 227 </a> 233 228 </div> 234 229 <div 235 - class="css-y9r6ap" 230 + class="css-joklj2" 236 231 > 237 232 <div 238 233 class="css-19i1zwv" ··· 260 255 <path 261 256 clip-rule="evenodd" 262 257 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 263 - fill="#000" 258 + fill="#9090a0" 264 259 fill-rule="evenodd" 265 260 /> 266 261 </svg> ··· 277 272 <path 278 273 class="ionicon" 279 274 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 280 - style="fill: #000;" 275 + style="fill: #9090a0;" 281 276 /> 282 277 </svg> 283 278 </button> ··· 292 287 > 293 288 <path 294 289 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 295 - style="fill: #000;" 290 + style="fill: #9090a0;" 296 291 /> 297 292 </svg> 298 293 </button> ··· 308 303 <path 309 304 class="ionicon" 310 305 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 311 - style="fill: #000;" 306 + style="fill: #9090a0;" 312 307 /> 313 308 </svg> 314 309 </button> ··· 326 321 <path 327 322 clip-rule="evenodd" 328 323 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 329 - fill="#000" 324 + fill="#9090a0" 330 325 fill-rule="evenodd" 331 326 /> 332 327 </svg> ··· 334 329 </div> 335 330 </div> 336 331 <div 337 - class="css-frud38" 332 + class="css-1qa5636" 338 333 > 339 334 <div 340 - class="css-4ijxew" 335 + class="css-19t4u9x" 341 336 > 342 337 <svg 343 338 height="28" ··· 371 366 style="width: 100px; margin-top: 5px;" 372 367 > 373 368 <span 374 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 369 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 375 370 > 376 371 <span 377 372 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 411 406 <svg 412 407 aria-hidden="true" 413 408 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 414 - color="#000" 409 + color="#9090a0" 415 410 fill="currentColor" 416 411 focusable="false" 417 412 height="18" ··· 516 511 style="position: relative; width: 100%;" 517 512 > 518 513 <button 519 - class="css-12ezcoy" 514 + class="css-1a0m235" 520 515 > 521 516 <div 522 - class="css-15yrfky" 517 + class="css-1jrgpod" 523 518 > 524 519 <div 525 520 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 627 622 /> 628 623 </span> 629 624 <div 630 - class="css-e68bk5" 625 + class="css-1e8jyh" 631 626 > 632 627 The End, So Far 633 628 </div> 634 629 </a> 635 630 <a 636 - class="css-9sbfuc" 631 + class="css-aqpx5g" 637 632 href="/artists/1" 638 633 > 639 634 Slipknot 640 635 </a> 641 636 <div 642 - class="css-1q570sn" 637 + class="css-8zte4g" 643 638 > 644 639 2022 645 640 </div> ··· 652 647 style="position: relative; width: 100%;" 653 648 > 654 649 <button 655 - class="css-12ezcoy" 650 + class="css-1a0m235" 656 651 > 657 652 <div 658 - class="css-15yrfky" 653 + class="css-1jrgpod" 659 654 > 660 655 <div 661 656 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 763 758 /> 764 759 </span> 765 760 <div 766 - class="css-e68bk5" 761 + class="css-1e8jyh" 767 762 > 768 763 One Cold Night (Live) 769 764 </div> 770 765 </a> 771 766 <a 772 - class="css-9sbfuc" 767 + class="css-aqpx5g" 773 768 href="/artists/2" 774 769 > 775 770 Seether 776 771 </a> 777 772 <div 778 - class="css-1q570sn" 773 + class="css-8zte4g" 779 774 > 780 775 2006 781 776 </div> ··· 788 783 style="position: relative; width: 100%;" 789 784 > 790 785 <button 791 - class="css-12ezcoy" 786 + class="css-1a0m235" 792 787 > 793 788 <div 794 - class="css-15yrfky" 789 + class="css-1jrgpod" 795 790 > 796 791 <div 797 792 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 899 894 /> 900 895 </span> 901 896 <div 902 - class="css-e68bk5" 897 + class="css-1e8jyh" 903 898 > 904 899 4Eva N A Day 905 900 </div> 906 901 </a> 907 902 <a 908 - class="css-9sbfuc" 903 + class="css-aqpx5g" 909 904 href="/artists/3" 910 905 > 911 906 Big K.R.I.T. 912 907 </a> 913 908 <div 914 - class="css-1q570sn" 909 + class="css-8zte4g" 915 910 > 916 911 2012 917 912 </div> ··· 924 919 style="position: relative; width: 100%;" 925 920 > 926 921 <button 927 - class="css-12ezcoy" 922 + class="css-1a0m235" 928 923 > 929 924 <div 930 - class="css-15yrfky" 925 + class="css-1jrgpod" 931 926 > 932 927 <div 933 928 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1035 1030 /> 1036 1031 </span> 1037 1032 <div 1038 - class="css-e68bk5" 1033 + class="css-1e8jyh" 1039 1034 > 1040 1035 Pluto x Baby Pluto (Deluxe) 1041 1036 </div> 1042 1037 </a> 1043 1038 <a 1044 - class="css-9sbfuc" 1039 + class="css-aqpx5g" 1045 1040 href="/artists/4" 1046 1041 > 1047 1042 Future, Lil Uzi Vert 1048 1043 </a> 1049 1044 <div 1050 - class="css-1q570sn" 1045 + class="css-8zte4g" 1051 1046 > 1052 1047 2020 1053 1048 </div> ··· 1060 1055 style="position: relative; width: 100%;" 1061 1056 > 1062 1057 <button 1063 - class="css-12ezcoy" 1058 + class="css-1a0m235" 1064 1059 > 1065 1060 <div 1066 - class="css-15yrfky" 1061 + class="css-1jrgpod" 1067 1062 > 1068 1063 <div 1069 1064 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1171 1166 /> 1172 1167 </span> 1173 1168 <div 1174 - class="css-e68bk5" 1169 + class="css-1e8jyh" 1175 1170 > 1176 1171 The Acoustic Sessions, Vol. 2 1177 1172 </div> 1178 1173 </a> 1179 1174 <a 1180 - class="css-9sbfuc" 1175 + class="css-aqpx5g" 1181 1176 href="/artists/5" 1182 1177 > 1183 1178 Smile Empty Soul 1184 1179 </a> 1185 1180 <div 1186 - class="css-1q570sn" 1181 + class="css-8zte4g" 1187 1182 > 1188 1183 2020 1189 1184 </div> ··· 1196 1191 style="position: relative; width: 100%;" 1197 1192 > 1198 1193 <button 1199 - class="css-12ezcoy" 1194 + class="css-1a0m235" 1200 1195 > 1201 1196 <div 1202 - class="css-15yrfky" 1197 + class="css-1jrgpod" 1203 1198 > 1204 1199 <div 1205 1200 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1307 1302 /> 1308 1303 </span> 1309 1304 <div 1310 - class="css-e68bk5" 1305 + class="css-1e8jyh" 1311 1306 > 1312 1307 Black Summer 1313 1308 </div> 1314 1309 </a> 1315 1310 <a 1316 - class="css-9sbfuc" 1311 + class="css-aqpx5g" 1317 1312 href="/artists/6" 1318 1313 > 1319 1314 Red Hot Chilli Peppers 1320 1315 </a> 1321 1316 <div 1322 - class="css-1q570sn" 1317 + class="css-8zte4g" 1323 1318 > 1324 1319 2022 1325 1320 </div> ··· 1332 1327 style="position: relative; width: 100%;" 1333 1328 > 1334 1329 <button 1335 - class="css-12ezcoy" 1330 + class="css-1a0m235" 1336 1331 > 1337 1332 <div 1338 - class="css-15yrfky" 1333 + class="css-1jrgpod" 1339 1334 > 1340 1335 <div 1341 1336 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1443 1438 /> 1444 1439 </span> 1445 1440 <div 1446 - class="css-e68bk5" 1441 + class="css-1e8jyh" 1447 1442 > 1448 1443 Californication (Deluxe Edition) 1449 1444 </div> 1450 1445 </a> 1451 1446 <a 1452 - class="css-9sbfuc" 1447 + class="css-aqpx5g" 1453 1448 href="/artists/7" 1454 1449 > 1455 1450 Red Hot Chilli Peppers 1456 1451 </a> 1457 1452 <div 1458 - class="css-1q570sn" 1453 + class="css-8zte4g" 1459 1454 > 1460 1455 1999 1461 1456 </div> ··· 1468 1463 style="position: relative; width: 100%;" 1469 1464 > 1470 1465 <button 1471 - class="css-12ezcoy" 1466 + class="css-1a0m235" 1472 1467 > 1473 1468 <div 1474 - class="css-15yrfky" 1469 + class="css-1jrgpod" 1475 1470 > 1476 1471 <div 1477 1472 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1579 1574 /> 1580 1575 </span> 1581 1576 <div 1582 - class="css-e68bk5" 1577 + class="css-1e8jyh" 1583 1578 > 1584 1579 Ghetto Lenny's Love Songs 1585 1580 </div> 1586 1581 </a> 1587 1582 <a 1588 - class="css-9sbfuc" 1583 + class="css-aqpx5g" 1589 1584 href="/artists/8" 1590 1585 > 1591 1586 SAINt JHN 1592 1587 </a> 1593 1588 <div 1594 - class="css-1q570sn" 1589 + class="css-8zte4g" 1595 1590 > 1596 1591 2019 1597 1592 </div> ··· 1604 1599 style="position: relative; width: 100%;" 1605 1600 > 1606 1601 <button 1607 - class="css-12ezcoy" 1602 + class="css-1a0m235" 1608 1603 > 1609 1604 <div 1610 - class="css-15yrfky" 1605 + class="css-1jrgpod" 1611 1606 > 1612 1607 <div 1613 1608 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1715 1710 /> 1716 1711 </span> 1717 1712 <div 1718 - class="css-e68bk5" 1713 + class="css-1e8jyh" 1719 1714 > 1720 1715 Memphis Zoo 1721 1716 </div> 1722 1717 </a> 1723 1718 <a 1724 - class="css-9sbfuc" 1719 + class="css-aqpx5g" 1725 1720 href="/artists/9" 1726 1721 > 1727 1722 Juicy J, Xavier Wulf 1728 1723 </a> 1729 1724 <div 1730 - class="css-1q570sn" 1725 + class="css-8zte4g" 1731 1726 > 1732 1727 2024 1733 1728 </div> ··· 1740 1735 style="position: relative; width: 100%;" 1741 1736 > 1742 1737 <button 1743 - class="css-12ezcoy" 1738 + class="css-1a0m235" 1744 1739 > 1745 1740 <div 1746 - class="css-15yrfky" 1741 + class="css-1jrgpod" 1747 1742 > 1748 1743 <div 1749 1744 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1851 1846 /> 1852 1847 </span> 1853 1848 <div 1854 - class="css-e68bk5" 1849 + class="css-1e8jyh" 1855 1850 > 1856 1851 Mental Trillness 2 1857 1852 </div> 1858 1853 </a> 1859 1854 <a 1860 - class="css-9sbfuc" 1855 + class="css-aqpx5g" 1861 1856 href="/artists/10" 1862 1857 > 1863 1858 Juicy J 1864 1859 </a> 1865 1860 <div 1866 - class="css-1q570sn" 1861 + class="css-8zte4g" 1867 1862 > 1868 1863 2024 1869 1864 </div> ··· 1876 1871 style="position: relative; width: 100%;" 1877 1872 > 1878 1873 <button 1879 - class="css-12ezcoy" 1874 + class="css-1a0m235" 1880 1875 > 1881 1876 <div 1882 - class="css-15yrfky" 1877 + class="css-1jrgpod" 1883 1878 > 1884 1879 <div 1885 1880 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1987 1982 /> 1988 1983 </span> 1989 1984 <div 1990 - class="css-e68bk5" 1985 + class="css-1e8jyh" 1991 1986 > 1992 1987 Live From The Underground 1993 1988 </div> 1994 1989 </a> 1995 1990 <a 1996 - class="css-9sbfuc" 1991 + class="css-aqpx5g" 1997 1992 href="/artists/11" 1998 1993 > 1999 1994 Big K.R.I.T. 2000 1995 </a> 2001 1996 <div 2002 - class="css-1q570sn" 1997 + class="css-8zte4g" 2003 1998 > 2004 1999 2012 2005 2000 </div> ··· 2012 2007 style="position: relative; width: 100%;" 2013 2008 > 2014 2009 <button 2015 - class="css-12ezcoy" 2010 + class="css-1a0m235" 2016 2011 > 2017 2012 <div 2018 - class="css-15yrfky" 2013 + class="css-1jrgpod" 2019 2014 > 2020 2015 <div 2021 2016 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2123 2118 /> 2124 2119 </span> 2125 2120 <div 2126 - class="css-e68bk5" 2121 + class="css-1e8jyh" 2127 2122 > 2128 2123 One Foot Out The Door 2129 2124 </div> 2130 2125 </a> 2131 2126 <a 2132 - class="css-9sbfuc" 2127 + class="css-aqpx5g" 2133 2128 href="/artists/12" 2134 2129 > 2135 2130 Mike Posner 2136 2131 </a> 2137 2132 <div 2138 - class="css-1q570sn" 2133 + class="css-8zte4g" 2139 2134 > 2140 2135 2009 2141 2136 </div> ··· 2148 2143 style="position: relative; width: 100%;" 2149 2144 > 2150 2145 <button 2151 - class="css-12ezcoy" 2146 + class="css-1a0m235" 2152 2147 > 2153 2148 <div 2154 - class="css-15yrfky" 2149 + class="css-1jrgpod" 2155 2150 > 2156 2151 <div 2157 2152 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2259 2254 /> 2260 2255 </span> 2261 2256 <div 2262 - class="css-e68bk5" 2257 + class="css-1e8jyh" 2263 2258 > 2264 2259 Rockstar Mentality 2265 2260 </div> 2266 2261 </a> 2267 2262 <a 2268 - class="css-9sbfuc" 2263 + class="css-aqpx5g" 2269 2264 href="/artists/13" 2270 2265 > 2271 2266 Shop Boyz 2272 2267 </a> 2273 2268 <div 2274 - class="css-1q570sn" 2269 + class="css-8zte4g" 2275 2270 > 2276 2271 2007 2277 2272 </div> ··· 2284 2279 style="position: relative; width: 100%;" 2285 2280 > 2286 2281 <button 2287 - class="css-12ezcoy" 2282 + class="css-1a0m235" 2288 2283 > 2289 2284 <div 2290 - class="css-15yrfky" 2285 + class="css-1jrgpod" 2291 2286 > 2292 2287 <div 2293 2288 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2395 2390 /> 2396 2391 </span> 2397 2392 <div 2398 - class="css-e68bk5" 2393 + class="css-1e8jyh" 2399 2394 > 2400 2395 The L.I.B.R.A. 2401 2396 </div> 2402 2397 </a> 2403 2398 <a 2404 - class="css-9sbfuc" 2399 + class="css-aqpx5g" 2405 2400 href="/artists/14" 2406 2401 > 2407 2402 T.I. 2408 2403 </a> 2409 2404 <div 2410 - class="css-1q570sn" 2405 + class="css-8zte4g" 2411 2406 > 2412 2407 2020 2413 2408 </div> ··· 2420 2415 style="position: relative; width: 100%;" 2421 2416 > 2422 2417 <button 2423 - class="css-12ezcoy" 2418 + class="css-1a0m235" 2424 2419 > 2425 2420 <div 2426 - class="css-15yrfky" 2421 + class="css-1jrgpod" 2427 2422 > 2428 2423 <div 2429 2424 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2531 2526 /> 2532 2527 </span> 2533 2528 <div 2534 - class="css-e68bk5" 2529 + class="css-1e8jyh" 2535 2530 > 2536 2531 Young and Turnt 2537 2532 </div> 2538 2533 </a> 2539 2534 <a 2540 - class="css-9sbfuc" 2535 + class="css-aqpx5g" 2541 2536 href="/artists/15" 2542 2537 > 2543 2538 42 Dugg 2544 2539 </a> 2545 2540 <div 2546 - class="css-1q570sn" 2541 + class="css-8zte4g" 2547 2542 > 2548 2543 2019 2549 2544 </div> ··· 2556 2551 style="position: relative; width: 100%;" 2557 2552 > 2558 2553 <button 2559 - class="css-12ezcoy" 2554 + class="css-1a0m235" 2560 2555 > 2561 2556 <div 2562 - class="css-15yrfky" 2557 + class="css-1jrgpod" 2563 2558 > 2564 2559 <div 2565 2560 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2667 2662 /> 2668 2663 </span> 2669 2664 <div 2670 - class="css-e68bk5" 2665 + class="css-1e8jyh" 2671 2666 > 2672 2667 4eva Us Neva Them 2673 2668 </div> 2674 2669 </a> 2675 2670 <a 2676 - class="css-9sbfuc" 2671 + class="css-aqpx5g" 2677 2672 href="/artists/16" 2678 2673 > 2679 2674 42 Dugg 2680 2675 </a> 2681 2676 <div 2682 - class="css-1q570sn" 2677 + class="css-8zte4g" 2683 2678 > 2684 2679 2024 2685 2680 </div> ··· 2692 2687 style="position: relative; width: 100%;" 2693 2688 > 2694 2689 <button 2695 - class="css-12ezcoy" 2690 + class="css-1a0m235" 2696 2691 > 2697 2692 <div 2698 - class="css-15yrfky" 2693 + class="css-1jrgpod" 2699 2694 > 2700 2695 <div 2701 2696 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2803 2798 /> 2804 2799 </span> 2805 2800 <div 2806 - class="css-e68bk5" 2801 + class="css-1e8jyh" 2807 2802 > 2808 2803 Post Traumatic 2809 2804 </div> 2810 2805 </a> 2811 2806 <a 2812 - class="css-9sbfuc" 2807 + class="css-aqpx5g" 2813 2808 href="/artists/undefined" 2814 2809 > 2815 2810 Tee Grizzley 2816 2811 </a> 2817 2812 <div 2818 - class="css-1q570sn" 2813 + class="css-8zte4g" 2819 2814 > 2820 2815 2024 2821 2816 </div> ··· 2828 2823 style="position: relative; width: 100%;" 2829 2824 > 2830 2825 <button 2831 - class="css-12ezcoy" 2826 + class="css-1a0m235" 2832 2827 > 2833 2828 <div 2834 - class="css-15yrfky" 2829 + class="css-1jrgpod" 2835 2830 > 2836 2831 <div 2837 2832 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 2939 2934 /> 2940 2935 </span> 2941 2936 <div 2942 - class="css-e68bk5" 2937 + class="css-1e8jyh" 2943 2938 > 2944 2939 King 2945 2940 </div> 2946 2941 </a> 2947 2942 <a 2948 - class="css-9sbfuc" 2943 + class="css-aqpx5g" 2949 2944 href="/artists/17" 2950 2945 > 2951 2946 T.I. 2952 2947 </a> 2953 2948 <div 2954 - class="css-1q570sn" 2949 + class="css-8zte4g" 2955 2950 > 2956 2951 2006 2957 2952 </div> ··· 2964 2959 style="position: relative; width: 100%;" 2965 2960 > 2966 2961 <button 2967 - class="css-12ezcoy" 2962 + class="css-1a0m235" 2968 2963 > 2969 2964 <div 2970 - class="css-15yrfky" 2965 + class="css-1jrgpod" 2971 2966 > 2972 2967 <div 2973 2968 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3075 3070 /> 3076 3071 </span> 3077 3072 <div 3078 - class="css-e68bk5" 3073 + class="css-1e8jyh" 3079 3074 > 3080 3075 Meteora 20th Anniversary Edition 3081 3076 </div> 3082 3077 </a> 3083 3078 <a 3084 - class="css-9sbfuc" 3079 + class="css-aqpx5g" 3085 3080 href="/artists/18" 3086 3081 > 3087 3082 Linkin Park 3088 3083 </a> 3089 3084 <div 3090 - class="css-1q570sn" 3085 + class="css-8zte4g" 3091 3086 > 3092 3087 2023 3093 3088 </div> ··· 3100 3095 style="position: relative; width: 100%;" 3101 3096 > 3102 3097 <button 3103 - class="css-12ezcoy" 3098 + class="css-1a0m235" 3104 3099 > 3105 3100 <div 3106 - class="css-15yrfky" 3101 + class="css-1jrgpod" 3107 3102 > 3108 3103 <div 3109 3104 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3211 3206 /> 3212 3207 </span> 3213 3208 <div 3214 - class="css-e68bk5" 3209 + class="css-1e8jyh" 3215 3210 > 3216 3211 The Surface Seems So Far 3217 3212 </div> 3218 3213 </a> 3219 3214 <a 3220 - class="css-9sbfuc" 3215 + class="css-aqpx5g" 3221 3216 href="/artists/19" 3222 3217 > 3223 3218 Seether 3224 3219 </a> 3225 3220 <div 3226 - class="css-1q570sn" 3221 + class="css-8zte4g" 3227 3222 > 3228 3223 2024 3229 3224 </div> ··· 3236 3231 style="position: relative; width: 100%;" 3237 3232 > 3238 3233 <button 3239 - class="css-12ezcoy" 3234 + class="css-1a0m235" 3240 3235 > 3241 3236 <div 3242 - class="css-15yrfky" 3237 + class="css-1jrgpod" 3243 3238 > 3244 3239 <div 3245 3240 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3347 3342 /> 3348 3343 </span> 3349 3344 <div 3350 - class="css-e68bk5" 3345 + class="css-1e8jyh" 3351 3346 > 3352 3347 Karma and Effect 3353 3348 </div> 3354 3349 </a> 3355 3350 <a 3356 - class="css-9sbfuc" 3351 + class="css-aqpx5g" 3357 3352 href="/artists/20" 3358 3353 > 3359 3354 Seether 3360 3355 </a> 3361 3356 <div 3362 - class="css-1q570sn" 3357 + class="css-8zte4g" 3363 3358 > 3364 3359 2005 3365 3360 </div> ··· 3372 3367 style="position: relative; width: 100%;" 3373 3368 > 3374 3369 <button 3375 - class="css-12ezcoy" 3370 + class="css-1a0m235" 3376 3371 > 3377 3372 <div 3378 - class="css-15yrfky" 3373 + class="css-1jrgpod" 3379 3374 > 3380 3375 <div 3381 3376 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3483 3478 /> 3484 3479 </span> 3485 3480 <div 3486 - class="css-e68bk5" 3481 + class="css-1e8jyh" 3487 3482 > 3488 3483 Disclaimer 3489 3484 </div> 3490 3485 </a> 3491 3486 <a 3492 - class="css-9sbfuc" 3487 + class="css-aqpx5g" 3493 3488 href="/artists/21" 3494 3489 > 3495 3490 Seether 3496 3491 </a> 3497 3492 <div 3498 - class="css-1q570sn" 3493 + class="css-8zte4g" 3499 3494 > 3500 3495 2002 3501 3496 </div> ··· 3508 3503 style="position: relative; width: 100%;" 3509 3504 > 3510 3505 <button 3511 - class="css-12ezcoy" 3506 + class="css-1a0m235" 3512 3507 > 3513 3508 <div 3514 - class="css-15yrfky" 3509 + class="css-1jrgpod" 3515 3510 > 3516 3511 <div 3517 3512 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3619 3614 /> 3620 3615 </span> 3621 3616 <div 3622 - class="css-e68bk5" 3617 + class="css-1e8jyh" 3623 3618 > 3624 3619 Disclaimer II 3625 3620 </div> 3626 3621 </a> 3627 3622 <a 3628 - class="css-9sbfuc" 3623 + class="css-aqpx5g" 3629 3624 href="/artists/22" 3630 3625 > 3631 3626 Seether 3632 3627 </a> 3633 3628 <div 3634 - class="css-1q570sn" 3629 + class="css-8zte4g" 3635 3630 > 3636 3631 2002 3637 3632 </div> ··· 3644 3639 style="position: relative; width: 100%;" 3645 3640 > 3646 3641 <button 3647 - class="css-12ezcoy" 3642 + class="css-1a0m235" 3648 3643 > 3649 3644 <div 3650 - class="css-15yrfky" 3645 + class="css-1jrgpod" 3651 3646 > 3652 3647 <div 3653 3648 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3755 3750 /> 3756 3751 </span> 3757 3752 <div 3758 - class="css-e68bk5" 3753 + class="css-1e8jyh" 3759 3754 > 3760 3755 Fallen (Deluxe Edition / Remastered 2023) 3761 3756 </div> 3762 3757 </a> 3763 3758 <a 3764 - class="css-9sbfuc" 3759 + class="css-aqpx5g" 3765 3760 href="/artists/23" 3766 3761 > 3767 3762 Evanesence 3768 3763 </a> 3769 3764 <div 3770 - class="css-1q570sn" 3765 + class="css-8zte4g" 3771 3766 > 3772 3767 2003 3773 3768 </div> ··· 3780 3775 style="position: relative; width: 100%;" 3781 3776 > 3782 3777 <button 3783 - class="css-12ezcoy" 3778 + class="css-1a0m235" 3784 3779 > 3785 3780 <div 3786 - class="css-15yrfky" 3781 + class="css-1jrgpod" 3787 3782 > 3788 3783 <div 3789 3784 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 3891 3886 /> 3892 3887 </span> 3893 3888 <div 3894 - class="css-e68bk5" 3889 + class="css-1e8jyh" 3895 3890 > 3896 3891 Finding Beauty In Negative Spaces (Bonus Track Version) 3897 3892 </div> 3898 3893 </a> 3899 3894 <a 3900 - class="css-9sbfuc" 3895 + class="css-aqpx5g" 3901 3896 href="/artists/24" 3902 3897 > 3903 3898 Seether 3904 3899 </a> 3905 3900 <div 3906 - class="css-1q570sn" 3901 + class="css-8zte4g" 3907 3902 > 3908 3903 2007 3909 3904 </div> ··· 3916 3911 style="position: relative; width: 100%;" 3917 3912 > 3918 3913 <button 3919 - class="css-12ezcoy" 3914 + class="css-1a0m235" 3920 3915 > 3921 3916 <div 3922 - class="css-15yrfky" 3917 + class="css-1jrgpod" 3923 3918 > 3924 3919 <div 3925 3920 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4027 4022 /> 4028 4023 </span> 4029 4024 <div 4030 - class="css-e68bk5" 4025 + class="css-1e8jyh" 4031 4026 > 4032 4027 Meteora (Bonus Edition) 4033 4028 </div> 4034 4029 </a> 4035 4030 <a 4036 - class="css-9sbfuc" 4031 + class="css-aqpx5g" 4037 4032 href="/artists/25" 4038 4033 > 4039 4034 Linkin Park 4040 4035 </a> 4041 4036 <div 4042 - class="css-1q570sn" 4037 + class="css-8zte4g" 4043 4038 > 4044 4039 2003 4045 4040 </div> ··· 4052 4047 style="position: relative; width: 100%;" 4053 4048 > 4054 4049 <button 4055 - class="css-12ezcoy" 4050 + class="css-1a0m235" 4056 4051 > 4057 4052 <div 4058 - class="css-15yrfky" 4053 + class="css-1jrgpod" 4059 4054 > 4060 4055 <div 4061 4056 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4163 4158 /> 4164 4159 </span> 4165 4160 <div 4166 - class="css-e68bk5" 4161 + class="css-1e8jyh" 4167 4162 > 4168 4163 Hybrid Theory (Deluxe Edition) 4169 4164 </div> 4170 4165 </a> 4171 4166 <a 4172 - class="css-9sbfuc" 4167 + class="css-aqpx5g" 4173 4168 href="/artists/26" 4174 4169 > 4175 4170 Linkin Park 4176 4171 </a> 4177 4172 <div 4178 - class="css-1q570sn" 4173 + class="css-8zte4g" 4179 4174 > 4180 4175 2003 4181 4176 </div> ··· 4188 4183 style="position: relative; width: 100%;" 4189 4184 > 4190 4185 <button 4191 - class="css-12ezcoy" 4186 + class="css-1a0m235" 4192 4187 > 4193 4188 <div 4194 - class="css-15yrfky" 4189 + class="css-1jrgpod" 4195 4190 > 4196 4191 <div 4197 4192 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4299 4294 /> 4300 4295 </span> 4301 4296 <div 4302 - class="css-e68bk5" 4297 + class="css-1e8jyh" 4303 4298 > 4304 4299 T.I. vs T.I.P. 4305 4300 </div> 4306 4301 </a> 4307 4302 <a 4308 - class="css-9sbfuc" 4303 + class="css-aqpx5g" 4309 4304 href="/artists/26" 4310 4305 > 4311 4306 T.I. 4312 4307 </a> 4313 4308 <div 4314 - class="css-1q570sn" 4309 + class="css-8zte4g" 4315 4310 > 4316 4311 2007 4317 4312 </div> ··· 4324 4319 style="position: relative; width: 100%;" 4325 4320 > 4326 4321 <button 4327 - class="css-12ezcoy" 4322 + class="css-1a0m235" 4328 4323 > 4329 4324 <div 4330 - class="css-15yrfky" 4325 + class="css-1jrgpod" 4331 4326 > 4332 4327 <div 4333 4328 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4435 4430 /> 4436 4431 </span> 4437 4432 <div 4438 - class="css-e68bk5" 4433 + class="css-1e8jyh" 4439 4434 > 4440 4435 Paper Trail 4441 4436 </div> 4442 4437 </a> 4443 4438 <a 4444 - class="css-9sbfuc" 4439 + class="css-aqpx5g" 4445 4440 href="/artists/27" 4446 4441 > 4447 4442 T.I. 4448 4443 </a> 4449 4444 <div 4450 - class="css-1q570sn" 4445 + class="css-8zte4g" 4451 4446 > 4452 4447 2008 4453 4448 </div> ··· 4460 4455 style="position: relative; width: 100%;" 4461 4456 > 4462 4457 <button 4463 - class="css-12ezcoy" 4458 + class="css-1a0m235" 4464 4459 > 4465 4460 <div 4466 - class="css-15yrfky" 4461 + class="css-1jrgpod" 4467 4462 > 4468 4463 <div 4469 4464 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4571 4566 /> 4572 4567 </span> 4573 4568 <div 4574 - class="css-e68bk5" 4569 + class="css-1e8jyh" 4575 4570 > 4576 4571 No Mercy 4577 4572 </div> 4578 4573 </a> 4579 4574 <a 4580 - class="css-9sbfuc" 4575 + class="css-aqpx5g" 4581 4576 href="/artists/28" 4582 4577 > 4583 4578 T.I. 4584 4579 </a> 4585 4580 <div 4586 - class="css-1q570sn" 4581 + class="css-8zte4g" 4587 4582 > 4588 4583 2010 4589 4584 </div> ··· 4596 4591 style="position: relative; width: 100%;" 4597 4592 > 4598 4593 <button 4599 - class="css-12ezcoy" 4594 + class="css-1a0m235" 4600 4595 > 4601 4596 <div 4602 - class="css-15yrfky" 4597 + class="css-1jrgpod" 4603 4598 > 4604 4599 <div 4605 4600 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4707 4702 /> 4708 4703 </span> 4709 4704 <div 4710 - class="css-e68bk5" 4705 + class="css-1e8jyh" 4711 4706 > 4712 4707 Paperwork (Explicit) 4713 4708 </div> 4714 4709 </a> 4715 4710 <a 4716 - class="css-9sbfuc" 4711 + class="css-aqpx5g" 4717 4712 href="/artists/29" 4718 4713 > 4719 4714 T.I. 4720 4715 </a> 4721 4716 <div 4722 - class="css-1q570sn" 4717 + class="css-8zte4g" 4723 4718 > 4724 4719 2014 4725 4720 </div> ··· 4732 4727 style="position: relative; width: 100%;" 4733 4728 > 4734 4729 <button 4735 - class="css-12ezcoy" 4730 + class="css-1a0m235" 4736 4731 > 4737 4732 <div 4738 - class="css-15yrfky" 4733 + class="css-1jrgpod" 4739 4734 > 4740 4735 <div 4741 4736 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4843 4838 /> 4844 4839 </span> 4845 4840 <div 4846 - class="css-e68bk5" 4841 + class="css-1e8jyh" 4847 4842 > 4848 4843 Paperwork (Deluxe Explicit) 4849 4844 </div> 4850 4845 </a> 4851 4846 <a 4852 - class="css-9sbfuc" 4847 + class="css-aqpx5g" 4853 4848 href="/artists/30" 4854 4849 > 4855 4850 T.I. 4856 4851 </a> 4857 4852 <div 4858 - class="css-1q570sn" 4853 + class="css-8zte4g" 4859 4854 > 4860 4855 2014 4861 4856 </div> ··· 4868 4863 style="position: relative; width: 100%;" 4869 4864 > 4870 4865 <button 4871 - class="css-12ezcoy" 4866 + class="css-1a0m235" 4872 4867 > 4873 4868 <div 4874 - class="css-15yrfky" 4869 + class="css-1jrgpod" 4875 4870 > 4876 4871 <div 4877 4872 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 4979 4974 /> 4980 4975 </span> 4981 4976 <div 4982 - class="css-e68bk5" 4977 + class="css-1e8jyh" 4983 4978 > 4984 4979 The Bluez Brothaz 4985 4980 </div> 4986 4981 </a> 4987 4982 <a 4988 - class="css-9sbfuc" 4983 + class="css-aqpx5g" 4989 4984 href="/artists/31" 4990 4985 > 4991 4986 Bluez Brothaz, T-Pain, Young Cash 4992 4987 </a> 4993 4988 <div 4994 - class="css-1q570sn" 4989 + class="css-8zte4g" 4995 4990 > 4996 4991 2024 4997 4992 </div> ··· 5004 4999 style="position: relative; width: 100%;" 5005 5000 > 5006 5001 <button 5007 - class="css-12ezcoy" 5002 + class="css-1a0m235" 5008 5003 > 5009 5004 <div 5010 - class="css-15yrfky" 5005 + class="css-1jrgpod" 5011 5006 > 5012 5007 <div 5013 5008 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5115 5110 /> 5116 5111 </span> 5117 5112 <div 5118 - class="css-e68bk5" 5113 + class="css-1e8jyh" 5119 5114 > 5120 5115 Pimpalation (Limited Edition) 5121 5116 </div> 5122 5117 </a> 5123 5118 <a 5124 - class="css-9sbfuc" 5119 + class="css-aqpx5g" 5125 5120 href="/artists/32" 5126 5121 > 5127 5122 Pimp C 5128 5123 </a> 5129 5124 <div 5130 - class="css-1q570sn" 5125 + class="css-8zte4g" 5131 5126 > 5132 5127 2006 5133 5128 </div> ··· 5140 5135 style="position: relative; width: 100%;" 5141 5136 > 5142 5137 <button 5143 - class="css-12ezcoy" 5138 + class="css-1a0m235" 5144 5139 > 5145 5140 <div 5146 - class="css-15yrfky" 5141 + class="css-1jrgpod" 5147 5142 > 5148 5143 <div 5149 5144 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5251 5246 /> 5252 5247 </span> 5253 5248 <div 5254 - class="css-e68bk5" 5249 + class="css-1e8jyh" 5255 5250 > 5256 5251 Long Live The Pimp 5257 5252 </div> 5258 5253 </a> 5259 5254 <a 5260 - class="css-9sbfuc" 5255 + class="css-aqpx5g" 5261 5256 href="/artists/33" 5262 5257 > 5263 5258 Pimp C 5264 5259 </a> 5265 5260 <div 5266 - class="css-1q570sn" 5261 + class="css-8zte4g" 5267 5262 > 5268 5263 2015 5269 5264 </div> ··· 5276 5271 style="position: relative; width: 100%;" 5277 5272 > 5278 5273 <button 5279 - class="css-12ezcoy" 5274 + class="css-1a0m235" 5280 5275 > 5281 5276 <div 5282 - class="css-15yrfky" 5277 + class="css-1jrgpod" 5283 5278 > 5284 5279 <div 5285 5280 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5387 5382 /> 5388 5383 </span> 5389 5384 <div 5390 - class="css-e68bk5" 5385 + class="css-1e8jyh" 5391 5386 > 5392 5387 The Naked Soul of Sweet Jones 5393 5388 </div> 5394 5389 </a> 5395 5390 <a 5396 - class="css-9sbfuc" 5391 + class="css-aqpx5g" 5397 5392 href="/artists/34" 5398 5393 > 5399 5394 Pimp C 5400 5395 </a> 5401 5396 <div 5402 - class="css-1q570sn" 5397 + class="css-8zte4g" 5403 5398 > 5404 5399 2010 5405 5400 </div> ··· 5412 5407 style="position: relative; width: 100%;" 5413 5408 > 5414 5409 <button 5415 - class="css-12ezcoy" 5410 + class="css-1a0m235" 5416 5411 > 5417 5412 <div 5418 - class="css-15yrfky" 5413 + class="css-1jrgpod" 5419 5414 > 5420 5415 <div 5421 5416 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5523 5518 /> 5524 5519 </span> 5525 5520 <div 5526 - class="css-e68bk5" 5521 + class="css-1e8jyh" 5527 5522 > 5528 5523 Epiphany (Expanded Edition) 5529 5524 </div> 5530 5525 </a> 5531 5526 <a 5532 - class="css-9sbfuc" 5527 + class="css-aqpx5g" 5533 5528 href="/artists/35" 5534 5529 > 5535 5530 T-Pain 5536 5531 </a> 5537 5532 <div 5538 - class="css-1q570sn" 5533 + class="css-8zte4g" 5539 5534 > 5540 5535 2007 5541 5536 </div> ··· 5548 5543 style="position: relative; width: 100%;" 5549 5544 > 5550 5545 <button 5551 - class="css-12ezcoy" 5546 + class="css-1a0m235" 5552 5547 > 5553 5548 <div 5554 - class="css-15yrfky" 5549 + class="css-1jrgpod" 5555 5550 > 5556 5551 <div 5557 5552 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5659 5654 /> 5660 5655 </span> 5661 5656 <div 5662 - class="css-e68bk5" 5657 + class="css-1e8jyh" 5663 5658 > 5664 5659 Mental Trillness 5665 5660 </div> 5666 5661 </a> 5667 5662 <a 5668 - class="css-9sbfuc" 5663 + class="css-aqpx5g" 5669 5664 href="/artists/36" 5670 5665 > 5671 5666 Juicy J 5672 5667 </a> 5673 5668 <div 5674 - class="css-1q570sn" 5669 + class="css-8zte4g" 5675 5670 > 5676 5671 2023 5677 5672 </div> ··· 5684 5679 style="position: relative; width: 100%;" 5685 5680 > 5686 5681 <button 5687 - class="css-12ezcoy" 5682 + class="css-1a0m235" 5688 5683 > 5689 5684 <div 5690 - class="css-15yrfky" 5685 + class="css-1jrgpod" 5691 5686 > 5692 5687 <div 5693 5688 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5795 5790 /> 5796 5791 </span> 5797 5792 <div 5798 - class="css-e68bk5" 5793 + class="css-1e8jyh" 5799 5794 > 5800 5795 Class In Session: The Boyfriend/Girlfriend EP 5801 5796 </div> 5802 5797 </a> 5803 5798 <a 5804 - class="css-9sbfuc" 5799 + class="css-aqpx5g" 5805 5800 href="/artists/37" 5806 5801 > 5807 5802 C-Side 5808 5803 </a> 5809 5804 <div 5810 - class="css-1q570sn" 5805 + class="css-8zte4g" 5811 5806 > 5812 5807 2008 5813 5808 </div> ··· 5820 5815 style="position: relative; width: 100%;" 5821 5816 > 5822 5817 <button 5823 - class="css-12ezcoy" 5818 + class="css-1a0m235" 5824 5819 > 5825 5820 <div 5826 - class="css-15yrfky" 5821 + class="css-1jrgpod" 5827 5822 > 5828 5823 <div 5829 5824 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 5931 5926 /> 5932 5927 </span> 5933 5928 <div 5934 - class="css-e68bk5" 5929 + class="css-1e8jyh" 5935 5930 > 5936 5931 TURQUOiSE TORNADO 5937 5932 </div> 5938 5933 </a> 5939 5934 <a 5940 - class="css-9sbfuc" 5935 + class="css-aqpx5g" 5941 5936 href="/artists/38" 5942 5937 > 5943 5938 Riff Raff, Yelawolf 5944 5939 </a> 5945 5940 <div 5946 - class="css-1q570sn" 5941 + class="css-8zte4g" 5947 5942 > 5948 5943 2021 5949 5944 </div> ··· 5956 5951 style="position: relative; width: 100%;" 5957 5952 > 5958 5953 <button 5959 - class="css-12ezcoy" 5954 + class="css-1a0m235" 5960 5955 > 5961 5956 <div 5962 - class="css-15yrfky" 5957 + class="css-1jrgpod" 5963 5958 > 5964 5959 <div 5965 5960 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 6067 6062 /> 6068 6063 </span> 6069 6064 <div 6070 - class="css-e68bk5" 6065 + class="css-1e8jyh" 6071 6066 > 6072 6067 Stay Trippy (Deluxe) 6073 6068 </div> 6074 6069 </a> 6075 6070 <a 6076 - class="css-9sbfuc" 6071 + class="css-aqpx5g" 6077 6072 href="/artists/39" 6078 6073 > 6079 6074 Juicy J 6080 6075 </a> 6081 6076 <div 6082 - class="css-1q570sn" 6077 + class="css-8zte4g" 6083 6078 > 6084 6079 2013 6085 6080 </div> ··· 6092 6087 style="position: relative; width: 100%;" 6093 6088 > 6094 6089 <button 6095 - class="css-12ezcoy" 6090 + class="css-1a0m235" 6096 6091 > 6097 6092 <div 6098 - class="css-15yrfky" 6093 + class="css-1jrgpod" 6099 6094 > 6100 6095 <div 6101 6096 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 6203 6198 /> 6204 6199 </span> 6205 6200 <div 6206 - class="css-e68bk5" 6201 + class="css-1e8jyh" 6207 6202 > 6208 6203 Rich Slave 6209 6204 </div> 6210 6205 </a> 6211 6206 <a 6212 - class="css-9sbfuc" 6207 + class="css-aqpx5g" 6213 6208 href="/artists/39" 6214 6209 > 6215 6210 Young Dolph 6216 6211 </a> 6217 6212 <div 6218 - class="css-1q570sn" 6213 + class="css-8zte4g" 6219 6214 > 6220 6215 2020 6221 6216 </div> ··· 6228 6223 style="position: relative; width: 100%;" 6229 6224 > 6230 6225 <button 6231 - class="css-12ezcoy" 6226 + class="css-1a0m235" 6232 6227 > 6233 6228 <div 6234 - class="css-15yrfky" 6229 + class="css-1jrgpod" 6235 6230 > 6236 6231 <div 6237 6232 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 6339 6334 /> 6340 6335 </span> 6341 6336 <div 6342 - class="css-e68bk5" 6337 + class="css-1e8jyh" 6343 6338 > 6344 6339 THE HUSTLE CONTINUES 6345 6340 </div> 6346 6341 </a> 6347 6342 <a 6348 - class="css-9sbfuc" 6343 + class="css-aqpx5g" 6349 6344 href="/artists/40" 6350 6345 > 6351 6346 Juicy J 6352 6347 </a> 6353 6348 <div 6354 - class="css-1q570sn" 6349 + class="css-8zte4g" 6355 6350 > 6356 6351 2020 6357 6352 </div> ··· 6364 6359 style="position: relative; width: 100%;" 6365 6360 > 6366 6361 <button 6367 - class="css-12ezcoy" 6362 + class="css-1a0m235" 6368 6363 > 6369 6364 <div 6370 - class="css-15yrfky" 6365 + class="css-1jrgpod" 6371 6366 > 6372 6367 <div 6373 6368 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 6475 6470 /> 6476 6471 </span> 6477 6472 <div 6478 - class="css-e68bk5" 6473 + class="css-1e8jyh" 6479 6474 > 6480 6475 Three Ringz (Thr33 Ringz) (Expanded Edition) 6481 6476 </div> 6482 6477 </a> 6483 6478 <a 6484 - class="css-9sbfuc" 6479 + class="css-aqpx5g" 6485 6480 href="/artists/41" 6486 6481 > 6487 6482 T-Pain 6488 6483 </a> 6489 6484 <div 6490 - class="css-1q570sn" 6485 + class="css-8zte4g" 6491 6486 > 6492 6487 2008 6493 6488 </div> ··· 6500 6495 style="position: relative; width: 100%;" 6501 6496 > 6502 6497 <button 6503 - class="css-12ezcoy" 6498 + class="css-1a0m235" 6504 6499 > 6505 6500 <div 6506 - class="css-15yrfky" 6501 + class="css-1jrgpod" 6507 6502 > 6508 6503 <div 6509 6504 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 6611 6606 /> 6612 6607 </span> 6613 6608 <div 6614 - class="css-e68bk5" 6609 + class="css-1e8jyh" 6615 6610 > 6616 6611 Slumafia 6617 6612 </div> 6618 6613 </a> 6619 6614 <a 6620 - class="css-9sbfuc" 6615 + class="css-aqpx5g" 6621 6616 href="/artists/42" 6622 6617 > 6623 6618 Yelawolf, DJ Paul 6624 6619 </a> 6625 6620 <div 6626 - class="css-1q570sn" 6621 + class="css-8zte4g" 6627 6622 > 6628 6623 2021 6629 6624 </div>
+4 -4
webui/rockbox/src/Components/Albums/styles.tsx
··· 32 32 `; 33 33 34 34 export const Artist = styled(RouterLink)` 35 - color: #828282; 35 + color: ${(props) => props.theme.colors.secondaryText}; 36 36 font-size: 14px; 37 37 text-overflow: ellipsis; 38 38 overflow: hidden; ··· 42 42 `; 43 43 44 44 export const Year = styled.div` 45 - color: #828282; 45 + color: ${(props) => props.theme.colors.secondaryText}; 46 46 font-size: 12px; 47 47 font-weight: 400; 48 48 margin-bottom: 56px; ··· 54 54 overflow: hidden; 55 55 white-space: nowrap; 56 56 cursor: pointer; 57 - color: #000; 57 + color: ${(props) => props.theme.colors.text}; 58 58 `; 59 59 60 60 export const Scrollable = styled.div` ··· 90 90 cursor: pointer; 91 91 &:hover, 92 92 &:focus { 93 - color: #000; 93 + color: ${(props) => props.theme.colors.text}; 94 94 opacity: 1 !important; 95 95 } 96 96 `;
+27 -8
webui/rockbox/src/Components/ArtistDetails/ArtistDetails.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import Sidebar from "../Sidebar/Sidebar"; 4 5 import ControlBar from "../ControlBar"; 5 6 import { 7 + ArtistHeader, 8 + ArtistPicture, 9 + ArtistPicturePlaceholder, 6 10 BackButton, 7 11 ButtonGroup, 8 12 Container, ··· 28 32 import ContextMenu from "../ContextMenu"; 29 33 import Album from "../Album"; 30 34 import TrackIcon from "../Icons/Track"; 35 + import ArtistIcon from "../Icons/Artist"; 31 36 32 37 const columnHelper = createColumnHelper<Track>(); 33 38 34 39 export type ArtistDetailsProps = { 35 40 name: string; 41 + image?: string; 36 42 tracks: Track[]; 37 43 albums: any[]; 38 44 onPlayAll: () => void; ··· 47 53 }; 48 54 49 55 const ArtistDetails: FC<ArtistDetailsProps> = (props) => { 56 + const { image } = props; 57 + const theme = useTheme(); 50 58 const columns = [ 51 59 columnHelper.accessor("albumArt", { 52 60 header: "Title", ··· 64 72 onClick={() => props.onPlayTrack(info.row.index)} 65 73 className="floating-play" 66 74 > 67 - <Play small color={info.getValue() ? "#fff" : "#000"} /> 75 + <Play small color={info.getValue() ? "#fff" : theme.colors.text} /> 68 76 </div> 69 77 </div> 70 78 )} ··· 77 85 onClick={() => props.onPlayTrack(info.row.index)} 78 86 className="floating-play" 79 87 > 80 - <Play small color={info.getValue() ? "#fff" : "#000"} /> 88 + <Play small color={info.getValue() ? "#fff" : theme.colors.text} /> 81 89 </div> 82 90 </div> 83 91 )} ··· 97 105 overflow: "hidden", 98 106 whiteSpace: "nowrap", 99 107 cursor: "pointer", 100 - color: "#000", 108 + color: theme.colors.text, 101 109 }} 102 110 > 103 111 {info.getValue()} ··· 117 125 overflow: "hidden", 118 126 whiteSpace: "nowrap", 119 127 cursor: "pointer", 120 - color: "#000", 128 + color: theme.colors.text, 121 129 }} 122 130 > 123 131 <Link to={`/artists/${info.row.original.artistId}`}> ··· 138 146 textOverflow: "ellipsis", 139 147 whiteSpace: "nowrap", 140 148 cursor: "pointer", 141 - color: "#000", 149 + color: theme.colors.text, 142 150 }} 143 151 > 144 152 <Link to={`/albums/${info.row.original.albumId}`}> ··· 182 190 <ContentWrapper> 183 191 <BackButton onClick={() => props.onGoBack()}> 184 192 <div style={{ marginTop: 2 }}> 185 - <ArrowBack color={"#000"} /> 193 + <ArrowBack color={theme.colors.icon} /> 186 194 </div> 187 195 </BackButton> 188 - <Name>{props.name}</Name> 196 + <ArtistHeader> 197 + {image ? ( 198 + <ArtistPicture src={image} alt={props.name} /> 199 + ) : ( 200 + <ArtistPicturePlaceholder> 201 + <ArtistIcon width={64} height={64} color="#bbb" /> 202 + </ArtistPicturePlaceholder> 203 + )} 204 + <div> 205 + <Name>{props.name}</Name> 206 + </div> 207 + </ArtistHeader> 189 208 <ButtonGroup> 190 209 <Button onClick={props.onPlayAll} kind="primary"> 191 210 <Label> ··· 196 215 <Separator /> 197 216 <Button onClick={props.onShuffleAll} kind="secondary"> 198 217 <Label> 199 - <Shuffle color="#fe099c" /> 218 + <Shuffle color="#6F00FF" /> 200 219 <div style={{ marginLeft: 7 }}>Shuffle</div> 201 220 </Label> 202 221 </Button>
+1
webui/rockbox/src/Components/ArtistDetails/ArtistDetailsWithData.tsx
··· 54 54 return ( 55 55 <ArtistDetails 56 56 name={data?.artist?.name || ""} 57 + image={data?.artist?.image ?? undefined} 57 58 // eslint-disable-next-line @typescript-eslint/no-explicit-any 58 59 tracks={(tracks as any) || []} 59 60 albums={albums || []}
+96 -80
webui/rockbox/src/Components/ArtistDetails/__snapshots__/ArtistDetails.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-tujm8o" 53 - color="initial" 52 + class="css-j9huyi" 54 53 href="/albums" 55 54 > 56 55 <svg 57 56 aria-hidden="true" 58 57 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="initial" 58 + color="#9090a0" 60 59 fill="currentColor" 61 60 focusable="false" 62 61 height="20" ··· 77 76 </div> 78 77 </a> 79 78 <a 80 - class="css-8v05qj" 81 - color="#fe099c" 79 + class="css-1hl5flw" 80 + color="#6F00FF" 82 81 href="/artists" 83 82 > 84 83 <svg ··· 89 88 > 90 89 <path 91 90 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="#fe099c" 91 + fill="#6F00FF" 93 92 /> 94 93 </svg> 95 94 <div ··· 99 98 </div> 100 99 </a> 101 100 <a 102 - class="css-tujm8o" 103 - color="initial" 101 + class="css-j9huyi" 104 102 href="/tracks" 105 103 > 106 104 <svg ··· 110 108 > 111 109 <path 112 110 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="initial" 111 + fill="#9090a0" 114 112 /> 115 113 </svg> 116 114 <div ··· 120 118 </div> 121 119 </a> 122 120 <a 123 - class="css-tujm8o" 124 - color="initial" 121 + class="css-j9huyi" 125 122 href="/likes" 126 123 > 127 124 <svg ··· 133 130 > 134 131 <g 135 132 class="ionicon" 136 - style="fill: initial;" 133 + style="fill: #9090a0;" 137 134 > 138 135 <path 139 136 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 146 stroke="currentColor" 150 147 stroke-linecap="round" 151 148 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 149 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 150 /> 154 151 </g> 155 152 </svg> ··· 160 157 </div> 161 158 </a> 162 159 <a 163 - class="css-tujm8o" 164 - color="initial" 160 + class="css-j9huyi" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="initial" 166 + color="#9090a0" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 257 252 <path 258 253 clip-rule="evenodd" 259 254 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 260 - fill="#000" 255 + fill="#9090a0" 261 256 fill-rule="evenodd" 262 257 /> 263 258 </svg> ··· 274 269 <path 275 270 class="ionicon" 276 271 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 277 - style="fill: #000;" 272 + style="fill: #9090a0;" 278 273 /> 279 274 </svg> 280 275 </button> ··· 289 284 > 290 285 <path 291 286 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 292 - style="fill: #000;" 287 + style="fill: #9090a0;" 293 288 /> 294 289 </svg> 295 290 </button> ··· 305 300 <path 306 301 class="ionicon" 307 302 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 308 - style="fill: #000;" 303 + style="fill: #9090a0;" 309 304 /> 310 305 </svg> 311 306 </button> ··· 323 318 <path 324 319 clip-rule="evenodd" 325 320 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 326 - fill="#000" 321 + fill="#9090a0" 327 322 fill-rule="evenodd" 328 323 /> 329 324 </svg> ··· 331 326 </div> 332 327 </div> 333 328 <div 334 - class="css-frud38" 329 + class="css-1qa5636" 335 330 > 336 331 <div 337 - class="css-4ijxew" 332 + class="css-19t4u9x" 338 333 > 339 334 <svg 340 335 height="28" ··· 368 363 style="width: 100px; margin-top: 5px;" 369 364 > 370 365 <span 371 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 366 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 372 367 > 373 368 <span 374 369 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 408 403 <svg 409 404 aria-hidden="true" 410 405 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 411 - color="#000" 406 + color="#9090a0" 412 407 fill="currentColor" 413 408 focusable="false" 414 409 height="18" ··· 450 445 class="css-1w99uby" 451 446 > 452 447 <button 453 - class="css-12583pf" 448 + class="css-1049mou" 454 449 > 455 450 <div 456 451 style="margin-top: 2px;" ··· 462 457 xmlns="http://www.w3.org/2000/svg" 463 458 > 464 459 <g 465 - style="fill: #000;" 460 + style="fill: #9090a0;" 466 461 > 467 462 <path 468 463 d="M0 0h20v20H0Z" ··· 471 466 /> 472 467 <path 473 468 d="M16 9.25H6.873l4.192-4.193L10 4l-6 6 6 6 1.058-1.058-4.185-4.192H16v-1.5Z" 474 - style="fill: #000;" 469 + style="fill: #9090a0;" 475 470 /> 476 471 </g> 477 472 </svg> 478 473 </div> 479 474 </button> 480 475 <div 481 - class="css-tdwo6g" 476 + class="css-1u1z284" 482 477 > 483 - Daft Punk 478 + <div 479 + class="css-1gbkfc0" 480 + > 481 + <svg 482 + height="64" 483 + viewBox="0 0 24 24" 484 + width="64" 485 + xmlns="http://www.w3.org/2000/svg" 486 + > 487 + <path 488 + d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 489 + fill="#bbb" 490 + /> 491 + </svg> 492 + </div> 493 + <div> 494 + <div 495 + class="css-6fx1ex" 496 + > 497 + Daft Punk 498 + </div> 499 + </div> 484 500 </div> 485 501 <div 486 502 class="css-14zx4vh" ··· 532 548 <path 533 549 clip-rule="evenodd" 534 550 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 535 - fill="#fe099c" 551 + fill="#6F00FF" 536 552 fill-rule="evenodd" 537 553 /> 538 554 </svg> ··· 554 570 > 555 571 <thead> 556 572 <tr 557 - style="height: 36px; color: rgba(0, 0, 0, 0.54);" 573 + style="height: 36px; color: rgb(120, 120, 160);" 558 574 > 559 575 <th 560 576 style="text-align: left; width: 48px;" ··· 626 642 style="width: 150px; overflow: hidden;" 627 643 > 628 644 <div 629 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 645 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 630 646 > 631 647 Get Lucky 632 648 </div> ··· 635 651 style="width: 150px; overflow: hidden;" 636 652 > 637 653 <div 638 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 654 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 639 655 > 640 656 <a 641 - class="css-i74fgx" 657 + class="css-1ohnlkn" 642 658 href="/artists/1" 643 659 > 644 660 Daft Punk ··· 649 665 style="width: 150px; overflow: hidden;" 650 666 > 651 667 <div 652 - style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 668 + style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 653 669 > 654 670 <a 655 - class="css-i74fgx" 671 + class="css-1ohnlkn" 656 672 href="/albums/1" 657 673 > 658 674 Random Access Memories ··· 724 740 > 725 741 <g 726 742 class="ionicon" 727 - style="fill: #000;" 743 + style="fill: #9090a0;" 728 744 > 729 745 <path 730 746 d="M11 5v12m6-6H5" ··· 740 756 stroke="currentColor" 741 757 stroke-linecap="round" 742 758 stroke-linejoin="round" 743 - style="fill: none; stroke-width: 2; stroke: #000;" 759 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 744 760 /> 745 761 </g> 746 762 </svg> ··· 760 776 > 761 777 <g 762 778 class="ionicon" 763 - style="fill: #000;" 779 + style="fill: #9090a0;" 764 780 > 765 781 <path 766 782 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 776 792 stroke="currentColor" 777 793 stroke-linecap="round" 778 794 stroke-linejoin="round" 779 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 795 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 780 796 /> 781 797 </g> 782 798 </svg> ··· 826 842 style="width: 150px; overflow: hidden;" 827 843 > 828 844 <div 829 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 845 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 830 846 > 831 847 Instant Crush 832 848 </div> ··· 835 851 style="width: 150px; overflow: hidden;" 836 852 > 837 853 <div 838 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 854 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 839 855 > 840 856 <a 841 - class="css-i74fgx" 857 + class="css-1ohnlkn" 842 858 href="/artists/1" 843 859 > 844 860 Daft Punk ··· 849 865 style="width: 150px; overflow: hidden;" 850 866 > 851 867 <div 852 - style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 868 + style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 853 869 > 854 870 <a 855 - class="css-i74fgx" 871 + class="css-1ohnlkn" 856 872 href="/albums/2" 857 873 > 858 874 Random Access Memories ··· 924 940 > 925 941 <g 926 942 class="ionicon" 927 - style="fill: #000;" 943 + style="fill: #9090a0;" 928 944 > 929 945 <path 930 946 d="M11 5v12m6-6H5" ··· 940 956 stroke="currentColor" 941 957 stroke-linecap="round" 942 958 stroke-linejoin="round" 943 - style="fill: none; stroke-width: 2; stroke: #000;" 959 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 944 960 /> 945 961 </g> 946 962 </svg> ··· 960 976 > 961 977 <g 962 978 class="ionicon" 963 - style="fill: #000;" 979 + style="fill: #9090a0;" 964 980 > 965 981 <path 966 982 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 976 992 stroke="currentColor" 977 993 stroke-linecap="round" 978 994 stroke-linejoin="round" 979 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 995 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 980 996 /> 981 997 </g> 982 998 </svg> ··· 1026 1042 style="width: 150px; overflow: hidden;" 1027 1043 > 1028 1044 <div 1029 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1045 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1030 1046 > 1031 1047 Arround the World 1032 1048 </div> ··· 1035 1051 style="width: 150px; overflow: hidden;" 1036 1052 > 1037 1053 <div 1038 - style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1054 + style="min-width: 150px; width: calc(100% - 20px); max-width: 300px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1039 1055 > 1040 1056 <a 1041 - class="css-i74fgx" 1057 + class="css-1ohnlkn" 1042 1058 href="/artists/1" 1043 1059 > 1044 1060 Daft Punk ··· 1049 1065 style="width: 150px; overflow: hidden;" 1050 1066 > 1051 1067 <div 1052 - style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(0, 0, 0);" 1068 + style="width: calc(100% - 20px); max-width: calc(100vw - 800px); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: rgb(232, 232, 232);" 1053 1069 > 1054 1070 <a 1055 - class="css-i74fgx" 1071 + class="css-1ohnlkn" 1056 1072 href="/albums/3" 1057 1073 > 1058 1074 Homework ··· 1124 1140 > 1125 1141 <g 1126 1142 class="ionicon" 1127 - style="fill: #000;" 1143 + style="fill: #9090a0;" 1128 1144 > 1129 1145 <path 1130 1146 d="M11 5v12m6-6H5" ··· 1140 1156 stroke="currentColor" 1141 1157 stroke-linecap="round" 1142 1158 stroke-linejoin="round" 1143 - style="fill: none; stroke-width: 2; stroke: #000;" 1159 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 1144 1160 /> 1145 1161 </g> 1146 1162 </svg> ··· 1160 1176 > 1161 1177 <g 1162 1178 class="ionicon" 1163 - style="fill: #000;" 1179 + style="fill: #9090a0;" 1164 1180 > 1165 1181 <path 1166 1182 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 1176 1192 stroke="currentColor" 1177 1193 stroke-linecap="round" 1178 1194 stroke-linejoin="round" 1179 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 1195 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 1180 1196 /> 1181 1197 </g> 1182 1198 </svg> ··· 1209 1225 style="position: relative; width: 100%;" 1210 1226 > 1211 1227 <button 1212 - class="css-12ezcoy" 1228 + class="css-1a0m235" 1213 1229 > 1214 1230 <div 1215 - class="css-15yrfky" 1231 + class="css-1jrgpod" 1216 1232 > 1217 1233 <div 1218 1234 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1315 1331 src="/src/Assets/albumart.svg" 1316 1332 /> 1317 1333 <div 1318 - class="css-e68bk5" 1334 + class="css-1e8jyh" 1319 1335 > 1320 1336 Random Access Memories 1321 1337 </div> 1322 1338 </a> 1323 1339 <a 1324 - class="css-9sbfuc" 1340 + class="css-aqpx5g" 1325 1341 href="/artists/undefined" 1326 1342 > 1327 1343 Daft Punk 1328 1344 </a> 1329 1345 <div 1330 - class="css-1q570sn" 1346 + class="css-8zte4g" 1331 1347 > 1332 1348 2013 1333 1349 </div> ··· 1340 1356 style="position: relative; width: 100%;" 1341 1357 > 1342 1358 <button 1343 - class="css-12ezcoy" 1359 + class="css-1a0m235" 1344 1360 > 1345 1361 <div 1346 - class="css-15yrfky" 1362 + class="css-1jrgpod" 1347 1363 > 1348 1364 <div 1349 1365 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1446 1462 src="/src/Assets/albumart.svg" 1447 1463 /> 1448 1464 <div 1449 - class="css-e68bk5" 1465 + class="css-1e8jyh" 1450 1466 > 1451 1467 Tron: Legacy 1452 1468 </div> 1453 1469 </a> 1454 1470 <a 1455 - class="css-9sbfuc" 1471 + class="css-aqpx5g" 1456 1472 href="/artists/undefined" 1457 1473 > 1458 1474 Daft Punk 1459 1475 </a> 1460 1476 <div 1461 - class="css-1q570sn" 1477 + class="css-8zte4g" 1462 1478 > 1463 1479 2010 1464 1480 </div> ··· 1471 1487 style="position: relative; width: 100%;" 1472 1488 > 1473 1489 <button 1474 - class="css-12ezcoy" 1490 + class="css-1a0m235" 1475 1491 > 1476 1492 <div 1477 - class="css-15yrfky" 1493 + class="css-1jrgpod" 1478 1494 > 1479 1495 <div 1480 1496 style="background-color: rgba(255, 255, 255, 0.855); height: 40px; width: 40px; border-radius: 20px; display: flex; justify-content: center; align-items: center;" ··· 1577 1593 src="/src/Assets/albumart.svg" 1578 1594 /> 1579 1595 <div 1580 - class="css-e68bk5" 1596 + class="css-1e8jyh" 1581 1597 > 1582 1598 Homework 1583 1599 </div> 1584 1600 </a> 1585 1601 <a 1586 - class="css-9sbfuc" 1602 + class="css-aqpx5g" 1587 1603 href="/artists/undefined" 1588 1604 > 1589 1605 Daft Punk 1590 1606 </a> 1591 1607 <div 1592 - class="css-1q570sn" 1608 + class="css-8zte4g" 1593 1609 > 1594 1610 2001 1595 1611 </div>
+4
webui/rockbox/src/Components/ArtistDetails/styles.css
··· 1 1 2 2 table { 3 3 border-spacing: 0; 4 + } 5 + 6 + tbody > tr:hover { 7 + background-color: var(--row-hover-bg); 4 8 }
+35 -8
webui/rockbox/src/Components/ArtistDetails/styles.tsx
··· 25 25 height: 30px; 26 26 width: 30px; 27 27 border-radius: 15px; 28 - background-color: #f7f7f8; 28 + background-color: ${(props) => props.theme.colors.backButton}; 29 29 margin-top: 26px; 30 30 margin-bottom: 46px; 31 31 position: absolute; ··· 39 39 height: calc(100vh - 60px); 40 40 `; 41 41 42 + export const ArtistHeader = styled.div` 43 + display: flex; 44 + flex-direction: row; 45 + align-items: flex-end; 46 + gap: 24px; 47 + margin-top: 30px; 48 + margin-bottom: 32px; 49 + `; 50 + 51 + export const ArtistPicture = styled.img` 52 + width: 160px; 53 + height: 160px; 54 + border-radius: 50%; 55 + object-fit: cover; 56 + flex-shrink: 0; 57 + `; 58 + 59 + export const ArtistPicturePlaceholder = styled.div` 60 + width: 160px; 61 + height: 160px; 62 + border-radius: 50%; 63 + background-color: ${(props) => props.theme.colors.cover}; 64 + display: flex; 65 + align-items: center; 66 + justify-content: center; 67 + flex-shrink: 0; 68 + `; 69 + 42 70 export const Name = styled.div` 43 71 font-family: RockfordSansMedium; 44 72 font-size: 30px; 45 - margin-top: 94px; 46 - margin-bottom: 40px; 73 + margin-bottom: 4px; 47 74 `; 48 75 49 76 export const ButtonGroup = styled.div` ··· 82 109 cursor: pointer; 83 110 &:hover, 84 111 &:focus { 85 - color: #000; 112 + color: ${(props) => props.theme.colors.text}; 86 113 opacity: 1 !important; 87 114 } 88 115 `; ··· 109 136 overflow: hidden; 110 137 white-space: nowrap; 111 138 cursor: pointer; 112 - color: #000; 139 + color: ${(props) => props.theme.colors.text}; 113 140 text-decoration: none; 114 141 `; 115 142 116 143 export const Artist = styled.div` 117 - color: #828282; 144 + color: ${(props) => props.theme.colors.secondaryText}; 118 145 font-size: 14px; 119 146 text-overflow: ellipsis; 120 147 overflow: hidden; ··· 123 150 `; 124 151 125 152 export const Year = styled.div` 126 - color: #828282; 153 + color: ${(props) => props.theme.colors.secondaryText}; 127 154 font-size: 12px; 128 155 font-weight: 400; 129 156 margin-bottom: 56px; ··· 136 163 `; 137 164 138 165 export const Link = styled(RouterLink)` 139 - color: #000; 166 + color: ${(props) => props.theme.colors.text}; 140 167 text-decoration: none; 141 168 font-family: RockfordSansRegular; 142 169 &:hover {
+2
webui/rockbox/src/Components/Artists/ArtistsWithData.tsx
··· 12 12 return (filter.results?.artists || []).map((x) => ({ 13 13 id: x.id, 14 14 name: x.name, 15 + cover: x.image ?? null, 15 16 })); 16 17 } 17 18 return (data?.artists || []).map((x) => ({ 18 19 id: x.id, 19 20 name: x.name, 21 + cover: x.image ?? null, 20 22 })); 21 23 }, [data, filter]); 22 24
+33 -38
webui/rockbox/src/Components/Artists/__snapshots__/Artists.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-tujm8o" 53 - color="initial" 52 + class="css-j9huyi" 54 53 href="/albums" 55 54 > 56 55 <svg 57 56 aria-hidden="true" 58 57 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="initial" 58 + color="#9090a0" 60 59 fill="currentColor" 61 60 focusable="false" 62 61 height="20" ··· 77 76 </div> 78 77 </a> 79 78 <a 80 - class="css-8v05qj" 81 - color="#fe099c" 79 + class="css-1hl5flw" 80 + color="#6F00FF" 82 81 href="/artists" 83 82 > 84 83 <svg ··· 89 88 > 90 89 <path 91 90 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="#fe099c" 91 + fill="#6F00FF" 93 92 /> 94 93 </svg> 95 94 <div ··· 99 98 </div> 100 99 </a> 101 100 <a 102 - class="css-tujm8o" 103 - color="initial" 101 + class="css-j9huyi" 104 102 href="/tracks" 105 103 > 106 104 <svg ··· 110 108 > 111 109 <path 112 110 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="initial" 111 + fill="#9090a0" 114 112 /> 115 113 </svg> 116 114 <div ··· 120 118 </div> 121 119 </a> 122 120 <a 123 - class="css-tujm8o" 124 - color="initial" 121 + class="css-j9huyi" 125 122 href="/likes" 126 123 > 127 124 <svg ··· 133 130 > 134 131 <g 135 132 class="ionicon" 136 - style="fill: initial;" 133 + style="fill: #9090a0;" 137 134 > 138 135 <path 139 136 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 146 stroke="currentColor" 150 147 stroke-linecap="round" 151 148 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 149 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 150 /> 154 151 </g> 155 152 </svg> ··· 160 157 </div> 161 158 </a> 162 159 <a 163 - class="css-tujm8o" 164 - color="initial" 160 + class="css-j9huyi" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="initial" 166 + color="#9090a0" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 232 227 </a> 233 228 </div> 234 229 <div 235 - class="css-y9r6ap" 230 + class="css-joklj2" 236 231 > 237 232 <div 238 233 class="css-19i1zwv" ··· 260 255 <path 261 256 clip-rule="evenodd" 262 257 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 263 - fill="#000" 258 + fill="#9090a0" 264 259 fill-rule="evenodd" 265 260 /> 266 261 </svg> ··· 277 272 <path 278 273 class="ionicon" 279 274 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 280 - style="fill: #000;" 275 + style="fill: #9090a0;" 281 276 /> 282 277 </svg> 283 278 </button> ··· 292 287 > 293 288 <path 294 289 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 295 - style="fill: #000;" 290 + style="fill: #9090a0;" 296 291 /> 297 292 </svg> 298 293 </button> ··· 308 303 <path 309 304 class="ionicon" 310 305 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 311 - style="fill: #000;" 306 + style="fill: #9090a0;" 312 307 /> 313 308 </svg> 314 309 </button> ··· 326 321 <path 327 322 clip-rule="evenodd" 328 323 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 329 - fill="#000" 324 + fill="#9090a0" 330 325 fill-rule="evenodd" 331 326 /> 332 327 </svg> ··· 334 329 </div> 335 330 </div> 336 331 <div 337 - class="css-frud38" 332 + class="css-1qa5636" 338 333 > 339 334 <div 340 - class="css-4ijxew" 335 + class="css-19t4u9x" 341 336 > 342 337 <svg 343 338 height="28" ··· 371 366 style="width: 100px; margin-top: 5px;" 372 367 > 373 368 <span 374 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 369 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 375 370 > 376 371 <span 377 372 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 411 406 <svg 412 407 aria-hidden="true" 413 408 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 414 - color="#000" 409 + color="#9090a0" 415 410 fill="currentColor" 416 411 focusable="false" 417 412 height="18" ··· 521 516 src="https://resources.tidal.com/images/9be9e74c/1b06/479a/a79e/5c62733d74ac/320x320.jpg" 522 517 /> 523 518 <div 524 - class="css-165pfvn" 519 + class="css-1fm2umr" 525 520 > 526 521 Red Hot Chilli Peppers 527 522 </div> ··· 539 534 src="https://resources.tidal.com/images/f87d9afc/075e/43f4/bbbc/7770b46cb8aa/320x320.jpg" 540 535 /> 541 536 <div 542 - class="css-165pfvn" 537 + class="css-1fm2umr" 543 538 > 544 539 Daft Punk 545 540 </div> ··· 557 552 src="https://resources.tidal.com/images/c3672adf/ca16/4db3/a375/64904d1f7d39/320x320.jpg" 558 553 /> 559 554 <div 560 - class="css-165pfvn" 555 + class="css-1fm2umr" 561 556 > 562 557 Slipknot 563 558 </div> ··· 575 570 src="https://resources.tidal.com/images/2021e89d/f4bd/4d41/9af7/da47dc7564e8/320x320.jpg" 576 571 /> 577 572 <div 578 - class="css-165pfvn" 573 + class="css-1fm2umr" 579 574 > 580 575 Big K.R.I.T. 581 576 </div> ··· 589 584 style="text-decoration: none;" 590 585 > 591 586 <div 592 - class="css-qsoif3" 587 + class="css-hhifm" 593 588 > 594 589 <svg 595 590 height="75" ··· 604 599 </svg> 605 600 </div> 606 601 <div 607 - class="css-165pfvn" 602 + class="css-1fm2umr" 608 603 > 609 604 Oasis 610 605 </div>
+2 -2
webui/rockbox/src/Components/Artists/styles.tsx
··· 40 40 display: flex; 41 41 justify-content: center; 42 42 align-items: center; 43 - background-color: #f3f3f3b9; 43 + background-color: ${(props) => props.theme.colors.cover}; 44 44 `; 45 45 46 46 export const ArtistName = styled.div` ··· 53 53 margin-bottom: 18px; 54 54 text-align: center; 55 55 width: 194px; 56 - color: #000; 56 + color: ${(props) => props.theme.colors.text}; 57 57 `; 58 58 59 59 export const FilterContainer = styled.div`
+15 -12
webui/rockbox/src/Components/ContextMenu/ContextMenu.tsx
··· 9 9 import { useTheme } from "@emotion/react"; 10 10 import ChildMenu from "./ChildMenu"; 11 11 import { FC, useState } from "react"; 12 + import PlaylistModal from "../Playlists/PlaylistModal"; 12 13 import { 13 14 AlbumCover, 14 15 AlbumCoverAlt, ··· 26 27 liked?: boolean; 27 28 track: any; 28 29 onPlayNext: (path: string) => void; 29 - onCreatePlaylist: (name: string, description?: string) => void; 30 + onCreatePlaylist: (name: string, trackId: string, description?: string) => void; 30 31 onAddTrackToPlaylist: (playlistId: string, trackId: string) => void; 31 32 onPlayLast: (path: string) => void; 32 33 onAddShuffled: (path: string) => void; ··· 39 40 liked = false, 40 41 track, 41 42 onPlayNext, 42 - // onCreatePlaylist, 43 + onCreatePlaylist, 43 44 onPlayLast, 44 45 onAddTrackToPlaylist, 45 46 onAddShuffled, ··· 48 49 recentPlaylists, 49 50 }) => { 50 51 const theme = useTheme(); 51 - const [, setIsNewPlaylistModalOpen] = useState(false); 52 + const [isNewPlaylistModalOpen, setIsNewPlaylistModalOpen] = useState(false); 52 53 return ( 53 54 <Container> 54 55 <Hover> ··· 201 202 <Separator /> 202 203 {liked && ( 203 204 <Icon onClick={() => onUnlike(track.id)}> 204 - <Heart height={24} width={24} color={"#fe09a3"} /> 205 + <Heart height={24} width={24} color={"#6F00FF"} /> 205 206 </Icon> 206 207 )} 207 208 {!liked && ( ··· 213 214 <HeartOutline height={24} width={24} color={theme.colors.icon} /> 214 215 </Icon> 215 216 )} 216 - {/*<NewPlaylistModal 217 - onClose={() => { 218 - setIsNewPlaylistModalOpen(false); 219 - }} 220 - isOpen={isNewPlaylistModalOpen} 221 - onCreatePlaylist={onCreatePlaylist} 222 - /> 223 - */} 217 + {isNewPlaylistModalOpen && ( 218 + <PlaylistModal 219 + title="New Playlist" 220 + onClose={() => setIsNewPlaylistModalOpen(false)} 221 + onSave={async (name, description) => { 222 + await onCreatePlaylist(name, track.id, description); 223 + setIsNewPlaylistModalOpen(false); 224 + }} 225 + /> 226 + )} 224 227 </Container> 225 228 ); 226 229 };
+13 -1
webui/rockbox/src/Components/ContextMenu/ContextMenuWithData.tsx
··· 7 7 useLikeTrackMutation, 8 8 useUnlikeTrackMutation, 9 9 useAddTracksToSavedPlaylistMutation, 10 + useCreateSavedPlaylistMutation, 10 11 } from "../../Hooks/GraphQL"; 11 12 import { 12 13 PLAYLIST_INSERT_FIRST, ··· 33 34 const [likeTrack] = useLikeTrackMutation(); 34 35 const [unlikeTrack] = useUnlikeTrackMutation(); 35 36 const [addTracksToPlaylist] = useAddTracksToSavedPlaylistMutation(); 37 + const [createPlaylist] = useCreateSavedPlaylistMutation(); 36 38 37 39 const onPlayNext = (path: string) => { 38 40 insertTracks({ ··· 96 98 }); 97 99 }; 98 100 101 + const onCreatePlaylist = async (name: string, trackId: string, description?: string) => { 102 + await createPlaylist({ 103 + variables: { 104 + name, 105 + description, 106 + trackIds: [trackId], 107 + }, 108 + }); 109 + }; 110 + 99 111 return ( 100 112 <ContextMenu 101 113 track={track} 102 114 onPlayNext={onPlayNext} 103 - onCreatePlaylist={() => {}} 115 + onCreatePlaylist={onCreatePlaylist} 104 116 onAddTrackToPlaylist={onAddTrackToPlaylist} 105 117 onPlayLast={onPlayLast} 106 118 onAddShuffled={onAddShuffled}
+4 -4
webui/rockbox/src/Components/ContextMenu/__snapshots__/ContextMenu.test.tsx.snap
··· 58 58 > 59 59 <g 60 60 class="ionicon" 61 - style="fill: #000;" 61 + style="fill: #9090a0;" 62 62 > 63 63 <path 64 64 d="M11 5v12m6-6H5" ··· 74 74 stroke="currentColor" 75 75 stroke-linecap="round" 76 76 stroke-linejoin="round" 77 - style="fill: none; stroke-width: 2; stroke: #000;" 77 + style="fill: none; stroke-width: 2; stroke: #9090a0;" 78 78 /> 79 79 </g> 80 80 </svg> ··· 94 94 > 95 95 <g 96 96 class="ionicon" 97 - style="fill: #000;" 97 + style="fill: #9090a0;" 98 98 > 99 99 <path 100 100 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 110 110 stroke="currentColor" 111 111 stroke-linecap="round" 112 112 stroke-linejoin="round" 113 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 113 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 114 114 /> 115 115 </g> 116 116 </svg>
+4 -2
webui/rockbox/src/Components/ContextMenu/styles.tsx
··· 11 11 `; 12 12 13 13 export const Hover = styled.button` 14 - color: transparent; 14 + color: ${(props) => props.theme.colors.icon}; 15 15 background-color: transparent; 16 16 border: none; 17 + cursor: pointer; 17 18 &:hover, 18 19 &:focus { 19 - color: #000; 20 + color: ${(props) => props.theme.colors.text}; 20 21 } 21 22 `; 22 23 ··· 68 69 white-space: nowrap; 69 70 overflow: hidden; 70 71 max-width: 125px; 72 + color: ${(props) => props.theme.colors.text}; 71 73 `; 72 74 73 75 export const TrackInfos = styled.div`
+8 -6
webui/rockbox/src/Components/ControlBar/ControlBar.tsx
··· 1 1 import { FC, useEffect, useState } from "react"; 2 + import { useTheme } from "@emotion/react"; 2 3 import Play from "../Icons/Play"; 3 4 import Previous from "../Icons/Previous"; 4 5 import Next from "../Icons/Next"; ··· 27 28 }; 28 29 29 30 const ControlBar: FC<ControlBarProps> = (props) => { 31 + const theme = useTheme(); 30 32 const [shuffle, setShuffle] = useState(props.shuffle); 31 33 const [repeat, setRepeat] = useState(props.repeat); 32 34 ··· 50 52 <Controls> 51 53 <ControlsContainer> 52 54 <Button onClick={onShuffle} active={shuffle}> 53 - <Shuffle /> 55 + <Shuffle color={theme.colors.icon} /> 54 56 </Button> 55 57 <Button onClick={props.onPrevious}> 56 - <Previous /> 58 + <Previous color={theme.colors.icon} /> 57 59 </Button> 58 60 {!props.nowPlaying?.isPlaying && ( 59 61 <Button onClick={props.onPlay}> 60 - <Play /> 62 + <Play color={theme.colors.icon} /> 61 63 </Button> 62 64 )} 63 65 {props.nowPlaying?.isPlaying && ( 64 66 <Button onClick={props.onPause}> 65 - <Pause /> 67 + <Pause color={theme.colors.icon} /> 66 68 </Button> 67 69 )} 68 70 <Button onClick={props.onNext}> 69 - <Next /> 71 + <Next color={theme.colors.icon} /> 70 72 </Button> 71 73 <Button onClick={onRepeat} active={repeat}> 72 - <Repeat /> 74 + <Repeat color={theme.colors.icon} /> 73 75 </Button> 74 76 </ControlsContainer> 75 77 </Controls>
+4 -2
webui/rockbox/src/Components/ControlBar/CurrentTrack/CurrentTrack.tsx
··· 21 21 import _ from "lodash"; 22 22 import HeartOutline from "../../Icons/HeartOutline"; 23 23 import Heart from "../../Icons/Heart"; 24 + import { useTheme } from "@emotion/react"; 24 25 25 26 export type CurrentTrackProps = { 26 27 nowPlaying?: NowPlaying; ··· 39 40 }) => { 40 41 const progressbarRef = useRef<HTMLDivElement>(null); 41 42 const { formatTime } = useTimeFormat(); 43 + const theme = useTheme(); 42 44 const album = `${nowPlaying?.artist} - ${nowPlaying?.album}`; 43 45 44 46 // eslint-disable-next-line @typescript-eslint/no-explicit-any ··· 81 83 <Actions> 82 84 {!liked && ( 83 85 <Icon onClick={() => onLike(nowPlaying!.id!)}> 84 - <HeartOutline color="#000" /> 86 + <HeartOutline color={theme.colors.icon} /> 85 87 </Icon> 86 88 )} 87 89 {liked && ( 88 90 <Icon onClick={() => onUnlike(nowPlaying!.id!)}> 89 - <Heart color="#fe09a3" /> 91 + <Heart color={theme.colors.primary} /> 90 92 </Icon> 91 93 )} 92 94 </Actions>
+6 -5
webui/rockbox/src/Components/ControlBar/CurrentTrack/styles.ts
··· 9 9 flex: 1; 10 10 height: 60px; 11 11 border-radius: 4px; 12 - border: 1px solid rgba(177, 178, 181, 0.25); 12 + border: 1px solid ${(props) => props.theme.colors.currentTrackBorder}; 13 13 margin-left: 20px; 14 14 `; 15 15 16 16 export const NoCover = styled.div` 17 17 width: 60px; 18 18 height: 60px; 19 - background-color: #f5f5f5; 19 + background-color: ${(props) => props.theme.colors.cover}; 20 20 display: flex; 21 21 justify-content: center; 22 22 align-items: center; ··· 58 58 59 59 export const Time = styled.div` 60 60 font-size: 10px; 61 - color: rgba(0, 0, 0, 0.542); 61 + color: ${(props) => props.theme.colors.secondaryText}; 62 62 font-family: RockfordSansRegular; 63 63 text-align: center; 64 64 width: 60px; ··· 66 66 67 67 export const ArtistAlbum = styled.div` 68 68 text-align: center; 69 - color: rgba(0, 0, 0, 0.54); 69 + color: ${(props) => props.theme.colors.secondaryText}; 70 70 font-family: RockfordSansLight; 71 71 text-overflow: ellipsis; 72 72 overflow: hidden; ··· 82 82 width: calc(100% - 20px); 83 83 margin-left: 10px; 84 84 margin-right: 10px; 85 + color: ${(props) => props.theme.colors.text}; 85 86 `; 86 87 87 88 export const Actions = styled.div` ··· 118 119 }, 119 120 BarProgress: { 120 121 style: () => ({ 121 - backgroundColor: "rgb(254, 9, 156)", 122 + backgroundColor: "#6F00FF", 122 123 }), 123 124 }, 124 125 Bar: {
+2 -1
webui/rockbox/src/Components/ControlBar/DeviceList/DeviceList.tsx
··· 144 144 color={bgColors[activeDevice.type]} 145 145 /> 146 146 ) : ( 147 - <Laptop size={30} color="#fe099c" /> 147 + <Laptop size={30} color="#6F00FF" /> 148 148 )} 149 149 </IconWrapper> 150 150 <div style={{ flex: 1 }}> ··· 187 187 Root: { 188 188 style: { 189 189 cursor: "pointer", 190 + backgroundColor: "transparent", 190 191 ":hover": { 191 192 backgroundColor: theme.colors.hover, 192 193 },
+1 -1
webui/rockbox/src/Components/ControlBar/DeviceList/styles.ts
··· 53 53 `; 54 54 55 55 export const CurrentDeviceName = styled.div` 56 - color: #fe099c; 56 + color: #6F00FF; 57 57 font-size: 14px; 58 58 `; 59 59
+1 -1
webui/rockbox/src/Components/ControlBar/PlayQueue/__snapshots__/PlayQueue.test.tsx.snap
··· 25 25 4 26 26 </div> 27 27 <div 28 - class="css-14tdrps" 28 + class="css-qk9260" 29 29 > 30 30 History 31 31 </div>
+1 -1
webui/rockbox/src/Components/ControlBar/PlayQueue/styles.tsx
··· 21 21 `; 22 22 23 23 export const Switch = styled(Title)` 24 - color: #fe099c; 24 + color: #6F00FF; 25 25 flex: 1; 26 26 text-align: end; 27 27 cursor: pointer;
+3 -1
webui/rockbox/src/Components/ControlBar/RightMenu/RightMenu.tsx
··· 24 24 style: { 25 25 top: "10px", 26 26 left: "-70px", 27 + zIndex: 100, 27 28 }, 28 29 }, 29 30 Inner: { ··· 51 52 Body: { 52 53 style: { 53 54 left: "-21px", 55 + zIndex: 100, 54 56 }, 55 57 }, 56 58 Inner: { ··· 61 63 }} 62 64 > 63 65 <Button> 64 - <List size={21} /> 66 + <List size={21} color={theme.colors.icon} /> 65 67 </Button> 66 68 </StatefulPopover> 67 69 </Container>
+14 -2
webui/rockbox/src/Components/ControlBar/RightMenu/Volume/Volume.tsx
··· 1 1 import { FC, SyntheticEvent, useEffect, useState } from "react"; 2 + import { useTheme } from "@emotion/react"; 2 3 import Slider from "@mui/material/Slider"; 3 - import styles, { Container } from "./styles"; 4 + import { Container } from "./styles"; 4 5 5 6 export type VolumeProps = { 6 7 volume: number; ··· 8 9 }; 9 10 10 11 const Volume: FC<VolumeProps> = (props) => { 12 + const theme = useTheme(); 11 13 const [volume, setVolume] = useState<number>(props.volume); 12 14 13 15 useEffect(() => { ··· 29 31 value={volume} 30 32 onChange={(_event, value) => setVolume(value as number)} 31 33 onChangeCommitted={handleVolumeChange} 32 - sx={styles.slider} 34 + sx={{ 35 + color: theme.colors.primary, 36 + "& .MuiSlider-track": { border: "none" }, 37 + "& .MuiSlider-thumb": { 38 + width: 18, 39 + height: 18, 40 + backgroundColor: theme.colors.text, 41 + "&::before": { boxShadow: "0 4px 8px rgba(0,0,0,0.18)" }, 42 + "&:hover, &.Mui-focusVisible, &.Mui-active": { boxShadow: "none" }, 43 + }, 44 + }} 33 45 /> 34 46 </div> 35 47 </Container>
+1 -1
webui/rockbox/src/Components/ControlBar/RightMenu/Volume/__snapshots__/Volume.test.tsx.snap
··· 12 12 style="width: 100px; margin-top: 5px;" 13 13 > 14 14 <span 15 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 15 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 16 16 > 17 17 <span 18 18 class="MuiSlider-rail css-r64h58-MuiSlider-rail"
+14 -14
webui/rockbox/src/Components/ControlBar/__snapshots__/ControlBar.test.tsx.snap
··· 28 28 <path 29 29 clip-rule="evenodd" 30 30 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 31 - fill="#000" 31 + fill="#9090a0" 32 32 fill-rule="evenodd" 33 33 /> 34 34 </svg> ··· 45 45 <path 46 46 class="ionicon" 47 47 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 48 - style="fill: #000;" 48 + style="fill: #9090a0;" 49 49 /> 50 50 </svg> 51 51 </button> ··· 63 63 </title> 64 64 <path 65 65 d="M208 432h-48a16 16 0 0 1-16-16V96a16 16 0 0 1 16-16h48a16 16 0 0 1 16 16v320a16 16 0 0 1-16 16zm144 0h-48a16 16 0 0 1-16-16V96a16 16 0 0 1 16-16h48a16 16 0 0 1 16 16v320a16 16 0 0 1-16 16z" 66 - style="fill: #000;" 66 + style="fill: #9090a0;" 67 67 /> 68 68 </svg> 69 69 </button> ··· 79 79 <path 80 80 class="ionicon" 81 81 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 82 - style="fill: #000;" 82 + style="fill: #9090a0;" 83 83 /> 84 84 </svg> 85 85 </button> ··· 97 97 <path 98 98 clip-rule="evenodd" 99 99 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 100 - fill="#000" 100 + fill="#9090a0" 101 101 fill-rule="evenodd" 102 102 /> 103 103 </svg> ··· 105 105 </div> 106 106 </div> 107 107 <div 108 - class="css-frud38" 108 + class="css-1qa5636" 109 109 > 110 110 <img 111 111 alt="Album cover" ··· 122 122 class="css-4fj3gy" 123 123 /> 124 124 <div 125 - class="css-1cojt9j" 125 + class="css-1sehsm9" 126 126 > 127 127 Disco on the Baltic Sea 128 128 </div> ··· 141 141 > 142 142 <g 143 143 class="ionicon" 144 - style="fill: #000;" 144 + style="fill: #9090a0;" 145 145 > 146 146 <path 147 147 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 157 157 stroke="currentColor" 158 158 stroke-linecap="round" 159 159 stroke-linejoin="round" 160 - style="fill: none; stroke-width: 2; stroke: #000; stroke-opacity: 1;" 160 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 161 161 /> 162 162 </g> 163 163 </svg> ··· 168 168 style="display: flex; flex-direction: row; align-items: center; justify-content: space-between;" 169 169 > 170 170 <div 171 - class="css-1jnbdma" 171 + class="css-jfkzgh" 172 172 > 173 173 02:03 174 174 </div> 175 175 <div 176 - class="css-bdl275" 176 + class="css-1029c2p" 177 177 > 178 178 Waveshaper 179 179 <span ··· 189 189 </a> 190 190 </div> 191 191 <div 192 - class="css-1jnbdma" 192 + class="css-jfkzgh" 193 193 > 194 194 04:15 195 195 </div> ··· 231 231 style="width: 100px; margin-top: 5px;" 232 232 > 233 233 <span 234 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 234 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 235 235 > 236 236 <span 237 237 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 271 271 <svg 272 272 aria-hidden="true" 273 273 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 274 - color="#000" 274 + color="#9090a0" 275 275 fill="currentColor" 276 276 focusable="false" 277 277 height="18"
+1 -1
webui/rockbox/src/Components/ControlBar/styles.tsx
··· 30 30 ${(props) => 31 31 props.active && 32 32 css` 33 - background-color: #e9e9ea8c; 33 + background-color: ${props.theme.colors.hover}; 34 34 `} 35 35 &:hover { 36 36 opacity: 0.6;
+36 -72
webui/rockbox/src/Components/Files/ContextMenu/ContextMenu.tsx
··· 7 7 import { useTheme } from "@emotion/react"; 8 8 import ChildMenu from "./ChildMenu"; 9 9 import { FC, useMemo, useState } from "react"; 10 + import PlaylistModal from "../../Playlists/PlaylistModal"; 10 11 import { 11 12 AlbumCoverAlt, 12 13 Artist, ··· 21 22 export type ContextMenuProps = { 22 23 entry: any; 23 24 onPlayNext: (path: string) => void; 24 - onCreatePlaylist: (name: string, description?: string) => void; 25 + onCreatePlaylist: (name: string, trackId: string, description?: string) => void; 25 26 onAddTrackToPlaylist: (playlistId: string, path: string) => void; 26 27 onPlayLast: (path: string) => void; 27 28 onAddShuffled: (path: string) => void; ··· 33 34 const ContextMenu: FC<ContextMenuProps> = ({ 34 35 entry, 35 36 onPlayNext, 36 - // onCreatePlaylist, 37 + onCreatePlaylist, 37 38 onPlayLast, 38 39 onAddTrackToPlaylist, 39 40 onAddShuffled, ··· 42 43 recentPlaylists, 43 44 }) => { 44 45 const theme = useTheme(); 45 - const [, setIsNewPlaylistModalOpen] = useState(false); 46 + const [isNewPlaylistModalOpen, setIsNewPlaylistModalOpen] = useState(false); 46 47 const items = useMemo(() => { 48 + const base = [ 49 + { id: "1", label: "Play Next" }, 50 + { id: "3", label: "Play Last" }, 51 + { id: "4", label: "Add Shuffled" }, 52 + ]; 47 53 if (entry.isDirectory) { 48 54 return [ 49 - { 50 - id: "1", 51 - label: "Play Next", 52 - }, 53 - { 54 - id: "2", 55 - label: "Add to Playlist", 56 - }, 57 - { 58 - id: "3", 59 - label: "Play Last", 60 - }, 61 - { 62 - id: "4", 63 - label: "Add Shuffled", 64 - }, 65 - { 66 - id: "5", 67 - label: "Play Last Shuffled", 68 - }, 69 - { 70 - id: "6", 71 - label: "Play Shuffled", 72 - }, 55 + ...base, 56 + { id: "5", label: "Play Last Shuffled" }, 57 + { id: "6", label: "Play Shuffled" }, 73 58 ]; 74 59 } 75 60 return [ 76 - { 77 - id: "1", 78 - label: "Play Next", 79 - }, 80 - { 81 - id: "2", 82 - label: "Add to Playlist", 83 - }, 84 - { 85 - id: "3", 86 - label: "Play Last", 87 - }, 88 - { 89 - id: "4", 90 - label: "Add Shuffled", 91 - }, 61 + { id: "1", label: "Play Next" }, 62 + { id: "2", label: "Add to Playlist" }, 63 + { id: "3", label: "Play Last" }, 64 + { id: "4", label: "Add Shuffled" }, 92 65 ]; 93 66 }, [entry]); 67 + 94 68 return ( 95 69 <Container> 96 70 <Hover> ··· 98 72 placement="left" 99 73 autoFocus={false} 100 74 content={({ close }) => ( 101 - <div 102 - style={{ 103 - width: 205, 104 - }} 105 - > 75 + <div style={{ width: 205 }}> 106 76 <Track> 107 - {entry.isDirectory && ( 77 + {entry.isDirectory ? ( 108 78 <AlbumCoverAlt> 109 79 <Folder2 size={18} /> 110 80 </AlbumCoverAlt> 111 - )} 112 - {!entry.isDirectory && ( 81 + ) : ( 113 82 <AlbumCoverAlt> 114 83 <TrackIcon width={24} height={24} color="#a4a3a3" /> 115 84 </AlbumCoverAlt> ··· 135 104 return ( 136 105 <ChildMenu 137 106 recentPlaylists={recentPlaylists} 138 - onSelect={(item: { 139 - id: string; 140 - label: string; 141 - }) => { 107 + onSelect={(item: { id: string; label: string }) => { 142 108 if (item.label === "Create new playlist") { 143 109 setIsNewPlaylistModalOpen(true); 144 110 } else { 145 - onAddTrackToPlaylist(item.id, entry.id); 111 + onAddTrackToPlaylist(item.id, entry.path); 146 112 } 147 113 close(); 148 114 }} ··· 172 138 case "Play Last Shuffled": 173 139 onPlayLastShuffled(entry.path); 174 140 break; 141 + case "Add to Playlist": 142 + return; 175 143 default: 176 144 break; 177 145 } ··· 183 151 )} 184 152 overrides={{ 185 153 Inner: { 186 - style: { 187 - backgroundColor: theme.colors.popoverBackground, 188 - }, 189 - }, 190 - Body: { 191 - style: { 192 - zIndex: 1, 193 - }, 154 + style: { backgroundColor: theme.colors.popoverBackground }, 194 155 }, 156 + Body: { style: { zIndex: 1 } }, 195 157 }} 196 158 > 197 159 <Icon> ··· 199 161 </Icon> 200 162 </StatefulPopover> 201 163 </Hover> 202 - {/*<NewPlaylistModal 203 - onClose={() => { 204 - setIsNewPlaylistModalOpen(false); 205 - }} 206 - isOpen={isNewPlaylistModalOpen} 207 - onCreatePlaylist={onCreatePlaylist} 208 - /> 209 - */} 164 + {isNewPlaylistModalOpen && ( 165 + <PlaylistModal 166 + title="New Playlist" 167 + onClose={() => setIsNewPlaylistModalOpen(false)} 168 + onSave={async (name, description) => { 169 + await onCreatePlaylist(name, entry.path, description); 170 + setIsNewPlaylistModalOpen(false); 171 + }} 172 + /> 173 + )} 210 174 </Container> 211 175 ); 212 176 };
+27 -52
webui/rockbox/src/Components/Files/ContextMenu/ContextMenuWithData.tsx
··· 4 4 useInsertDirectoryMutation, 5 5 useInsertTracksMutation, 6 6 usePlayDirectoryMutation, 7 + useGetSavedPlaylistsQuery, 8 + useAddTracksToSavedPlaylistMutation, 9 + useCreateSavedPlaylistMutation, 7 10 } from "../../../Hooks/GraphQL"; 8 11 import { 9 12 PLAYLIST_INSERT_FIRST, ··· 21 24 const [insertTracks] = useInsertTracksMutation(); 22 25 const [playDirectory] = usePlayDirectoryMutation(); 23 26 const [insertDirectory] = useInsertDirectoryMutation(); 27 + const [addTracksToPlaylist] = useAddTracksToSavedPlaylistMutation(); 28 + const [createPlaylist] = useCreateSavedPlaylistMutation(); 29 + const { data: playlistsData } = useGetSavedPlaylistsQuery({ 30 + fetchPolicy: "cache-and-network", 31 + }); 24 32 25 33 const onPlayNext = (path: string) => { 26 34 if (!entry.isDirectory) { 27 - insertTracks({ 28 - variables: { 29 - tracks: [path], 30 - position: PLAYLIST_INSERT_FIRST, 31 - }, 32 - }); 35 + insertTracks({ variables: { tracks: [path], position: PLAYLIST_INSERT_FIRST } }); 33 36 return; 34 37 } 35 - insertDirectory({ 36 - variables: { 37 - position: PLAYLIST_INSERT_FIRST, 38 - directory: path, 39 - }, 40 - }); 38 + insertDirectory({ variables: { position: PLAYLIST_INSERT_FIRST, directory: path } }); 41 39 }; 42 40 43 41 const onPlayLast = (path: string) => { 44 42 if (!entry.isDirectory) { 45 - insertTracks({ 46 - variables: { 47 - tracks: [path], 48 - position: PLAYLIST_INSERT_LAST, 49 - }, 50 - }); 43 + insertTracks({ variables: { tracks: [path], position: PLAYLIST_INSERT_LAST } }); 51 44 return; 52 45 } 53 - insertDirectory({ 54 - variables: { 55 - position: PLAYLIST_INSERT_LAST, 56 - directory: path, 57 - }, 58 - }); 46 + insertDirectory({ variables: { position: PLAYLIST_INSERT_LAST, directory: path } }); 59 47 }; 60 48 61 49 const onAddShuffled = (path: string) => { 62 50 if (!entry.isDirectory) { 63 - insertTracks({ 64 - variables: { 65 - tracks: [path], 66 - position: PLAYLIST_INSERT_SHUFFLED, 67 - }, 68 - }); 51 + insertTracks({ variables: { tracks: [path], position: PLAYLIST_INSERT_SHUFFLED } }); 69 52 return; 70 53 } 71 - insertDirectory({ 72 - variables: { 73 - position: PLAYLIST_INSERT_SHUFFLED, 74 - directory: path, 75 - }, 76 - }); 54 + insertDirectory({ variables: { position: PLAYLIST_INSERT_SHUFFLED, directory: path } }); 77 55 }; 78 56 79 57 const onPlayShuffled = (path: string) => { 80 - playDirectory({ 81 - variables: { 82 - path, 83 - shuffle: true, 84 - recurse: true, 85 - }, 86 - }); 58 + playDirectory({ variables: { path, shuffle: true, recurse: true } }); 87 59 }; 88 60 89 61 const onPlayLastShuffled = (path: string) => { 90 - insertDirectory({ 91 - variables: { 92 - position: PLAYLIST_INSERT_LAST_SHUFFLED, 93 - directory: path, 94 - }, 95 - }); 62 + insertDirectory({ variables: { position: PLAYLIST_INSERT_LAST_SHUFFLED, directory: path } }); 63 + }; 64 + 65 + const onAddTrackToPlaylist = (playlistId: string, trackPath: string) => { 66 + addTracksToPlaylist({ variables: { playlistId, trackIds: [trackPath] } }); 67 + }; 68 + 69 + const onCreatePlaylist = async (name: string, trackPath: string, description?: string) => { 70 + await createPlaylist({ variables: { name, description, trackIds: [trackPath] } }); 96 71 }; 97 72 98 73 return ( 99 74 <ContextMenu 100 75 entry={entry} 101 76 onPlayNext={onPlayNext} 102 - onCreatePlaylist={() => {}} 103 - onAddTrackToPlaylist={() => {}} 77 + onCreatePlaylist={onCreatePlaylist} 78 + onAddTrackToPlaylist={onAddTrackToPlaylist} 104 79 onPlayLast={onPlayLast} 105 80 onAddShuffled={onAddShuffled} 106 81 onPlayShuffled={onPlayShuffled} 107 82 onPlayLastShuffled={onPlayLastShuffled} 108 - recentPlaylists={[]} 83 + recentPlaylists={playlistsData?.savedPlaylists ?? []} 109 84 /> 110 85 ); 111 86 };
+4 -2
webui/rockbox/src/Components/Files/ContextMenu/styles.tsx
··· 11 11 `; 12 12 13 13 export const Hover = styled.button` 14 - color: #000; 14 + color: ${(props) => props.theme.colors.icon}; 15 15 background-color: transparent; 16 16 border: none; 17 + cursor: pointer; 17 18 &:hover, 18 19 &:focus { 19 - color: #000; 20 + color: ${(props) => props.theme.colors.text}; 20 21 } 21 22 `; 22 23 ··· 68 69 white-space: nowrap; 69 70 overflow: hidden; 70 71 max-width: 125px; 72 + color: ${(props) => props.theme.colors.text}; 71 73 `; 72 74 73 75 export const TrackInfos = styled.div`
+5 -3
webui/rockbox/src/Components/Files/Files.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { createColumnHelper } from "@tanstack/react-table"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 34 35 }; 35 36 36 37 const Files: FC<FilesProps> = (props) => { 38 + const theme = useTheme(); 37 39 const columns = [ 38 40 columnHelper.accessor("name", { 39 41 header: "", ··· 53 55 className="play" 54 56 onClick={() => props.onPlayDirectory(info.row.original.path)} 55 57 > 56 - <Play small /> 58 + <Play small color={theme.colors.icon} /> 57 59 </div> 58 60 <div className="folder"> 59 61 <Folder2 size={20} /> ··· 69 71 props.onPlayTrack(parent.join("/") || "/", info.row.index); 70 72 }} 71 73 > 72 - <Play small /> 74 + <Play small color={theme.colors.icon} /> 73 75 </div> 74 76 <div className="folder"> 75 77 <MusicNoteBeamed size={20} /> ··· 129 131 {props.canGoBack && ( 130 132 <BackButton onClick={() => props.onGoBack()}> 131 133 <div style={{ marginTop: 2 }}> 132 - <ArrowBack color={"#000"} /> 134 + <ArrowBack color={theme.colors.icon} /> 133 135 </div> 134 136 </BackButton> 135 137 )}
+38 -43
webui/rockbox/src/Components/Files/__snapshots__/Files.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-tujm8o" 53 - color="initial" 52 + class="css-j9huyi" 54 53 href="/albums" 55 54 > 56 55 <svg 57 56 aria-hidden="true" 58 57 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="initial" 58 + color="#9090a0" 60 59 fill="currentColor" 61 60 focusable="false" 62 61 height="20" ··· 77 76 </div> 78 77 </a> 79 78 <a 80 - class="css-tujm8o" 81 - color="initial" 79 + class="css-j9huyi" 82 80 href="/artists" 83 81 > 84 82 <svg ··· 89 87 > 90 88 <path 91 89 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="initial" 90 + fill="#9090a0" 93 91 /> 94 92 </svg> 95 93 <div ··· 99 97 </div> 100 98 </a> 101 99 <a 102 - class="css-tujm8o" 103 - color="initial" 100 + class="css-j9huyi" 104 101 href="/tracks" 105 102 > 106 103 <svg ··· 110 107 > 111 108 <path 112 109 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="initial" 110 + fill="#9090a0" 114 111 /> 115 112 </svg> 116 113 <div ··· 120 117 </div> 121 118 </a> 122 119 <a 123 - class="css-tujm8o" 124 - color="initial" 120 + class="css-j9huyi" 125 121 href="/likes" 126 122 > 127 123 <svg ··· 133 129 > 134 130 <g 135 131 class="ionicon" 136 - style="fill: initial;" 132 + style="fill: #9090a0;" 137 133 > 138 134 <path 139 135 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 145 stroke="currentColor" 150 146 stroke-linecap="round" 151 147 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 148 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 149 /> 154 150 </g> 155 151 </svg> ··· 160 156 </div> 161 157 </a> 162 158 <a 163 - class="css-8v05qj" 164 - color="#fe099c" 159 + class="css-1hl5flw" 160 + color="#6F00FF" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="#fe099c" 166 + color="#6F00FF" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 232 227 </a> 233 228 </div> 234 229 <div 235 - class="css-y9r6ap" 230 + class="css-joklj2" 236 231 > 237 232 <div 238 233 class="css-19i1zwv" ··· 260 255 <path 261 256 clip-rule="evenodd" 262 257 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 263 - fill="#000" 258 + fill="#9090a0" 264 259 fill-rule="evenodd" 265 260 /> 266 261 </svg> ··· 277 272 <path 278 273 class="ionicon" 279 274 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 280 - style="fill: #000;" 275 + style="fill: #9090a0;" 281 276 /> 282 277 </svg> 283 278 </button> ··· 292 287 > 293 288 <path 294 289 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 295 - style="fill: #000;" 290 + style="fill: #9090a0;" 296 291 /> 297 292 </svg> 298 293 </button> ··· 308 303 <path 309 304 class="ionicon" 310 305 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 311 - style="fill: #000;" 306 + style="fill: #9090a0;" 312 307 /> 313 308 </svg> 314 309 </button> ··· 326 321 <path 327 322 clip-rule="evenodd" 328 323 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 329 - fill="#000" 324 + fill="#9090a0" 330 325 fill-rule="evenodd" 331 326 /> 332 327 </svg> ··· 334 329 </div> 335 330 </div> 336 331 <div 337 - class="css-frud38" 332 + class="css-1qa5636" 338 333 > 339 334 <div 340 - class="css-4ijxew" 335 + class="css-19t4u9x" 341 336 > 342 337 <svg 343 338 height="28" ··· 371 366 style="width: 100px; margin-top: 5px;" 372 367 > 373 368 <span 374 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 369 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 375 370 > 376 371 <span 377 372 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 411 406 <svg 412 407 aria-hidden="true" 413 408 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 414 - color="#000" 409 + color="#9090a0" 415 410 fill="currentColor" 416 411 focusable="false" 417 412 height="18" ··· 453 448 class="css-b767jv" 454 449 > 455 450 <button 456 - class="css-t20qhr" 451 + class="css-1b7deiq" 457 452 > 458 453 <div 459 454 style="margin-top: 2px;" ··· 465 460 xmlns="http://www.w3.org/2000/svg" 466 461 > 467 462 <g 468 - style="fill: #000;" 463 + style="fill: #9090a0;" 469 464 > 470 465 <path 471 466 d="M0 0h20v20H0Z" ··· 474 469 /> 475 470 <path 476 471 d="M16 9.25H6.873l4.192-4.193L10 4l-6 6 6 6 1.058-1.058-4.185-4.192H16v-1.5Z" 477 - style="fill: #000;" 472 + style="fill: #9090a0;" 478 473 /> 479 474 </g> 480 475 </svg> ··· 490 485 > 491 486 <thead> 492 487 <tr 493 - style="height: 36px; color: rgba(0, 0, 0, 0.54);" 488 + style="height: 36px; color: rgb(120, 120, 160);" 494 489 > 495 490 <th 496 491 style="text-align: left; width: 20px;" ··· 555 550 style="width: 150px; overflow: hidden;" 556 551 > 557 552 <a 558 - class="css-1e3wasx" 553 + class="css-1qqc8fe" 559 554 href="/files?q=/home/tsirysndr/Music/Big K.R.I.T." 560 555 > 561 556 Big K.R.I.T. ··· 662 657 style="width: 150px; overflow: hidden;" 663 658 > 664 659 <a 665 - class="css-1e3wasx" 660 + class="css-1qqc8fe" 666 661 href="/files?q=/home/tsirysndr/Music/BoyWithUke, Oliver Tree" 667 662 > 668 663 BoyWithUke, Oliver Tree ··· 769 764 style="width: 150px; overflow: hidden;" 770 765 > 771 766 <a 772 - class="css-1e3wasx" 767 + class="css-1qqc8fe" 773 768 href="/files?q=/home/tsirysndr/Music/Cage The Elephant" 774 769 > 775 770 Cage The Elephant ··· 876 871 style="width: 150px; overflow: hidden;" 877 872 > 878 873 <a 879 - class="css-1e3wasx" 874 + class="css-1qqc8fe" 880 875 href="/files?q=/home/tsirysndr/Music/Cannons" 881 876 > 882 877 Cannons ··· 983 978 style="width: 150px; overflow: hidden;" 984 979 > 985 980 <a 986 - class="css-1e3wasx" 981 + class="css-1qqc8fe" 987 982 href="/files?q=/home/tsirysndr/Music/Cold War Kids" 988 983 > 989 984 Cold War Kids ··· 1090 1085 style="width: 150px; overflow: hidden;" 1091 1086 > 1092 1087 <a 1093 - class="css-1e3wasx" 1088 + class="css-1qqc8fe" 1094 1089 href="/files?q=/home/tsirysndr/Music/Crazy Town" 1095 1090 > 1096 1091 Crazy Town ··· 1204 1199 style="width: 150px; overflow: hidden;" 1205 1200 > 1206 1201 <div 1207 - class="css-xpicpn" 1202 + class="css-1vu38xt" 1208 1203 > 1209 1204 Missez - Love Song ft. Pimp C-lIzJ7fmG-JA.mp4 1210 1205 </div>
+1 -1
webui/rockbox/src/Components/Files/styles.css
··· 1 1 tbody > tr:hover { 2 - background-color: #f9f9f97a; 2 + background-color: var(--row-hover-bg); 3 3 } 4 4 5 5 table {
+4 -4
webui/rockbox/src/Components/Files/styles.tsx
··· 34 34 cursor: pointer; 35 35 &:hover, 36 36 &:focus { 37 - color: #000; 37 + color: ${(props) => props.theme.colors.text}; 38 38 opacity: 1 !important; 39 39 } 40 40 `; ··· 58 58 `; 59 59 60 60 export const Directory = styled(Link)` 61 - color: #000; 61 + color: ${(props) => props.theme.colors.text}; 62 62 margin-left: 10px; 63 63 text-decoration: none; 64 64 font-family: RockfordSansRegular; ··· 74 74 `; 75 75 76 76 export const AudioFile = styled.div` 77 - color: #000; 77 + color: ${(props) => props.theme.colors.text}; 78 78 margin-left: 10px; 79 79 text-decoration: none; 80 80 font-family: RockfordSansRegular; ··· 100 100 width: 30px; 101 101 left: 20px; 102 102 border-radius: 15px; 103 - background-color: #f7f7f8; 103 + background-color: ${(props) => props.theme.colors.backButton}; 104 104 margin-top: 45px; 105 105 margin-bottom: 46px; 106 106 position: absolute;
+8 -6
webui/rockbox/src/Components/Likes/Likes.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC, useRef } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { createColumnHelper } from "@tanstack/react-table"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 39 40 }; 40 41 41 42 const Likes: FC<TracksProps> = (props) => { 43 + const theme = useTheme(); 42 44 const containerRef = useRef<HTMLDivElement>(null); 43 45 const columns = [ 44 46 columnHelper.accessor("trackNumber", { ··· 76 78 onClick={() => props.onPlayTrack(info.row.index)} 77 79 className="floating-play" 78 80 > 79 - <Play small color={info.getValue() ? "#fff" : "#000"} /> 81 + <Play small color={info.getValue() ? "#fff" : theme.colors.text} /> 80 82 </div> 81 83 </div> 82 84 )} ··· 89 91 onClick={() => props.onPlayTrack(info.row.index)} 90 92 className="floating-play" 91 93 > 92 - <Play small color={info.getValue() ? "#fff" : "#000"} /> 94 + <Play small color={info.getValue() ? "#fff" : theme.colors.text} /> 93 95 </div> 94 96 </div> 95 97 )} ··· 108 110 overflow: "hidden", 109 111 whiteSpace: "nowrap", 110 112 cursor: "pointer", 111 - color: "#000", 113 + color: theme.colors.text, 112 114 }} 113 115 > 114 116 {info.getValue()} ··· 127 129 overflow: "hidden", 128 130 whiteSpace: "nowrap", 129 131 cursor: "pointer", 130 - color: "#000", 132 + color: theme.colors.text, 131 133 }} 132 134 > 133 135 <Link to={`/artists/${info.row.original.artistId}`}> ··· 148 150 overflow: "hidden", 149 151 whiteSpace: "nowrap", 150 152 cursor: "pointer", 151 - color: "#000", 153 + color: theme.colors.text, 152 154 }} 153 155 > 154 156 <Link to={`/albums/${info.row.original.albumId}`}> ··· 203 205 <Separator /> 204 206 <Button onClick={props.onShuffleAll} kind="secondary"> 205 207 <Label> 206 - <Shuffle color="#fe099c" /> 208 + <Shuffle color="#6F00FF" /> 207 209 <div style={{ marginLeft: 7 }}>Shuffle</div> 208 210 </Label> 209 211 </Button>
+4
webui/rockbox/src/Components/Likes/styles.css
··· 2 2 border-spacing: 0; 3 3 } 4 4 5 + tbody > tr:hover { 6 + background-color: var(--row-hover-bg); 7 + } 8 + 5 9 .album-cover-container { 6 10 height: 48px; 7 11 width: 48px;
+3 -3
webui/rockbox/src/Components/Likes/styles.tsx
··· 35 35 cursor: pointer; 36 36 &:hover, 37 37 &:focus { 38 - color: #000; 38 + color: ${(props) => props.theme.colors.text}; 39 39 opacity: 1 !important; 40 40 } 41 41 `; ··· 85 85 height: 30px; 86 86 width: 30px; 87 87 border-radius: 15px; 88 - background-color: #f7f7f8; 88 + background-color: ${(props) => props.theme.colors.backButton}; 89 89 margin-top: 26px; 90 90 margin-bottom: 46px; 91 91 position: absolute; ··· 93 93 `; 94 94 95 95 export const Link = styled(RouterLink)` 96 - color: #000; 96 + color: ${(props) => props.theme.colors.text}; 97 97 text-decoration: none; 98 98 font-family: RockfordSansRegular; 99 99 &:hover {
+2 -1
webui/rockbox/src/Components/MainView/styles.tsx
··· 7 7 flex-direction: column; 8 8 position: relative; 9 9 width: calc(100% - 240px); 10 + background-color: ${(props) => props.theme.colors.background}; 10 11 background-position: center; 11 12 background-repeat: no-repeat; 12 13 background-size: cover; ··· 20 21 ${({ enabled }) => 21 22 enabled && 22 23 css` 23 - background: rgba(256, 256, 256, 0.8); 24 + background: rgba(0, 0, 0, 0.7); 24 25 backdrop-filter: blur(30px); 25 26 `} 26 27 `;
+7 -5
webui/rockbox/src/Components/PlaylistDetails/PlaylistDetails.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { createColumnHelper } from "@tanstack/react-table"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 51 52 onPlayTrack, 52 53 onRemoveTrack, 53 54 }) => { 55 + const theme = useTheme(); 54 56 const columns = [ 55 57 columnHelper.accessor("trackNumber", { 56 58 header: "#", ··· 62 64 className="floating-play" 63 65 onClick={() => onPlayTrack(info.row.index)} 64 66 > 65 - <Play color="#000" small /> 67 + <Play color={theme.colors.icon} small /> 66 68 </div> 67 69 </div> 68 70 ), ··· 80 82 overflow: "hidden", 81 83 whiteSpace: "nowrap", 82 84 cursor: "pointer", 83 - color: "#000", 85 + color: theme.colors.text, 84 86 }} 85 87 > 86 88 {info.getValue()} ··· 100 102 textOverflow: "ellipsis", 101 103 whiteSpace: "nowrap", 102 104 cursor: "pointer", 103 - color: "#000", 105 + color: theme.colors.text, 104 106 }} 105 107 > 106 108 <Link to={`/artists/${info.row.original.artistId}`}> ··· 158 160 <ContentWrapper> 159 161 <BackButton onClick={onGoBack}> 160 162 <div style={{ marginTop: 2 }}> 161 - <ArrowBack color="#000" /> 163 + <ArrowBack color={theme.colors.icon} /> 162 164 </div> 163 165 </BackButton> 164 166 <div style={{ marginBottom: 100 }}> ··· 193 195 <Separator /> 194 196 <Button onClick={onShuffleAll} kind="secondary"> 195 197 <Label> 196 - <Shuffle color="#fe099c" /> 198 + <Shuffle color="#6F00FF" /> 197 199 <div style={{ marginLeft: 7 }}>Shuffle</div> 198 200 </Label> 199 201 </Button>
+3 -1
webui/rockbox/src/Components/PlaylistDetails/PlaylistDetailsWithData.tsx
··· 71 71 artistId: t.artistId ?? undefined, 72 72 albumId: t.albumId ?? undefined, 73 73 time: formatTime(t.length), 74 - albumArt: t.albumArt ?? undefined, 74 + albumArt: t.albumArt 75 + ? `${location.protocol}//${location.host}/covers/${t.albumArt}` 76 + : undefined, 75 77 path: t.path, 76 78 })) 77 79 );
+3 -3
webui/rockbox/src/Components/PlaylistDetails/styles.tsx
··· 27 27 height: 240px; 28 28 width: 240px; 29 29 border-radius: 6px; 30 - background-color: #e8e8e8; 30 + background-color: ${(props) => props.theme.colors.cover}; 31 31 background-image: ${({ image }) => (image ? `url(${image})` : "none")}; 32 32 background-size: cover; 33 33 background-position: center; ··· 82 82 height: 30px; 83 83 width: 30px; 84 84 border-radius: 15px; 85 - background-color: #f7f7f8; 85 + background-color: ${(props) => props.theme.colors.backButton}; 86 86 margin-top: 26px; 87 87 margin-bottom: 46px; 88 88 position: absolute; ··· 96 96 `; 97 97 98 98 export const Link = styled(RouterLink)` 99 - color: #000; 99 + color: ${(props) => props.theme.colors.text}; 100 100 text-decoration: none; 101 101 font-family: RockfordSansRegular; 102 102 &:hover {
+17 -9
webui/rockbox/src/Components/Playlists/PlaylistModal.tsx
··· 1 1 import { FC, useState } from "react"; 2 + import { useTheme } from "@emotion/react"; 2 3 3 4 type PlaylistModalProps = { 4 5 title: string; ··· 15 16 onClose, 16 17 onSave, 17 18 }) => { 19 + const theme = useTheme(); 18 20 const [name, setName] = useState(initialName); 19 21 const [description, setDescription] = useState(initialDescription); 20 22 const [saving, setSaving] = useState(false); ··· 41 43 > 42 44 <div 43 45 style={{ 44 - background: "#fff", 46 + background: theme.colors.surface, 45 47 borderRadius: 12, 46 48 padding: 28, 47 49 width: 380, 48 - boxShadow: "0 8px 32px rgba(0,0,0,0.15)", 50 + boxShadow: "0 8px 32px rgba(0,0,0,0.5)", 51 + color: theme.colors.text, 49 52 }} 50 53 onClick={(e) => e.stopPropagation()} 51 54 > ··· 62 65 <label 63 66 style={{ 64 67 fontSize: 12, 65 - color: "#555", 68 + color: theme.colors.secondaryText, 66 69 display: "block", 67 70 marginBottom: 4, 68 71 }} ··· 76 79 onKeyDown={(e) => e.key === "Enter" && handleSave()} 77 80 style={{ 78 81 width: "100%", 79 - border: "1px solid #ddd", 82 + border: `1px solid ${theme.colors.separator}`, 80 83 borderRadius: 8, 81 84 padding: "8px 10px", 82 85 fontSize: 14, 83 86 outline: "none", 84 87 boxSizing: "border-box", 88 + background: theme.colors.background, 89 + color: theme.colors.text, 85 90 }} 86 91 /> 87 92 </div> ··· 89 94 <label 90 95 style={{ 91 96 fontSize: 12, 92 - color: "#555", 97 + color: theme.colors.secondaryText, 93 98 display: "block", 94 99 marginBottom: 4, 95 100 }} ··· 101 106 onChange={(e) => setDescription(e.target.value)} 102 107 style={{ 103 108 width: "100%", 104 - border: "1px solid #ddd", 109 + border: `1px solid ${theme.colors.separator}`, 105 110 borderRadius: 8, 106 111 padding: "8px 10px", 107 112 fontSize: 14, 108 113 outline: "none", 109 114 boxSizing: "border-box", 115 + background: theme.colors.background, 116 + color: theme.colors.text, 110 117 }} 111 118 /> 112 119 </div> ··· 114 121 <button 115 122 onClick={onClose} 116 123 style={{ 117 - border: "1px solid #ddd", 124 + border: `1px solid ${theme.colors.separator}`, 118 125 borderRadius: 8, 119 126 padding: "8px 16px", 120 127 cursor: "pointer", 121 - background: "#fff", 128 + background: theme.colors.hover, 129 + color: theme.colors.text, 122 130 fontSize: 13, 123 131 }} 124 132 > ··· 128 136 onClick={handleSave} 129 137 disabled={!name.trim() || saving} 130 138 style={{ 131 - background: name.trim() ? "#fe099c" : "#ccc", 139 + background: name.trim() ? theme.colors.primary : theme.colors.hover, 132 140 color: "#fff", 133 141 border: "none", 134 142 borderRadius: 8,
+14 -10
webui/rockbox/src/Components/Playlists/Playlists.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC, useState } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import MainView from "../MainView"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 40 41 onCreate, 41 42 onUpdate, 42 43 }) => { 44 + const theme = useTheme(); 43 45 const [createModalOpen, setCreateModalOpen] = useState(false); 44 46 const [editPlaylist, setEditPlaylist] = useState<any>(null); 45 47 const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null); ··· 62 64 <button 63 65 onClick={() => setCreateModalOpen(true)} 64 66 style={{ 65 - background: "#fe099c", 67 + background: "#6F00FF", 66 68 color: "#fff", 67 69 border: "none", 68 70 borderRadius: 20, ··· 89 91 </Link> 90 92 <CardActions className="card-actions"> 91 93 <CardAction onClick={() => onPlay(playlist.id, false)}> 92 - <Play small color="#000" /> 94 + <Play small color={theme.colors.icon} /> 93 95 </CardAction> 94 96 <div style={{ display: "flex", gap: 4 }}> 95 97 <CardAction onClick={() => setEditPlaylist(playlist)}> 96 - <Edit2 size={15} color="#000" /> 98 + <Edit2 size={15} color={theme.colors.icon} /> 97 99 </CardAction> 98 100 <CardAction 99 101 onClick={() => setDeleteConfirmId(playlist.id)} ··· 120 122 <PlaylistCard key={playlist.id}> 121 123 <Link to={`/playlists/smart/${playlist.id}`}> 122 124 <PlaylistCover> 123 - <Music size={48} color="#fe099c" /> 125 + <Music size={48} color="#6F00FF" /> 124 126 </PlaylistCover> 125 127 </Link> 126 128 <CardActions className="card-actions"> 127 129 <CardAction onClick={() => onPlay(playlist.id, true)}> 128 - <Play small color="#000" /> 130 + <Play small color={theme.colors.icon} /> 129 131 </CardAction> 130 132 </CardActions> 131 133 <Link to={`/playlists/smart/${playlist.id}`}> ··· 187 189 > 188 190 <div 189 191 style={{ 190 - background: "#fff", 192 + background: theme.colors.surface, 191 193 borderRadius: 12, 192 194 padding: 28, 193 195 width: 320, 194 - boxShadow: "0 8px 32px rgba(0,0,0,0.15)", 196 + boxShadow: "0 8px 32px rgba(0,0,0,0.4)", 195 197 }} 196 198 onClick={(e) => e.stopPropagation()} 197 199 > ··· 200 202 fontSize: 16, 201 203 fontFamily: "RockfordSansMedium", 202 204 marginBottom: 12, 205 + color: theme.colors.text, 203 206 }} 204 207 > 205 208 Delete playlist? 206 209 </div> 207 - <div style={{ fontSize: 14, color: "#555", marginBottom: 24 }}> 210 + <div style={{ fontSize: 14, color: theme.colors.secondaryText, marginBottom: 24 }}> 208 211 This action cannot be undone. 209 212 </div> 210 213 <div ··· 217 220 <button 218 221 onClick={() => setDeleteConfirmId(null)} 219 222 style={{ 220 - border: "1px solid #ddd", 223 + border: `1px solid ${theme.colors.separator}`, 221 224 borderRadius: 8, 222 225 padding: "8px 16px", 223 226 cursor: "pointer", 224 - background: "#fff", 227 + background: theme.colors.hover, 228 + color: theme.colors.text, 225 229 fontSize: 13, 226 230 }} 227 231 >
+8 -7
webui/rockbox/src/Components/Playlists/styles.tsx
··· 30 30 padding-right: 20px; 31 31 margin-bottom: 16px; 32 32 margin-top: 24px; 33 - color: #555; 33 + color: ${(props) => props.theme.colors.secondaryText}; 34 34 `; 35 35 36 36 export const PlaylistGrid = styled.div` ··· 55 55 width: 100%; 56 56 aspect-ratio: 1; 57 57 border-radius: 6px; 58 - background-color: #e8e8e8; 58 + background-color: ${(props) => props.theme.colors.cover}; 59 59 background-image: ${({ image }) => (image ? `url(${image})` : "none")}; 60 60 background-size: cover; 61 61 background-position: center; ··· 72 72 white-space: nowrap; 73 73 overflow: hidden; 74 74 text-overflow: ellipsis; 75 - color: #000; 75 + color: ${(props) => props.theme.colors.text}; 76 76 `; 77 77 78 78 export const PlaylistMeta = styled.div` 79 79 font-size: 12px; 80 - color: #828282; 80 + color: ${(props) => props.theme.colors.secondaryText}; 81 81 margin-top: 2px; 82 82 `; 83 83 84 84 export const CardActions = styled.div` 85 85 position: absolute; 86 - bottom: 44px; 86 + bottom: 48px; 87 87 left: 8px; 88 88 right: 8px; 89 89 display: flex; ··· 92 92 justify-content: space-between; 93 93 opacity: 0; 94 94 transition: opacity 0.15s; 95 + padding-bottom: 6px; 95 96 `; 96 97 97 98 export const CardAction = styled.button` ··· 103 104 display: flex; 104 105 align-items: center; 105 106 justify-content: center; 106 - background-color: rgba(255, 255, 255, 0.85); 107 + background-color: ${(props) => props.theme.colors.surface}; 107 108 backdrop-filter: blur(4px); 108 109 109 110 &:hover { 110 - background-color: #fff; 111 + background-color: ${(props) => props.theme.colors.hover}; 111 112 } 112 113 `; 113 114
+5 -11
webui/rockbox/src/Components/Settings/Library/styles.tsx
··· 56 56 57 57 export default { 58 58 // eslint-disable-next-line @typescript-eslint/no-explicit-any 59 - slider: (t: any) => ({ 60 - color: "rgba(0, 0, 0, 0.682)", 59 + slider: (_t: any) => ({ 60 + color: "#6F00FF", 61 61 "& .MuiSlider-track": { 62 62 border: "none", 63 63 }, ··· 72 72 boxShadow: "none", 73 73 }, 74 74 }, 75 - ...t.applyStyles("dark", { 76 - color: "#fff", 77 - }), 78 75 }), 79 76 // eslint-disable-next-line @typescript-eslint/no-explicit-any 80 77 sliderIOS: (theme: any) => ({ 81 - color: "#7C00FE", 78 + color: "#6F00FF", 82 79 83 80 "& .MuiSlider-thumb": { 84 81 height: 20, ··· 108 105 }, 109 106 "& *": { 110 107 background: "transparent", 111 - color: "#000", 112 - ...theme.applyStyles("dark", { 113 - color: "#fff", 114 - }), 108 + color: "inherit", 115 109 }, 116 110 }, 117 111 "& .MuiSlider-track": { ··· 124 118 backgroundColor: "#d0d0d0", 125 119 }, 126 120 ...theme.applyStyles("dark", { 127 - color: "#7C00FE", 121 + color: "#6F00FF", 128 122 }), 129 123 }), 130 124 };
+5 -11
webui/rockbox/src/Components/Settings/Playback/styles.tsx
··· 56 56 57 57 export default { 58 58 // eslint-disable-next-line @typescript-eslint/no-explicit-any 59 - slider: (t: any) => ({ 60 - color: "rgba(0, 0, 0, 0.682)", 59 + slider: (_t: any) => ({ 60 + color: "#6F00FF", 61 61 "& .MuiSlider-track": { 62 62 border: "none", 63 63 }, ··· 72 72 boxShadow: "none", 73 73 }, 74 74 }, 75 - ...t.applyStyles("dark", { 76 - color: "#fff", 77 - }), 78 75 }), 79 76 // eslint-disable-next-line @typescript-eslint/no-explicit-any 80 77 sliderIOS: (theme: any) => ({ 81 - color: "#7C00FE", 78 + color: "#6F00FF", 82 79 83 80 "& .MuiSlider-thumb": { 84 81 height: 20, ··· 108 105 }, 109 106 "& *": { 110 107 background: "transparent", 111 - color: "#000", 112 - ...theme.applyStyles("dark", { 113 - color: "#fff", 114 - }), 108 + color: "inherit", 115 109 }, 116 110 }, 117 111 "& .MuiSlider-track": { ··· 124 118 backgroundColor: "#d0d0d0", 125 119 }, 126 120 ...theme.applyStyles("dark", { 127 - color: "#7C00FE", 121 + color: "#6F00FF", 128 122 }), 129 123 }), 130 124 };
+4 -7
webui/rockbox/src/Components/Settings/Sound/Equalizer/styles.tsx
··· 55 55 56 56 export default { 57 57 // eslint-disable-next-line @typescript-eslint/no-explicit-any 58 - slider: (t: any) => ({ 59 - color: "rgba(0, 0, 0, 0.682)", 58 + slider: (_t: any) => ({ 59 + color: "#6F00FF", 60 60 "& .MuiSlider-track": { 61 61 border: "none", 62 62 }, ··· 71 71 boxShadow: "none", 72 72 }, 73 73 }, 74 - ...t.applyStyles("dark", { 75 - color: "#fff", 76 - }), 77 74 }), 78 75 // eslint-disable-next-line @typescript-eslint/no-explicit-any 79 76 sliderIOS: (theme: any) => ({ 80 - color: "rgb(254, 9, 156)", 77 + color: "#6F00FF", 81 78 82 79 "& .MuiSlider-thumb": { 83 80 height: 20, ··· 106 103 backgroundColor: "#d0d0d0", 107 104 }, 108 105 ...theme.applyStyles("dark", { 109 - color: "rgb(254, 9, 156)", 106 + color: "#6F00FF", 110 107 }), 111 108 }), 112 109 };
+5 -11
webui/rockbox/src/Components/Settings/Sound/styles.tsx
··· 56 56 57 57 export default { 58 58 // eslint-disable-next-line @typescript-eslint/no-explicit-any 59 - slider: (t: any) => ({ 60 - color: "rgba(0, 0, 0, 0.682)", 59 + slider: (_t: any) => ({ 60 + color: "#6F00FF", 61 61 "& .MuiSlider-track": { 62 62 border: "none", 63 63 }, ··· 72 72 boxShadow: "none", 73 73 }, 74 74 }, 75 - ...t.applyStyles("dark", { 76 - color: "#fff", 77 - }), 78 75 }), 79 76 // eslint-disable-next-line @typescript-eslint/no-explicit-any 80 77 sliderIOS: (theme: any) => ({ 81 - color: "#7C00FE", 78 + color: "#6F00FF", 82 79 83 80 "& .MuiSlider-thumb": { 84 81 height: 20, ··· 108 105 }, 109 106 "& *": { 110 107 background: "transparent", 111 - color: "#000", 112 - ...theme.applyStyles("dark", { 113 - color: "#fff", 114 - }), 108 + color: "inherit", 115 109 }, 116 110 }, 117 111 "& .MuiSlider-track": { ··· 124 118 backgroundColor: "#d0d0d0", 125 119 }, 126 120 ...theme.applyStyles("dark", { 127 - color: "#7C00FE", 121 + color: "#6F00FF", 128 122 }), 129 123 }), 130 124 };
+18 -22
webui/rockbox/src/Components/Sidebar/Sidebar.tsx
··· 8 8 import HeartOutline from "../Icons/HeartOutline"; 9 9 import { Options } from "@styled-icons/fluentui-system-regular"; 10 10 import { Link } from "react-router-dom"; 11 + import { useTheme } from "@emotion/react"; 11 12 12 13 export type SidebarProps = { 13 14 active: string; ··· 15 16 }; 16 17 17 18 const Sidebar: FC<SidebarProps> = ({ active, cover }) => { 19 + const theme = useTheme(); 20 + const icon = theme.colors.icon; 21 + const activeColor = theme.colors.text; 22 + 18 23 return ( 19 24 <SidebarContainer cover={cover}> 20 25 <Header> ··· 32 37 </a> 33 38 <Link to="/settings"> 34 39 <SettingsButton> 35 - <Options size={24} color="#000" /> 40 + <Options size={24} color={icon} /> 36 41 </SettingsButton> 37 42 </Link> 38 43 </Header> 39 - <MenuItem 40 - color={active === "albums" ? "#fe099c" : "initial"} 41 - to="/albums" 42 - > 44 + <MenuItem active={active === "albums"} to="/albums"> 43 45 <Disc 44 46 size={20} 45 47 style={{ marginRight: 6 }} 46 - color={active === "albums" ? "#fe099c" : "initial"} 48 + color={active === "albums" ? activeColor : icon} 47 49 /> 48 50 <div>Albums</div> 49 51 </MenuItem> 50 - <MenuItem 51 - color={active === "artists" ? "#fe099c" : "initial"} 52 - to="/artists" 53 - > 52 + <MenuItem active={active === "artists"} to="/artists"> 54 53 <Artist 55 54 width={20} 56 55 height={20} 57 - color={active === "artists" ? "#fe099c" : "initial"} 56 + color={active === "artists" ? activeColor : icon} 58 57 /> 59 58 <div style={{ marginLeft: 6 }}>Artists</div> 60 59 </MenuItem> 61 - <MenuItem color={active === "songs" ? "#fe099c" : "initial"} to="/tracks"> 62 - <Track height={20} color={active === "songs" ? "#fe099c" : "initial"} /> 60 + <MenuItem active={active === "songs"} to="/tracks"> 61 + <Track height={20} color={active === "songs" ? activeColor : icon} /> 63 62 <div style={{ marginLeft: 6 }}>Songs</div> 64 63 </MenuItem> 65 - <MenuItem color={active === "likes" ? "#fe099c" : "initial"} to="/likes"> 64 + <MenuItem active={active === "likes"} to="/likes"> 66 65 <HeartOutline 67 66 height={20} 68 67 width={20} 69 - color={active === "likes" ? "#fe099c" : "initial"} 68 + color={active === "likes" ? activeColor : icon} 70 69 /> 71 70 <div style={{ marginLeft: 6 }}>Likes</div> 72 71 </MenuItem> 73 - <MenuItem color={active === "files" ? "#fe099c" : "initial"} to="/files"> 72 + <MenuItem active={active === "files"} to="/files"> 74 73 <HardDrive 75 74 size={19} 76 75 style={{ marginRight: 6 }} 77 - color={active === "files" ? "#fe099c" : "initial"} 76 + color={active === "files" ? activeColor : icon} 78 77 /> 79 78 <div>Files</div> 80 79 </MenuItem> 81 - <MenuItem 82 - color={active === "playlists" ? "#fe099c" : "initial"} 83 - to="/playlists" 84 - > 80 + <MenuItem active={active === "playlists"} to="/playlists"> 85 81 <Music 86 82 size={20} 87 83 style={{ marginRight: 6 }} 88 - color={active === "playlists" ? "#fe099c" : "initial"} 84 + color={active === "playlists" ? activeColor : icon} 89 85 /> 90 86 <div>Playlists</div> 91 87 </MenuItem>
+17 -22
webui/rockbox/src/Components/Sidebar/__snapshots__/Sidebar.test.tsx.snap
··· 6 6 class="" 7 7 > 8 8 <div 9 - class="css-1tlxqlf" 9 + class="css-1iac89y" 10 10 > 11 11 <div 12 12 class="css-1osgnyu" ··· 25 25 href="/settings" 26 26 > 27 27 <button 28 - class="css-fduwnf" 28 + class="css-1i2ljwf" 29 29 > 30 30 <svg 31 31 aria-hidden="true" 32 32 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 33 - color="#000" 33 + color="#9090a0" 34 34 fill="currentColor" 35 35 focusable="false" 36 36 height="24" ··· 46 46 </a> 47 47 </div> 48 48 <a 49 - class="css-8v05qj" 50 - color="#fe099c" 49 + class="css-1hl5flw" 50 + color="#6F00FF" 51 51 href="/albums" 52 52 > 53 53 <svg 54 54 aria-hidden="true" 55 55 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 56 - color="#fe099c" 56 + color="#6F00FF" 57 57 fill="currentColor" 58 58 focusable="false" 59 59 height="20" ··· 74 74 </div> 75 75 </a> 76 76 <a 77 - class="css-tujm8o" 78 - color="initial" 77 + class="css-j9huyi" 79 78 href="/artists" 80 79 > 81 80 <svg ··· 86 85 > 87 86 <path 88 87 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 89 - fill="initial" 88 + fill="#9090a0" 90 89 /> 91 90 </svg> 92 91 <div ··· 96 95 </div> 97 96 </a> 98 97 <a 99 - class="css-tujm8o" 100 - color="initial" 98 + class="css-j9huyi" 101 99 href="/tracks" 102 100 > 103 101 <svg ··· 107 105 > 108 106 <path 109 107 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 110 - fill="initial" 108 + fill="#9090a0" 111 109 /> 112 110 </svg> 113 111 <div ··· 117 115 </div> 118 116 </a> 119 117 <a 120 - class="css-tujm8o" 121 - color="initial" 118 + class="css-j9huyi" 122 119 href="/likes" 123 120 > 124 121 <svg ··· 130 127 > 131 128 <g 132 129 class="ionicon" 133 - style="fill: initial;" 130 + style="fill: #9090a0;" 134 131 > 135 132 <path 136 133 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 146 143 stroke="currentColor" 147 144 stroke-linecap="round" 148 145 stroke-linejoin="round" 149 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 146 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 150 147 /> 151 148 </g> 152 149 </svg> ··· 157 154 </div> 158 155 </a> 159 156 <a 160 - class="css-tujm8o" 161 - color="initial" 157 + class="css-j9huyi" 162 158 href="/files" 163 159 > 164 160 <svg 165 161 aria-hidden="true" 166 162 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 167 - color="initial" 163 + color="#9090a0" 168 164 fill="none" 169 165 focusable="false" 170 166 height="19" ··· 203 199 </div> 204 200 </a> 205 201 <a 206 - class="css-tujm8o" 207 - color="initial" 202 + class="css-j9huyi" 208 203 href="/playlists" 209 204 > 210 205 <svg 211 206 aria-hidden="true" 212 207 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 213 - color="initial" 208 + color="#9090a0" 214 209 fill="currentColor" 215 210 focusable="false" 216 211 height="20"
+11 -9
webui/rockbox/src/Components/Sidebar/styles.tsx
··· 4 4 5 5 export const SettingsButton = styled.button` 6 6 display: flex; 7 - background-color: #f6f9fc; 7 + background-color: transparent; 8 8 border: none; 9 9 cursor: pointer; 10 10 margin-top: 3px; ··· 23 23 flex-direction: column; 24 24 height: 100vh; 25 25 width: 222px; 26 - background-color: #f6f9fc; 26 + background-color: ${(props) => props.theme.colors.surface}; 27 27 padding: 20px; 28 28 ${(props) => 29 29 props.cover && 30 30 css` 31 - background-color: #fff; 31 + background-color: ${props.theme.colors.background}; 32 32 `} 33 33 `; 34 34 35 - export const MenuItem = styled(Link)<{ color?: string }>` 35 + export const MenuItem = styled(Link)<{ active?: boolean }>` 36 36 display: flex; 37 37 align-items: center; 38 38 justify-content: flex-start; ··· 41 41 cursor: pointer; 42 42 font-size: 14px; 43 43 text-decoration: none; 44 - ${({ color }) => 45 - color && 46 - css` 47 - color: ${color}; 48 - `} 44 + border-radius: 8px; 45 + color: ${(props) => props.active ? props.theme.colors.text : props.theme.colors.icon}; 46 + background-color: ${(props) => props.active ? props.theme.colors.hover : "transparent"}; 47 + &:hover { 48 + background-color: ${(props) => props.theme.colors.hover}; 49 + color: ${(props) => props.theme.colors.text}; 50 + } 49 51 `;
+3 -3
webui/rockbox/src/Components/Switch/Switch.tsx
··· 15 15 transform: "translateX(16px)", 16 16 color: "#fff", 17 17 "& + .MuiSwitch-track": { 18 - backgroundColor: "rgb(254, 9, 156)", 18 + backgroundColor: "#6F00FF", 19 19 opacity: 1, 20 20 border: 0, 21 21 ...theme.applyStyles("dark", { 22 - backgroundColor: "rgb(254, 9, 156)", 22 + backgroundColor: "#6F00FF", 23 23 }), 24 24 }, 25 25 "&.Mui-disabled + .MuiSwitch-track": { ··· 27 27 }, 28 28 }, 29 29 "&.Mui-focusVisible .MuiSwitch-thumb": { 30 - color: "rgb(254, 9, 156)", 30 + color: "#6F00FF", 31 31 border: "6px solid #fff", 32 32 }, 33 33 "&.Mui-disabled .MuiSwitch-thumb": {
+3 -1
webui/rockbox/src/Components/Table/Table.tsx
··· 6 6 useReactTable, 7 7 } from "@tanstack/react-table"; 8 8 import { FC, useEffect, useState } from "react"; 9 + import { useTheme } from "@emotion/react"; 9 10 import { Track } from "../../Types/track"; 10 11 11 12 export type TableProps = { ··· 15 16 }; 16 17 17 18 const Table: FC<TableProps> = ({ columns, tracks }) => { 19 + const theme = useTheme(); 18 20 const [data, setData] = useState<Track[]>(() => [...tracks]); 19 21 20 22 useEffect(() => { ··· 33 35 {table.getHeaderGroups().map((headerGroup) => ( 34 36 <tr 35 37 key={headerGroup.id} 36 - style={{ height: 36, color: "rgba(0, 0, 0, 0.54)" }} 38 + style={{ height: 36, color: theme.colors.secondaryText }} 37 39 > 38 40 {headerGroup.headers.map((header) => ( 39 41 <th
+7 -5
webui/rockbox/src/Components/Tracks/Tracks.tsx
··· 1 1 /* eslint-disable @typescript-eslint/no-explicit-any */ 2 2 import { FC, useRef } from "react"; 3 + import { useTheme } from "@emotion/react"; 3 4 import { createColumnHelper } from "@tanstack/react-table"; 4 5 import Sidebar from "../Sidebar"; 5 6 import ControlBar from "../ControlBar"; ··· 32 33 }; 33 34 34 35 const Tracks: FC<TracksProps> = (props) => { 36 + const theme = useTheme(); 35 37 const containerRef = useRef<HTMLDivElement>(null); 36 38 const columns = [ 37 39 columnHelper.accessor("trackNumber", { ··· 68 70 onClick={() => props.onPlayTrack(info.row.index)} 69 71 className="floating-play" 70 72 > 71 - <Play size={16} color={info.getValue() ? "#fff" : "#000"} /> 73 + <Play size={16} color={info.getValue() ? "#fff" : theme.colors.text} /> 72 74 </div> 73 75 </div> 74 76 )} ··· 81 83 onClick={() => props.onPlayTrack(info.row.index)} 82 84 className="floating-play" 83 85 > 84 - <Play size={16} color={info.getValue() ? "#fff" : "#000"} /> 86 + <Play size={16} color={info.getValue() ? "#fff" : theme.colors.text} /> 85 87 </div> 86 88 </div> 87 89 )} ··· 100 102 overflow: "hidden", 101 103 whiteSpace: "nowrap", 102 104 cursor: "pointer", 103 - color: "#000", 105 + color: theme.colors.text, 104 106 }} 105 107 > 106 108 {info.getValue()} ··· 119 121 overflow: "hidden", 120 122 whiteSpace: "nowrap", 121 123 cursor: "pointer", 122 - color: "#000", 124 + color: theme.colors.text, 123 125 }} 124 126 > 125 127 <Link to={`/artists/${info.row.original.artistId}`}> ··· 140 142 overflow: "hidden", 141 143 whiteSpace: "nowrap", 142 144 cursor: "pointer", 143 - color: "#000", 145 + color: theme.colors.text, 144 146 }} 145 147 > 146 148 <Link to={`/albums/${info.row.original.albumId}`}>
+27 -32
webui/rockbox/src/Components/Tracks/__snapshots__/Tracks.test.tsx.snap
··· 9 9 class="css-e1989k" 10 10 > 11 11 <div 12 - class="css-1tlxqlf" 12 + class="css-1iac89y" 13 13 > 14 14 <div 15 15 class="css-1osgnyu" ··· 28 28 href="/settings" 29 29 > 30 30 <button 31 - class="css-fduwnf" 31 + class="css-1i2ljwf" 32 32 > 33 33 <svg 34 34 aria-hidden="true" 35 35 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 36 - color="#000" 36 + color="#9090a0" 37 37 fill="currentColor" 38 38 focusable="false" 39 39 height="24" ··· 49 49 </a> 50 50 </div> 51 51 <a 52 - class="css-tujm8o" 53 - color="initial" 52 + class="css-j9huyi" 54 53 href="/albums" 55 54 > 56 55 <svg 57 56 aria-hidden="true" 58 57 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 59 - color="initial" 58 + color="#9090a0" 60 59 fill="currentColor" 61 60 focusable="false" 62 61 height="20" ··· 77 76 </div> 78 77 </a> 79 78 <a 80 - class="css-tujm8o" 81 - color="initial" 79 + class="css-j9huyi" 82 80 href="/artists" 83 81 > 84 82 <svg ··· 89 87 > 90 88 <path 91 89 d="M20 4.22a5.67 5.67 0 0 0-9.68 4.57l-8 9.79 3.3 3.3 9.79-8c.18 0 .36.05.55.05a5.7 5.7 0 0 0 4-9.73ZM5.74 19.86l-1.38-1.38 6.44-7.89a5.48 5.48 0 0 0 2.83 2.84Zm13.21-8.65a4.2 4.2 0 1 1 0-5.94 4.17 4.17 0 0 1 0 5.95Z" 92 - fill="initial" 90 + fill="#9090a0" 93 91 /> 94 92 </svg> 95 93 <div ··· 99 97 </div> 100 98 </a> 101 99 <a 102 - class="css-8v05qj" 103 - color="#fe099c" 100 + class="css-1hl5flw" 101 + color="#6F00FF" 104 102 href="/tracks" 105 103 > 106 104 <svg ··· 110 108 > 111 109 <path 112 110 d="M8.1 4.65v11.26a3.45 3.45 0 1 0 1.5 2.84V5.85l10.2-2.36v10.62A3.45 3.45 0 1 0 21.3 17V1.61Zm-2 16a2 2 0 1 1 2-2 2 2 0 0 1-1.95 2.05Zm11.7-1.8a1.95 1.95 0 1 1 2-1.85 2 2 0 0 1-1.95 1.9Z" 113 - fill="#fe099c" 111 + fill="#6F00FF" 114 112 /> 115 113 </svg> 116 114 <div ··· 120 118 </div> 121 119 </a> 122 120 <a 123 - class="css-tujm8o" 124 - color="initial" 121 + class="css-j9huyi" 125 122 href="/likes" 126 123 > 127 124 <svg ··· 133 130 > 134 131 <g 135 132 class="ionicon" 136 - style="fill: initial;" 133 + style="fill: #9090a0;" 137 134 > 138 135 <path 139 136 d="M13.534 4C11.167 4 10 6.364 10 6.364S8.833 4 6.466 4C4.543 4 3.02 5.63 3 7.575c-.04 4.038 3.162 6.91 6.672 9.323a.578.578 0 0 0 .656 0c3.51-2.413 6.712-5.285 6.672-9.323C16.98 5.63 15.457 4 13.534 4Z" ··· 149 146 stroke="currentColor" 150 147 stroke-linecap="round" 151 148 stroke-linejoin="round" 152 - style="fill: none; stroke-width: 2; stroke: initial; stroke-opacity: 1;" 149 + style="fill: none; stroke-width: 2; stroke: #9090a0; stroke-opacity: 1;" 153 150 /> 154 151 </g> 155 152 </svg> ··· 160 157 </div> 161 158 </a> 162 159 <a 163 - class="css-tujm8o" 164 - color="initial" 160 + class="css-j9huyi" 165 161 href="/files" 166 162 > 167 163 <svg 168 164 aria-hidden="true" 169 165 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 170 - color="initial" 166 + color="#9090a0" 171 167 fill="none" 172 168 focusable="false" 173 169 height="19" ··· 206 202 </div> 207 203 </a> 208 204 <a 209 - class="css-tujm8o" 210 - color="initial" 205 + class="css-j9huyi" 211 206 href="/playlists" 212 207 > 213 208 <svg 214 209 aria-hidden="true" 215 210 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 216 - color="initial" 211 + color="#9090a0" 217 212 fill="currentColor" 218 213 focusable="false" 219 214 height="20" ··· 232 227 </a> 233 228 </div> 234 229 <div 235 - class="css-y9r6ap" 230 + class="css-joklj2" 236 231 > 237 232 <div 238 233 class="css-19i1zwv" ··· 260 255 <path 261 256 clip-rule="evenodd" 262 257 d="M16.2 7h2.85l-1.3 1.3c-.4.4-.4 1 0 1.4.25.2.5.3.75.3s.5-.1.7-.3l3-3 .15-.15.05-.05c0-.025.013-.037.025-.05.012-.013.025-.025.025-.05 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056 0-.021 0-.033.004-.044.005-.015.017-.027.046-.056.05-.15.05-.25 0-.4 0-.05 0-.05-.05-.1 0-.021 0-.033-.004-.044-.005-.015-.017-.027-.046-.056 0-.025-.012-.037-.025-.05-.012-.013-.025-.025-.025-.05 0 0 0-.05-.05-.05l-.15-.15-3-3c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4L19.1 5h-2.85c-1.75 0-3.3.9-4.25 2.35L6.85 15.6c-.55.9-1.5 1.4-2.55 1.4H2.5c-.55 0-1 .45-1 1s.45 1 1 1h1.8c1.75 0 3.3-.9 4.25-2.35L13.7 8.4c.5-.85 1.5-1.4 2.5-1.4ZM2.5 7h1.8c1.05 0 2 .5 2.55 1.4l.45.75 1.2-1.9C7.55 5.8 6 4.95 4.3 4.95H2.5c-.55 0-1 .45-1 1 0 .6.45 1.05 1 1.05Zm19.95 11.2v.05c0 .05 0 .1-.05.1v.05c-.05.1-.1.2-.2.3l-3 3c-.2.2-.45.3-.7.3-.25 0-.5-.1-.75-.3-.4-.4-.4-1 0-1.4l1.3-1.3H16.2c-1.7 0-3.25-.85-4.2-2.3l1.25-1.9.45.75c.55.9 1.5 1.4 2.55 1.4h2.85l-1.3-1.3c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0l3 3c.1.1.15.2.2.3v.05c.05.05.05.1.05.15v.05c.05.15.05.25 0 .4Z" 263 - fill="#000" 258 + fill="#9090a0" 264 259 fill-rule="evenodd" 265 260 /> 266 261 </svg> ··· 277 272 <path 278 273 class="ionicon" 279 274 d="M3.55 2c.304 0 .55.243.55.542V7.16l8.001-4.716a1.224 1.224 0 0 1 1.23-.015c.413.23.669.677.669 1.162v9.818c0 .486-.256.932-.669 1.162-.382.216-.853.21-1.23-.015L4.1 9.84v4.618a.546.546 0 0 1-.55.542.546.546 0 0 1-.55-.542V2.542C3 2.243 3.246 2 3.55 2Z" 280 - style="fill: #000;" 275 + style="fill: #9090a0;" 281 276 /> 282 277 </svg> 283 278 </button> ··· 292 287 > 293 288 <path 294 289 d="M10.657 27a2.842 2.842 0 0 1-1.258-.292C8.536 26.283 8 25.458 8 24.563V6.438c0-.899.536-1.721 1.399-2.146a2.856 2.856 0 0 1 2.571.028l17.817 9.273c.755.411 1.213 1.131 1.213 1.906 0 .774-.458 1.495-1.213 1.906l-17.82 9.275a2.846 2.846 0 0 1-1.31.32Z" 295 - style="fill: #000;" 290 + style="fill: #9090a0;" 296 291 /> 297 292 </svg> 298 293 </button> ··· 308 303 <path 309 304 class="ionicon" 310 305 d="M14.45 2a.546.546 0 0 0-.55.542V7.16L5.899 2.444a1.224 1.224 0 0 0-1.23-.015C4.256 2.659 4 3.105 4 3.591v9.818c0 .486.256.932.669 1.162.382.216.853.21 1.23-.015L13.9 9.84v4.618c0 .299.246.542.55.542.304 0 .55-.243.55-.542V2.542A.546.546 0 0 0 14.45 2Z" 311 - style="fill: #000;" 306 + style="fill: #9090a0;" 312 307 /> 313 308 </svg> 314 309 </button> ··· 326 321 <path 327 322 clip-rule="evenodd" 328 323 d="M16.293 1.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 1 1-1.414-1.414L17.586 6H8.5c-3.298 0-6 2.702-6 6a1 1 0 1 1-2 0c0-4.402 3.598-8 8-8h9.086l-1.293-1.293a1 1 0 0 1 0-1.414ZM23.5 12a1 1 0 1 0-2 0c0 3.298-2.702 6-6 6H6.414l1.293-1.293a1 1 0 1 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L6.414 20H15.5c4.402 0 8-3.598 8-8Z" 329 - fill="#000" 324 + fill="#9090a0" 330 325 fill-rule="evenodd" 331 326 /> 332 327 </svg> ··· 334 329 </div> 335 330 </div> 336 331 <div 337 - class="css-frud38" 332 + class="css-1qa5636" 338 333 > 339 334 <div 340 - class="css-4ijxew" 335 + class="css-19t4u9x" 341 336 > 342 337 <svg 343 338 height="28" ··· 371 366 style="width: 100px; margin-top: 5px;" 372 367 > 373 368 <span 374 - class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-m0hede-MuiSlider-root" 369 + class="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium css-1javce1-MuiSlider-root" 375 370 > 376 371 <span 377 372 class="MuiSlider-rail css-r64h58-MuiSlider-rail" ··· 411 406 <svg 412 407 aria-hidden="true" 413 408 class="StyledIconBase-sc-ea9ulj-0 dmvaRK" 414 - color="#000" 409 + color="#9090a0" 415 410 fill="currentColor" 416 411 focusable="false" 417 412 height="18"
+4
webui/rockbox/src/Components/Tracks/styles.css
··· 2 2 border-spacing: 0; 3 3 } 4 4 5 + tbody > tr:hover { 6 + background-color: var(--row-hover-bg); 7 + } 8 + 5 9 .album-cover-container.songs { 6 10 height: 48px; 7 11 justify-content: center;
+3 -3
webui/rockbox/src/Components/Tracks/styles.tsx
··· 35 35 cursor: pointer; 36 36 &:hover, 37 37 &:focus { 38 - color: #000; 38 + color: ${(props) => props.theme.colors.text}; 39 39 opacity: 1 !important; 40 40 } 41 41 `; ··· 85 85 height: 30px; 86 86 width: 30px; 87 87 border-radius: 15px; 88 - background-color: #f7f7f8; 88 + background-color: ${(props) => props.theme.colors.backButton}; 89 89 margin-top: 26px; 90 90 margin-bottom: 46px; 91 91 position: absolute; ··· 93 93 `; 94 94 95 95 export const Link = styled(RouterLink)` 96 - color: #000; 96 + color: ${(props) => props.theme.colors.text}; 97 97 text-decoration: none; 98 98 font-family: RockfordSansRegular; 99 99 &:hover {
+3 -1
webui/rockbox/src/Components/VirtualizedTable/VirtualizedTable.tsx
··· 6 6 useReactTable, 7 7 } from "@tanstack/react-table"; 8 8 import { FC, RefObject, useState, useEffect } from "react"; 9 + import { useTheme } from "@emotion/react"; 9 10 import { useVirtualizer } from "@tanstack/react-virtual"; 10 11 import { Track } from "../../Types/track"; 11 12 import { File } from "../../Types/file"; ··· 22 23 tracks, 23 24 containerRef, 24 25 }) => { 26 + const theme = useTheme(); 25 27 const [data, setData] = useState([...tracks]); 26 28 27 29 useEffect(() => { ··· 68 70 {table.getHeaderGroups().map((headerGroup) => ( 69 71 <tr 70 72 key={headerGroup.id} 71 - style={{ height: 48, color: "rgba(0, 0, 0, 0.54)" }} 73 + style={{ height: 48, color: theme.colors.secondaryText }} 72 74 > 73 75 {headerGroup.headers.map((header) => ( 74 76 <th
+4 -2
webui/rockbox/src/Hooks/GraphQL.tsx
··· 736 736 export type GetArtistsQueryVariables = Exact<{ [key: string]: never; }>; 737 737 738 738 739 - export type GetArtistsQuery = { __typename?: 'Query', artists: Array<{ __typename?: 'Artist', id: string, name: string }> }; 739 + export type GetArtistsQuery = { __typename?: 'Query', artists: Array<{ __typename?: 'Artist', id: string, name: string, image?: string | null }> }; 740 740 741 741 export type GetArtistQueryVariables = Exact<{ 742 742 id: Scalars['String']['input']; 743 743 }>; 744 744 745 745 746 - export type GetArtistQuery = { __typename?: 'Query', artist?: { __typename?: 'Artist', id: string, name: string, albums: Array<{ __typename?: 'Album', id: string, title: string, artist: string, albumArt?: string | null, year: number, yearString: string, artistId: string, md5: string }>, tracks: Array<{ __typename?: 'Track', id?: string | null, title: string, artist: string, album: string, albumArt?: string | null, albumArtist: string, artistId?: string | null, albumId?: string | null, path: string, length: number }> } | null }; 746 + export type GetArtistQuery = { __typename?: 'Query', artist?: { __typename?: 'Artist', id: string, name: string, image?: string | null, albums: Array<{ __typename?: 'Album', id: string, title: string, artist: string, albumArt?: string | null, year: number, yearString: string, artistId: string, md5: string }>, tracks: Array<{ __typename?: 'Track', id?: string | null, title: string, artist: string, album: string, albumArt?: string | null, albumArtist: string, artistId?: string | null, albumId?: string | null, path: string, length: number }> } | null }; 747 747 748 748 export type TracksQueryVariables = Exact<{ [key: string]: never; }>; 749 749 ··· 1365 1365 artists { 1366 1366 id 1367 1367 name 1368 + image 1368 1369 } 1369 1370 } 1370 1371 `; ··· 1405 1406 artist(id: $id) { 1406 1407 id 1407 1408 name 1409 + image 1408 1410 albums { 1409 1411 id 1410 1412 title
+23 -5
webui/rockbox/src/Providers/ThemeProvider.tsx
··· 1 1 import { createContext, useState, FC } from "react"; 2 - import { ThemeProvider as EmotionThemeProvider } from "@emotion/react"; 2 + import { ThemeProvider as EmotionThemeProvider, Global, css } from "@emotion/react"; 3 3 import { 4 4 BaseUIDarkTheme, 5 5 BaseUILightTheme, ··· 18 18 }; 19 19 20 20 export const ThemeContext = createContext<ThemeContextType>({ 21 - theme: "light", 21 + theme: "dark", 22 22 // eslint-disable-next-line @typescript-eslint/no-unused-vars 23 23 setTheme: (_theme: Theme) => {}, 24 24 }); ··· 27 27 cssVariables: true, 28 28 palette: { 29 29 primary: { 30 - main: "#fe099c", 30 + main: "#6F00FF", 31 31 }, 32 32 }, 33 33 }); ··· 37 37 }; 38 38 39 39 const ThemeProvider: FC<ThemeProviderProps> = ({ children }) => { 40 - const [theme, setTheme] = useState<Theme>("light"); 40 + const [theme, setTheme] = useState<Theme>("dark"); 41 + const emotionTheme = theme === "dark" ? DarkTheme : LightTheme; 41 42 return ( 42 43 <MaterialThemeProvider theme={muitheme}> 43 44 <ThemeContext.Provider value={{ theme, setTheme }}> 44 - <EmotionThemeProvider theme={theme === "dark" ? DarkTheme : LightTheme}> 45 + <EmotionThemeProvider theme={emotionTheme}> 46 + <Global 47 + styles={css` 48 + body { 49 + background-color: ${emotionTheme.colors.background}; 50 + color: ${emotionTheme.colors.text}; 51 + } 52 + :root { 53 + --row-hover-bg: ${emotionTheme.colors.hover}; 54 + --text-color: ${emotionTheme.colors.text}; 55 + --secondary-text: ${emotionTheme.colors.secondaryText}; 56 + --separator-color: ${emotionTheme.colors.separator}; 57 + } 58 + tbody > tr:hover { 59 + background-color: ${emotionTheme.colors.hover} !important; 60 + } 61 + `} 62 + /> 45 63 <BaseProvider 46 64 theme={theme === "dark" ? BaseUIDarkTheme : BaseUILightTheme} 47 65 >
+39 -30
webui/rockbox/src/Theme.ts
··· 1 1 import { createLightTheme, createDarkTheme } from "baseui/themes"; 2 2 3 + const PRIMARY = "#6F00FF"; 4 + const PRIMARY_HOVER = "#6F00FFbe"; 5 + const PRIMARY_SECONDARY_FILL = "rgba(111, 0, 255, 0.08)"; 6 + const PRIMARY_SECONDARY_HOVER = "rgba(111, 0, 255, 0.14)"; 7 + 3 8 export const BaseUIDarkTheme = createDarkTheme( 4 9 { 5 10 primaryFontFamily: "RockfordSansRegular", 6 11 }, 7 12 { 8 13 colors: { 9 - buttonPrimaryFill: "#fe099c", 14 + buttonPrimaryFill: PRIMARY, 10 15 buttonPrimaryText: "#fff", 11 - buttonPrimaryHover: "#fe099cbe", 12 - buttonSecondaryFill: "rgba(171, 40, 252, 0.052)", 13 - buttonSecondaryText: "#fe099c", 14 - buttonSecondaryHover: "rgba(171, 40, 252, 0.107)", 16 + buttonPrimaryHover: PRIMARY_HOVER, 17 + buttonSecondaryFill: PRIMARY_SECONDARY_FILL, 18 + buttonSecondaryText: PRIMARY, 19 + buttonSecondaryHover: PRIMARY_SECONDARY_HOVER, 15 20 buttonTertiaryText: "#fff", 16 - buttonTertiaryFill: "#000", 17 - buttonTertiaryHover: "#0000009700044", 21 + buttonTertiaryFill: "#1a1a1a", 22 + buttonTertiaryHover: "#2a2a2a", 18 23 }, 19 24 } 20 25 ); ··· 25 30 }, 26 31 { 27 32 colors: { 28 - buttonPrimaryFill: "#fe099c", 29 - buttonPrimaryHover: "#fe099cbe", 30 - buttonSecondaryFill: "rgba(171, 40, 252, 0.052)", 31 - buttonSecondaryText: "#fe099c", 32 - buttonSecondaryHover: "rgba(171, 40, 252, 0.107)", 33 + buttonPrimaryFill: PRIMARY, 34 + buttonPrimaryHover: PRIMARY_HOVER, 35 + buttonSecondaryFill: PRIMARY_SECONDARY_FILL, 36 + buttonSecondaryText: PRIMARY, 37 + buttonSecondaryHover: PRIMARY_SECONDARY_HOVER, 33 38 buttonTertiaryText: "#fff", 34 39 buttonTertiaryFill: "#000", 35 - buttonTertiaryHover: "#0000009700044", 40 + buttonTertiaryHover: "#00000097", 36 41 }, 37 42 } 38 43 ); 39 44 40 45 export const LightTheme = { 41 46 colors: { 47 + primary: PRIMARY, 42 48 text: "#000", 43 49 background: "#fff", 50 + surface: "#f6f9fc", 44 51 icon: "#000", 45 52 searchBackground: "rgba(247, 247, 247, 0.2)", 46 53 searchBackgroundAlt: "rgba(255, 255, 255, 0.2)", 47 - secondaryBackground: "#fbf5ff", 54 + secondaryBackground: "#f0e8ff", 48 55 secondaryText: "rgba(0, 0, 0, 0.542)", 49 - backButton: "#f7f7f8", 56 + backButton: "#f0f0f1", 50 57 currentTrackBorder: "rgba(177, 178, 181, 0.25)", 51 58 popoverBackground: "#fff", 52 59 separator: "#e0e0e0cc", 53 60 hover: "#b1b2b51a", 54 61 cover: "#f3f3f3b9", 55 - tooltip: "#fe099c1a", 62 + tooltip: `${PRIMARY}1a`, 56 63 }, 57 64 }; 58 65 59 66 export const DarkTheme = { 60 67 colors: { 61 - text: "#fff", 62 - background: "#000", 63 - icon: "#828282", 64 - searchBackground: "#0f1010", 65 - searchBackgroundAlt: "#0f1010", 66 - secondaryBackground: "#281832", 67 - secondaryText: "#828282", 68 - backButton: "#242429", 69 - currentTrackBorder: "rgba(177, 178, 181, 0.15)", 70 - popoverBackground: "#141414", 71 - separator: "rgba(177, 178, 181, 0.15)", 72 - hover: "#242424", 73 - cover: "#2f2f2fb9", 74 - tooltip: "#fe099c38", 68 + primary: PRIMARY, 69 + text: "#e8e8e8", 70 + background: "#0a0a0a", 71 + surface: "#111116", 72 + icon: "#9090a0", 73 + searchBackground: "#141418", 74 + searchBackgroundAlt: "#141418", 75 + secondaryBackground: "#1a1228", 76 + secondaryText: "#7878a0", 77 + backButton: "#1e1e24", 78 + currentTrackBorder: "rgba(255, 255, 255, 0.08)", 79 + popoverBackground: "#18181e", 80 + separator: "rgba(255, 255, 255, 0.08)", 81 + hover: "#1e1e24", 82 + cover: "#28282e", 83 + tooltip: `${PRIMARY}30`, 75 84 }, 76 85 };
+2
webui/rockbox/src/emotion.d.ts
··· 3 3 declare module "@emotion/react" { 4 4 export interface Theme { 5 5 colors: { 6 + primary: string; 6 7 text: string; 7 8 background: string; 9 + surface: string; 8 10 icon: string; 9 11 searchBackground: string; 10 12 searchBackgroundAlt: string;
+4
webui/rockbox/src/index.css
··· 35 35 overflow-y: hidden; 36 36 } 37 37 38 + tbody > tr:hover { 39 + background-color: var(--row-hover-bg); 40 + } 41 + 38 42 tr td div .floating-play { 39 43 cursor: pointer; 40 44 display: none;
+1 -1
webui/rockbox/tsconfig.app.tsbuildinfo
··· 1 - {"root":["./src/app.tsx","./src/theme.ts","./src/constants.ts","./src/emotion.d.ts","./src/main.tsx","./src/mocks.ts","./src/vite-env.d.ts","./src/components/album/album.stories.tsx","./src/components/album/album.test.tsx","./src/components/album/album.tsx","./src/components/album/albumwithdata.tsx","./src/components/album/index.tsx","./src/components/album/styles.tsx","./src/components/album/contextmenu/childmenu.tsx","./src/components/album/contextmenu/contextmenu.stories.tsx","./src/components/album/contextmenu/contextmenu.test.tsx","./src/components/album/contextmenu/contextmenu.tsx","./src/components/album/contextmenu/contextmenuwithdata.tsx","./src/components/album/contextmenu/index.tsx","./src/components/album/contextmenu/styles.tsx","./src/components/albumdetails/albumdetails.stories.tsx","./src/components/albumdetails/albumdetails.test.tsx","./src/components/albumdetails/albumdetails.tsx","./src/components/albumdetails/albumdetailswithdata.tsx","./src/components/albumdetails/index.tsx","./src/components/albumdetails/mocks.tsx","./src/components/albumdetails/styles.tsx","./src/components/albums/albums.stories.tsx","./src/components/albums/albums.test.tsx","./src/components/albums/albums.tsx","./src/components/albums/albumswithdata.tsx","./src/components/albums/index.tsx","./src/components/albums/mocks.tsx","./src/components/albums/styles.tsx","./src/components/artistdetails/artistdetails.stories.tsx","./src/components/artistdetails/artistdetails.test.tsx","./src/components/artistdetails/artistdetails.tsx","./src/components/artistdetails/artistdetailswithdata.tsx","./src/components/artistdetails/index.tsx","./src/components/artistdetails/mocks.tsx","./src/components/artistdetails/styles.tsx","./src/components/artists/artists.stories.tsx","./src/components/artists/artists.test.tsx","./src/components/artists/artists.tsx","./src/components/artists/artistswithdata.tsx","./src/components/artists/index.tsx","./src/components/artists/mocks.tsx","./src/components/artists/styles.tsx","./src/components/button/button.test.tsx","./src/components/button/button.tsx","./src/components/button/index.tsx","./src/components/contextmenu/childmenu.tsx","./src/components/contextmenu/contextmenu.stories.tsx","./src/components/contextmenu/contextmenu.test.tsx","./src/components/contextmenu/contextmenu.tsx","./src/components/contextmenu/contextmenuwithdata.tsx","./src/components/contextmenu/index.tsx","./src/components/contextmenu/styles.tsx","./src/components/controlbar/controlbar.stories.tsx","./src/components/controlbar/controlbar.test.tsx","./src/components/controlbar/controlbar.tsx","./src/components/controlbar/controlbarstate.tsx","./src/components/controlbar/controlbarwithdata.tsx","./src/components/controlbar/index.tsx","./src/components/controlbar/styles.tsx","./src/components/controlbar/currenttrack/currenttrack.tsx","./src/components/controlbar/currenttrack/index.tsx","./src/components/controlbar/currenttrack/styles.ts","./src/components/controlbar/devicelist/devicelist.tsx","./src/components/controlbar/devicelist/devicelistwithdata.tsx","./src/components/controlbar/devicelist/devicestate.tsx","./src/components/controlbar/devicelist/index.tsx","./src/components/controlbar/devicelist/styles.ts","./src/components/controlbar/playqueue/playqueue.stories.tsx","./src/components/controlbar/playqueue/playqueue.test.tsx","./src/components/controlbar/playqueue/playqueue.tsx","./src/components/controlbar/playqueue/playqueuewithdata.tsx","./src/components/controlbar/playqueue/index.tsx","./src/components/controlbar/playqueue/mocks.tsx","./src/components/controlbar/playqueue/styles.tsx","./src/components/controlbar/rightmenu/rightmenu.tsx","./src/components/controlbar/rightmenu/index.tsx","./src/components/controlbar/rightmenu/styles.tsx","./src/components/controlbar/rightmenu/volume/volume.stories.tsx","./src/components/controlbar/rightmenu/volume/volume.test.tsx","./src/components/controlbar/rightmenu/volume/volume.tsx","./src/components/controlbar/rightmenu/volume/volumewithdata.tsx","./src/components/controlbar/rightmenu/volume/index.tsx","./src/components/controlbar/rightmenu/volume/styles.tsx","./src/components/extensions/extensions.stories.tsx","./src/components/extensions/extensions.tsx","./src/components/extensions/index.tsx","./src/components/files/files.stories.tsx","./src/components/files/files.test.tsx","./src/components/files/files.tsx","./src/components/files/fileswithdata.tsx","./src/components/files/index.tsx","./src/components/files/mocks.tsx","./src/components/files/styles.tsx","./src/components/files/contextmenu/childmenu.tsx","./src/components/files/contextmenu/contextmenu.stories.tsx","./src/components/files/contextmenu/contextmenu.test.tsx","./src/components/files/contextmenu/contextmenu.tsx","./src/components/files/contextmenu/contextmenuwithdata.tsx","./src/components/files/contextmenu/index.tsx","./src/components/files/contextmenu/styles.tsx","./src/components/filter/filter.test.tsx","./src/components/filter/filter.tsx","./src/components/filter/filterstate.tsx","./src/components/filter/filterwithdata.tsx","./src/components/filter/index.tsx","./src/components/folder/folder.stories.tsx","./src/components/folder/folder.tsx","./src/components/folder/index.tsx","./src/components/icons/add.tsx","./src/components/icons/albumcover.tsx","./src/components/icons/arrowback.tsx","./src/components/icons/artist.tsx","./src/components/icons/heart.tsx","./src/components/icons/heartoutline.tsx","./src/components/icons/next.tsx","./src/components/icons/pause.tsx","./src/components/icons/play.tsx","./src/components/icons/previous.tsx","./src/components/icons/repeat.tsx","./src/components/icons/search.tsx","./src/components/icons/shuffle.tsx","./src/components/icons/speaker.tsx","./src/components/icons/track.tsx","./src/components/likes/likes.tsx","./src/components/likes/likesstate.ts","./src/components/likes/likeswithdata.tsx","./src/components/likes/index.tsx","./src/components/likes/styles.tsx","./src/components/mainview/mainview.tsx","./src/components/mainview/mainviewwithdata.tsx","./src/components/mainview/index.tsx","./src/components/mainview/styles.tsx","./src/components/playlistdetails/playlistdetails.stories.tsx","./src/components/playlistdetails/playlistdetails.tsx","./src/components/playlistdetails/playlistdetailswithdata.tsx","./src/components/playlistdetails/index.tsx","./src/components/playlistdetails/styles.tsx","./src/components/playlists/playlistmodal.tsx","./src/components/playlists/playlists.stories.tsx","./src/components/playlists/playlists.tsx","./src/components/playlists/playlistswithdata.tsx","./src/components/playlists/index.tsx","./src/components/playlists/styles.tsx","./src/components/settings/settings.tsx","./src/components/settings/settingsstate.ts","./src/components/settings/settingswithdata.tsx","./src/components/settings/index.tsx","./src/components/settings/styles.tsx","./src/components/settings/library/library.tsx","./src/components/settings/library/librarywithdata.tsx","./src/components/settings/library/index.tsx","./src/components/settings/library/styles.tsx","./src/components/settings/playback/playback.tsx","./src/components/settings/playback/playbackwithdata.tsx","./src/components/settings/playback/consts.ts","./src/components/settings/playback/index.tsx","./src/components/settings/playback/styles.tsx","./src/components/settings/sound/sound.tsx","./src/components/settings/sound/soundwithdata.tsx","./src/components/settings/sound/index.tsx","./src/components/settings/sound/styles.tsx","./src/components/settings/sound/equalizer/equalizer.tsx","./src/components/settings/sound/equalizer/equalizerwithdata.tsx","./src/components/settings/sound/equalizer/index.tsx","./src/components/settings/sound/equalizer/styles.tsx","./src/components/sidebar/sidebar.test.tsx","./src/components/sidebar/sidebar.tsx","./src/components/sidebar/sidebarwithdata.tsx","./src/components/sidebar/stidebar.stories.tsx","./src/components/sidebar/index.tsx","./src/components/sidebar/styles.tsx","./src/components/switch/switch.tsx","./src/components/switch/index.tsx","./src/components/table/table.tsx","./src/components/table/index.tsx","./src/components/tracks/tracks.stories.tsx","./src/components/tracks/tracks.test.tsx","./src/components/tracks/tracks.tsx","./src/components/tracks/trackswithdata.tsx","./src/components/tracks/index.tsx","./src/components/tracks/mocks.tsx","./src/components/tracks/styles.tsx","./src/components/virtualizedtable/virtualizedtable.tsx","./src/components/virtualizedtable/index.tsx","./src/containers/albumdetails/albumdetailspage.tsx","./src/containers/albumdetails/index.tsx","./src/containers/albums/albumspage.tsx","./src/containers/albums/index.tsx","./src/containers/artistdetails/artistdetailspage.tsx","./src/containers/artistdetails/index.tsx","./src/containers/artists/artistspage.tsx","./src/containers/artists/index.tsx","./src/containers/extensions/extensionspage.tsx","./src/containers/extensions/index.tsx","./src/containers/files/filespage.tsx","./src/containers/files/index.tsx","./src/containers/likes/likespage.tsx","./src/containers/likes/index.tsx","./src/containers/playlistdetails/smartplaylistdetailspage.tsx","./src/containers/playlistdetails/index.tsx","./src/containers/playlists/playlistspage.tsx","./src/containers/playlists/index.tsx","./src/containers/settings/settingspage.tsx","./src/containers/settings/index.tsx","./src/containers/tracks/trackspage.tsx","./src/containers/tracks/index.tsx","./src/graphql/browse/query.ts","./src/graphql/device/mutation.ts","./src/graphql/device/query.ts","./src/graphql/library/mutation.ts","./src/graphql/library/query.ts","./src/graphql/playback/mutation.ts","./src/graphql/playback/query.ts","./src/graphql/playback/subscription.ts","./src/graphql/playlist/mutation.ts","./src/graphql/playlist/query.ts","./src/graphql/playlist/subscription.ts","./src/graphql/savedplaylist/mutation.ts","./src/graphql/savedplaylist/query.ts","./src/graphql/settings/mutation.ts","./src/graphql/settings/query.ts","./src/graphql/smartplaylist/mutation.ts","./src/graphql/smartplaylist/query.ts","./src/graphql/sound/mutation.tsx","./src/graphql/system/query.ts","./src/hooks/graphql.tsx","./src/hooks/useformat.tsx","./src/hooks/useplayqueue.tsx","./src/hooks/useresumeplaylist.tsx","./src/hooks/usesettings.tsx","./src/providers/graphqlprovider.tsx","./src/providers/themeprovider.tsx","./src/providers/index.tsx","./src/types/file.ts","./src/types/playlist.ts","./src/types/track.ts","./src/stories/button.stories.ts","./src/stories/button.tsx","./src/stories/header.stories.ts","./src/stories/header.tsx","./src/stories/page.stories.ts","./src/stories/page.tsx"],"errors":true,"version":"5.6.2"} 1 + {"root":["./src/app.tsx","./src/theme.ts","./src/constants.ts","./src/emotion.d.ts","./src/main.tsx","./src/mocks.ts","./src/vite-env.d.ts","./src/components/album/album.stories.tsx","./src/components/album/album.test.tsx","./src/components/album/album.tsx","./src/components/album/albumwithdata.tsx","./src/components/album/index.tsx","./src/components/album/styles.tsx","./src/components/album/contextmenu/childmenu.tsx","./src/components/album/contextmenu/contextmenu.stories.tsx","./src/components/album/contextmenu/contextmenu.test.tsx","./src/components/album/contextmenu/contextmenu.tsx","./src/components/album/contextmenu/contextmenuwithdata.tsx","./src/components/album/contextmenu/index.tsx","./src/components/album/contextmenu/styles.tsx","./src/components/albumdetails/albumdetails.stories.tsx","./src/components/albumdetails/albumdetails.test.tsx","./src/components/albumdetails/albumdetails.tsx","./src/components/albumdetails/albumdetailswithdata.tsx","./src/components/albumdetails/index.tsx","./src/components/albumdetails/mocks.tsx","./src/components/albumdetails/styles.tsx","./src/components/albums/albums.stories.tsx","./src/components/albums/albums.test.tsx","./src/components/albums/albums.tsx","./src/components/albums/albumswithdata.tsx","./src/components/albums/index.tsx","./src/components/albums/mocks.tsx","./src/components/albums/styles.tsx","./src/components/artistdetails/artistdetails.stories.tsx","./src/components/artistdetails/artistdetails.test.tsx","./src/components/artistdetails/artistdetails.tsx","./src/components/artistdetails/artistdetailswithdata.tsx","./src/components/artistdetails/index.tsx","./src/components/artistdetails/mocks.tsx","./src/components/artistdetails/styles.tsx","./src/components/artists/artists.stories.tsx","./src/components/artists/artists.test.tsx","./src/components/artists/artists.tsx","./src/components/artists/artistswithdata.tsx","./src/components/artists/index.tsx","./src/components/artists/mocks.tsx","./src/components/artists/styles.tsx","./src/components/button/button.test.tsx","./src/components/button/button.tsx","./src/components/button/index.tsx","./src/components/contextmenu/childmenu.tsx","./src/components/contextmenu/contextmenu.stories.tsx","./src/components/contextmenu/contextmenu.test.tsx","./src/components/contextmenu/contextmenu.tsx","./src/components/contextmenu/contextmenuwithdata.tsx","./src/components/contextmenu/index.tsx","./src/components/contextmenu/styles.tsx","./src/components/controlbar/controlbar.stories.tsx","./src/components/controlbar/controlbar.test.tsx","./src/components/controlbar/controlbar.tsx","./src/components/controlbar/controlbarstate.tsx","./src/components/controlbar/controlbarwithdata.tsx","./src/components/controlbar/index.tsx","./src/components/controlbar/styles.tsx","./src/components/controlbar/currenttrack/currenttrack.tsx","./src/components/controlbar/currenttrack/index.tsx","./src/components/controlbar/currenttrack/styles.ts","./src/components/controlbar/devicelist/devicelist.tsx","./src/components/controlbar/devicelist/devicelistwithdata.tsx","./src/components/controlbar/devicelist/devicestate.tsx","./src/components/controlbar/devicelist/index.tsx","./src/components/controlbar/devicelist/styles.ts","./src/components/controlbar/playqueue/playqueue.stories.tsx","./src/components/controlbar/playqueue/playqueue.test.tsx","./src/components/controlbar/playqueue/playqueue.tsx","./src/components/controlbar/playqueue/playqueuewithdata.tsx","./src/components/controlbar/playqueue/index.tsx","./src/components/controlbar/playqueue/mocks.tsx","./src/components/controlbar/playqueue/styles.tsx","./src/components/controlbar/rightmenu/rightmenu.tsx","./src/components/controlbar/rightmenu/index.tsx","./src/components/controlbar/rightmenu/styles.tsx","./src/components/controlbar/rightmenu/volume/volume.stories.tsx","./src/components/controlbar/rightmenu/volume/volume.test.tsx","./src/components/controlbar/rightmenu/volume/volume.tsx","./src/components/controlbar/rightmenu/volume/volumewithdata.tsx","./src/components/controlbar/rightmenu/volume/index.tsx","./src/components/controlbar/rightmenu/volume/styles.tsx","./src/components/extensions/extensions.stories.tsx","./src/components/extensions/extensions.tsx","./src/components/extensions/index.tsx","./src/components/files/files.stories.tsx","./src/components/files/files.test.tsx","./src/components/files/files.tsx","./src/components/files/fileswithdata.tsx","./src/components/files/index.tsx","./src/components/files/mocks.tsx","./src/components/files/styles.tsx","./src/components/files/contextmenu/childmenu.tsx","./src/components/files/contextmenu/contextmenu.stories.tsx","./src/components/files/contextmenu/contextmenu.test.tsx","./src/components/files/contextmenu/contextmenu.tsx","./src/components/files/contextmenu/contextmenuwithdata.tsx","./src/components/files/contextmenu/index.tsx","./src/components/files/contextmenu/styles.tsx","./src/components/filter/filter.test.tsx","./src/components/filter/filter.tsx","./src/components/filter/filterstate.tsx","./src/components/filter/filterwithdata.tsx","./src/components/filter/index.tsx","./src/components/folder/folder.stories.tsx","./src/components/folder/folder.tsx","./src/components/folder/index.tsx","./src/components/icons/add.tsx","./src/components/icons/albumcover.tsx","./src/components/icons/arrowback.tsx","./src/components/icons/artist.tsx","./src/components/icons/heart.tsx","./src/components/icons/heartoutline.tsx","./src/components/icons/next.tsx","./src/components/icons/pause.tsx","./src/components/icons/play.tsx","./src/components/icons/previous.tsx","./src/components/icons/repeat.tsx","./src/components/icons/search.tsx","./src/components/icons/shuffle.tsx","./src/components/icons/speaker.tsx","./src/components/icons/track.tsx","./src/components/likes/likes.tsx","./src/components/likes/likesstate.ts","./src/components/likes/likeswithdata.tsx","./src/components/likes/index.tsx","./src/components/likes/styles.tsx","./src/components/mainview/mainview.tsx","./src/components/mainview/mainviewwithdata.tsx","./src/components/mainview/index.tsx","./src/components/mainview/styles.tsx","./src/components/playlistdetails/playlistdetails.stories.tsx","./src/components/playlistdetails/playlistdetails.tsx","./src/components/playlistdetails/playlistdetailswithdata.tsx","./src/components/playlistdetails/index.tsx","./src/components/playlistdetails/styles.tsx","./src/components/playlists/playlistmodal.tsx","./src/components/playlists/playlists.stories.tsx","./src/components/playlists/playlists.tsx","./src/components/playlists/playlistswithdata.tsx","./src/components/playlists/index.tsx","./src/components/playlists/styles.tsx","./src/components/settings/settings.tsx","./src/components/settings/settingsstate.ts","./src/components/settings/settingswithdata.tsx","./src/components/settings/index.tsx","./src/components/settings/styles.tsx","./src/components/settings/library/library.tsx","./src/components/settings/library/librarywithdata.tsx","./src/components/settings/library/index.tsx","./src/components/settings/library/styles.tsx","./src/components/settings/playback/playback.tsx","./src/components/settings/playback/playbackwithdata.tsx","./src/components/settings/playback/consts.ts","./src/components/settings/playback/index.tsx","./src/components/settings/playback/styles.tsx","./src/components/settings/sound/sound.tsx","./src/components/settings/sound/soundwithdata.tsx","./src/components/settings/sound/index.tsx","./src/components/settings/sound/styles.tsx","./src/components/settings/sound/equalizer/equalizer.tsx","./src/components/settings/sound/equalizer/equalizerwithdata.tsx","./src/components/settings/sound/equalizer/index.tsx","./src/components/settings/sound/equalizer/styles.tsx","./src/components/sidebar/sidebar.test.tsx","./src/components/sidebar/sidebar.tsx","./src/components/sidebar/sidebarwithdata.tsx","./src/components/sidebar/stidebar.stories.tsx","./src/components/sidebar/index.tsx","./src/components/sidebar/styles.tsx","./src/components/switch/switch.tsx","./src/components/switch/index.tsx","./src/components/table/table.tsx","./src/components/table/index.tsx","./src/components/tracks/tracks.stories.tsx","./src/components/tracks/tracks.test.tsx","./src/components/tracks/tracks.tsx","./src/components/tracks/trackswithdata.tsx","./src/components/tracks/index.tsx","./src/components/tracks/mocks.tsx","./src/components/tracks/styles.tsx","./src/components/virtualizedtable/virtualizedtable.tsx","./src/components/virtualizedtable/index.tsx","./src/containers/albumdetails/albumdetailspage.tsx","./src/containers/albumdetails/index.tsx","./src/containers/albums/albumspage.tsx","./src/containers/albums/index.tsx","./src/containers/artistdetails/artistdetailspage.tsx","./src/containers/artistdetails/index.tsx","./src/containers/artists/artistspage.tsx","./src/containers/artists/index.tsx","./src/containers/extensions/extensionspage.tsx","./src/containers/extensions/index.tsx","./src/containers/files/filespage.tsx","./src/containers/files/index.tsx","./src/containers/likes/likespage.tsx","./src/containers/likes/index.tsx","./src/containers/playlistdetails/smartplaylistdetailspage.tsx","./src/containers/playlistdetails/index.tsx","./src/containers/playlists/playlistspage.tsx","./src/containers/playlists/index.tsx","./src/containers/settings/settingspage.tsx","./src/containers/settings/index.tsx","./src/containers/tracks/trackspage.tsx","./src/containers/tracks/index.tsx","./src/graphql/browse/query.ts","./src/graphql/device/mutation.ts","./src/graphql/device/query.ts","./src/graphql/library/mutation.ts","./src/graphql/library/query.ts","./src/graphql/playback/mutation.ts","./src/graphql/playback/query.ts","./src/graphql/playback/subscription.ts","./src/graphql/playlist/mutation.ts","./src/graphql/playlist/query.ts","./src/graphql/playlist/subscription.ts","./src/graphql/savedplaylist/mutation.ts","./src/graphql/savedplaylist/query.ts","./src/graphql/settings/mutation.ts","./src/graphql/settings/query.ts","./src/graphql/smartplaylist/mutation.ts","./src/graphql/smartplaylist/query.ts","./src/graphql/sound/mutation.tsx","./src/graphql/system/query.ts","./src/hooks/graphql.tsx","./src/hooks/useformat.tsx","./src/hooks/useplayqueue.tsx","./src/hooks/useresumeplaylist.tsx","./src/hooks/usesettings.tsx","./src/providers/graphqlprovider.tsx","./src/providers/themeprovider.tsx","./src/providers/index.tsx","./src/types/file.ts","./src/types/playlist.ts","./src/types/track.ts","./src/stories/button.stories.ts","./src/stories/button.tsx","./src/stories/header.stories.ts","./src/stories/header.tsx","./src/stories/page.stories.ts","./src/stories/page.tsx"],"version":"5.6.2"}