package com.florianmski.tracktoid.data.provider; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.net.Uri; import android.provider.BaseColumns; import android.util.Log; import com.florianmski.tracktoid.utils.Utils; import com.florianmski.tracktoid.data.provider.util.ColumnMetadata; /** * This class was generated by the ContentProviderCodeGenerator project made by Foxykeep * <p> * (More information available https://github.com/foxykeep/ContentProviderCodeGenerator) */ public abstract class TraktoidContent { public static final Uri CONTENT_URI = Uri.parse("content://" + TraktoidProviderOld.AUTHORITY); private TraktoidContent() { } /** * Created in version 1 */ public static final class Show extends TraktoidContent { private static final String LOG_TAG = Show.class.getSimpleName(); public static final String TABLE_NAME = "show"; public static final String TYPE_ELEM_TYPE = "vnd.android.cursor.item/traktoid-show"; public static final String TYPE_DIR_TYPE = "vnd.android.cursor.dir/traktoid-show"; public static final Uri CONTENT_URI = Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); public static enum Columns implements ColumnMetadata { ID(BaseColumns._ID, "integer"), TITLE("title", "text"), YEAR("year", "integer"), URL("url", "text"), FIRST_AIRED("first_aired", "integer"), COUNTRY("country", "text"), OVERVIEW("overview", "text"), RUNTIME("runtime", "integer"), NETWORK("network", "text"), AIR_DAY("air_day", "text"), AIR_TIME("air_time", "text"), CERTIFICATION("certification", "text"), IMDB_ID("imdb_id", "text"), TVDB_ID("tvdb_id", "integer"), TVRAGE_ID("tvrage_id", "integer"), POSTER("poster", "text"), FANART("fanart", "text"), PERCENTAGE("percentage", "integer"), RATING("rating", "text"), IN_WATCHLIST("in_watchlist", "integer"), EPISODES_WATCHED("episodes_watched", "integer"), EPISODES_AIRED("episodes_aired", "integer"), IN_COLLECTION("in_collection", "integer"), LAST_UPDATED("last_updated", "integer"), EPISODES_COLLECTED("episodes_completed", "integer"); private final String mName; private final String mType; private Columns(String name, String type) { mName = name; mType = type; } @Override public int getIndex() { return ordinal(); } @Override public String getName() { return mName; } @Override public String getType() { return mType; } } public static final String[] PROJECTION = new String[] { Columns.ID.getName(), Columns.TITLE.getName(), Columns.YEAR.getName(), Columns.URL.getName(), Columns.FIRST_AIRED.getName(), Columns.COUNTRY.getName(), Columns.OVERVIEW.getName(), Columns.RUNTIME.getName(), Columns.NETWORK.getName(), Columns.AIR_DAY.getName(), Columns.AIR_TIME.getName(), Columns.CERTIFICATION.getName(), Columns.IMDB_ID.getName(), Columns.TVDB_ID.getName(), Columns.TVRAGE_ID.getName(), Columns.POSTER.getName(), Columns.FANART.getName(), Columns.PERCENTAGE.getName(), Columns.RATING.getName(), Columns.IN_WATCHLIST.getName(), Columns.EPISODES_WATCHED.getName(), Columns.EPISODES_AIRED.getName(), Columns.IN_COLLECTION.getName(), Columns.LAST_UPDATED.getName(), Columns.EPISODES_COLLECTED.getName() }; private Show() { // No private constructor } public static void createTable(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + TABLE_NAME + " (" + Columns.ID.getName() + " " + Columns.ID.getType() + ", " + Columns.TITLE.getName() + " " + Columns.TITLE.getType() + ", " + Columns.YEAR.getName() + " " + Columns.YEAR.getType() + ", " + Columns.URL.getName() + " " + Columns.URL.getType() + ", " + Columns.FIRST_AIRED.getName() + " " + Columns.FIRST_AIRED.getType() + ", " + Columns.COUNTRY.getName() + " " + Columns.COUNTRY.getType() + ", " + Columns.OVERVIEW.getName() + " " + Columns.OVERVIEW.getType() + ", " + Columns.RUNTIME.getName() + " " + Columns.RUNTIME.getType() + ", " + Columns.NETWORK.getName() + " " + Columns.NETWORK.getType() + ", " + Columns.AIR_DAY.getName() + " " + Columns.AIR_DAY.getType() + ", " + Columns.AIR_TIME.getName() + " " + Columns.AIR_TIME.getType() + ", " + Columns.CERTIFICATION.getName() + " " + Columns.CERTIFICATION.getType() + ", " + Columns.IMDB_ID.getName() + " " + Columns.IMDB_ID.getType() + ", " + Columns.TVDB_ID.getName() + " " + Columns.TVDB_ID.getType() + ", " + Columns.TVRAGE_ID.getName() + " " + Columns.TVRAGE_ID.getType() + ", " + Columns.POSTER.getName() + " " + Columns.POSTER.getType() + ", " + Columns.FANART.getName() + " " + Columns.FANART.getType() + ", " + Columns.PERCENTAGE.getName() + " " + Columns.PERCENTAGE.getType() + ", " + Columns.RATING.getName() + " " + Columns.RATING.getType() + ", " + Columns.IN_WATCHLIST.getName() + " " + Columns.IN_WATCHLIST.getType() + ", " + Columns.EPISODES_WATCHED.getName() + " " + Columns.EPISODES_WATCHED.getType() + ", " + Columns.EPISODES_AIRED.getName() + " " + Columns.EPISODES_AIRED.getType() + ", " + Columns.IN_COLLECTION.getName() + " " + Columns.IN_COLLECTION.getType() + ", " + Columns.LAST_UPDATED.getName() + " " + Columns.LAST_UPDATED.getType() + ", " + Columns.EPISODES_COLLECTED.getName() + " " + Columns.EPISODES_COLLECTED.getType() + ", " + "UNIQUE (" + Columns.TVDB_ID.getName() + ")" + ", " + "PRIMARY KEY (" + Columns.ID.getName() + ")" + ");"); db.execSQL("CREATE INDEX show_title on " + TABLE_NAME + "(" + Columns.TITLE.getName() + ");"); db.execSQL("CREATE INDEX show_tvdb_id on " + TABLE_NAME + "(" + Columns.TVDB_ID.getName() + ");"); } // Version 1 : Creation of the table public static void upgradeTable(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 1) { Log.i(LOG_TAG, "Upgrading from version " + oldVersion + " to " + newVersion + ", data will be lost!"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";"); createTable(db); return; } if (oldVersion != newVersion) { throw new IllegalStateException("Error upgrading the database to version " + newVersion); } } static String getBulkInsertString() { return new StringBuilder("INSERT INTO ") .append(TABLE_NAME).append(" ( ") .append(Columns.ID.getName()).append(", ") .append(Columns.TITLE.getName()).append(", ") .append(Columns.YEAR.getName()).append(", ") .append(Columns.URL.getName()).append(", ") .append(Columns.FIRST_AIRED.getName()).append(", ") .append(Columns.COUNTRY.getName()).append(", ") .append(Columns.OVERVIEW.getName()).append(", ") .append(Columns.RUNTIME.getName()).append(", ") .append(Columns.NETWORK.getName()).append(", ") .append(Columns.AIR_DAY.getName()).append(", ") .append(Columns.AIR_TIME.getName()).append(", ") .append(Columns.CERTIFICATION.getName()).append(", ") .append(Columns.IMDB_ID.getName()).append(", ") .append(Columns.TVDB_ID.getName()).append(", ") .append(Columns.TVRAGE_ID.getName()).append(", ") .append(Columns.POSTER.getName()).append(", ") .append(Columns.FANART.getName()).append(", ") .append(Columns.PERCENTAGE.getName()).append(", ") .append(Columns.RATING.getName()).append(", ") .append(Columns.IN_WATCHLIST.getName()).append(", ") .append(Columns.EPISODES_WATCHED.getName()).append(", ") .append(Columns.EPISODES_AIRED.getName()).append(", ") .append(Columns.IN_COLLECTION.getName()).append(", ") .append(Columns.LAST_UPDATED.getName()).append(", ") .append(Columns.EPISODES_COLLECTED.getName()) .append(" ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") .toString(); } static void bindValuesInBulkInsert(SQLiteStatement stmt, ContentValues values) { int i = 1; String value; stmt.bindLong(i++, values.getAsLong(Columns.ID.getName())); value = values.getAsString(Columns.TITLE.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.YEAR.getName())); value = values.getAsString(Columns.URL.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.FIRST_AIRED.getName())); value = values.getAsString(Columns.COUNTRY.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.OVERVIEW.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.RUNTIME.getName())); value = values.getAsString(Columns.NETWORK.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.AIR_DAY.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.AIR_TIME.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.CERTIFICATION.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.IMDB_ID.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.TVDB_ID.getName())); stmt.bindLong(i++, values.getAsLong(Columns.TVRAGE_ID.getName())); value = values.getAsString(Columns.POSTER.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.FANART.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.PERCENTAGE.getName())); value = values.getAsString(Columns.RATING.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.IN_WATCHLIST.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_WATCHED.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_AIRED.getName())); stmt.bindLong(i++, values.getAsLong(Columns.IN_COLLECTION.getName())); stmt.bindLong(i++, values.getAsLong(Columns.LAST_UPDATED.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_COLLECTED.getName())); } public static final Uri createUri() { return Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); } public static final Uri createUriWithAppendedId(String showId) { return Uri.parse(createUri() + "/" + showId); } } /** * Created in version 1 */ public static final class Season extends TraktoidContent { private static final String LOG_TAG = Season.class.getSimpleName(); public static final String TABLE_NAME = "season"; public static final String TYPE_ELEM_TYPE = "vnd.android.cursor.item/traktoid-season"; public static final String TYPE_DIR_TYPE = "vnd.android.cursor.dir/traktoid-season"; public static final Uri CONTENT_URI = Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); public static enum Columns implements ColumnMetadata { ID(BaseColumns._ID, "integer"), SEASON("season", "integer"), EPISODES_AIRED("episodes_aired", "integer"), EPISODES_WATCHED("episodes_watched", "integer"), URL("url", "text"), SHOW_TVDB_ID("tvshow_id", "integer"), POSTER("poster", "text"), EPISODES_COLLECTED("episodes_collected", "integer"); private final String mName; private final String mType; private Columns(String name, String type) { mName = name; mType = type; } @Override public int getIndex() { return ordinal(); } @Override public String getName() { return mName; } @Override public String getType() { return mType; } } public static final String[] PROJECTION = new String[] { Columns.ID.getName(), Columns.SEASON.getName(), Columns.EPISODES_AIRED.getName(), Columns.EPISODES_WATCHED.getName(), Columns.URL.getName(), Columns.SHOW_TVDB_ID.getName(), Columns.POSTER.getName(), Columns.EPISODES_COLLECTED.getName() }; private Season() { // No private constructor } public static void createTable(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + TABLE_NAME + " (" + Columns.ID.getName() + " " + Columns.ID.getType() + ", " + Columns.SEASON.getName() + " " + Columns.SEASON.getType() + ", " + Columns.EPISODES_AIRED.getName() + " " + Columns.EPISODES_AIRED.getType() + ", " + Columns.EPISODES_WATCHED.getName() + " " + Columns.EPISODES_WATCHED.getType() + ", " + Columns.URL.getName() + " " + Columns.URL.getType() + ", " + Columns.SHOW_TVDB_ID.getName() + " " + Columns.SHOW_TVDB_ID.getType() + ", " + Columns.POSTER.getName() + " " + Columns.POSTER.getType() + ", " + Columns.EPISODES_COLLECTED.getName() + " " + Columns.EPISODES_COLLECTED.getType() + ", " // TODO unqiue combo tvdbid + season ? + "UNIQUE (" + Columns.URL.getName() + ")" + ", " + "PRIMARY KEY (" + Columns.ID.getName() + ")" + ");"); db.execSQL("CREATE INDEX season_season on " + TABLE_NAME + "(" + Columns.SEASON.getName() + ");"); db.execSQL("CREATE INDEX season_tvshow_id on " + TABLE_NAME + "(" + Columns.SHOW_TVDB_ID.getName() + ");"); // we use a "before" in order to from our cursor notified with the new values after the contentresolver update String watchedTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.EPISODES_WATCHED.getName() + " " + "BEFORE UPDATE OF " + Columns.EPISODES_WATCHED.getName() + " ON " + TABLE_NAME + " " + "WHEN " + "new." + Columns.EPISODES_WATCHED.getName() + " != " + "old." + Columns.EPISODES_WATCHED.getName() + " " + "AND " + "new." + Columns.SEASON.getName() + " !=0 " + // we don't want to count specials in the the show progress "BEGIN " + "UPDATE " + Show.TABLE_NAME + " " + "SET " + Show.Columns.EPISODES_WATCHED.getName() + " = " + Show.Columns.EPISODES_WATCHED.getName() + " + " + "new." + Columns.EPISODES_WATCHED.getName() + " - " + "old." + Columns.EPISODES_WATCHED.getName() + " " + "WHERE " + Show.TABLE_NAME + "." + Show.Columns.TVDB_ID.getName() + " = " + "new." + Columns.SHOW_TVDB_ID.getName() + ";" + "END" + ";"; String collectedTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.EPISODES_COLLECTED.getName() + " " + "BEFORE UPDATE OF " + Columns.EPISODES_COLLECTED.getName() + " ON " + TABLE_NAME + " " + "WHEN " + "new." + Columns.EPISODES_COLLECTED.getName() + " != " + "old." + Columns.EPISODES_COLLECTED.getName() + " " + "AND " + "new." + Columns.SEASON.getName() + " !=0 " + // we don't want to count specials in the the show progress "BEGIN " + "UPDATE " + Show.TABLE_NAME + " " + "SET " + Show.Columns.EPISODES_COLLECTED.getName() + " = " + Show.Columns.EPISODES_COLLECTED.getName() + " + " + "new." + Columns.EPISODES_COLLECTED.getName() + " - " + "old." + Columns.EPISODES_COLLECTED.getName() + " " + "WHERE " + Show.TABLE_NAME + "." + Show.Columns.TVDB_ID.getName() + " = " + "new." + Columns.SHOW_TVDB_ID.getName() + ";" + "END" + ";"; String airedTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.EPISODES_AIRED.getName() + " " + "BEFORE UPDATE OF " + Columns.EPISODES_AIRED.getName() + " ON " + TABLE_NAME + " " + "WHEN " + "new." + Columns.EPISODES_AIRED.getName() + " != " + "old." + Columns.EPISODES_AIRED.getName() + " " + "AND " + "new." + Columns.SEASON.getName() + " !=0 " + // we don't want to count specials in the the show progress "BEGIN " + "UPDATE " + Show.TABLE_NAME + " " + "SET " + Show.Columns.EPISODES_AIRED.getName() + " = " + Show.Columns.EPISODES_AIRED.getName() + " + " + "new." + Columns.EPISODES_AIRED.getName() + " - " + "old." + Columns.EPISODES_AIRED.getName() + " " + "WHERE " + Show.TABLE_NAME + "." + Show.Columns.TVDB_ID.getName() + " = " + "new." + Columns.SHOW_TVDB_ID.getName() + ";" + "END" + ";"; db.execSQL(watchedTrigger); db.execSQL(collectedTrigger); db.execSQL(airedTrigger); } // Version 1 : Creation of the table public static void upgradeTable(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 1) { Log.i(LOG_TAG, "Upgrading from version " + oldVersion + " to " + newVersion + ", data will be lost!"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";"); db.execSQL("DROP TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.EPISODES_WATCHED.getName() + ";"); db.execSQL("DROP TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.EPISODES_COLLECTED.getName() + ";"); return; } if (oldVersion != newVersion) { throw new IllegalStateException("Error upgrading the database to version " + newVersion); } } static String getBulkInsertString() { return new StringBuilder("INSERT INTO ") .append(TABLE_NAME).append(" ( ") .append(Columns.ID.getName()).append(", ") .append(Columns.SEASON.getName()).append(", ") .append(Columns.EPISODES_AIRED.getName()).append(", ") .append(Columns.EPISODES_WATCHED.getName()).append(", ") .append(Columns.URL.getName()).append(", ") .append(Columns.SHOW_TVDB_ID.getName()).append(", ") .append(Columns.POSTER.getName()).append(", ") .append(Columns.EPISODES_COLLECTED.getName()) .append(" ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)") .toString(); } static void bindValuesInBulkInsert(SQLiteStatement stmt, ContentValues values) { int i = 1; String value; i++; // stmt.bindLong(i++, values.getAsLong(Columns.ID.getName())); stmt.bindLong(i++, values.getAsLong(Columns.SEASON.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_AIRED.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_WATCHED.getName())); value = values.getAsString(Columns.URL.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.SHOW_TVDB_ID.getName())); value = values.getAsString(Columns.POSTER.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.EPISODES_COLLECTED.getName())); } public static final Uri createUri(String showId) { return Uri.parse(TraktoidContent.CONTENT_URI + "/" + Show.TABLE_NAME + "/" + showId + "/" + TABLE_NAME); } public static final Uri createUriWithAppendedId(String showId, String seasonId) { return Uri.parse(createUri(showId) + "/" + seasonId); } } /** * Created in version 1 */ public static final class Episode extends TraktoidContent { private static final String LOG_TAG = Episode.class.getSimpleName(); public static final String TABLE_NAME = "episode"; public static final String TYPE_ELEM_TYPE = "vnd.android.cursor.item/traktoid-episode"; public static final String TYPE_DIR_TYPE = "vnd.android.cursor.dir/traktoid-episode"; public static final Uri CONTENT_URI = Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); public static final String AIRED = "/aired"; public static enum Columns implements ColumnMetadata { ID(BaseColumns._ID, "integer"), SEASON("season", "integer"), EPISODE("episode", "integer"), TITLE("title", "text"), OVERVIEW("overview", "text"), FIRST_AIRED("first_aired", "integer"), URL("url", "text"), SCREEN("screen", "text"), PERCENTAGE("percentage", "integer"), WATCHED("watched", "integer"), IN_WATCHLIST("in_watchlist", "integer"), IN_COLLECTION("in_collection", "integer"), RATING("rating", "text"), TVDB_ID("tvdb_id", "integer"), SHOW_TVDB_ID("tvshow_id", "integer"); private final String mName; private final String mType; private Columns(String name, String type) { mName = name; mType = type; } @Override public int getIndex() { return ordinal(); } @Override public String getName() { return mName; } @Override public String getType() { return mType; } } public static final String[] PROJECTION = new String[] { Columns.ID.getName(), Columns.SEASON.getName(), Columns.EPISODE.getName(), Columns.TITLE.getName(), Columns.OVERVIEW.getName(), Columns.FIRST_AIRED.getName(), Columns.URL.getName(), Columns.SCREEN.getName(), Columns.PERCENTAGE.getName(), Columns.WATCHED.getName(), Columns.IN_WATCHLIST.getName(), Columns.IN_COLLECTION.getName(), Columns.RATING.getName(), Columns.TVDB_ID.getName(), Columns.SHOW_TVDB_ID.getName() }; private Episode() { // No private constructor } public static void createTable(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + TABLE_NAME + " (" + Columns.ID.getName() + " " + Columns.ID.getType() + ", " + Columns.SEASON.getName() + " " + Columns.SEASON.getType() + ", " + Columns.EPISODE.getName() + " " + Columns.EPISODE.getType() + ", " + Columns.TITLE.getName() + " " + Columns.TITLE.getType() + ", " + Columns.OVERVIEW.getName() + " " + Columns.OVERVIEW.getType() + ", " + Columns.FIRST_AIRED.getName() + " " + Columns.FIRST_AIRED.getType() + ", " + Columns.URL.getName() + " " + Columns.URL.getType() + ", " + Columns.SCREEN.getName() + " " + Columns.SCREEN.getType() + ", " + Columns.PERCENTAGE.getName() + " " + Columns.PERCENTAGE.getType() + ", " + Columns.WATCHED.getName() + " " + Columns.WATCHED.getType() + ", " + Columns.IN_WATCHLIST.getName() + " " + Columns.IN_WATCHLIST.getType() + ", " + Columns.IN_COLLECTION.getName() + " " + Columns.IN_COLLECTION.getType() + ", " + Columns.RATING.getName() + " " + Columns.RATING.getType() + ", " + Columns.TVDB_ID.getName() + " " + Columns.TVDB_ID.getType() + ", " + Columns.SHOW_TVDB_ID.getName() + " " + Columns.SHOW_TVDB_ID.getType() + ", " // TODO + "UNIQUE (" + Columns.TVDB_ID.getName() + ")" + ", " + "PRIMARY KEY (" + Columns.ID.getName() + ")" + ");"); db.execSQL("CREATE INDEX episode_season on " + TABLE_NAME + "(" + Columns.SEASON.getName() + ");"); db.execSQL("CREATE INDEX episode_tvdb_id on " + TABLE_NAME + "(" + Columns.TVDB_ID.getName() + ");"); db.execSQL("CREATE INDEX episode_tvshow_id on " + TABLE_NAME + "(" + Columns.SHOW_TVDB_ID.getName() + ");"); String watchedUpdateTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.WATCHED.getName() + " " + "BEFORE UPDATE OF " + Columns.WATCHED.getName() + " ON " + TABLE_NAME + " " + "WHEN " + "new." + Columns.WATCHED.getName() + " != " + "old." + Columns.WATCHED.getName() + " " + "BEGIN " + "UPDATE " + Season.TABLE_NAME + " " + "SET " + Season.Columns.EPISODES_WATCHED.getName() + " = " + Season.Columns.EPISODES_WATCHED.getName() + " + " + "new." + Columns.WATCHED.getName() + " - " + "old." + Columns.WATCHED.getName() + " " + "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "new." + Columns.SEASON.getName() + ";" + "END" + ";"; // // if new episode inserted and watched = true, +1 episodes_watched on the corresponding season // String watchedInsertTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "insert" + "_" + Columns.WATCHED.getName() + " " + // "BEFORE INSERT ON " + TABLE_NAME + " " + // "WHEN " + "new." + Columns.WATCHED.getName() + " = 1 " + // "BEGIN " + // "UPDATE " + Season.TABLE_NAME + " " + // "SET " + Season.Columns.EPISODES_WATCHED.getName() + " = " + Season.Columns.EPISODES_WATCHED.getName() + " + 1 " + // "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "new." + Columns.SEASON.getName() + ";" + // "END" + ";"; // // // if episode deleted and watched = true, -1 episodes_watched on the corresponding season // String watchedDeleteTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "delete" + "_" + Columns.WATCHED.getName() + " " + // "BEFORE DELETE ON " + TABLE_NAME + " " + // "WHEN " + "old." + Columns.WATCHED.getName() + " = 1 " + // "BEGIN " + // "UPDATE " + Season.TABLE_NAME + " " + // "SET " + Season.Columns.EPISODES_WATCHED.getName() + " = " + Season.Columns.EPISODES_WATCHED.getName() + " - 1 " + // "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "old." + Columns.SEASON.getName() + ";" + // "END" + ";"; String collectedUpdateTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.IN_COLLECTION.getName() + " " + "BEFORE UPDATE OF " + Columns.IN_COLLECTION.getName() + " ON " + TABLE_NAME + " " + "WHEN " + "new." + Columns.IN_COLLECTION.getName() + " != " + "old." + Columns.IN_COLLECTION.getName() + " " + "BEGIN " + "UPDATE " + Season.TABLE_NAME + " " + "SET " + Season.Columns.EPISODES_COLLECTED.getName() + " = " + Season.Columns.EPISODES_COLLECTED.getName() + " + " + "new." + Columns.IN_COLLECTION.getName() + " - " + "old." + Columns.IN_COLLECTION.getName() + " " + "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "new." + Columns.SEASON.getName() + ";" + "END" + ";"; // doesn't work properly with bulkInsert // String collectedInsertTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "insert" + "_" + Columns.IN_COLLECTION.getName() + " " + // "BEFORE INSERT ON " + TABLE_NAME + " " + // "WHEN " + "new." + Columns.IN_COLLECTION.getName() + " = 1 " + // "BEGIN " + // "UPDATE " + Season.TABLE_NAME + " " + // "SET " + Season.Columns.EPISODES_COLLECTED.getName() + " = " + Season.Columns.EPISODES_COLLECTED.getName() + " + 1 " + // "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "new." + Columns.SEASON.getName() + ";" + // "END" + ";"; // // String collectedDeleteTrigger = "CREATE TRIGGER " + TABLE_NAME + "_" + "delete" + "_" + Columns.IN_COLLECTION.getName() + " " + // "BEFORE DELETE ON " + TABLE_NAME + " " + // "WHEN " + "old." + Columns.IN_COLLECTION.getName() + " = 1 " + // "BEGIN " + // "UPDATE " + Season.TABLE_NAME + " " + // "SET " + Season.Columns.EPISODES_COLLECTED.getName() + " = " + Season.Columns.EPISODES_COLLECTED.getName() + " - 1 " + // "WHERE " + Season.TABLE_NAME + "." + Season.Columns.SEASON.getName() + " = " + "old." + Columns.SEASON.getName() + ";" + // "END" + ";"; db.execSQL(watchedUpdateTrigger); db.execSQL(collectedUpdateTrigger); } // Version 1 : Creation of the table public static void upgradeTable(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 1) { Log.i(LOG_TAG, "Upgrading from version " + oldVersion + " to " + newVersion + ", data will be lost!"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";"); db.execSQL("DROP TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.WATCHED.getName() + ";"); db.execSQL("DROP TRIGGER " + TABLE_NAME + "_" + "update" + "_" + Columns.IN_COLLECTION.getName() + ";"); createTable(db); return; } if (oldVersion != newVersion) { throw new IllegalStateException("Error upgrading the database to version " + newVersion); } } static String getBulkInsertString() { return new StringBuilder("INSERT INTO ") .append(TABLE_NAME).append(" ( ") .append(Columns.ID.getName()).append(", ") .append(Columns.SEASON.getName()).append(", ") .append(Columns.EPISODE.getName()).append(", ") .append(Columns.TITLE.getName()).append(", ") .append(Columns.OVERVIEW.getName()).append(", ") .append(Columns.FIRST_AIRED.getName()).append(", ") .append(Columns.URL.getName()).append(", ") .append(Columns.SCREEN.getName()).append(", ") .append(Columns.PERCENTAGE.getName()).append(", ") .append(Columns.WATCHED.getName()).append(", ") .append(Columns.IN_WATCHLIST.getName()).append(", ") .append(Columns.IN_COLLECTION.getName()).append(", ") .append(Columns.RATING.getName()).append(", ") .append(Columns.TVDB_ID.getName()).append(", ") .append(Columns.SHOW_TVDB_ID.getName()) .append(" ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") .toString(); } static void bindValuesInBulkInsert(SQLiteStatement stmt, ContentValues values) { int i = 1; String value; i++; // stmt.bindLong(i++, values.getAsLong(Columns.ID.getName())); stmt.bindLong(i++, values.getAsLong(Columns.SEASON.getName())); stmt.bindLong(i++, values.getAsLong(Columns.EPISODE.getName())); value = values.getAsString(Columns.TITLE.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.OVERVIEW.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.FIRST_AIRED.getName())); value = values.getAsString(Columns.URL.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.SCREEN.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.PERCENTAGE.getName())); stmt.bindLong(i++, values.getAsLong(Columns.WATCHED.getName())); stmt.bindLong(i++, values.getAsLong(Columns.IN_WATCHLIST.getName())); stmt.bindLong(i++, values.getAsLong(Columns.IN_COLLECTION.getName())); value = values.getAsString(Columns.RATING.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.TVDB_ID.getName())); stmt.bindLong(i++, values.getAsLong(Columns.SHOW_TVDB_ID.getName())); } public static final Uri createUri(String showId) { return Uri.parse(TraktoidContent.CONTENT_URI + "/" + Show.TABLE_NAME + "/" + showId + "/" + TABLE_NAME); } public static final Uri createUriWithAppendedId(String showId, String episodeId) { return Uri.parse(createUri(showId) + "/" + episodeId); } } /** * Created in version 1 */ public static final class Movie extends TraktoidContent { private static final String LOG_TAG = Movie.class.getSimpleName(); public static final String TABLE_NAME = "movie"; public static final String TYPE_ELEM_TYPE = "vnd.android.cursor.item/traktoid-movie"; public static final String TYPE_DIR_TYPE = "vnd.android.cursor.dir/traktoid-movie"; public static final Uri CONTENT_URI = Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); public static enum Columns implements ColumnMetadata { ID(BaseColumns._ID, "integer"), TITLE("title", "text"), YEAR("year", "integer"), RELEASED("released", "integer"), URL("url", "text"), TRAILER("trailer", "text"), RUNTIME("runtime", "text"), TAGLINE("tagline", "text"), OVERVIEW("overview", "text"), CERTIFICATION("certification", "text"), IMDB_ID("imdb_id", "text"), TMDB_ID("tmdb_id", "integer"), RT_ID("rt_id", "integer"), LAST_UPDATED("last_updated", "integer"), POSTER("poster", "text"), FANART("fanart", "text"), PERCENTAGE("percentage", "integer"), WATCHED("watched", "integer"), RATING("rating", "text"), IN_WATCHLIST("in_watchlist", "integer"), IN_COLLECTION("in_collection", "integer"); private final String mName; private final String mType; private Columns(String name, String type) { mName = name; mType = type; } @Override public int getIndex() { return ordinal(); } @Override public String getName() { return mName; } @Override public String getType() { return mType; } } public static final String[] PROJECTION = new String[] { Columns.ID.getName(), Columns.TITLE.getName(), Columns.YEAR.getName(), Columns.RELEASED.getName(), Columns.URL.getName(), Columns.TRAILER.getName(), Columns.RUNTIME.getName(), Columns.TAGLINE.getName(), Columns.OVERVIEW.getName(), Columns.CERTIFICATION.getName(), Columns.IMDB_ID.getName(), Columns.TMDB_ID.getName(), Columns.RT_ID.getName(), Columns.LAST_UPDATED.getName(), Columns.POSTER.getName(), Columns.FANART.getName(), Columns.PERCENTAGE.getName(), Columns.WATCHED.getName(), Columns.RATING.getName(), Columns.IN_WATCHLIST.getName(), Columns.IN_COLLECTION.getName() }; private Movie() { // No private constructor } public static void createTable(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + TABLE_NAME + " (" + Columns.ID.getName() + " " + Columns.ID.getType() + ", " + Columns.TITLE.getName() + " " + Columns.TITLE.getType() + ", " + Columns.YEAR.getName() + " " + Columns.YEAR.getType() + ", " + Columns.RELEASED.getName() + " " + Columns.RELEASED.getType() + ", " + Columns.URL.getName() + " " + Columns.URL.getType() + ", " + Columns.TRAILER.getName() + " " + Columns.TRAILER.getType() + ", " + Columns.RUNTIME.getName() + " " + Columns.RUNTIME.getType() + ", " + Columns.TAGLINE.getName() + " " + Columns.TAGLINE.getType() + ", " + Columns.OVERVIEW.getName() + " " + Columns.OVERVIEW.getType() + ", " + Columns.CERTIFICATION.getName() + " " + Columns.CERTIFICATION.getType() + ", " + Columns.IMDB_ID.getName() + " " + Columns.IMDB_ID.getType() + ", " + Columns.TMDB_ID.getName() + " " + Columns.TMDB_ID.getType() + ", " + Columns.RT_ID.getName() + " " + Columns.RT_ID.getType() + ", " + Columns.LAST_UPDATED.getName() + " " + Columns.LAST_UPDATED.getType() + ", " + Columns.POSTER.getName() + " " + Columns.POSTER.getType() + ", " + Columns.FANART.getName() + " " + Columns.FANART.getType() + ", " + Columns.PERCENTAGE.getName() + " " + Columns.PERCENTAGE.getType() + ", " + Columns.WATCHED.getName() + " " + Columns.WATCHED.getType() + ", " + Columns.RATING.getName() + " " + Columns.RATING.getType() + ", " + Columns.IN_WATCHLIST.getName() + " " + Columns.IN_WATCHLIST.getType() + ", " + Columns.IN_COLLECTION.getName() + " " + Columns.IN_COLLECTION.getType() + ", " + "UNIQUE (" + Columns.IMDB_ID.getName() + ")" + ", " + "PRIMARY KEY (" + Columns.ID.getName() + ")" + ");"); } // Version 1 : Creation of the table public static void upgradeTable(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 1) { Log.i(LOG_TAG, "Upgrading from version " + oldVersion + " to " + newVersion + ", data will be lost!"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";"); createTable(db); return; } if (oldVersion != newVersion) { throw new IllegalStateException("Error upgrading the database to version " + newVersion); } } static String getBulkInsertString() { return new StringBuilder("INSERT INTO ") .append(TABLE_NAME).append(" ( ") .append(Columns.ID.getName()).append(", ") .append(Columns.TITLE.getName()).append(", ") .append(Columns.YEAR.getName()).append(", ") .append(Columns.RELEASED.getName()).append(", ") .append(Columns.URL.getName()).append(", ") .append(Columns.TRAILER.getName()).append(", ") .append(Columns.RUNTIME.getName()).append(", ") .append(Columns.TAGLINE.getName()).append(", ") .append(Columns.OVERVIEW.getName()).append(", ") .append(Columns.CERTIFICATION.getName()).append(", ") .append(Columns.IMDB_ID.getName()).append(", ") .append(Columns.TMDB_ID.getName()).append(", ") .append(Columns.RT_ID.getName()).append(", ") .append(Columns.LAST_UPDATED.getName()).append(", ") .append(Columns.POSTER.getName()).append(", ") .append(Columns.FANART.getName()).append(", ") .append(Columns.PERCENTAGE.getName()).append(", ") .append(Columns.WATCHED.getName()).append(", ") .append(Columns.RATING.getName()).append(", ") .append(Columns.IN_WATCHLIST.getName()).append(", ") .append(Columns.IN_COLLECTION.getName()) .append(" ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") .toString(); } static void bindValuesInBulkInsert(SQLiteStatement stmt, ContentValues values) { int i = 1; String value; Long longValue; i++; // stmt.bindLong(i++, values.getAsLong(Columns.ID.getName())); value = values.getAsString(Columns.TITLE.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.YEAR.getName())); stmt.bindLong(i++, values.getAsLong(Columns.RELEASED.getName())); value = values.getAsString(Columns.URL.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.TRAILER.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.RUNTIME.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.TAGLINE.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.OVERVIEW.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.CERTIFICATION.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.IMDB_ID.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.TMDB_ID.getName())); longValue = values.getAsLong(Columns.RT_ID.getName()); stmt.bindLong(i++, longValue != null ? longValue : 0); longValue = values.getAsLong(Columns.LAST_UPDATED.getName()); stmt.bindLong(i++, longValue != null ? longValue : 0); value = values.getAsString(Columns.POSTER.getName()); stmt.bindString(i++, value != null ? value : ""); value = values.getAsString(Columns.FANART.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.PERCENTAGE.getName())); stmt.bindLong(i++, Utils.booleanToInt(values.getAsBoolean(Columns.WATCHED.getName()))); value = values.getAsString(Columns.RATING.getName()); stmt.bindString(i++, value != null ? value : ""); stmt.bindLong(i++, values.getAsLong(Columns.IN_WATCHLIST.getName())); stmt.bindLong(i++, values.getAsLong(Columns.IN_COLLECTION.getName())); } public static final Uri createUri() { return Uri.parse(TraktoidContent.CONTENT_URI + "/" + TABLE_NAME); } public static final Uri createUriWithAppendedId(String movieId) { return Uri.parse(createUri() + "/" + movieId); } } }