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

co.fusionx.spotify.async.AsyncWebClient Maven / Gradle / Ivy

The newest version!
package co.fusionx.spotify.async;

import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;

import co.fusionx.spotify.model.Album;
import co.fusionx.spotify.model.Artist;
import co.fusionx.spotify.model.PagingObject;
import co.fusionx.spotify.model.SearchResult;
import co.fusionx.spotify.model.SimpleAlbum;
import co.fusionx.spotify.model.SimpleTrack;
import co.fusionx.spotify.model.Track;
import co.fusionx.spotify.optional.artist.OptionalAlbumTracks;
import co.fusionx.spotify.optional.artist.OptionalArtistAlbums;
import co.fusionx.spotify.optional.search.OptionalSearch;
import co.fusionx.spotify.sync.SyncClient;
import co.fusionx.spotify.sync.SyncWebClient;

public class AsyncWebClient implements AsyncClient {

    private final SyncClient mSyncClient;

    private final ListeningExecutorService mExecutorService;

    public AsyncWebClient() {
        mSyncClient = new SyncWebClient();
        mExecutorService = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
    }

    @Override
    public ListenableFuture getAlbum(final String albumId) {
        return mExecutorService.submit(new Callable() {
            @Override
            public Album call() throws Exception {
                return mSyncClient.getAlbum(albumId);
            }
        });
    }

    @Override
    public ListenableFuture> getAlbums(final Collection albumIds) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public List call() throws Exception {
                return mSyncClient.getAlbums(albumIds);
            }
        });
    }

    @Override
    public ListenableFuture> getAlbumTracks(
            final String albumId) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.getAlbumTracks(albumId);
            }
        });
    }

    @Override
    public ListenableFuture> getAlbumTracks(
            final String albumId,
            final OptionalAlbumTracks tracks) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.getAlbumTracks(albumId, tracks);
            }
        });
    }

    @Override
    public ListenableFuture getArtist(final String artistId) {
        return mExecutorService.submit(new Callable() {
            @Override
            public Artist call() throws Exception {
                return mSyncClient.getArtist(artistId);
            }
        });
    }

    @Override
    public ListenableFuture> getArtists(final Collection artistIds) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public List call() throws Exception {
                return mSyncClient.getArtists(artistIds);
            }
        });
    }

    @Override
    public ListenableFuture> getArtistAlbums(
            final String artistId) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.getArtistAlbums(artistId);
            }
        });
    }

    @Override
    public ListenableFuture> getArtistAlbums(
            final String artistId,
            final OptionalArtistAlbums artistAlbums) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.getArtistAlbums(artistId, artistAlbums);
            }
        });
    }

    @Override
    public ListenableFuture> getArtistTopTracks(final String artistId,
            final String country) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public List call() throws Exception {
                return mSyncClient.getArtistTopTracks(artistId, country);
            }
        });
    }

    @Override
    public ListenableFuture> getRelatedArtists(final String artistId) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public List call() throws Exception {
                return mSyncClient.getRelatedArtists(artistId);
            }
        });
    }

    @Override
    public ListenableFuture getTrack(final String id) {
        return mExecutorService.submit(new Callable() {
            @Override
            public Track call() throws Exception {
                return mSyncClient.getTrack(id);
            }
        });
    }

    @Override
    public ListenableFuture> getTracks(final Collection ids) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public List call() throws Exception {
                return mSyncClient.getTracks(ids);
            }
        });
    }

    @Override
    public ListenableFuture> searchArtist(final String artist) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.searchArtist(artist);
            }
        });
    }

    @Override
    public ListenableFuture> searchAlbum(final String album) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.searchAlbum(album);
            }
        });
    }

    @Override
    public ListenableFuture> searchTrack(final String track) {
        return mExecutorService.submit(new Callable>() {
            @Override
            public PagingObject call() throws Exception {
                return mSyncClient.searchTrack(track);
            }
        });
    }

    @Override
    public ListenableFuture search(final String query,
            final Collection types) {
        return mExecutorService.submit(new Callable() {
            @Override
            public SearchResult call() throws Exception {
                return mSyncClient.search(query, types);
            }
        });
    }

    @Override
    public ListenableFuture search(final String query,
            final Collection types, final OptionalSearch search) {
        return mExecutorService.submit(new Callable() {
            @Override
            public SearchResult call() throws Exception {
                return mSyncClient.search(query, types, search);
            }
        });
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy