feat(rustadapter): index notebook
This commit is contained in:
parent
e292058b5c
commit
ea3a307f96
12 changed files with 170 additions and 18 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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(¬ebook) {
|
||||
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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue