diff --git a/src/org/geometerplus/android/fbreader/api/Api.java b/src/org/geometerplus/android/fbreader/api/Api.java index 857d309ed..52263ee0d 100644 --- a/src/org/geometerplus/android/fbreader/api/Api.java +++ b/src/org/geometerplus/android/fbreader/api/Api.java @@ -5,6 +5,7 @@ package org.geometerplus.android.fbreader.api; import java.util.List; +import java.util.Date; public interface Api { // information about fbreader @@ -21,8 +22,10 @@ public interface Api { String getBookTitle() throws ApiException; //List getBookAuthors() throws ApiException; List getBookTags() throws ApiException; - String getBookFileName() throws ApiException; + String getBookFilePath() throws ApiException; String getBookHash() throws ApiException; + String getBookId() throws ApiException; + Date getBookLastTurningTime() throws ApiException; // text information int getParagraphsNumber() throws ApiException; diff --git a/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java b/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java index 46af018a0..d426cb0f4 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java +++ b/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java @@ -127,6 +127,14 @@ public class ApiClientImplementation implements ServiceConnection, Api, ApiMetho return ((ApiObject.String)object).Value; } + private Date requestDate(int method, ApiObject[] params) throws ApiException { + final ApiObject object = request(method, params); + if (!(object instanceof ApiObject.Date)) { + throw new ApiException("Cannot cast return type of method " + method + " to Date"); + } + return ((ApiObject.Date)object).Value; + } + private int requestInt(int method, ApiObject[] params) throws ApiException { final ApiObject object = request(method, params); if (!(object instanceof ApiObject.Integer)) { @@ -213,14 +221,22 @@ public class ApiClientImplementation implements ServiceConnection, Api, ApiMetho return requestStringList(GET_BOOK_TAGS, EMPTY_PARAMETERS); } - public String getBookFileName() throws ApiException { - return requestString(GET_BOOK_FILE_NAME, EMPTY_PARAMETERS); + public String getBookFilePath() throws ApiException { + return requestString(GET_BOOK_FILE_PATH, EMPTY_PARAMETERS); } public String getBookHash() throws ApiException { return requestString(GET_BOOK_HASH, EMPTY_PARAMETERS); } + public String getBookId() throws ApiException { + return requestString(GET_BOOK_ID, EMPTY_PARAMETERS); + } + + public Date getBookLastTurningTime() throws ApiException { + return requestDate(GET_BOOK_LAST_TURNING_TIME, EMPTY_PARAMETERS); + } + public TextPosition getPageStart() throws ApiException { return requestTextPosition(GET_PAGE_START, EMPTY_PARAMETERS); } diff --git a/src/org/geometerplus/android/fbreader/api/ApiMethods.java b/src/org/geometerplus/android/fbreader/api/ApiMethods.java index e3891667c..4341bc910 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiMethods.java +++ b/src/org/geometerplus/android/fbreader/api/ApiMethods.java @@ -25,8 +25,10 @@ interface ApiMethods { int GET_BOOK_TITLE = 502; int GET_BOOK_AUTHORS = 503; int GET_BOOK_TAGS = 504; - int GET_BOOK_FILE_NAME = 505; + int GET_BOOK_FILE_PATH = 505; int GET_BOOK_HASH = 506; + int GET_BOOK_ID = 507; + int GET_BOOK_LAST_TURNING_TIME = 508; // text information int GET_PARAGRAPHS_NUMBER = 601; diff --git a/src/org/geometerplus/android/fbreader/api/ApiObject.java b/src/org/geometerplus/android/fbreader/api/ApiObject.java index 25aace0ed..7472864a3 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiObject.java +++ b/src/org/geometerplus/android/fbreader/api/ApiObject.java @@ -17,6 +17,7 @@ public abstract class ApiObject implements Parcelable { int INT = 1; int STRING = 2; int BOOLEAN = 3; + int DATE = 4; int TEXT_POSITION = 10; } @@ -70,6 +71,25 @@ public abstract class ApiObject implements Parcelable { } } + static class Date extends ApiObject { + final java.util.Date Value; + + Date(java.util.Date value) { + Value = value; + } + + @Override + protected int type() { + return Type.DATE; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) { + super.writeToParcel(parcel, flags); + parcel.writeLong(Value.getTime()); + } + } + static class String extends ApiObject { final java.lang.String Value; @@ -120,6 +140,10 @@ public abstract class ApiObject implements Parcelable { return new String(value); } + static ApiObject envelope(java.util.Date value) { + return new Date(value); + } + static List envelope(List values) { final ArrayList objects = new ArrayList(values.size()); for (java.lang.String v : values) { @@ -153,6 +177,8 @@ public abstract class ApiObject implements Parcelable { return new Integer(parcel.readInt()); case Type.BOOLEAN: return new Boolean(parcel.readByte() == 1); + case Type.DATE: + return new Date(new java.util.Date(parcel.readLong())); case Type.STRING: return new String(parcel.readString()); case Type.TEXT_POSITION: diff --git a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java index 87d87f439..7a81a5ae4 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java +++ b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java @@ -70,10 +70,14 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A return ApiObject.envelope(getBookLanguage()); case GET_BOOK_TITLE: return ApiObject.envelope(getBookTitle()); - case GET_BOOK_FILE_NAME: - return ApiObject.envelope(getBookFileName()); + case GET_BOOK_FILE_PATH: + return ApiObject.envelope(getBookFilePath()); case GET_BOOK_HASH: return ApiObject.envelope(getBookHash()); + case GET_BOOK_ID: + return ApiObject.envelope(getBookId()); + case GET_BOOK_LAST_TURNING_TIME: + return ApiObject.envelope(getBookLastTurningTime()); case GET_PARAGRAPHS_NUMBER: return ApiObject.envelope(getParagraphsNumber()); case GET_ELEMENTS_NUMBER: @@ -180,7 +184,7 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A return Collections.emptyList(); } - public String getBookFileName() { + public String getBookFilePath() { return myReader.Model.Book.File.getPath(); } @@ -188,6 +192,16 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A return myReader.Model.Book.getContentHashCode(); } + public String getBookId() { + // TODO: implement + return null; + } + + public Date getBookLastTurningTime() { + // TODO: implement + return null; + } + // page information public TextPosition getPageStart() { return getTextPosition(myReader.getTextView().getStartCursor());