package org.ebookdroid.common.settings.books;
import org.ebookdroid.core.PageIndex;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.List;
import org.emdev.utils.LengthUtils;
class DBAdapterV2 extends DBAdapterV1 {
public static final int VERSION = 2;
public static final String DB_BOOKMARK_CREATE = "create table bookmarks ("
// Book file path
+ "book varchar(1024) not null, "
// Current document page
+ "doc_page integer not null, "
// Current view page - dependent on view mode
+ "view_page integer not null, "
// Bookmark name
+ "name varchar(1024) not null"
// ...
+ ");";
public static final String DB_BOOKMARK_DROP = "DROP TABLE bookmarks";
public static final String DB_BOOKMARK_STORE = "INSERT OR REPLACE INTO bookmarks (book, doc_page, view_page, name) VALUES (?, ?, ?, ?)";
public static final String DB_BOOKMARK_GET_ALL = "SELECT doc_page, view_page, name FROM bookmarks WHERE book = ? ORDER BY view_page ASC";
public static final String DB_BOOKMARK_DEL_ALL = "DELETE FROM bookmarks WHERE book=?";
public static final String DB_BOOKMARKS_DEL = "DELETE FROM bookmarks";
public DBAdapterV2(final DBSettingsManager manager) {
super(manager);
}
@Override
public void onCreate(final SQLiteDatabase db) {
db.execSQL(DB_BOOK_CREATE);
db.execSQL(DB_BOOKMARK_CREATE);
}
@Override
public void onDestroy(final SQLiteDatabase db) {
db.execSQL(DB_BOOK_DROP);
db.execSQL(DB_BOOKMARK_DROP);
}
@Override
public boolean deleteAll() {
try {
final SQLiteDatabase db = manager.getWritableDatabase();
try {
db.beginTransaction();
db.execSQL(DB_BOOK_DROP, new Object[] {});
db.execSQL(DB_BOOKMARK_DROP, new Object[] {});
onCreate(db);
db.setTransactionSuccessful();
return true;
} finally {
endTransaction(db);
}
} catch (final Throwable th) {
LCTX.e("Update book settings failed: ", th);
}
return false;
}
@Override
public boolean deleteAllBookmarks() {
try {
final SQLiteDatabase db = manager.getWritableDatabase();
try {
db.beginTransaction();
db.execSQL(DB_BOOKMARKS_DEL, new Object[] {});
db.setTransactionSuccessful();
return true;
} finally {
endTransaction(db);
}
} catch (final Throwable th) {
LCTX.e("Update book settings failed: ", th);
}
return false;
}
@Override
protected void loadBookmarks(final BookSettings book, final SQLiteDatabase db) {
loadBookmarks(book, db, DB_BOOKMARK_GET_ALL);
}
protected final void loadBookmarks(final BookSettings book, final SQLiteDatabase db, final String query) {
book.bookmarks.clear();
final Cursor c = db.rawQuery(query, new String[] { LengthUtils.safeString(book.fileName) });
if (c != null) {
try {
for (boolean next = c.moveToFirst(); next; next = c.moveToNext()) {
final Bookmark bm = createBookmark(c);
book.bookmarks.add(bm);
}
// if (LCTX.isDebugEnabled()) {
// LCTX.d("Bookmarks loaded for " + book.fileName + ": " + book.bookmarks.size());
// }
} finally {
close(c);
}
}
}
@Override
protected void updateBookmarks(final BookSettings book, final SQLiteDatabase db) {
final Object[] delArgs = { book.fileName };
db.execSQL(DB_BOOKMARK_DEL_ALL, delArgs);
for (final Bookmark bs : book.bookmarks) {
final Object[] args = new Object[] {
// Book name
book.fileName,
// Bookmark document page
bs.page.docIndex,
// Bookmark view page
bs.page.viewIndex,
// Bookmark name
bs.name, };
db.execSQL(DB_BOOKMARK_STORE, args);
}
// if (LCTX.isDebugEnabled()) {
// LCTX.d("Bookmarks stored for " + book.fileName + ": " + book.bookmarks.size());
// }
}
protected Bookmark createBookmark(final Cursor c) {
int index = 0;
final int docIndex = c.getInt(index++);
final int viewIndex = c.getInt(index++);
final String name = c.getString(index++);
return new Bookmark(name, new PageIndex(docIndex, viewIndex), 0, 0);
}
}