package org.ebookdroid.common.settings.books;
import org.ebookdroid.common.settings.types.DocumentViewMode;
import org.ebookdroid.common.settings.types.PageAlign;
import org.ebookdroid.core.PageIndex;
import org.ebookdroid.core.curl.PageAnimationType;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.Map;
class DBAdapterV4 extends DBAdapterV3 {
public static final int VERSION = 4;
public static final float OFFSET_FACTOR = 100000.0f;
public static final String DB_BOOK_CREATE = "create table book_settings ("
// Book file path
+ "book varchar(1024) primary key, "
// Last update time
+ "last_updated integer not null, "
// Current document page
+ "doc_page integer not null, "
// Current view page - dependent on view mode
+ "view_page integer not null, "
// Page zoom
+ "zoom integer not null, "
// Single page mode on/off
+ "single_page integer not null, "
// Page align
+ "page_align integer not null, "
// Page animation type
+ "page_animation integer not null, "
// Split pages on/off
+ "split_pages integer not null, "
// Crop pages on/off
+ "crop_pages integer not null, "
// Offset x
+ "offset_x integer not null, "
// Offset y
+ "offset_y integer not null"
// ...
+ ");"
//
;
public static final String DB_BOOK_GET_ALL = "SELECT book, last_updated, doc_page, view_page, zoom, single_page, page_align, page_animation, split_pages, crop_pages, offset_x, offset_y FROM book_settings where last_updated > 0 ORDER BY last_updated DESC";
public static final String DB_BOOK_GET_ONE = "SELECT book, last_updated, doc_page, view_page, zoom, single_page, page_align, page_animation, split_pages, crop_pages, offset_x, offset_y FROM book_settings WHERE book=?";
public static final String DB_BOOK_STORE = "INSERT OR REPLACE INTO book_settings (book, last_updated, doc_page, view_page, zoom, single_page, page_align, page_animation, split_pages, crop_pages, offset_x, offset_y) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
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, "
// Offset x
+ "offset_x integer not null, "
// Offset y
+ "offset_y integer not null"
// ...
+ ");";
public static final String DB_BOOKMARK_STORE = "INSERT OR REPLACE INTO bookmarks (book, doc_page, view_page, name, offset_x, offset_y) VALUES (?, ?, ?, ?, ?, ?)";
public static final String DB_BOOKMARK_GET_ALL = "SELECT doc_page, view_page, name, offset_x, offset_y FROM bookmarks WHERE book = ? ORDER BY view_page ASC";
public DBAdapterV4(final DBSettingsManager manager) {
super(manager);
}
@Override
public void onCreate(final SQLiteDatabase db) {
db.execSQL(DB_BOOK_CREATE);
db.execSQL(DB_BOOKMARK_CREATE);
}
@Override
public Map<String, BookSettings> getRecentBooks(final boolean all) {
return getBookSettings(DB_BOOK_GET_ALL, all);
}
@Override
public BookSettings getBookSettings(final String fileName) {
return getBookSettings(DB_BOOK_GET_ONE, fileName);
}
@Override
protected void storeBookSettings(final BookSettings bs, final SQLiteDatabase db) {
final Object[] args = new Object[] {
// File name
bs.fileName,
// Last update
bs.lastUpdated,
// Current document page
bs.currentPage.docIndex,
// Current view page
bs.currentPage.viewIndex,
// Current page zoom
bs.zoom,
// Single page on/off
bs.viewMode == DocumentViewMode.SINGLE_PAGE ? 1 : 0,
// Page align
bs.pageAlign.ordinal(),
// Page animation type
bs.animationType.ordinal(),
// Split pages on/off
bs.splitPages ? 1 : 0,
// Crop pages on/off
bs.cropPages ? 1 : 0,
// Offset x
(int) bs.offsetX,
// Offset y
(int) bs.offsetY
// ...
};
db.execSQL(DB_BOOK_STORE, args);
updateBookmarks(bs, db);
}
@Override
protected BookSettings createBookSettings(final Cursor c) {
int index = 0;
final BookSettings bs = new BookSettings(c.getString(index++));
bs.lastUpdated = c.getLong(index++);
bs.currentPage = new PageIndex(c.getInt(index++), c.getInt(index++));
bs.zoom = c.getInt(index++);
bs.viewMode = c.getInt(index++) != 0 ? DocumentViewMode.SINGLE_PAGE : DocumentViewMode.VERTICALL_SCROLL;
bs.pageAlign = PageAlign.values()[c.getInt(index++)];
bs.animationType = PageAnimationType.values()[c.getInt(index++)];
bs.splitPages = c.getInt(index++) != 0;
bs.cropPages = c.getInt(index++) != 0;
bs.offsetX = c.getInt(index++);
bs.offsetY = c.getInt(index++);
return bs;
}
@Override
protected void loadBookmarks(final BookSettings book, final SQLiteDatabase db) {
loadBookmarks(book, db, DB_BOOKMARK_GET_ALL);
}
@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,
// Offset x
(int) (bs.offsetX * OFFSET_FACTOR),
// Offset y
(int) (bs.offsetY * OFFSET_FACTOR)
// ..
};
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++);
final float offsetX = c.getInt(index++) / OFFSET_FACTOR;
final float offsetY = c.getInt(index++) / OFFSET_FACTOR;
return new Bookmark(name, new PageIndex(docIndex, viewIndex), offsetX, offsetY);
}
}