From c8fba74480b55f9f45471b0551efdc534c855d69 Mon Sep 17 00:00:00 2001 From: Vinod J M Date: Sun, 4 Dec 2022 12:26:02 +0530 Subject: [PATCH] v0.15-WORKINGV3 --- backend/api/src/lib.rs | 59 +++++++++++++------------ frontend/Cargo.toml | 1 + frontend/css/index.css | 2 +- frontend/src/main.rs | 98 +++++++++++++++++++++++++++++------------- 4 files changed, 103 insertions(+), 57 deletions(-) diff --git a/backend/api/src/lib.rs b/backend/api/src/lib.rs index 8e90009..3b8ae6d 100644 --- a/backend/api/src/lib.rs +++ b/backend/api/src/lib.rs @@ -160,20 +160,22 @@ impl Books { impl BookUI { async fn set_descriptions(&mut self) { - let query = format!("https://openlibrary.org/{}.json", self.open_library_key.as_ref().unwrap().clone()); - let res = reqwest::get(query).await.expect("Unable to request"); - let resjson = res.json::().await.expect("Unable to return value"); - let description = resjson.description; + if self.open_library_key.is_some() { + let query = format!("https://openlibrary.org/{}.json", self.open_library_key.as_ref().unwrap().clone()); + let res = reqwest::get(query).await.expect("Unable to request"); + let resjson = res.json::().await.expect("Unable to return value"); + let description = resjson.description; - if !description.is_none() { - if let DescriptionOL::DescriptionString(desc_string) = description.clone().unwrap() { - self.description = Some(desc_string); + if !description.is_none() { + if let DescriptionOL::DescriptionString(desc_string) = description.clone().unwrap() { + self.description = Some(desc_string); + } + if let DescriptionOL::DescriptionValueString(desc_val) = description.clone().unwrap() { + self.description = Some(desc_val.value); + } } - if let DescriptionOL::DescriptionValueString(desc_val) = description.clone().unwrap() { - self.description = Some(desc_val.value); } } - } } @@ -666,12 +668,14 @@ async fn create_book( } if !doc_sent.cover.is_none() { - let img_bytes = reqwest::get(cover.unwrap()).await.unwrap().bytes().await.unwrap(); - let image = image::load_from_memory(&img_bytes).unwrap(); - let temp_cover = doc_sent.cover.clone().unwrap(); - let img_id = format!("{}{}",temp_cover.split("/").last().unwrap(),Local::now().format("%Y-%m-%d-%H-%M-%S")); - image.save(format!("{}/{}",images_dir,img_id)).expect("Failed to save image"); - cover = Some(img_id.to_string()); + if !doc_sent.cover.clone().unwrap().is_empty() { + let img_bytes = reqwest::get(cover.unwrap()).await.unwrap().bytes().await.unwrap(); + let image = image::load_from_memory(&img_bytes).unwrap(); + let temp_cover = doc_sent.cover.clone().unwrap(); + let img_id = format!("{}{}",Local::now().format("%Y-%m-%d-%H-%M-%S"),temp_cover.split("/").last().unwrap()); + image.save(format!("{}/{}",images_dir,img_id)).expect("Failed to save image"); + cover = Some(img_id.to_string()); + } } let book: book::Model = book::Model{ @@ -800,17 +804,18 @@ println!("Updating book"); let mut cover = doc_sent.cover.clone(); if !doc_sent.cover.is_none() { - if doc_sent.cover.clone().unwrap().contains(&backend_url) { - cover = Some(doc_sent.cover.clone().unwrap().split("/").last().unwrap().to_string()); - } else { - let img_bytes = reqwest::get(cover.unwrap()).await.unwrap().bytes().await.unwrap(); - //.expect("Could not fetch image"); - //let img_bytes = img_resp.unwrap().bytes(); - let image = image::load_from_memory(&img_bytes).unwrap(); - let temp_cover = doc_sent.cover.clone().unwrap(); - let img_id = format!("{}{}",temp_cover.split("/").last().unwrap(),Local::now().format("%Y-%m-%d-%H-%M-%S")); - image.save(format!("{}/{}",images_dir,img_id)).expect("Failed to save image"); - cover = Some(img_id.to_string()); + if !doc_sent.cover.clone().unwrap().is_empty() { + if doc_sent.cover.clone().unwrap().contains(&backend_url) { + cover = Some(doc_sent.cover.clone().unwrap().split("/").last().unwrap().to_string()); + } + else { + let img_bytes = reqwest::get(cover.unwrap()).await.unwrap().bytes().await.unwrap(); + let image = image::load_from_memory(&img_bytes).unwrap(); + let temp_cover = doc_sent.cover.clone().unwrap(); + let img_id = format!("{}{}",Local::now().format("%Y-%m-%d-%H-%M-%S"),temp_cover.split("/").last().unwrap()); + image.save(format!("{}/{}",images_dir,img_id)).expect("Failed to save image"); + cover = Some(img_id.to_string()); + } } } let book: book::Model = book::Model{ diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml index c0b997f..c143bdb 100644 --- a/frontend/Cargo.toml +++ b/frontend/Cargo.toml @@ -11,6 +11,7 @@ console_error_panic_hook = "0.1.7" dotenv_codegen = "0.15.0" env_logger = "0.9.0" gloo-net = "^0.2" +#gloo-timers = "^0.2" #gloo-utils = {version = "0.1.5", features =["serde"]} log = "0.4" itertools = "0.10" diff --git a/frontend/css/index.css b/frontend/css/index.css index 5600947..92672ba 100644 --- a/frontend/css/index.css +++ b/frontend/css/index.css @@ -34,7 +34,7 @@ body { width: 80%; /* Could be more or less, depending on screen size */ height: 90%; overflow: auto; /* Enable scroll if needed */ - background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgb(1,1,1); /* Fallback color */ } /* Float three header columns side by side */ diff --git a/frontend/src/main.rs b/frontend/src/main.rs index ce05840..9426c67 100644 --- a/frontend/src/main.rs +++ b/frontend/src/main.rs @@ -12,6 +12,7 @@ use wasm_bindgen::JsCast; use web_sys::{Event, HtmlInputElement, KeyboardEvent}; // 0.3.5 use dotenv_codegen::dotenv; use itertools::Itertools; +//use gloo_timers::future::TimeoutFuture; //#[macro_use] //extern crate dotenv_codegen; @@ -63,6 +64,11 @@ pub struct AppState { pub addingbook: RcSignal, pub displayingbook: RcSignal, pub refreshing: RcSignal, + pub apibook: RcSignal, + pub updatingrequest: RcSignal, + pub addingrequest: RcSignal, + pub deleteid: RcSignal, + pub deleterequest: RcSignal } #[derive(Route)] @@ -227,8 +233,9 @@ pub fn Header(cx: Scope) -> View { }; let click_addbook = |_| { - app_state.adding.set(true); - app_state.addingbook.set(BookUI::default()); + app_state.adding.set(true); + app_state.updating.set(false); + app_state.addingbook.set(BookUI::default()); }; @@ -257,6 +264,7 @@ pub fn Header(cx: Scope) -> View { spawn_local(async move { let _temp = add_books_isbns(task).await.unwrap(); + }); } }; @@ -311,14 +319,17 @@ async fn ListDB(cx: Scope<'_>) -> View { app_state.openlibrary.track(); app_state.internalsearch.track(); app_state.refreshing.track(); - - info!( - "The state changed. New value: {}", - app_state.search.get(), - ); + //let tempb = app_state.books.get(); + //spawn_local( async move { info!( + // "The state changed. Old value: {:?}", + // app_state.books.get() + //)}); if *app_state.openlibrary.get() == false { - app_state.refreshing.set(false); + if *app_state.refreshing.get() == true { + app_state.refreshing.set(false); + //TimeoutFuture::new(1000).await; + } if *app_state.internalsearch.get() == false { spawn_local(async move { @@ -358,6 +369,8 @@ async fn ListDB(cx: Scope<'_>) -> View { }); } } + info!("List Refreshing Done"); + }); let docs = create_memo(cx, || app_state.books.get().iter().cloned().collect::>()); @@ -393,23 +406,33 @@ pub fn BookDB(cx: Scope, bookitem: BookUIProp) -> View { let locdesc = bookitem.bookitem.clone().description.unwrap_or("".to_string()); let locloc = bookitem.bookitem.clone().location.unwrap_or("".to_string()); - + //let locref = create_rc_signal(false); let coverurl = bookdisplay.clone().cover.clone().unwrap_or("None".to_string()); let handle_delete = move |_| { - spawn_local(async move { - let temp = delete_book(bookdelete.id).await.unwrap(); - println!("{}",temp.status()); - }); - app_state.refreshing.set(true); + app_state.deleteid.set(bookdelete.id); + app_state.deleterequest.set(true); }; + create_effect(cx, || { + let app_state = app_state.clone(); + if *app_state.deleterequest.get() == true { + spawn_local(async move { + let temp = delete_book(*app_state.deleteid.get()).await.unwrap(); + println!("{}",temp.status()); + app_state.refreshing.set(true); + }); + } + + app_state.deleterequest.set(false); + + }); + let handle_update = move |_| { app_state.adding.set(false); app_state.updating.set(true); app_state.addingbook.set(bookupdate.clone()); - app_state.refreshing.set(true); }; let handle_display = move |_| { @@ -612,28 +635,40 @@ info!("Adding book"); time: Some(times), isbn: Some(isbns), }; - - - if *app_state.updating.get() == false { - spawn_local(async move { - let temp = add_book(record).await.unwrap(); - println!("{}",temp.status()); - }); - } else { - spawn_local(async move { - let temp = update_book(record).await.unwrap(); - println!("{}",temp.status()); - }); + if *app_state.adding.get() == true { + app_state.addingrequest.set(true); + } else if *app_state.updating.get() == true{ + app_state.updatingrequest.set(true); } + app_state.apibook.set(record); app_state.addingbook.set(BookUI::default()); app_state.updating.set(false); app_state.adding.set(false); + //app_state.books.set(vec![BookUI::default()]); - app_state.refreshing.set(true); }; - + + create_effect(cx, || { + let app_state = app_state.clone(); + let record = (*app_state.apibook.get()).clone(); + if *app_state.addingrequest.get() == true { + spawn_local(async move { + let temp = add_book(record).await.unwrap(); + info!("Adding Done{}",temp.status()); + app_state.refreshing.set(true); + app_state.addingrequest.set(false); + }); + } else if *app_state.updatingrequest.get() == true{ + spawn_local(async move { + let temp = update_book(record).await.unwrap(); + info!("Updating Done{}",temp.status()); + app_state.refreshing.set(true); + app_state.updatingrequest.set(false); + }); + } + }); create_effect(cx, || { if *app_state.updating.get() == true || *app_state.adding.get() == true { @@ -956,6 +991,11 @@ fn App(cx: Scope) -> View { displaying: create_rc_signal(bool::default()), displayingbook: create_rc_signal(BookUI::default()), refreshing: create_rc_signal(bool::default()), + apibook: create_rc_signal(BookUI::default()), + updatingrequest: create_rc_signal(bool::default()), + addingrequest: create_rc_signal(bool::default()), + deleteid: create_rc_signal(-1), + deleterequest: create_rc_signal(bool::default()), }; provide_context(cx, app_state); view! {