feat(rustadapter): index notebook

This commit is contained in:
Matthieu Bessat 2024-02-05 15:28:45 +01:00
parent e292058b5c
commit ea3a307f96
12 changed files with 170 additions and 18 deletions

View file

@ -13,6 +13,8 @@ rifgen = "0.1"
popequer_rust = { path = "../../../popequer_rust" }
jni-sys = "0.3"
log = "0.4.20"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
[build-dependencies]
rifgen = "0.1"

View file

@ -2,6 +2,8 @@
use std::env;
fn main() {
env::set_var("RUST_LOG", "DEBUG");
let source_folder = "/mnt/extramedia3/mbess/workspace/popequer/android_app/rust-adapter/src"; //use your projects folder
let out_file = "/mnt/extramedia3/mbess/workspace/popequer/android_app/rust-adapter/glue.rs";
rifgen::Generator::new(rifgen::TypeCases::CamelCase, rifgen::Language::Java,source_folder)
@ -18,7 +20,7 @@
.join("popequer"),
"net.mbess.popequer".into(),
)
.use_null_annotation_from_package("android.support.annotation".into()),
.use_null_annotation_from_package("androidx.annotation".into()),
))
.rustfmt_bindings(true);

View file

@ -1,6 +1,13 @@
//Automatically generated by rifgen
use crate::*;
use jni_sys::*;
foreign_enum!(
enum PopequerAdapterErr {
ReadDb = PopequerAdapterErr::ReadDb,
Indexing = PopequerAdapterErr::Indexing,
View = PopequerAdapterErr::View,
}
);
foreign_class!(
class Foo {
self_type Foo;
@ -11,3 +18,11 @@ foreign_class!(
fn Foo::set_field(& mut self , v : i32); alias setField;
}
);
foreign_class!(
class PopequerAdapter {
self_type PopequerAdapter;
constructor PopequerAdapter::new(notebook_fs_path : String)->PopequerAdapter;
fn PopequerAdapter::index(& self)->String; alias index;
fn PopequerAdapter::upcoming_events(& self)->String; alias upcomingEvents;
}
);

View file

@ -4,6 +4,73 @@ pub use crate::java_glue::*;
use rifgen::rifgen_attr::*;
use popequer::{database::read::read_db, fs_notebook::NotebookContext, indexer::index_and_save, views::calendar::get_upcoming_events};
use serde::Serialize;
struct PopequerAdapter {
context: NotebookContext
}
#[generate_interface]
enum PopequerAdapterErr {
ReadDb,
Indexing,
View
}
#[derive(Serialize)]
struct EventItem {
name: String,
start_time: String,
end_time: Option<String>
}
impl PopequerAdapter {
#[generate_interface(constructor)]
fn new(notebook_fs_path: String) -> PopequerAdapter {
PopequerAdapter {
context: NotebookContext {
base_path: notebook_fs_path.into()
}
}
}
#[generate_interface]
fn index(&self) -> String {
match index_and_save(
&self.context
) {
Ok(_n) => format!("Indexing OK"),
Err(err) => format!("Indexing ERR {err:?}")
}
}
#[generate_interface]
fn upcoming_events(&self) -> String {
let notebook = match read_db(&self.context) {
Ok(n) => n,
Err(err) => {
return format!("Err: {err:?}");
}
};
let events = match get_upcoming_events(&notebook) {
Ok(x) => x,
Err(err) => {
return format!("Err: {err:?}");
}
};
let formatted_events: Vec<EventItem> = events.iter().map(|e| {
EventItem {
name: e.name.clone(),
start_time: e.start_time.to_rfc3339(),
end_time: e.end_time.map(|x| x.to_rfc3339())
}
}).collect();
serde_json::to_string(&formatted_events).expect("Cannot serialize into json")
}
}
struct Foo {
data: i32
}