package com.erakk.lnreader.helper.db;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.erakk.lnreader.helper.DBHelper;
import com.erakk.lnreader.model.BookmarkModel;
import com.erakk.lnreader.model.PageModel;
import java.util.ArrayList;
import java.util.Date;
public class BookmarkModelHelper {
// New column should be appended as the last column
public static final String DATABASE_CREATE_NOVEL_BOOKMARK = "create table if not exists "
+ DBHelper.TABLE_NOVEL_BOOKMARK + "(" + DBHelper.COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " // 0
+ DBHelper.COLUMN_PAGE + " text not null, " // 1
+ DBHelper.COLUMN_PARAGRAPH_INDEX + " integer, " // 2
+ DBHelper.COLUMN_EXCERPT + " text, " // 3
+ DBHelper.COLUMN_CREATE_DATE + " integer);"; // 4
private static final String TAG = BookmarkModelHelper.class.toString();
public static BookmarkModel cursorToNovelBookmark(Cursor cursor) {
BookmarkModel bookmark = new BookmarkModel();
bookmark.setId(cursor.getInt(0));
bookmark.setPage(cursor.getString(1));
bookmark.setpIndex(cursor.getInt(2));
bookmark.setExcerpt(cursor.getString(3));
bookmark.setCreationDate(new Date(cursor.getLong(4) * 1000));
return bookmark;
}
/*
* Query Stuff
*/
public static ArrayList<BookmarkModel> getAllBookmarks(DBHelper helper, SQLiteDatabase db, boolean isOrderByDate) {
ArrayList<BookmarkModel> bookmarks = new ArrayList<BookmarkModel>();
String sql = "select * from " + DBHelper.TABLE_NOVEL_BOOKMARK;
if (isOrderByDate) {
sql += " order by " + DBHelper.COLUMN_CREATE_DATE + " DESC "
+ ", " + DBHelper.COLUMN_PAGE
+ ", " + DBHelper.COLUMN_PARAGRAPH_INDEX;
} else {
sql += " order by " + DBHelper.COLUMN_PAGE
+ ", " + DBHelper.COLUMN_PARAGRAPH_INDEX;
}
Cursor cursor = helper.rawQuery(db, sql, null);
try {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
BookmarkModel bookmark = cursorToNovelBookmark(cursor);
bookmarks.add(bookmark);
cursor.moveToNext();
}
} finally {
if (cursor != null)
cursor.close();
}
return bookmarks;
}
public static ArrayList<BookmarkModel> getBookmarks(DBHelper helper, SQLiteDatabase db, PageModel page) {
ArrayList<BookmarkModel> bookmarks = new ArrayList<BookmarkModel>();
Cursor cursor = helper.rawQuery(db, "select * from " + DBHelper.TABLE_NOVEL_BOOKMARK
+ " where " + DBHelper.COLUMN_PAGE + " = ? ", new String[]{page.getPage()});
try {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
BookmarkModel bookmark = cursorToNovelBookmark(cursor);
bookmarks.add(bookmark);
cursor.moveToNext();
}
} finally {
if (cursor != null)
cursor.close();
}
return bookmarks;
}
private static BookmarkModel getBookmark(DBHelper helper, SQLiteDatabase db, String page, int pIndex) {
BookmarkModel bookmark = null;
Cursor cursor = helper.rawQuery(db, "select * from " + DBHelper.TABLE_NOVEL_BOOKMARK
+ " where " + DBHelper.COLUMN_PAGE + " = ? and " + DBHelper.COLUMN_PARAGRAPH_INDEX + " = ? "
, new String[]{page, "" + pIndex});
try {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
bookmark = cursorToNovelBookmark(cursor);
break;
}
} finally {
if (cursor != null)
cursor.close();
}
return bookmark;
}
/*
* Insert Stuff
*/
public static int insertBookmark(DBHelper helper, SQLiteDatabase db, BookmarkModel bookmark) {
BookmarkModel tempBookmark = getBookmark(helper, db, bookmark.getPage(), bookmark.getpIndex());
if (tempBookmark == null) {
ContentValues cv = new ContentValues();
cv.put(DBHelper.COLUMN_PAGE, bookmark.getPage());
cv.put(DBHelper.COLUMN_PARAGRAPH_INDEX, bookmark.getpIndex());
String excerpt = bookmark.getExcerpt();
if (excerpt.length() > 200) {
excerpt = excerpt.substring(0, 197) + "...";
}
cv.put(DBHelper.COLUMN_EXCERPT, excerpt);
cv.put(DBHelper.COLUMN_CREATE_DATE, (int) (new Date().getTime() / 1000));
return (int) helper.insertOrThrow(db, DBHelper.TABLE_NOVEL_BOOKMARK, null, cv);
} else {
Log.d(TAG, "Bookmark already created.");
return 0;
}
}
/*
* Delete Stuff
*/
public static int deleteBookmark(DBHelper helper, SQLiteDatabase db, BookmarkModel bookmark) {
return helper.delete(db, DBHelper.TABLE_NOVEL_BOOKMARK, DBHelper.COLUMN_PAGE + " = ? and " + DBHelper.COLUMN_PARAGRAPH_INDEX + " = ? "
, new String[]{bookmark.getPage(), "" + bookmark.getpIndex()});
}
}