2023-06-17 15:30:23 +02:00
|
|
|
package com.cappielloantonio.tempo.subsonic;
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2023-06-17 15:30:23 +02:00
|
|
|
import com.cappielloantonio.tempo.subsonic.api.albumsonglist.AlbumSongListClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.bookmarks.BookmarksClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.browsing.BrowsingClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.internetradio.InternetRadioClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.mediaannotation.MediaAnnotationClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.medialibraryscanning.MediaLibraryScanningClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.mediaretrieval.MediaRetrievalClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.playlist.PlaylistClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.podcast.PodcastClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.searching.SearchingClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.api.system.SystemClient;
|
|
|
|
|
import com.cappielloantonio.tempo.subsonic.base.Version;
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
import java.util.HashMap;
|
2021-07-24 12:27:45 +02:00
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
public class Subsonic {
|
|
|
|
|
private static final Version API_MAX_VERSION = Version.of("1.15.0");
|
|
|
|
|
|
2021-09-04 16:14:10 +02:00
|
|
|
private final Version apiVersion = API_MAX_VERSION;
|
|
|
|
|
private final SubsonicPreferences preferences;
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
private SystemClient systemClient;
|
2021-07-26 19:03:51 +02:00
|
|
|
private BrowsingClient browsingClient;
|
|
|
|
|
private MediaRetrievalClient mediaRetrievalClient;
|
|
|
|
|
private PlaylistClient playlistClient;
|
|
|
|
|
private SearchingClient searchingClient;
|
|
|
|
|
private AlbumSongListClient albumSongListClient;
|
2021-07-29 15:17:07 +02:00
|
|
|
private MediaAnnotationClient mediaAnnotationClient;
|
2022-02-05 18:40:44 +01:00
|
|
|
private PodcastClient podcastClient;
|
2021-08-11 10:58:40 +02:00
|
|
|
private MediaLibraryScanningClient mediaLibraryScanningClient;
|
2023-03-13 22:55:56 +01:00
|
|
|
private BookmarksClient bookmarksClient;
|
2023-05-07 17:11:34 +02:00
|
|
|
private InternetRadioClient internetRadioClient;
|
2021-07-24 14:48:33 +02:00
|
|
|
|
2023-03-10 15:21:02 +01:00
|
|
|
public Subsonic(SubsonicPreferences preferences) {
|
2021-07-24 12:27:45 +02:00
|
|
|
this.preferences = preferences;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Version getApiVersion() {
|
|
|
|
|
return apiVersion;
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
public SystemClient getSystemClient() {
|
|
|
|
|
if (systemClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
systemClient = new SystemClient(this);
|
2021-07-24 14:48:33 +02:00
|
|
|
}
|
|
|
|
|
return systemClient;
|
|
|
|
|
}
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2021-07-26 19:03:51 +02:00
|
|
|
public BrowsingClient getBrowsingClient() {
|
|
|
|
|
if (browsingClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
browsingClient = new BrowsingClient(this);
|
2021-07-26 19:03:51 +02:00
|
|
|
}
|
|
|
|
|
return browsingClient;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public MediaRetrievalClient getMediaRetrievalClient() {
|
|
|
|
|
if (mediaRetrievalClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
mediaRetrievalClient = new MediaRetrievalClient(this);
|
2021-07-26 19:03:51 +02:00
|
|
|
}
|
|
|
|
|
return mediaRetrievalClient;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PlaylistClient getPlaylistClient() {
|
|
|
|
|
if (playlistClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
playlistClient = new PlaylistClient(this);
|
2021-07-26 19:03:51 +02:00
|
|
|
}
|
|
|
|
|
return playlistClient;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public SearchingClient getSearchingClient() {
|
|
|
|
|
if (searchingClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
searchingClient = new SearchingClient(this);
|
2021-07-26 19:03:51 +02:00
|
|
|
}
|
|
|
|
|
return searchingClient;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public AlbumSongListClient getAlbumSongListClient() {
|
|
|
|
|
if (albumSongListClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
albumSongListClient = new AlbumSongListClient(this);
|
2021-07-26 19:03:51 +02:00
|
|
|
}
|
|
|
|
|
return albumSongListClient;
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-29 15:17:07 +02:00
|
|
|
public MediaAnnotationClient getMediaAnnotationClient() {
|
|
|
|
|
if (mediaAnnotationClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
mediaAnnotationClient = new MediaAnnotationClient(this);
|
2021-07-29 15:17:07 +02:00
|
|
|
}
|
|
|
|
|
return mediaAnnotationClient;
|
|
|
|
|
}
|
2022-02-05 18:40:44 +01:00
|
|
|
|
|
|
|
|
public PodcastClient getPodcastClient() {
|
|
|
|
|
if (podcastClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
podcastClient = new PodcastClient(this);
|
2022-02-05 18:40:44 +01:00
|
|
|
}
|
|
|
|
|
return podcastClient;
|
|
|
|
|
}
|
2021-07-29 15:17:07 +02:00
|
|
|
|
2021-08-11 10:58:40 +02:00
|
|
|
public MediaLibraryScanningClient getMediaLibraryScanningClient() {
|
|
|
|
|
if (mediaLibraryScanningClient == null) {
|
2023-03-10 15:21:02 +01:00
|
|
|
mediaLibraryScanningClient = new MediaLibraryScanningClient(this);
|
2021-08-11 10:58:40 +02:00
|
|
|
}
|
|
|
|
|
return mediaLibraryScanningClient;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-13 22:55:56 +01:00
|
|
|
public BookmarksClient getBookmarksClient() {
|
|
|
|
|
if (bookmarksClient == null) {
|
|
|
|
|
bookmarksClient = new BookmarksClient(this);
|
|
|
|
|
}
|
|
|
|
|
return bookmarksClient;
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-07 17:11:34 +02:00
|
|
|
public InternetRadioClient getInternetRadioClient() {
|
|
|
|
|
if (internetRadioClient == null) {
|
|
|
|
|
internetRadioClient = new InternetRadioClient(this);
|
|
|
|
|
}
|
|
|
|
|
return internetRadioClient;
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
public String getUrl() {
|
2021-08-09 17:55:30 +02:00
|
|
|
String url = preferences.getServerUrl() + "/rest/";
|
2022-01-11 12:49:40 +01:00
|
|
|
return url.replace("//rest", "/rest");
|
2021-07-24 14:48:33 +02:00
|
|
|
}
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
public Map<String, String> getParams() {
|
|
|
|
|
Map<String, String> params = new HashMap<>();
|
|
|
|
|
params.put("u", preferences.getUsername());
|
2022-02-05 23:33:08 +01:00
|
|
|
|
2023-03-06 21:59:10 +01:00
|
|
|
if (preferences.getAuthentication().getPassword() != null)
|
|
|
|
|
params.put("p", preferences.getAuthentication().getPassword());
|
|
|
|
|
if (preferences.getAuthentication().getSalt() != null)
|
|
|
|
|
params.put("s", preferences.getAuthentication().getSalt());
|
|
|
|
|
if (preferences.getAuthentication().getToken() != null)
|
|
|
|
|
params.put("t", preferences.getAuthentication().getToken());
|
2022-02-05 23:33:08 +01:00
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
params.put("v", getApiVersion().getVersionString());
|
|
|
|
|
params.put("c", preferences.getClientName());
|
2023-03-06 21:59:10 +01:00
|
|
|
params.put("f", "json");
|
2021-07-24 12:27:45 +02:00
|
|
|
|
2021-07-24 14:48:33 +02:00
|
|
|
return params;
|
2021-07-24 12:27:45 +02:00
|
|
|
}
|
|
|
|
|
}
|