/*
* Copyright (C) 2014 Simon Vig Therkildsen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.simonvt.cathode.provider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import net.simonvt.cathode.api.entity.Person;
import net.simonvt.cathode.provider.DatabaseContract.PersonColumns;
import net.simonvt.cathode.provider.ProviderSchematic.People;
import net.simonvt.schematic.Cursors;
public final class PersonDatabaseHelper {
private static volatile PersonDatabaseHelper instance;
public static PersonDatabaseHelper getInstance(Context context) {
if (instance == null) {
synchronized (PersonDatabaseHelper.class) {
if (instance == null) {
instance = new PersonDatabaseHelper(context.getApplicationContext());
}
}
}
return instance;
}
private Context context;
private ContentResolver resolver;
private PersonDatabaseHelper(Context context) {
this.context = context;
resolver = context.getContentResolver();
}
public long getId(long traktId) {
Cursor c = resolver.query(People.PEOPLE, new String[] {
PersonColumns.ID,
}, PersonColumns.TRAKT_ID + "=?", new String[] {
String.valueOf(traktId),
}, null);
long id = !c.moveToFirst() ? -1L : Cursors.getLong(c, PersonColumns.ID);
c.close();
return id;
}
public long getIdFromTmdb(int tmdbId) {
Cursor c = resolver.query(People.PEOPLE, new String[] {
PersonColumns.ID,
}, PersonColumns.TMDB_ID + "=?", new String[] {
String.valueOf(tmdbId),
}, null);
long id = !c.moveToFirst() ? -1L : Cursors.getLong(c, PersonColumns.ID);
c.close();
return id;
}
public long getTraktId(long personId) {
Cursor c = resolver.query(People.withId(personId), new String[] {
PersonColumns.TRAKT_ID,
}, null, null, null);
long id = !c.moveToFirst() ? -1L : Cursors.getLong(c, PersonColumns.TRAKT_ID);
c.close();
return id;
}
public int getTmdbId(long personId) {
Cursor c = resolver.query(People.withId(personId), new String[] {
PersonColumns.TMDB_ID,
}, null, null, null);
int id = !c.moveToFirst() ? -1 : Cursors.getInt(c, PersonColumns.TMDB_ID);
c.close();
return id;
}
public long createPerson(long traktId) {
ContentValues values = new ContentValues();
values.put(PersonColumns.TRAKT_ID, traktId);
values.put(PersonColumns.NEEDS_SYNC, true);
return People.getId(resolver.insert(People.PEOPLE, values));
}
public long updateOrInsert(Person person) {
final long traktId = person.getIds().getTrakt();
long personId = getId(traktId);
if (personId == -1L) {
personId = People.getId(resolver.insert(People.PEOPLE, getValues(person)));
} else {
resolver.update(People.withId(personId), getValues(person), null, null);
}
return personId;
}
private static ContentValues getValues(Person person) {
ContentValues cv = new ContentValues();
cv.put(PersonColumns.NAME, person.getName());
cv.put(PersonColumns.TRAKT_ID, person.getIds().getTrakt());
cv.put(PersonColumns.SLUG, person.getIds().getSlug());
cv.put(PersonColumns.IMDB_ID, person.getIds().getImdb());
cv.put(PersonColumns.TMDB_ID, person.getIds().getTmdb());
cv.put(PersonColumns.TVRAGE_ID, person.getIds().getTvrage());
cv.put(PersonColumns.BIOGRAPHY, person.getBiography());
if (person.getBirthday() != null) {
cv.put(PersonColumns.BIRTHDAY, person.getBirthday());
} else {
cv.putNull(PersonColumns.BIRTHDAY);
}
if (person.getDeath() != null) {
cv.put(PersonColumns.DEATH, person.getDeath());
} else {
cv.putNull(PersonColumns.DEATH);
}
cv.put(PersonColumns.BIRTHPLACE, person.getBirthplace());
cv.put(PersonColumns.HOMEPAGE, person.getHomepage());
cv.put(PersonColumns.NEEDS_SYNC, false);
return cv;
}
}