package com.florianmski.tracktoid.data.database.utils; import android.content.ContentValues; import com.florianmski.tracktoid.utils.CVHelper; import com.florianmski.tracktoid.utils.DateHelper; import com.florianmski.tracktoid.data.database.columns.BaseEntityColumns; import com.florianmski.tracktoid.data.database.columns.EpisodeColumns; import com.florianmski.tracktoid.data.database.columns.ImageColumns; import com.florianmski.tracktoid.data.database.columns.MovieColumns; import com.florianmski.tracktoid.data.database.columns.SeasonColumns; import com.florianmski.tracktoid.data.database.columns.ShowColumns; import com.uwetrottmann.trakt.v2.entities.Airs; import com.uwetrottmann.trakt.v2.entities.BaseEntity; import com.uwetrottmann.trakt.v2.entities.BaseIds; import com.uwetrottmann.trakt.v2.entities.Episode; import com.uwetrottmann.trakt.v2.entities.EpisodeIds; import com.uwetrottmann.trakt.v2.entities.Images; import com.uwetrottmann.trakt.v2.entities.MoreImageSizes; import com.uwetrottmann.trakt.v2.entities.Movie; import com.uwetrottmann.trakt.v2.entities.MovieIds; import com.uwetrottmann.trakt.v2.entities.Season; import com.uwetrottmann.trakt.v2.entities.SeasonIds; import com.uwetrottmann.trakt.v2.entities.Show; import com.uwetrottmann.trakt.v2.entities.ShowIds; public class CVUtils { public static ContentValues packShow(Show show) { return new ShowCV(show).getCV(); } public static ContentValues packSeason(Season season, String showId) { return new SeasonCV(new SeasonCV.SeasonEntity(season), showId).getCV(); } public static ContentValues packEpisode(Episode episode, String seasonId, String showId) { return new EpisodeCV(episode, seasonId, showId).getCV(); } public static ContentValues packMovie(Movie movie) { return new MovieCV(movie).getCV(); } public static class BaseCV<E extends BaseEntity, I extends BaseIds> { protected CVHelper cvHelper; protected E entity; protected I ids; private BaseCV(I ids) { this.cvHelper = new CVHelper(); this.ids = ids; } protected BaseCV(E entity, I ids) { this(ids); this.entity = entity; } protected ContentValues getCV() { packEntity(); packIds(); packImages(entity.images); return cvHelper.get(); } protected void packEntity() { cvHelper.put(BaseEntityColumns.TITLE, entity.title) .put(BaseEntityColumns.VOTES, entity.votes) .put(BaseEntityColumns.UPDATED_AT, DateHelper.getTimestamp(entity.updated_at)); } protected void packIds() { if(ids != null) { cvHelper.put(ShowColumns.ID_IMDB, ids.imdb) .put(ShowColumns.ID_TMDB, ids.tmdb) .put(ShowColumns.ID_TRAKT, ids.trakt); } } protected void packImages(Images images) { if(images != null) { MoreImageSizes fanart = images.fanart; if(fanart != null) { cvHelper.put(ImageColumns.FANART_FULL, fanart.full) .put(ImageColumns.FANART_MEDIUM, fanart.medium) .put(ImageColumns.FANART_THUMB, fanart.thumb); } MoreImageSizes poster = images.poster; if(poster != null) { cvHelper.put(ImageColumns.POSTER_FULL, images.poster.full) .put(ImageColumns.POSTER_MEDIUM, images.poster.medium) .put(ImageColumns.POSTER_THUMB, images.poster.thumb); } MoreImageSizes screenshot = images.screenshot; if(screenshot != null) { cvHelper.put(ImageColumns.SCREENSHOT_FULL, images.screenshot.full) .put(ImageColumns.SCREENSHOT_MEDIUM, images.screenshot.medium) .put(ImageColumns.SCREENSHOT_THUMB, images.screenshot.thumb); } if(images.banner != null) cvHelper.put(ImageColumns.BANNER, images.banner.full); if(images.clearart != null) cvHelper.put(ImageColumns.CLEARART, images.clearart.full); if(images.logo != null) cvHelper.put(ImageColumns.LOGO, images.logo.full); if(images.thumb != null) cvHelper.put(ImageColumns.THUMB, images.thumb.full); } } } public static class ShowCV extends BaseCV<Show, ShowIds> { private ShowCV(Show entity) { super(entity, entity.ids); } @Override protected void packEntity() { super.packEntity(); cvHelper.put(ShowColumns.CERTIFICATION, entity.certification) .put(ShowColumns.COUNTRY, entity.country) .put(ShowColumns.FIRST_AIRED, DateHelper.getTimestamp(entity.first_aired)) .put(ShowColumns.GENRES, entity.genres) .put(ShowColumns.HOMEPAGE, entity.homepage) .put(ShowColumns.LANGUAGE, entity.language) .put(ShowColumns.NETWORK, entity.network) .put(ShowColumns.OVERVIEW, entity.overview) .put(ShowColumns.RUNTIME, entity.runtime) .put(ShowColumns.STATUS, entity.status != null ? entity.status.toString() : null) .put(ShowColumns.TRAILER, entity.trailer) .put(ShowColumns.YEAR, entity.year); Airs airs = entity.airs; if(airs != null) { cvHelper.put(ShowColumns.AIR_DAY, airs.day) .put(ShowColumns.AIR_TIME, airs.time) .put(ShowColumns.AIR_TIMEZONE, airs.timezone); } cvHelper.put(ShowColumns.PUBLIC_RATING, entity.rating); } @Override protected void packIds() { super.packIds(); cvHelper.put(ShowColumns.ID_SLUG, ids.slug) .put(ShowColumns.ID_TVDB, ids.tvdb) .put(ShowColumns.ID_TVRAGE, ids.tvrage); } } public static class SeasonCV extends BaseCV<SeasonCV.SeasonEntity, SeasonCV.SeasonEntityIds> { private String showId; protected SeasonCV(SeasonEntity entity, String showId) { super(entity, new SeasonEntityIds(entity.season.ids)); setParentId(showId); } private void setParentId(String showId) { this.showId = showId; } public static class SeasonEntity extends BaseEntity { public Season season; public SeasonEntity(Season season) { this.season = season; this.title = season.number == 0 ? "Specials" : "Season " + season.number; // TODO not in the API atm this.updated_at = season.updated_at; this.images = season.images; } } public static class SeasonEntityIds extends BaseIds { private Integer tvdb; private Integer tvrage; public SeasonEntityIds(SeasonIds ids) { this.tmdb = ids.tmdb; this.trakt = ids.trakt; this.tvdb = ids.tvdb; this.tvrage = ids.tvrage; } } @Override protected void packEntity() { // do not call super, season do not have a title or a updated_at field // super.packEntity(); cvHelper.put(SeasonColumns.NUMBER, entity.season.number) .put(SeasonColumns.OVERVIEW, entity.season.overview) .put(SeasonColumns.SHOW_ID, showId); cvHelper.put(SeasonColumns.PUBLIC_RATING, entity.season.rating) .put(EpisodeColumns.VOTES, entity.season.votes); } @Override protected void packIds() { // super.packIds(); cvHelper.put(SeasonColumns.ID_TMDB, ids.tmdb) .put(SeasonColumns.ID_TRAKT, ids.trakt) .put(SeasonColumns.ID_TVDB, ids.tvdb) .put(ShowColumns.ID_TVRAGE, ids.tvrage); } } public static class EpisodeCV extends BaseCV<Episode, EpisodeIds> { private String seasonId, showId; protected EpisodeCV(Episode entity, String seasonId, String showId) { super(entity, entity.ids); setParentIds(seasonId, showId); } private void setParentIds(String seasonId, String showId) { this.seasonId = seasonId; this.showId = showId; } @Override protected void packEntity() { super.packEntity(); cvHelper.put(EpisodeColumns.FIRST_AIRED, DateHelper.getTimestamp(entity.first_aired)) .put(EpisodeColumns.NUMBER, entity.number) .put(EpisodeColumns.NUMBER_ABS, entity.number_abs) .put(EpisodeColumns.OVERVIEW, entity.overview) .put(EpisodeColumns.SEASON, entity.season) .put(EpisodeColumns.SEASON_ID, seasonId) .put(EpisodeColumns.SHOW_ID, showId); cvHelper.put(EpisodeColumns.PUBLIC_RATING, entity.rating); } @Override protected void packIds() { super.packIds(); cvHelper.put(EpisodeColumns.ID_TVDB, ids.tvdb) .put(EpisodeColumns.ID_TVRAGE, ids.tvrage); } } public static class MovieCV extends BaseCV<Movie, MovieIds> { protected MovieCV(Movie entity) { super(entity, entity.ids); } @Override protected void packEntity() { super.packEntity(); cvHelper .put(MovieColumns.CERTIFICATION, entity.certification) .put(MovieColumns.GENRES, entity.genres) .put(MovieColumns.HOMEPAGE, entity.homepage) .put(MovieColumns.LANGUAGE, entity.language) .put(MovieColumns.OVERVIEW, entity.overview) .put(MovieColumns.RELEASED, DateHelper.getTimestamp(entity.released)) .put(MovieColumns.RUNTIME, entity.runtime) .put(MovieColumns.TAGLINE, entity.tagline) .put(MovieColumns.TRAILER, entity.trailer) .put(MovieColumns.YEAR, entity.year); cvHelper.put(MovieColumns.PUBLIC_RATING, entity.rating); } @Override protected void packIds() { super.packIds(); cvHelper.put(MovieColumns.ID_SLUG, ids.slug); } } }