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);
}
}
}