From 4d032535f81b5f87ab79494ee0c696ca6cd7d77a Mon Sep 17 00:00:00 2001 From: ehsan shariati Date: Sun, 11 Dec 2022 14:42:13 -0500 Subject: [PATCH 1/2] Converted Kotlin to Java --- .../androidTest/java/land/fx/app/WNFSTest.kt | 6 +- .../src/main/java/land/fx/app/MainActivity.kt | 2 +- build.gradle | 2 +- jitpack.yml | 2 +- lib/src/main/java/land/fx/wnfslib/Bridge.java | 95 +++++++++++++++++++ lib/src/main/java/land/fx/wnfslib/Lib.kt | 74 --------------- pom.xml | 2 +- wnfslib/src/lib.rs | 20 ++-- 8 files changed, 112 insertions(+), 91 deletions(-) create mode 100644 lib/src/main/java/land/fx/wnfslib/Bridge.java delete mode 100644 lib/src/main/java/land/fx/wnfslib/Lib.kt diff --git a/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt b/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt index eda318b..7a0ccf1 100644 --- a/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt +++ b/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt @@ -6,7 +6,7 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule import fulamobile.Config import fulamobile.Fulamobile -import land.fx.wnfslib.* +import land.fx.wnfslib.Bridge.* import org.junit.Assert.* import org.junit.Rule import org.junit.Test @@ -16,7 +16,7 @@ import java.io.File @RunWith(AndroidJUnit4::class) class WNFSTest { - class ConvertFulaClient(private val fulaClient: fulamobile.Client): land.fx.wnfslib.Client{ + class ConvertFulaClient(private val fulaClient: fulamobile.Client): land.fx.wnfslib.Bridge.Datastore{ override fun put(data: ByteArray, codec: Long): ByteArray{ return fulaClient.put(data, codec) } @@ -74,7 +74,7 @@ class WNFSTest { assertNotNull("cid should not be null", config.cid) assertNotNull("private_ref should not be null", config.private_ref) - var testContent = "Hello, World!".toByteArray() + val testContent = "Hello, World!".toByteArray() val file = File(pathString, "test.txt") // create a new file diff --git a/appmock/src/main/java/land/fx/app/MainActivity.kt b/appmock/src/main/java/land/fx/app/MainActivity.kt index 783aa06..d8d45bc 100644 --- a/appmock/src/main/java/land/fx/app/MainActivity.kt +++ b/appmock/src/main/java/land/fx/app/MainActivity.kt @@ -2,7 +2,7 @@ package land.fx.app import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import land.fx.wnfslib.initRustLogger +import land.fx.wnfslib.Bridge.initRustLogger class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/build.gradle b/build.gradle index 1db9f9d..966e4b7 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { gradlePluginPortal() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.mozilla.rust-android-gradle:plugin:0.9.3" classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10' classpath "com.palantir.gradle.gitversion:gradle-git-version:0.15.0" diff --git a/jitpack.yml b/jitpack.yml index 27c9aeb..5f73917 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -2,4 +2,4 @@ before_install: - git lfs pull install: - FILE="-Dfile=lib/build/outputs/aar/lib-release.aar" - - mvn install:install-file $FILE -DgroupId=com.group.module -DartifactId=wnfs-android -Dversion=1.2.4 -Dpackaging=aar -DgeneratePom=true + - mvn install:install-file $FILE -DgroupId=com.group.module -DartifactId=wnfs-android -Dversion=1.2.5 -Dpackaging=aar -DgeneratePom=true diff --git a/lib/src/main/java/land/fx/wnfslib/Bridge.java b/lib/src/main/java/land/fx/wnfslib/Bridge.java new file mode 100644 index 0000000..dc0bc3d --- /dev/null +++ b/lib/src/main/java/land/fx/wnfslib/Bridge.java @@ -0,0 +1,95 @@ +package land.fx.wnfslib; + +import androidx.annotation.NonNull; + +public final class Bridge { + + public static final class Config { + private final String cid; + + private final String private_ref; + + public String getCid() { + return this.cid; + } + + public String getPrivate_ref() { + return this.private_ref; + } + + public Config(String cid, String private_ref) { + super(); + this.cid = cid; + this.private_ref = private_ref; + } + + @NonNull + public land.fx.wnfslib.Bridge.Config create(String cid, String private_ref) { + return new land.fx.wnfslib.Bridge.Config(cid, private_ref); + } + } + + public interface Datastore { + byte[] put(byte[] data, long codec); + + byte[] get(byte[] cid); + } + + private static native String createPrivateForestNative(Datastore datastore); + + private static native Config createRootDirNative(Datastore datastore, String cid); + + private static native Config writeFileFromPathNative(Datastore datastore, String cid, String privateRef, String path, String filename); + + private static native Config writeFileNative(Datastore datastore, String cid, String privateRef, String path, byte[] content); + + private static native String lsNative(Datastore datastore, String cid, String privateRef, String path); + + private static native Config mkdirNative(Datastore datastore, String cid, String privateRef, String path); + + private static native Config rmNative(Datastore datastore, String cid, String privateRef, String path); + + private static native String readFileToPathNative(Datastore datastore, String cid, String privateRef, String path, String filename); + + private static native byte[] readFileNative(Datastore datastore, String cid, String privateRef, String path); + + public static String createPrivateForest(Datastore datastore) { + return createPrivateForestNative(datastore); + } + + public static Config createRootDir(Datastore datastore, String cid) { + return createRootDirNative(datastore, cid); + } + + public static Config writeFileFromPath(Datastore datastore, String cid, String privateRef, String path, String filename) { + return writeFileFromPathNative(datastore, cid, privateRef, path, filename); + } + + public static Config writeFile(Datastore datastore, String cid, String privateRef, String path, byte[] content) { + return writeFileNative(datastore, cid, privateRef, path, content); + } + + public static String ls(Datastore datastore, String cid, String privateRef, String path) { + return lsNative(datastore, cid, privateRef, path); + } + + public static Config mkdir(Datastore datastore, String cid, String privateRef, String path) { + return mkdirNative(datastore, cid, privateRef, path); + } + + public static Config rm(Datastore datastore, String cid, String privateRef, String path) { + return rmNative(datastore, cid, privateRef, path); + } + + public static String readFileToPath(Datastore datastore, String cid, String privateRef, String path, String filename) { + return readFileToPathNative(datastore, cid, privateRef, path, filename); + } + + public static byte[] readFile(Datastore datastore, String cid, String privateRef, String path) { + return readFileNative(datastore, cid, privateRef, path); + } + + public static native void initRustLogger(); +} + + diff --git a/lib/src/main/java/land/fx/wnfslib/Lib.kt b/lib/src/main/java/land/fx/wnfslib/Lib.kt deleted file mode 100644 index cc74923..0000000 --- a/lib/src/main/java/land/fx/wnfslib/Lib.kt +++ /dev/null @@ -1,74 +0,0 @@ -package land.fx.wnfslib; - - -data class Config( - val cid: String, - val private_ref: String){ - companion object { - @JvmStatic - fun create(cid: String, private_ref: String) : Config = Config(cid, private_ref) - } -} - -interface Client { - fun put(data: ByteArray, codec: Long): ByteArray - fun get(cid: ByteArray): ByteArray -} - - -private external fun createPrivateForestNative(fulaClient: Client): String - -private external fun createRootDirNative(fulaClient: Client, cid: String): Config - -private external fun writeFileFromPathNative(fulaClient: Client, cid: String, privateRef: String, path: String, filename: String): Config - -private external fun writeFileNative(fulaClient: Client, cid: String, privateRef: String, path: String, content: ByteArray): Config - -private external fun lsNative(fulaClient: Client, cid: String, privateRef: String, path: String): String - -private external fun mkdirNative(fulaClient: Client, cid: String, privateRef: String, path: String): Config - -private external fun rmNative(fulaClient: Client, cid: String, privateRef: String, path: String): Config - -private external fun readFileToPathNative(fulaClient: Client, cid: String, privateRef: String, path: String, filename: String): String - -private external fun readFileNative(fulaClient: Client, cid: String, privateRef: String, path: String): ByteArray? - -fun createPrivateForest(fulaClient: Client): String { - return createPrivateForestNative(fulaClient) -} - -fun createRootDir(fulaClient: Client, cid: String): Config { - return createRootDirNative(fulaClient, cid) -} - -fun writeFileFromPath(fulaClient: Client, cid: String, privateRef: String, path: String, filename: String): Config { - return writeFileFromPathNative(fulaClient, cid, privateRef, path, filename) -} - -fun writeFile(fulaClient: Client, cid: String, privateRef: String, path: String, content: ByteArray): Config { - return writeFileNative(fulaClient, cid, privateRef, path, content) -} - -fun ls(fulaClient: Client, cid: String, privateRef: String, path: String): String { - return lsNative(fulaClient, cid, privateRef, path) -} - -fun mkdir(fulaClient: Client, cid: String, privateRef: String, path: String): Config { - return mkdirNative(fulaClient, cid, privateRef, path) -} - -fun rm(fulaClient: Client, cid: String, privateRef: String, path: String): Config { - return rmNative(fulaClient, cid, privateRef, path) -} - -fun readFileToPath(fulaClient: Client, cid: String, privateRef: String, path: String, filename: String): String { - return readFileToPathNative(fulaClient, cid, privateRef, path, filename) -} - -fun readFile(fulaClient: Client, cid: String, privateRef: String, path: String): ByteArray? { - return readFileNative(fulaClient, cid, privateRef, path) -} - -// Initialize Rust Library Logging -external fun initRustLogger() \ No newline at end of file diff --git a/pom.xml b/pom.xml index da47f94..897b7ab 100644 --- a/pom.xml +++ b/pom.xml @@ -5,5 +5,5 @@ 4.0.0 com.group.module wnfs-android - 1.2.4 + 1.2.5 diff --git a/wnfslib/src/lib.rs b/wnfslib/src/lib.rs index 15e3cd6..297230d 100644 --- a/wnfslib/src/lib.rs +++ b/wnfslib/src/lib.rs @@ -108,12 +108,12 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_initRustLogger(_: JNIEnv, _: JClass) { + pub extern "C" fn Java_land_fx_wnfslib_Bridge_initRustLogger(_: JNIEnv, _: JClass) { android_logger::init_once(Config::default().with_min_level(Level::Trace)); } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_createPrivateForestNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_createPrivateForestNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -127,7 +127,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_createRootDirNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_createRootDirNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -147,7 +147,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_writeFileFromPathNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_writeFileFromPathNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -182,7 +182,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_readFileToPathNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_readFileToPathNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -218,7 +218,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_writeFileNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_writeFileNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -248,7 +248,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_readFileNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_readFileNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -281,7 +281,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_mkdirNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_mkdirNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -308,7 +308,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_rmNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_rmNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -335,7 +335,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_LibKt_lsNative( + pub extern "C" fn Java_land_fx_wnfslib_Bridge_lsNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, From 1a3f5ba29e59c3b304e7d4845677b8f6bb01c075 Mon Sep 17 00:00:00 2001 From: ehsan shariati Date: Sun, 11 Dec 2022 15:46:00 -0500 Subject: [PATCH 2/2] Separated Config and Datastore --- .../androidTest/java/land/fx/app/WNFSTest.kt | 8 ++--- .../src/main/java/land/fx/app/MainActivity.kt | 2 +- lib/src/main/java/land/fx/wnfslib/Config.java | 27 +++++++++++++++ .../main/java/land/fx/wnfslib/Datastore.java | 7 ++++ .../land/fx/wnfslib/{Bridge.java => Fs.java} | 33 +------------------ wnfslib/src/lib.rs | 22 ++++++------- 6 files changed, 51 insertions(+), 48 deletions(-) create mode 100644 lib/src/main/java/land/fx/wnfslib/Config.java create mode 100644 lib/src/main/java/land/fx/wnfslib/Datastore.java rename lib/src/main/java/land/fx/wnfslib/{Bridge.java => Fs.java} (77%) diff --git a/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt b/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt index 7a0ccf1..b57e0b2 100644 --- a/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt +++ b/appmock/src/androidTest/java/land/fx/app/WNFSTest.kt @@ -4,9 +4,9 @@ import android.util.Log import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule -import fulamobile.Config import fulamobile.Fulamobile -import land.fx.wnfslib.Bridge.* +import land.fx.wnfslib.Fs.* +import land.fx.wnfslib.Config import org.junit.Assert.* import org.junit.Rule import org.junit.Test @@ -16,7 +16,7 @@ import java.io.File @RunWith(AndroidJUnit4::class) class WNFSTest { - class ConvertFulaClient(private val fulaClient: fulamobile.Client): land.fx.wnfslib.Bridge.Datastore{ + class ConvertFulaClient(private val fulaClient: fulamobile.Client): land.fx.wnfslib.Datastore{ override fun put(data: ByteArray, codec: Long): ByteArray{ return fulaClient.put(data, codec) } @@ -37,7 +37,7 @@ class WNFSTest { Log.d("AppMock", "tmp dir==$pathString") //val path = Path(pathString) - val configExt = Config() + val configExt = fulamobile.Config() configExt.storePath = pathString val peerIdentity = Fulamobile.generateEd25519Key() configExt.identity = peerIdentity diff --git a/appmock/src/main/java/land/fx/app/MainActivity.kt b/appmock/src/main/java/land/fx/app/MainActivity.kt index d8d45bc..0ee358d 100644 --- a/appmock/src/main/java/land/fx/app/MainActivity.kt +++ b/appmock/src/main/java/land/fx/app/MainActivity.kt @@ -2,7 +2,7 @@ package land.fx.app import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import land.fx.wnfslib.Bridge.initRustLogger +import land.fx.wnfslib.Fs.initRustLogger class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/lib/src/main/java/land/fx/wnfslib/Config.java b/lib/src/main/java/land/fx/wnfslib/Config.java new file mode 100644 index 0000000..a04d494 --- /dev/null +++ b/lib/src/main/java/land/fx/wnfslib/Config.java @@ -0,0 +1,27 @@ +package land.fx.wnfslib; + +import androidx.annotation.NonNull; + +public final class Config { + private final String cid; + + private final String private_ref; + + public String getCid() { + return this.cid; + } + + public String getPrivate_ref() { + return this.private_ref; + } + + public Config(String cid, String private_ref) { + super(); + this.cid = cid; + this.private_ref = private_ref; + } + + public static Config create(String cid, String private_ref1) { + return new Config(cid, private_ref1); + } +} diff --git a/lib/src/main/java/land/fx/wnfslib/Datastore.java b/lib/src/main/java/land/fx/wnfslib/Datastore.java new file mode 100644 index 0000000..f60ceaa --- /dev/null +++ b/lib/src/main/java/land/fx/wnfslib/Datastore.java @@ -0,0 +1,7 @@ +package land.fx.wnfslib; + +public interface Datastore { + byte[] put(byte[] data, long codec); + + byte[] get(byte[] cid); +} diff --git a/lib/src/main/java/land/fx/wnfslib/Bridge.java b/lib/src/main/java/land/fx/wnfslib/Fs.java similarity index 77% rename from lib/src/main/java/land/fx/wnfslib/Bridge.java rename to lib/src/main/java/land/fx/wnfslib/Fs.java index dc0bc3d..1ef97f5 100644 --- a/lib/src/main/java/land/fx/wnfslib/Bridge.java +++ b/lib/src/main/java/land/fx/wnfslib/Fs.java @@ -2,38 +2,7 @@ import androidx.annotation.NonNull; -public final class Bridge { - - public static final class Config { - private final String cid; - - private final String private_ref; - - public String getCid() { - return this.cid; - } - - public String getPrivate_ref() { - return this.private_ref; - } - - public Config(String cid, String private_ref) { - super(); - this.cid = cid; - this.private_ref = private_ref; - } - - @NonNull - public land.fx.wnfslib.Bridge.Config create(String cid, String private_ref) { - return new land.fx.wnfslib.Bridge.Config(cid, private_ref); - } - } - - public interface Datastore { - byte[] put(byte[] data, long codec); - - byte[] get(byte[] cid); - } +public final class Fs { private static native String createPrivateForestNative(Datastore datastore); diff --git a/wnfslib/src/lib.rs b/wnfslib/src/lib.rs index 297230d..d243dfc 100644 --- a/wnfslib/src/lib.rs +++ b/wnfslib/src/lib.rs @@ -108,12 +108,12 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_initRustLogger(_: JNIEnv, _: JClass) { + pub extern "C" fn Java_land_fx_wnfslib_Fs_initRustLogger(_: JNIEnv, _: JClass) { android_logger::init_once(Config::default().with_min_level(Level::Trace)); } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_createPrivateForestNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_createPrivateForestNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -127,7 +127,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_createRootDirNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_createRootDirNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -147,7 +147,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_writeFileFromPathNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_writeFileFromPathNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -182,7 +182,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_readFileToPathNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_readFileToPathNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -218,7 +218,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_writeFileNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_writeFileNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -248,7 +248,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_readFileNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_readFileNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -281,7 +281,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_mkdirNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_mkdirNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -308,7 +308,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_rmNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_rmNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -335,7 +335,7 @@ pub mod android { } #[no_mangle] - pub extern "C" fn Java_land_fx_wnfslib_Bridge_lsNative( + pub extern "C" fn Java_land_fx_wnfslib_Fs_lsNative( env: JNIEnv, _: JClass, jni_fula_client: JObject, @@ -408,7 +408,7 @@ pub mod android { pub fn serialize_cid(env: JNIEnv, cid: Cid) -> JString { trace!("**********************serialize_cid started**************"); trace!( - "**********************serialize_cid cid={}", + "**********************serialize_cid cid={:?}", cid.to_string() ); let a: JString = env