From f75667420f047fe00c1588e1ae73d5d8f56051c4 Mon Sep 17 00:00:00 2001 From: lidoxod Date: Fri, 16 Aug 2013 00:33:48 +0400 Subject: [PATCH] fix --- .../libraryService/SQLiteBooksDatabase.java | 28 ++++++++++--------- src/org/geometerplus/fbreader/book/Book.java | 10 +++++++ .../fbreader/book/BooksDatabase.java | 4 +-- .../fbreader/book/RationalNumber.java | 19 +++++++++++++ 4 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 src/org/geometerplus/fbreader/book/RationalNumber.java diff --git a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java index 2d4a76e8a..2e712f72d 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java +++ b/src/org/geometerplus/android/fbreader/libraryService/SQLiteBooksDatabase.java @@ -1047,29 +1047,31 @@ final class SQLiteBooksDatabase extends BooksDatabase { private SQLiteStatement myPositionStatement; @Override - protected void savePosition(long bookId, long numerator, long denominator) { + protected void savePosition(long bookId, RationalNumber progress) { if (myPositionStatement == null) { myPositionStatement = myDatabase.compileStatement( - "INSERT OR REPLACE INTO Positions (book_id,numerator,denominator) VALUES (?,?,?)" + "INSERT OR REPLACE INTO BookReadingProgress (book_id,numerator,denominator) VALUES (?,?,?)" ); } myStorePositionStatement.bindLong(1, bookId); - myStorePositionStatement.bindLong(2, numerator); - myStorePositionStatement.bindLong(3, denominator); + myStorePositionStatement.bindLong(2, progress.getNumerator()); + myStorePositionStatement.bindLong(3, progress.getDenominator()); myStorePositionStatement.execute(); } @Override - protected float loadPosition(long bookId) { - float position = 0; + protected RationalNumber loadPosition(long bookId) { + RationalNumber progress; Cursor cursor = myDatabase.rawQuery( - "SELECT numerator,denominator FROM Positions WHERE book_id = " + bookId, null + "SELECT numerator,denominator FROM BookReadingProgress WHERE book_id = " + bookId, null ); if (cursor.moveToNext()) { - position = cursor.getLong(0)/cursor.getLong(1); + progress = new RationalNumber(cursor.getLong(0), cursor.getLong(1)); + } else { + progress = new RationalNumber(0, 1); } cursor.close(); - return position; + return progress; } private void createTables() { @@ -1472,9 +1474,9 @@ final class SQLiteBooksDatabase extends BooksDatabase { private void updateTables25() { myDatabase.execSQL( - "CREATE TABLE IF NOT EXISTS Positions(" + - "book_id INTEGER PRIMARY KEY NOT NULL UNIQUE REFERENCES Books(book_id)," + - "numerator INTEGER NOT NULL," + - "denominator INTEGER NOT NULL)"); + "CREATE TABLE IF NOT EXISTS BookReadingProgress(" + + "book_id INTEGER PRIMARY KEY NOT NULL UNIQUE REFERENCES Books(book_id)," + + "numerator INTEGER NOT NULL," + + "denominator INTEGER NOT NULL)"); } } diff --git a/src/org/geometerplus/fbreader/book/Book.java b/src/org/geometerplus/fbreader/book/Book.java index 8493d9b6c..751a490eb 100644 --- a/src/org/geometerplus/fbreader/book/Book.java +++ b/src/org/geometerplus/fbreader/book/Book.java @@ -55,6 +55,8 @@ public class Book extends TitledEntity { private static final WeakReference NULL_IMAGE = new WeakReference(null); private WeakReference myCover; + + private RationalNumber myProgress; Book(long id, ZLFile file, String title, String encoding, String language) { super(title); @@ -541,4 +543,12 @@ public class Book extends TitledEntity { .append("]") .toString(); } + + public void setProgress(long numerator, long denominator) { + myProgress = new RationalNumber(numerator, denominator); + } + + public RationalNumber getProgress() { + return myProgress; + } } diff --git a/src/org/geometerplus/fbreader/book/BooksDatabase.java b/src/org/geometerplus/fbreader/book/BooksDatabase.java index 297ea2b41..3c682cb0c 100644 --- a/src/org/geometerplus/fbreader/book/BooksDatabase.java +++ b/src/org/geometerplus/fbreader/book/BooksDatabase.java @@ -123,6 +123,6 @@ public abstract class BooksDatabase { protected abstract Collection loadVisitedHyperlinks(long bookId); protected abstract void addVisitedHyperlink(long bookId, String hyperlinkId); - protected abstract void savePosition(long bookId, long numerator, long denominator); - protected abstract float loadPosition(long bookId); + protected abstract void savePosition(long bookId, RationalNumber progress); + protected abstract RationalNumber loadPosition(long bookId); } diff --git a/src/org/geometerplus/fbreader/book/RationalNumber.java b/src/org/geometerplus/fbreader/book/RationalNumber.java new file mode 100644 index 000000000..86a850333 --- /dev/null +++ b/src/org/geometerplus/fbreader/book/RationalNumber.java @@ -0,0 +1,19 @@ +package org.geometerplus.fbreader.book; + +public class RationalNumber { + private long myNumerator; + private long myDenominator; + + public RationalNumber(long numerator, long denominator) { + myNumerator = numerator; + myDenominator = denominator; + } + + public long getNumerator() { + return myNumerator; + } + + public long getDenominator() { + return myDenominator; + } +}