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

com.jakewharton.trakt.services.ListService Maven / Gradle / Ivy

package com.jakewharton.trakt.services;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.jakewharton.trakt.TraktApiBuilder;
import com.jakewharton.trakt.TraktApiService;
import com.jakewharton.trakt.entities.ListItemsResponse;
import com.jakewharton.trakt.entities.ListResponse;
import com.jakewharton.trakt.entities.Response;
import com.jakewharton.trakt.enumerations.ListItemType;
import com.jakewharton.trakt.enumerations.ListPrivacy;

public class ListService extends TraktApiService {
    /**
     * Add a new custom list.
     *
     * @param name The list name. This must be unique.
     * @param privacy Privacy level.
     * @return Builder instance.
     */
    public AddBuilder add(String name, ListPrivacy privacy) {
        return new AddBuilder(this).name(name).privacy(privacy);
    }

    /**
     * Delete a custom list including all items it contains.
     *
     * @param slug Slug to identify what list is being deleted.
     * @return Builder instance.
     */
    public DeleteBuilder delete(String slug) {
        return new DeleteBuilder(this).slug(slug);
    }

    /**
     * Add one or more items to an existing list. Items can be movies, shows,
     * season, or episodes.
     *
     * @param slug Slug to identify what list is being added to.
     * @return Builder instance.
     */
    public ItemsAddBuilder itemsAdd(String slug) {
        return new ItemsAddBuilder(this).slug(slug);
    }

    /**
     * Delete one or more items from an existing list. Items can be movies,
     * shows, season, or episodes.
     *
     * @param slug Slug to identify what list is being deleted.
     * @return Builder instance.
     */
    public ItemsDeleteBuilder itemsDelete(String slug) {
        return new ItemsDeleteBuilder(this).slug(slug);
    }

    /**
     * Update a custom list.
     *
     * @param slug Slug to identify what list is being updated.
     * @return Builder instance.
     */
    public UpdateBuilder update(String slug) {
        return new UpdateBuilder(this).slug(slug);
    }


    public static final class AddBuilder extends TraktApiBuilder {
        private static final String POST_NAME = "name";
        private static final String POST_DESCRIPTION = "description";
        private static final String POST_PRIVACY = "privacy";

        private static final String URI = "/lists/add/" + FIELD_API_KEY;

        private AddBuilder(ListService service) {
            super(service, new TypeToken() {}, URI, HttpMethod.Post);
        }

        /**
         * The list name. This must be unique.
         *
         * @param name Value.
         * @return Builder instance.
         */
        public AddBuilder name(String name) {
            super.postParameter(POST_NAME, name);
            return this;
        }

        /**
         * Optional but recommended description of what the list contains.
         *
         * @param description Value.
         * @return Builder instance.
         */
        public AddBuilder description(String description) {
            super.postParameter(POST_DESCRIPTION, description);
            return this;
        }

        /**
         * Privacy level.
         *
         * @param privacy Value.
         * @return Builder instance.
         */
        public AddBuilder privacy(ListPrivacy privacy) {
            super.postParameter(POST_PRIVACY, privacy);
            return this;
        }
    }
    public static final class DeleteBuilder extends TraktApiBuilder {
        private static final String POST_SLUG = "slug";

        private static final String URI = "/lists/delete/" + FIELD_API_KEY;

        private DeleteBuilder(ListService service) {
            super(service, new TypeToken() {}, URI, HttpMethod.Post);
        }

        /**
         * Slug to identify what list is being deleted.
         *
         * @param slug Value.
         * @return Builder instance.
         */
        public DeleteBuilder slug(String slug) {
            super.postParameter(POST_SLUG, slug);
            return this;
        }
    }
    public static final class ItemsAddBuilder extends TraktApiBuilder {
        private static final String POST_SLUG = "slug";
        private static final String POST_ITEMS = "items";

        private static final String URI = "/lists/items/add/" + FIELD_API_KEY;

        private final JsonArray items = new JsonArray();

        private ItemsAddBuilder(ListService service) {
            super(service, new TypeToken() {}, URI, HttpMethod.Post);
        }

        /**
         * Slug to identify what list is being added to.
         *
         * @param slug Value.
         * @return Builder instance.
         */
        public ItemsAddBuilder slug(String slug) {
            super.postParameter(POST_SLUG, slug);
            return this;
        }

