From 15b6dd91a1e4c8561201d7f28a16d079cb6c827d Mon Sep 17 00:00:00 2001 From: pandadev <70103896+0PandaDEV@users.noreply.github.com> Date: Fri, 5 Jul 2024 14:04:35 +0200 Subject: [PATCH] fixed design issues --- app.vue | 4 +-- assets/css/style.scss | 16 ++++----- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/clipboard.rs | 68 +++++++++++++++++++++++--------------- 5 files changed, 53 insertions(+), 37 deletions(-) diff --git a/app.vue b/app.vue index af3074a..fc02c56 100644 --- a/app.vue +++ b/app.vue @@ -97,7 +97,7 @@ const scrollToSelectedItem = () => { const elementRect = element.getBoundingClientRect(); const isAbove = elementRect.top < viewportRect.top; - const isBelow = elementRect.bottom > viewportRect.bottom - 48; + const isBelow = elementRect.bottom > viewportRect.bottom - 8; if (isAbove || isBelow) { let scrollOffset; @@ -107,7 +107,7 @@ const scrollToSelectedItem = () => { } else if (isAbove) { scrollOffset = elementRect.top - viewportRect.top - 8; } else { - scrollOffset = elementRect.bottom - viewportRect.bottom + 48; + scrollOffset = elementRect.bottom - viewportRect.bottom + 9; } viewport.scrollBy({ diff --git a/assets/css/style.scss b/assets/css/style.scss index bd0a1e6..54c5c23 100644 --- a/assets/css/style.scss +++ b/assets/css/style.scss @@ -53,8 +53,8 @@ body, } .bg { - width: 100vw; - height: 100vh; + width: 750px; + height: 474px; background-color: $primary; border: 1px solid $divider; border-radius: 12px; @@ -84,13 +84,13 @@ body, width: 284px; top: 53px; left: 0; - height: calc(100vh - 55px); + height: calc(100vh - 96px); border-right: 1px solid $divider; display: flex; flex-direction: column; padding-inline: 8px; padding-top: 14px; - padding-bottom: 49px; + padding-bottom: 8px; overflow-y: auto; overflow-x: hidden; @@ -127,7 +127,7 @@ body, width: calc(100vw - 286px); white-space: pre-wrap; word-wrap: break-word; - + div { border-radius: 10px; font-family: SFMonoRegular !important; @@ -136,14 +136,14 @@ body, .bottom-bar { height: 41px; - width: calc(100vw - 2px); + width: calc(100vw - 3px); backdrop-filter: blur(18px); background-color: rgba(46, 45, 43, 0.8); position: fixed; - bottom: 1px; + bottom: 2px; left: 1px; z-index: 100; - border-radius: 0 0 10px 10px; + border-radius: 0 0 12px 12px; display: flex; flex-direction: row; justify-content: space-between; diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1d30cd1..6400856 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3146,6 +3146,7 @@ version = "0.1.0" dependencies = [ "arboard", "base64 0.22.1", + "clipboard-win", "image 0.25.1", "rand 0.8.5", "rdev", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 826dffd..7b06e2d 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -26,3 +26,4 @@ rand = "0.8" base64 = "0.22.1" arboard = "3.4.0" image = "0.25.1" +clipboard-win = "5.3.1" diff --git a/src-tauri/src/clipboard.rs b/src-tauri/src/clipboard.rs index 2176470..b82ef89 100644 --- a/src-tauri/src/clipboard.rs +++ b/src-tauri/src/clipboard.rs @@ -1,15 +1,15 @@ +use base64::engine::general_purpose::STANDARD; +use base64::Engine; +use clipboard_win::{formats, get_clipboard, is_format_avail}; +use rand::distributions::Alphanumeric; +use rand::{thread_rng, Rng}; use rdev::{listen, simulate, EventType, Key}; +use sqlx::SqlitePool; use std::sync::mpsc; use std::thread; use std::time::Duration; use tauri::Manager; -use arboard::{Clipboard, ImageData}; -use sqlx::SqlitePool; use tokio::runtime::Runtime; -use rand::{thread_rng, Rng}; -use rand::distributions::Alphanumeric; -use base64::engine::general_purpose::STANDARD; -use base64::Engine; #[tauri::command] pub fn simulate_paste() { @@ -38,28 +38,41 @@ pub fn setup(app_handle: tauri::AppHandle) { } EventType::KeyRelease(Key::KeyC) => { if rx.try_recv().is_ok() { - let mut clipboard = Clipboard::new().unwrap(); let pool = app_handle.state::(); let rt = app_handle.state::(); - if let Ok(content) = clipboard.get_text() { + if let Ok(content) = get_clipboard(formats::Unicode) { rt.block_on(async { insert_content_if_not_exists(&pool, "text", content).await; }); } - match clipboard.get_image() { - Ok(image) => { - println!("Image found in clipboard"); - rt.block_on(async { - let base64_image = STANDARD.encode(&image.bytes); - println!("Image encoded to base64"); - insert_content_if_not_exists(&pool, "image", base64_image).await; - println!("Image inserted into database"); - }); - }, + if is_format_avail(formats::Bitmap.into()) { + match get_clipboard(formats::Bitmap) { + Ok(image) => { + println!("Image found in clipboard"); + rt.block_on(async { + let base64_image = STANDARD.encode(&image); + println!("Image encoded to base64"); + insert_content_if_not_exists(&pool, "image", base64_image) + .await; + println!("Image inserted into database"); + }); + } + Err(e) => { + println!("Error reading image from clipboard: {:?}", e); + } + } + } else { + println!("No image format available in clipboard"); + } + + match get_clipboard(formats::RawData(0)) { + Ok(data) => { + println!("{:?}", data); + } Err(e) => { - println!("Error reading image from clipboard: {:?}", e); + println!("Error reading raw data from clipboard: {:?}", e); } } } @@ -71,13 +84,14 @@ pub fn setup(app_handle: tauri::AppHandle) { } async fn insert_content_if_not_exists(pool: &SqlitePool, content_type: &str, content: String) { - // Check if content already exists - let exists: bool = sqlx::query_scalar("SELECT EXISTS(SELECT 1 FROM history WHERE content_type = ? AND content = ?)") - .bind(content_type) - .bind(&content) - .fetch_one(pool) - .await - .unwrap_or(false); + let exists: bool = sqlx::query_scalar( + "SELECT EXISTS(SELECT 1 FROM history WHERE content_type = ? AND content = ?)", + ) + .bind(content_type) + .bind(&content) + .fetch_one(pool) + .await + .unwrap_or(false); if !exists { let id: String = thread_rng() @@ -93,4 +107,4 @@ async fn insert_content_if_not_exists(pool: &SqlitePool, content_type: &str, con .execute(pool) .await; } -} \ No newline at end of file +}