package com.quran.labs.androidquran.database;
import com.crashlytics.android.Crashlytics;
import android.database.Cursor;
import android.database.DefaultDatabaseErrorHandler;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabaseCorruptException;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class SuraTimingDatabaseHandler {
private SQLiteDatabase mDatabase = null;
public static class TimingsTable {
public static final String TABLE_NAME = "timings";
public static final String COL_SURA = "sura";
public static final String COL_AYAH = "ayah";
public static final String COL_TIME = "time";
}
private static Map<String, SuraTimingDatabaseHandler> sSuraDatabaseMap = new HashMap<>();
public synchronized static SuraTimingDatabaseHandler getDatabaseHandler(String path) {
SuraTimingDatabaseHandler handler = sSuraDatabaseMap.get(path);
if (handler == null) {
handler = new SuraTimingDatabaseHandler(path);
sSuraDatabaseMap.put(path, handler);
}
return handler;
}
private SuraTimingDatabaseHandler(String path) throws SQLException {
Crashlytics.log("opening gapless data file, " + path);
try {
mDatabase = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS, new DefaultDatabaseErrorHandler());
} catch (SQLiteDatabaseCorruptException sce) {
Crashlytics.log("database corrupted: " + path);
mDatabase = null;
} catch (SQLException se) {
Crashlytics.log("database at " + path +
(new File(path).exists() ? " exists" : " doesn't exist"));
Crashlytics.logException(se);
mDatabase = null;
}
}
private boolean validDatabase() {
return mDatabase != null && mDatabase.isOpen();
}
public Cursor getAyahTimings(int sura) {
if (!validDatabase()) { return null; }
try {
return mDatabase.query(TimingsTable.TABLE_NAME,
new String[]{ TimingsTable.COL_SURA,
TimingsTable.COL_AYAH, TimingsTable.COL_TIME },
TimingsTable.COL_SURA + "=" + sura,
null, null, null, TimingsTable.COL_AYAH + " ASC");
} catch (Exception e) {
return null;
}
}
}