All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.jsone_studios.wrapper.spotify.SpotifyWebApi Maven / Gradle / Ivy

package de.jsone_studios.wrapper.spotify;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.jsone_studios.wrapper.spotify.services.*;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

public class SpotifyWebApi implements SpotifyApi {
    public static final String SPOTIFY_WEB_API_ENDPOINT = "https://api.spotify.com/v1/";

    private final Retrofit retrofit;

    private final AlbumsSpotifyService albumsService;
    private final ArtistsSpotifyService artistsService;
    private final BrowseSpotifyService browseService;
    private final FollowSpotifyService followService;
    private final LibrarySpotifyService libraryService;
    private final PersonalizationSpotifyService personalizationService;
    private final PlaylistsSpotifyService playlistsService;
    private final PlaylistTracksSpotifyService playlistTracksService;
    private final SearchSpotifyService searchService;
    private final TracksSpotifyService tracksService;
    private final UsersProfileSpotifyService usersProfileService;

    public SpotifyWebApi(Retrofit retrofit) {
        this.retrofit = retrofit;
        this.albumsService = retrofit.create(AlbumsSpotifyService.class);
        this.artistsService = retrofit.create(ArtistsSpotifyService.class);
        this.browseService = retrofit.create(BrowseSpotifyService.class);
        this.followService = retrofit.create(FollowSpotifyService.class);
        this.libraryService = retrofit.create(LibrarySpotifyService.class);
        this.personalizationService = retrofit.create(PersonalizationSpotifyService.class);
        this.playlistsService = retrofit.create(PlaylistsSpotifyService.class);
        this.playlistTracksService = retrofit.create(PlaylistTracksSpotifyService.class);
        this.searchService = retrofit.create(SearchSpotifyService.class);
        this.tracksService = retrofit.create(TracksSpotifyService.class);
        this.usersProfileService = retrofit.create(UsersProfileSpotifyService.class);
    }

    public SpotifyWebApi(OkHttpClient okHttpClient) {
        this(createDefaultRetrofit(okHttpClient, HttpUrl.get(SPOTIFY_WEB_API_ENDPOINT)));
    }

    public SpotifyWebApi(OkHttpClient okHttpClient, HttpUrl baseUrl) {
        this(createDefaultRetrofit(okHttpClient, baseUrl));
    }

    public SpotifyWebApi(HttpUrl baseUrl) {
        this(new OkHttpClient(), baseUrl);
    }

    public SpotifyWebApi() {
        this(new OkHttpClient());
    }

    private static Retrofit createDefaultRetrofit(OkHttpClient okHttpClient, HttpUrl baseUrl) {
        ObjectMapper mapper = new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return new Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(okHttpClient)
                .addConverterFactory(JacksonConverterFactory.create(mapper))
                .build();
    }

    @Override
    public Retrofit getRetrofit() {
        return retrofit;
    }

    @Override
    public AlbumsSpotifyService getAlbumsService() {
        return albumsService;
    }

    @Override
    public ArtistsSpotifyService getArtistsService() {
        return artistsService;
    }

    @Override
    public BrowseSpotifyService getBrowseService() {
        return browseService;
    }

    @Override
    public FollowSpotifyService getFollowService() {
        return followService;
    }

    @Override
    public LibrarySpotifyService getLibraryService() {
        return libraryService;
    }

    @Override
    public PersonalizationSpotifyService getPersonalizationService() {
        return personalizationService;
    }

    @Override
    public PlaylistsSpotifyService getPlaylistsService() {
        return playlistsService;
    }

    @Override
    public PlaylistTracksSpotifyService getPlaylistTracksService() {
        return playlistTracksService;
    }

    @Override
    public SearchSpotifyService getSearchService() {
        return searchService;
    }

    @Override
    public TracksSpotifyService getTracksService() {
        return tracksService;
    }

    @Override
    public UsersProfileSpotifyService getUsersProfileService() {
        return usersProfileService;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy