use crate::error_template::{AppError, ErrorTemplate};
use cfg_if::*;
use leptos::*;
use leptos_meta::*;
use leptos_router::*;
cfg_if! {
if #[cfg(feature="ssr")]{
use surrealdb::sql::Thing;
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
}
}
#[component]
pub fn App() -> impl IntoView {
// Provides context that manages stylesheets, titles, meta tags, etc.
provide_meta_context();
view! {
// sets the document title
// content for this welcome page
}.into_view()
}>
}
}
#[component]
fn Home() -> impl IntoView {
use leptos::html::Div;
use leptos_use::*;
let (size, set_size) = create_signal(1.);
let (page, set_page) = create_signal(0);
//let res = create_local_resource(page, get_pics2);
let (all, set_all) = create_signal(Vec::::new());
let res = create_local_resource(
move || (page.get(), size.get()),
move |d| get_pics2(d.0, d.1),
);
let el = create_node_ref::
}
}
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PicStruct {
key: String,
width: i32,
height: i32,
url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct Wallpaper {
file_name: String,
info: String,
date_added: String,
height: u64,
width: u64,
path: String,
thumbs: Vec,
}
#[derive(Debug, Serialize)]
struct Name<'a> {
first: &'a str,
last: &'a str,
}
#[derive(Debug, Serialize)]
struct Person<'a> {
title: &'a str,
name: Name<'a>,
marketing: bool,
}
#[derive(Debug, Serialize)]
struct Responsibility {
marketing: bool,
}
#[derive(Debug, Deserialize)]
struct Record {
#[allow(dead_code)]
id: i32,
}
use std::env;
#[server(GetPics, "/api")]
pub async fn get_pics2(page: i32, size: f64) -> Result, ServerFnError> {
use image::GenericImageView;
use imageinfo::ImageInfo;
use std::fs;
use std::path::PathBuf;
let query = "
SELECT * FROM wallpapers LIMIT 10;
";
let db = Surreal::new::("127.0.0.1:8000")
.await
.expect("Couldnt connect to db server");
// Select a specific namespace / database
db.use_ns("test")
.use_db("test")
.await
.expect("Couldnt find db");
//let papers: Vec = db.select("wallpapers").await.expect("Err");
//println!("{papers:#?}");
let mut res = db.query(query).await?;
let pap: Vec = res.take(0)?;
println!("{pap:#?}");
let mut pics = Vec::new();
let folder_path = "./public";
// Define the number of pictures per page
let pics_per_page = 10;
// Calculate the index to start from based on the page number
let start_index = (page) * pics_per_page;
let end_index = start_index + pics_per_page;
// manage a vector with all the image paths
let mut image_file_paths = Vec::::new();
for entry in fs::read_dir(folder_path)? {
let entry = entry?;
let file_path = entry.path();
let file_name_str = file_path.file_name().unwrap_or_default().to_str().unwrap();
if size == 0.5 {
//skip 1024 and 512
if file_name_str.contains("512x512") || file_name_str.contains("1024x1024") {
continue;
}
} else if size == 1.0 {
if file_name_str.contains("256x256") || file_name_str.contains("1024x1024") {
println!("sdfasdf");
continue;
}
} else if size == 1.5 {
if file_name_str.contains("256x256") || file_name_str.contains("512x512") {
continue;
}
}
image_file_paths.push(file_path.clone());
}
for (i, file_path) in image_file_paths.iter().enumerate() {
if file_path.is_file() {
if i < start_index as usize {
continue;
}
let file = std::fs::File::open(file_path)?;
let mut bufreader = std::io::BufReader::new(&file);
let exifreader = exif::Reader::new();
let exif = exifreader.read_from_container(&mut bufreader)?;
for f in exif.fields() {
println!(
"{} {} {}",
f.tag,
f.ifd_num,
f.display_value().with_unit(&exif)
);
}
let file_name = file_path.file_name().unwrap_or_default();
let file_name_str = file_name.to_str().unwrap();
// Check if the file has a supported image extension
if let Some(extension) = file_path.extension() {
if let Some(extension_str) = extension.to_str() {
if image::ImageFormat::from_extension(extension_str).is_some() {
// Process the image
let img = image::open(&file_path).expect("Failed to open image");
let (x, y) = img.dimensions();
pics.push(PicStruct {
key: file_name_str.to_string(), // Could not be unique if two images were created at exactly
// the same time
width: x as i32,
height: y as i32,
url: file_name.to_string_lossy().into(),
});
if i + 1 >= end_index as usize {
break;
}
}
}
}
}
}
// Send different picture resolutions depending on selected size
// sizes 256 512 1024
// Iterate over the entries in the folder
/*for (index, entry) in fs::read_dir(folder_path)
.expect("Failed to read directory")
.enumerate()
{
if let Ok(entry) = entry {
if index < start_index as usize {
// Skip pictures before the start index
continue;
}
let file_path = entry.path();
let file_name = file_path.file_name().unwrap_or_default();
let file_name_str = file_name.to_str().unwrap();
// Skip the wrong sizes
if size == 0.5 {
//skip 1024 and 512
if file_name_str.contains("512x512") || file_name_str.contains("1024x1024") {
continue;
}
} else if size == 1.0 {
if file_name_str.contains("256x256") || file_name_str.contains("1024x1024") {
continue;
}
} else if size == 1.5 {
if file_name_str.contains("256x256") || file_name_str.contains("512x512") {
continue;
}
}
// Check if the entry is a file
if file_path.is_file() {
// Check if the file has a supported image extension
if let Some(extension) = file_path.extension() {
if let Some(extension_str) = extension.to_str() {
if image::ImageFormat::from_extension(extension_str).is_some() {
// Process the image
let img = image::open(&file_path).expect("Failed to open image");
let (x, y) = img.dimensions();
pics.push(PicStruct {
key: file_name_str.to_string(), // Could not be unique if two images were created at exactly
// the same time
width: x as i32,
height: y as i32,
url: file_name.to_string_lossy().into(),
});
// Break if we have reached the end index
if index + 1 >= end_index as usize {
break;
}
}
}
}
}
}
}*/
println!("{:#?}", pics);
Ok(pics)
}
#[component]
fn Info(show: ReadSignal, set_show: WriteSignal) -> impl IntoView {
view! {