Skip to content

Commit 5d9ef04

Browse files
committed
v0.21.2
1 parent d3a0cd1 commit 5d9ef04

17 files changed

Lines changed: 153 additions & 59 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
44

55
## [Unreleased]
66

7+
## [0.21.2]
8+
9+
### Added
10+
11+
- Host tag for clips created via Web UI
12+
- Host tag for dropped files
13+
14+
### Fixed
15+
16+
- Auto theme may show incorrect color scheme on start
17+
718
## [0.21.1]
819

920
### Improved

Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ members = [
1111
resolver = "2"
1212

1313
[workspace.package]
14-
version = "0.21.1"
14+
version = "0.21.2"
1515
edition = "2024"
1616
rust-version = "1.91"
1717
repository = "https://github.com/windoze/clipper"

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ COPY clipper-server ./clipper-server
5252
COPY --from=web-builder /app/clipper-server/web/dist ./clipper-server/web/dist
5353

5454
# Create a minimal workspace Cargo.toml for the server build
55-
RUN echo '[workspace]\nmembers = ["clipper-security", "clipper-server", "clipper-indexer"]\nresolver = "2"\n[workspace.package]\nversion = "0.21.1"\nedition = "2024"' > Cargo.toml
55+
RUN echo '[workspace]\nmembers = ["clipper-security", "clipper-server", "clipper-indexer"]\nresolver = "2"\n[workspace.package]\nversion = "0.21.2"\nedition = "2024"' > Cargo.toml
5656

5757
# Build release binary with embedded web UI and TLS support
5858
RUN cargo build --release -p clipper-server --features embed-web,full-tls

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
A modern, cross-platform clipboard manager with full-text search, real-time sync, and a beautiful desktop interface.
44

55
[![Homepage](https://img.shields.io/badge/homepage-clipper.unwritten.codes-blue)](https://clipper.unwritten.codes)
6-
![Version](https://img.shields.io/badge/version-0.21.1-blue)
6+
![Version](https://img.shields.io/badge/version-0.21.2-blue)
77
![License](https://img.shields.io/badge/license-MIT-green)
88
![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey)
99

README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
一款现代化、跨平台的剪贴板管理器,支持全文搜索、实时同步,拥有精美的桌面界面。
44

55
[![Homepage](https://img.shields.io/badge/homepage-clipper.unwritten.codes-blue)](https://clipper.unwritten.codes)
6-
![Version](https://img.shields.io/badge/version-0.21.1-blue)
6+
![Version](https://img.shields.io/badge/version-0.21.2-blue)
77
![License](https://img.shields.io/badge/license-MIT-green)
88
![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey)
99

clipper-server/web/package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

clipper-server/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "clipper-web",
33
"private": true,
4-
"version": "0.21.1",
4+
"version": "0.21.2",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

clipper-slint/src/settings.rs

Lines changed: 110 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
use anyhow::{Context, Result};
22
use serde::{Deserialize, Serialize};
3+
use std::collections::HashMap;
34
use std::path::PathBuf;
45
use std::sync::RwLock;
56

6-
const APP_NAME: &str = "clipper-slint";
7+
// Use the same app identifier as the Tauri app to share settings
8+
const APP_IDENTIFIER: &str = "codes.unwritten.clipper";
79
const SETTINGS_FILE: &str = "settings.json";
810

11+
/// Theme preference: "light", "dark", or "auto" (follows system)
12+
/// Uses camelCase to match the Tauri app's settings format
913
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
1014
#[serde(rename_all = "lowercase")]
1115
pub enum Theme {
@@ -15,55 +19,123 @@ pub enum Theme {
1519
Auto,
1620
}
1721

22+
/// Settings structure matching the Tauri app's settings.json format.
23+
/// All fields use camelCase to match the Tauri app's format.
24+
/// Fields not supported by clipper-slint are still deserialized to maintain
25+
/// compatibility when reading/writing the shared settings file.
1826
#[derive(Debug, Clone, Serialize, Deserialize)]
27+
#[serde(rename_all = "camelCase")]
1928
pub struct Settings {
20-
/// Whether to use the bundled server (true) or external server (false)
21-
#[serde(default = "default_use_bundled_server")]
22-
pub use_bundled_server: bool,
29+
/// Server address for syncing clips (maps to external_server_url in the old format)
30+
#[serde(default = "default_server_address")]
31+
pub server_address: String,
2332

24-
/// External server URL (used when use_bundled_server is false)
25-
#[serde(default = "default_external_server_url")]
26-
pub external_server_url: String,
33+
/// Default save location for clipped content (not used by clipper-slint)
34+
#[serde(default)]
35+
pub default_save_location: Option<String>,
36+
37+
/// Whether to show the main window on startup (not used by clipper-slint)
38+
#[serde(default = "default_open_on_startup")]
39+
pub open_on_startup: bool,
40+
41+
/// Whether to start the application on login (not used by clipper-slint)
42+
#[serde(default)]
43+
pub start_on_login: bool,
2744

28-
/// Port for the bundled server (persisted across restarts)
45+
/// Theme preference: light, dark, or auto
46+
#[serde(default)]
47+
pub theme: Theme,
48+
49+
/// Syntax highlighting theme for code snippets (not used by clipper-slint)
50+
#[serde(default)]
51+
pub syntax_theme: String,
52+
53+
/// Server port for the bundled server (persisted across restarts)
2954
#[serde(default)]
3055
pub server_port: Option<u16>,
3156

32-
/// Whether to listen on all interfaces (0.0.0.0) for LAN access
57+
/// Whether to use the bundled server (true) or external server (false)
58+
#[serde(default = "default_use_bundled_server")]
59+
pub use_bundled_server: bool,
60+
61+
/// Whether to listen on all network interfaces (bundled server only)
3362
#[serde(default)]
3463
pub listen_on_all_interfaces: bool,
3564

36-
/// UI theme (light, dark, auto)
65+
/// Language preference (not used by clipper-slint)
3766
#[serde(default)]
38-
pub theme: Theme,
67+
pub language: Option<String>,
3968

40-
/// Whether auto-cleanup is enabled
69+
/// Whether to show toast notifications (not used by clipper-slint)
70+
#[serde(default = "default_notifications_enabled")]
71+
pub notifications_enabled: bool,
72+
73+
/// Global shortcut to toggle window visibility (not used by clipper-slint)
74+
#[serde(default = "default_global_shortcut")]
75+
pub global_shortcut: String,
76+
77+
/// Whether to enable automatic cleanup of old clips (bundled server only)
4178
#[serde(default)]
4279
pub cleanup_enabled: bool,
4380

44-
/// Retention period in days for auto-cleanup
81+
/// Retention period in days for automatic cleanup (bundled server only)
4582
#[serde(default = "default_cleanup_retention_days")]
4683
pub cleanup_retention_days: u32,
4784

48-
/// Bearer token for bundled server authentication (used when listen_on_all_interfaces is true)
49-
#[serde(default)]
50-
pub bundled_server_token: Option<String>,
51-
5285
/// Bearer token for external server authentication
5386
#[serde(default)]
5487
pub external_server_token: Option<String>,
5588

56-
/// Maximum upload size in megabytes
89+
/// Bearer token for bundled server when external access is enabled
90+
#[serde(default)]
91+
pub bundled_server_token: Option<String>,
92+
93+
/// Maximum upload size in MB for bundled server
5794
#[serde(default = "default_max_upload_size_mb")]
5895
pub max_upload_size_mb: u64,
96+
97+
/// Settings dialog window geometry (not used by clipper-slint)
98+
#[serde(default)]
99+
pub settings_window_geometry: serde_json::Value,
100+
101+
/// Main window geometry (not used by clipper-slint)
102+
#[serde(default)]
103+
pub main_window_geometry: serde_json::Value,
104+
105+
/// Trusted certificate fingerprints for self-signed HTTPS servers
106+
#[serde(default)]
107+
pub trusted_certificates: HashMap<String, String>,
108+
109+
/// Enable debug logging to log file (not used by clipper-slint)
110+
#[serde(default)]
111+
pub debug_logging: bool,
112+
}
113+
114+
fn default_server_address() -> String {
115+
"http://localhost:3000".to_string()
116+
}
117+
118+
fn default_open_on_startup() -> bool {
119+
true
59120
}
60121

61122
fn default_use_bundled_server() -> bool {
62123
true
63124
}
64125

65-
fn default_external_server_url() -> String {
66-
"http://localhost:3000".to_string()
126+
fn default_notifications_enabled() -> bool {
127+
true
128+
}
129+
130+
fn default_global_shortcut() -> String {
131+
#[cfg(target_os = "macos")]
132+
{
133+
"Command+Shift+V".to_string()
134+
}
135+
#[cfg(not(target_os = "macos"))]
136+
{
137+
"Ctrl+Shift+V".to_string()
138+
}
67139
}
68140

69141
fn default_cleanup_retention_days() -> u32 {
@@ -77,16 +149,27 @@ fn default_max_upload_size_mb() -> u64 {
77149
impl Default for Settings {
78150
fn default() -> Self {
79151
Self {
80-
use_bundled_server: default_use_bundled_server(),
81-
external_server_url: default_external_server_url(),
152+
server_address: default_server_address(),
153+
default_save_location: None,
154+
open_on_startup: default_open_on_startup(),
155+
start_on_login: false,
156+
theme: Theme::default(),
157+
syntax_theme: String::new(),
82158
server_port: None,
159+
use_bundled_server: default_use_bundled_server(),
83160
listen_on_all_interfaces: false,
84-
theme: Theme::default(),
161+
language: None,
162+
notifications_enabled: default_notifications_enabled(),
163+
global_shortcut: default_global_shortcut(),
85164
cleanup_enabled: false,
86165
cleanup_retention_days: default_cleanup_retention_days(),
87-
bundled_server_token: None,
88166
external_server_token: None,
167+
bundled_server_token: None,
89168
max_upload_size_mb: default_max_upload_size_mb(),
169+
settings_window_geometry: serde_json::Value::Object(Default::default()),
170+
main_window_geometry: serde_json::Value::Object(Default::default()),
171+
trusted_certificates: HashMap::new(),
172+
debug_logging: false,
90173
}
91174
}
92175
}
@@ -100,7 +183,7 @@ impl SettingsManager {
100183
pub fn new() -> Result<Self> {
101184
let config_dir = dirs::config_dir()
102185
.context("Failed to get config directory")?
103-
.join(APP_NAME);
186+
.join(APP_IDENTIFIER);
104187

105188
std::fs::create_dir_all(&config_dir).context("Failed to create config directory")?;
106189

@@ -187,13 +270,13 @@ impl SettingsManager {
187270
}
188271

189272
pub fn get_external_server_url(&self) -> String {
190-
self.settings.read().unwrap().external_server_url.clone()
273+
self.settings.read().unwrap().server_address.clone()
191274
}
192275

193276
pub fn set_external_server_url(&self, url: String) -> Result<()> {
194277
{
195278
let mut settings = self.settings.write().unwrap();
196-
settings.external_server_url = url;
279+
settings.server_address = url;
197280
}
198281
self.save()
199282
}

clipper/package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)