Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrap new methods migrateBookmarks and getBestTargetBookId of libkiwix #85

Merged
merged 2 commits into from
Feb 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ task buildHeaders(type: Exec) {
String getLibkiwixFiles() {
return "${projectDir}/src/main/java/org/kiwix/libkiwix/Book.java " +
"${projectDir}/src/main/java/org/kiwix/libkiwix/Bookmark.java " +
"${projectDir}/src/main/java/org/kiwix/libkiwix/BookmarkMigrationResult.java " +
"${projectDir}/src/main/java/org/kiwix/libkiwix/Filter.java " +
"${projectDir}/src/main/java/org/kiwix/libkiwix/JNIICU.java " +
"${projectDir}/src/main/java/org/kiwix/libkiwix/Illustration.java " +
Expand Down
12 changes: 12 additions & 0 deletions lib/src/main/cpp/libkiwix/bookmark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ GETTER(jstring, getBookId)

GETTER(jstring, getBookTitle)

GETTER(jstring, getBookName)

GETTER(jstring, getBookFlavour)

GETTER(jstring, getUrl)

GETTER(jstring, getTitle)
Expand All @@ -55,6 +59,14 @@ METHOD(void, setBookTitle, jstring bookTitle) {
THIS->setBookTitle(TO_C(bookTitle));
} CATCH_EXCEPTION()

METHOD(void, setBookName, jstring bookName) {
THIS->setBookName(TO_C(bookName));
} CATCH_EXCEPTION()

METHOD(void, setBookFlavour, jstring bookFlavour) {
THIS->setBookFlavour(TO_C(bookFlavour));
} CATCH_EXCEPTION()

METHOD(void, setUrl, jstring url) {
THIS->setUrl(TO_C(url));
} CATCH_EXCEPTION()
Expand Down
33 changes: 33 additions & 0 deletions lib/src/main/cpp/libkiwix/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,27 @@ METHOD(jboolean, removeBookmark, jstring zimId, jstring url) {
return TO_JNI(THIS->removeBookmark(TO_C(zimId), TO_C(url)));
} CATCH_EXCEPTION(false)

METHOD(jobject, migrateBookmarks__Z, jboolean allowDowngrade) {
jobject migrationResult = newObject("org/kiwix/libkiwix/BookmarkMigrationResult", env);
int nbMigrated, nbTotal;
std::tie(nbMigrated, nbTotal) = THIS->migrateBookmarks(
TO_C(allowDowngrade) ? kiwix::ALLOW_DOWNGRADE : kiwix::UPGRADE_ONLY
);
setMigrationResultValue(nbMigrated, nbTotal, migrationResult, env);
return migrationResult;
} CATCH_EXCEPTION(nullptr)

METHOD(jint, migrateBookmarks__Ljava_lang_String_2Z, jstring sourceBookId, jboolean allowDowngrade) {
return TO_JNI(THIS->migrateBookmarks(
TO_C(sourceBookId),
allowDowngrade? kiwix::ALLOW_DOWNGRADE : kiwix::UPGRADE_ONLY
));
} CATCH_EXCEPTION(0)

METHOD(jint, migrateBookmarks__Ljava_lang_String_2Ljava_lang_String_2, jstring sourceBookId, jstring targetBookId) {
return TO_JNI(THIS->migrateBookmarks(TO_C(sourceBookId), TO_C(targetBookId)));
} CATCH_EXCEPTION(0)

METHOD(jobjectArray, getBookmarks, jboolean onlyValidBookmarks) {
auto bookmarks = THIS->getBookmarks(TO_C(onlyValidBookmarks));
jobjectArray retArray = createArray(env, bookmarks.size(), "org/kiwix/libkiwix/Bookmark");
Expand All @@ -108,3 +129,15 @@ METHOD(jobjectArray, getBookmarks, jboolean onlyValidBookmarks) {
}
return retArray;
} CATCH_EXCEPTION(nullptr)

METHOD(jstring, getBestTargetBookId__Lorg_kiwix_libkiwix_Bookmark_2Z, jobject bookmark, jboolean allowDowngrade) {
auto cBookmark = getPtr<kiwix::Bookmark>(env, bookmark);
return TO_JNI(THIS->getBestTargetBookId(
*cBookmark,
allowDowngrade ? kiwix::ALLOW_DOWNGRADE : kiwix::UPGRADE_ONLY
));
} CATCH_EXCEPTION(nullptr)

METHOD(jstring, getBestTargetBookId__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2, jstring bookName, jstring preferedFlavour, jstring minDate) {
return TO_JNI(THIS->getBestTargetBookId(TO_C(bookName), TO_C(preferedFlavour), TO_C(minDate)));
} CATCH_EXCEPTION(nullptr)
9 changes: 9 additions & 0 deletions lib/src/main/cpp/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,15 @@ inline void setDaiObjValue(const std::string& filename, const long offset,
env->SetLongField(obj, offsetFid, offset);
}

inline void setMigrationResultValue(long nbMigrated, long nbTotalInvalid, const jobject obj, JNIEnv* env)
{
jclass objClass = env->GetObjectClass(obj);
jfieldID nbMigratedFid = env->GetFieldID(objClass, "nbMigratedBookmarks", "J");
env->SetLongField(obj, nbMigratedFid, nbMigrated);
jfieldID nbTotalFid = env->GetFieldID(objClass, "nbInvalidBookmarks", "J");
env->SetLongField(obj, nbTotalFid, nbTotalInvalid);
}

inline int throwException(JNIEnv* env, const char* exception, const char* message) {
return env->ThrowNew(env->FindClass(exception), message);
}
Expand Down
4 changes: 4 additions & 0 deletions lib/src/main/java/org/kiwix/libkiwix/Bookmark.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,17 @@ private Bookmark(long handle) {

public native void setBookId(String bookId);
public native void setBookTitle(String bookTitle);
public native void setBookName(String bookName);
public native void setBookFlavour(String bookFlavour);
public native void setUrl(String url);
public native void setTitle(String title);
public native void setLanguage(String language);
public native void setDate(String Date);

public native String getBookId();
public native String getBookTitle();
public native String getBookName();
public native String getBookFlavour();
public native String getUrl();
public native String getTitle();
public native String getLanguage();
Expand Down
26 changes: 26 additions & 0 deletions lib/src/main/java/org/kiwix/libkiwix/BookmarkMigrationResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright (C) 2024 Matthieu Gautier <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/

package org.kiwix.libkiwix;

public class BookmarkMigrationResult
{
public long nbMigratedBookmarks;
public long nbInvalidBookmarks;
}
13 changes: 13 additions & 0 deletions lib/src/main/java/org/kiwix/libkiwix/Library.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.kiwix.libkiwix.Book;
import org.kiwix.libkiwix.JNIKiwixException;
import org.kiwix.libkiwix.Bookmark;
import org.kiwix.libkiwix.BookmarkMigrationResult;

public class Library
{
Expand Down Expand Up @@ -56,8 +57,20 @@ public Library()

public native void addBookmark(Bookmark bookmark);
public native boolean removeBookmark(String zimId, String url);
public native BookmarkMigrationResult migrateBookmarks(boolean allowDowngrade);
public native int migrateBookmarks(String sourceBookId, boolean allowDowngrade);
public native int migrateBookmarks(String sourceBookId, String targetBookId);
public native Bookmark[] getBookmarks(boolean onlyValidBookmarks);

public native String getBestTargetBookId(Bookmark bookmark, boolean allowDowngrade);
public String getBestTargetBookId(String bookName) {
return getBestTargetBookId(bookName, "", "");
}
public String getBestTargetBookId(String bookName, String preferedFlavour) {
return getBestTargetBookId(bookName, preferedFlavour, "");
}
public native String getBestTargetBookId(String bookName, String preferedFlavour, String minDate);

@Override
protected void finalize() { dispose(); }
private native void setNativeHandler();
Expand Down
4 changes: 4 additions & 0 deletions lib/src/test/org/kiwix/test/libkiwix/TestBookmark.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@ public class TestBookmark

public void setBookId(String bookId) { inner.setBookId(bookId); }
public void setBookTitle(String bookTitle) { inner.setBookTitle(bookTitle); }
public void setBookName(String bookName) { inner.setBookName(bookName); }
public void setBookFlavour(String bookFlavour) { inner.setBookFlavour(bookFlavour); }
public void setUrl(String url) { inner.setUrl(url); }
public void setTitle(String title) { inner.setTitle(title); }
public void setLanguage(String language) { inner.setLanguage(language); }
public void setDate(String date) { inner.setDate(date); }

public String getBookId() { return inner.getBookId(); }
public String getBookTitle() { return inner.getBookTitle(); }
public String getBookName() { return inner.getBookName(); }
public String getBookFlavour() { return inner.getBookFlavour(); }
public String getUrl() { return inner.getUrl(); }
public String getTitle() { return inner.getTitle(); }
public String getLanguage() { return inner.getLanguage(); }
Expand Down
9 changes: 9 additions & 0 deletions lib/src/test/org/kiwix/test/libkiwix/TestLibrary.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.kiwix.libzim.Searcher;
import org.kiwix.libkiwix.Filter;
import org.kiwix.libkiwix.JNIKiwixException;
import org.kiwix.libkiwix.BookmarkMigrationResult;
import java.util.stream.Stream;

public class TestLibrary
Expand Down Expand Up @@ -58,5 +59,13 @@ public class TestLibrary

public void addBookmark(TestBookmark bookmark) { inner.addBookmark(bookmark.inner()); }
public boolean removeBookmark(String zimId, String url) { return inner.removeBookmark(zimId, url); }
public BookmarkMigrationResult migrateBookmarks(boolean allowDowngrade) { return inner.migrateBookmarks(allowDowngrade); }
public int migrateBookmarks(String sourceBookId, boolean allowDowngrade) { return inner.migrateBookmarks(sourceBookId, allowDowngrade); }
public int migrateBookmarks(String sourceBookId, String targetBookId) { return inner.migrateBookmarks(sourceBookId, targetBookId); }
public TestBookmark[] getBookmarks(boolean onlyValidBookmarks) { return Stream.of(inner.getBookmarks(onlyValidBookmarks)).map(b -> new TestBookmark(b)).toArray(TestBookmark[]::new); }

public String getBestTargetBookId(TestBookmark bookmark, boolean allowDowngrade) { return inner.getBestTargetBookId(bookmark.inner(), allowDowngrade); }
public String getBestTargetBookId(String bookname) { return inner.getBestTargetBookId(bookname); }
public String getBestTargetBookId(String bookname, String preferedFlavour) { return inner.getBestTargetBookId(bookname, preferedFlavour); }
public String getBestTargetBookId(String bookname, String preferedFlavour, String minDate) { return inner.getBestTargetBookId(bookname, preferedFlavour, minDate); }
}
31 changes: 24 additions & 7 deletions lib/src/test/test.java
Original file line number Diff line number Diff line change
Expand Up @@ -463,25 +463,42 @@ public void testBookMark() throws ZimFileFormatException, JNIKiwixException {
lib.addBook(book);
TestBookmark bookmark = new TestBookmark();
bookmark.setBookId(book.getId());
bookmark.setTitle(book.getTitle());
bookmark.setUrl(book.getUrl());
bookmark.setTitle("A title for an article");
bookmark.setUrl("foo/bar.html");
bookmark.setLanguage(book.getLanguage());
bookmark.setDate(book.getDate());
bookmark.setBookTitle(book.getName());
bookmark.setBookTitle(book.getTitle());
bookmark.setBookName(book.getName());
bookmark.setBookFlavour(book.getFlavour());
// add bookmark to library
lib.addBookmark(bookmark);
TestBookmark[] bookmarkArray = lib.getBookmarks(true);
assertEquals(1, bookmarkArray.length);
bookmark = bookmarkArray[0];
// test saved bookmark
assertEquals(bookmark.getBookId(), book.getId());
assertEquals(bookmark.getTitle(), book.getTitle());
assertEquals(bookmark.getUrl(), book.getUrl());
assertEquals(bookmark.getTitle(), "A title for an article");
assertEquals(bookmark.getUrl(), "foo/bar.html");
assertEquals(bookmark.getLanguage(), book.getLanguage());
assertEquals(bookmark.getDate(), book.getDate());
assertEquals(bookmark.getBookTitle(), book.getName());
assertEquals(bookmark.getBookTitle(), book.getTitle());
assertEquals(bookmark.getBookName(), book.getName());
assertEquals(bookmark.getBookFlavour(), book.getFlavour());

BookmarkMigrationResult result = lib.migrateBookmarks(true);
assertEquals(result.nbMigratedBookmarks, 0);
assertEquals(result.nbInvalidBookmarks, 0);

assertEquals(lib.migrateBookmarks(book.getId(), true), 0);
assertEquals(lib.migrateBookmarks(book.getId(), "new-id"), 1);

assertEquals(lib.getBestTargetBookId(bookmark, true), book.getId());
assertEquals(lib.getBestTargetBookId(book.getName()), book.getId());
assertEquals(lib.getBestTargetBookId(book.getName(), "someflavour"), book.getId());
assertEquals(lib.getBestTargetBookId(book.getName(), "someflavour", "20230105"), "");
assertEquals(lib.getBestTargetBookId(book.getName(), "someflavour", "20190105"), book.getId());
// remove bookmark from library
lib.removeBookmark(bookmark.getBookId(), bookmark.getUrl());
lib.removeBookmark("new-id", bookmark.getUrl());
bookmarkArray = lib.getBookmarks(true);
assertEquals(0, bookmarkArray.length);
}
Expand Down
Loading