        public ItemsAddBuilder addMovie(String imdbId) {
            return this.addMovie(imdbId, null, 0);
        }
        public ItemsAddBuilder addMovie(String title, int year) {
            return this.addMovie(null, title, year);
        }
        public ItemsAddBuilder addMovie(String imdbId, String title, int year) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.Movie.toString());
            if (imdbId != null) {
                item.addProperty("imdb_id", imdbId);
            }
            if (title != null) {
                item.addProperty("title", title);
            }
            if (year > 0) {
                item.addProperty("year", year);
            }
            this.items.add(item);
            return this;
        }
        public ItemsAddBuilder addShow(String tvdbId) {
            return this.addShow(tvdbId, null);
        }
        public ItemsAddBuilder addShow(String tvdbId, String title) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShow.toString());
            item.addProperty("tvdb_id", tvdbId);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }
        public ItemsAddBuilder addShowSeason(String tvdbId, int season) {
            return this.addShowSeason(tvdbId, null, season);
        }
        public ItemsAddBuilder addShowSeason(String tvdbId, String title, int season) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShowSeason.toString());
            item.addProperty("tvdb_id", tvdbId);
            item.addProperty("season", season);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }
        public ItemsAddBuilder addShowEpisode(String tvdbId, int season, int episode) {
            return this.addShowEpisode(tvdbId, null, season, episode);
        }
        public ItemsAddBuilder addShowEpisode(String tvdbId, String title, int season, int episode) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShowEpisode.toString());
            item.addProperty("tvdb_id", tvdbId);
            item.addProperty("season", season);
            item.addProperty("episode", episode);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }

        @Override
        protected void preFireCallback() {
            super.postParameter(POST_ITEMS, this.items);
        }
    }
    public static final class ItemsDeleteBuilder extends TraktApiBuilder {
        private static final String POST_SLUG = "slug";
        private static final String POST_ITEMS = "items";

        private static final String URI = "/lists/items/delete/" + FIELD_API_KEY;

        private final JsonArray items = new JsonArray();

        private ItemsDeleteBuilder(ListService service) {
            super(service, new TypeToken() {}, URI, HttpMethod.Post);
        }

        /**
         * Slug to identify what list is being added to.
         *
         * @param slug Value.
         * @return Builder instance.
         */
        public ItemsDeleteBuilder slug(String slug) {
            super.postParameter(POST_SLUG, slug);
            return this;
        }

        public ItemsDeleteBuilder addMovie(String imdbId) {
            return this.addMovie(imdbId, null, 0);
        }
        public ItemsDeleteBuilder addMovie(String title, int year) {
            return this.addMovie(null, title, year);
        }
        public ItemsDeleteBuilder addMovie(String imdbId, String title, int year) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.Movie.toString());
            if (imdbId != null) {
                item.addProperty("imdb_id", imdbId);
            }
            if (title != null) {
                item.addProperty("title", title);
            }
            if (year > 0) {
                item.addProperty("year", year);
            }
            this.items.add(item);
            return this;
        }
        public ItemsDeleteBuilder addShow(String tvdbId) {
            return this.addShow(tvdbId, null);
        }
        public ItemsDeleteBuilder addShow(String tvdbId, String title) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShow.toString());
            item.addProperty("tvdb_id", tvdbId);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }
        public ItemsDeleteBuilder addShowSeason(String tvdbId, int season) {
            return this.addShowSeason(tvdbId, null, season);
        }
        public ItemsDeleteBuilder addShowSeason(String tvdbId, String title, int season) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShowSeason.toString());
            item.addProperty("tvdb_id", tvdbId);
            item.addProperty("season", season);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }
        public ItemsDeleteBuilder addShowEpisode(String tvdbId, int season, int episode) {
            return this.addShowEpisode(tvdbId, null, season, episode);
        }
        public ItemsDeleteBuilder addShowEpisode(String tvdbId, String title, int season, int episode) {
            JsonObject item = new JsonObject();
            item.addProperty("type", ListItemType.TvShowEpisode.toString());
            item.addProperty("tvdb_id", tvdbId);
            item.addProperty("season", season);
            item.addProperty("episode", episode);
            if (title != null) {
                item.addProperty("title", title);
            }
            this.items.add(item);
            return this;
        }

        @Override
        protected void preFireCallback() {
            super.postParameter(POST_ITEMS, this.items);
        }
    }
    public static final class UpdateBuilder extends TraktApiBuilder {
        private static final String POST_SLUG = "slug";
        private static final String POST_NAME = "name";
        private static final String POST_DESCRIPTION = "description";
        private static final String POST_PRIVACY = "privacy";

        private static final String URI = "/lists/update/" + FIELD_API_KEY;

        private UpdateBuilder(ListService service) {
            super(service, new TypeToken() {}, URI, HttpMethod.Post);
        }

        /**
         * Slug to identify what list is being updated.
         *
         * @param slug Value.
         * @return Builder instance.
         */
        public UpdateBuilder slug(String slug) {
            super.postParameter(POST_SLUG, slug);
            return this;
        }

        /**
         * The list name. This must be unique.
         *
         * @param name Value.
         * @return Builder instance.
         */
        public UpdateBuilder name(String name) {
            super.postParameter(POST_NAME, name);
            return this;
        }

        /**
         * Optional but recommended description of what the list contains.
         *
         * @param description Value.
         * @return Builder instance.
         */
        public UpdateBuilder description(String description) {
            super.postParameter(POST_DESCRIPTION, description);
            return this;
        }

        /**
         * Privacy level.
         *
         * @param privacy Value.
         * @return Builder instance.
         */
        public UpdateBuilder privacy(ListPrivacy privacy) {
            super.postParameter(POST_PRIVACY, privacy);
            return this;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy