v0.0.3
RustBox CI / rustbox (push) Waiting to run

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-30 00:12:09 +01:00
1 parent a238ff5e23
commit 93762fe9ef
65 files changed
+5420 -2792

No files matched your search

+31 -4
View File
@@ -54,6 +54,7 @@ pub struct DisplayPreferences {
pub forward_mode: String,
pub spellcheck_enabled: bool,
pub interface_skin: String,
pub preset_scale_unlocked: bool,
pub updated_at: String,
}
@@ -111,6 +112,7 @@ pub struct UpdateDisplayPreferences {
pub forward_mode: Option<String>,
pub spellcheck_enabled: Option<bool>,
pub interface_skin: Option<String>,
pub preset_scale_unlocked: Option<bool>,
}
fn deserialize_animation_mode_field<'de, D>(
@@ -175,14 +177,15 @@ fn defaults() -> DisplayPreferences {
quote_style: "standard".into(),
forward_mode: "inline".into(),
spellcheck_enabled: true,
interface_skin: "rustbox".into(),
interface_skin: "default".into(),
preset_scale_unlocked: false,
updated_at: String::new(),
}
}
pub fn get_preferences(conn: &Connection) -> Result<DisplayPreferences, String> {
let result = conn.query_row(
"SELECT density, theme, language, compose_format, deep_index, animation_mode, preview_pane, ui_scale, color_preset, accent_color, background_color, panel_color, text_color, font_family, font_size, row_height, folder_pane_width, message_pane_width, border_radius, contrast, show_avatars, show_attachment_icons, show_flags, reduce_motion, date_format, time_format, compose_autosave_ms, default_priority, request_mdn_default, attachment_reminder, icon_size, toolbar_density, sidebar_item_height, reader_max_width, composer_width, selection_color, unread_font_weight, unread_badge_style, compact_headers, show_borders, scrollbar_density, monochrome, folder_background, message_background, reader_background, compose_font_family, reply_position, quote_style, forward_mode, spellcheck_enabled, interface_skin, updated_at FROM display_preferences WHERE id = 1",
"SELECT density, theme, language, compose_format, deep_index, animation_mode, preview_pane, ui_scale, color_preset, accent_color, background_color, panel_color, text_color, font_family, font_size, row_height, folder_pane_width, message_pane_width, border_radius, contrast, show_avatars, show_attachment_icons, show_flags, reduce_motion, date_format, time_format, compose_autosave_ms, default_priority, request_mdn_default, attachment_reminder, icon_size, toolbar_density, sidebar_item_height, reader_max_width, composer_width, selection_color, unread_font_weight, unread_badge_style, compact_headers, show_borders, scrollbar_density, monochrome, folder_background, message_background, reader_background, compose_font_family, reply_position, quote_style, forward_mode, spellcheck_enabled, interface_skin, preset_scale_unlocked, updated_at FROM display_preferences WHERE id = 1",
[],
|row| Ok(DisplayPreferences {
density: row.get(0)?, theme: row.get(1)?, language: row.get(2)?, compose_format: row.get(3)?,
@@ -195,7 +198,7 @@ pub fn get_preferences(conn: &Connection) -> Result<DisplayPreferences, String>
compose_autosave_ms: row.get(26)?, default_priority: row.get(27)?, request_mdn_default: row.get::<_, i32>(28)? != 0, attachment_reminder: row.get::<_, i32>(29)? != 0,
icon_size: row.get(30)?, toolbar_density: row.get(31)?, sidebar_item_height: row.get(32)?, reader_max_width: row.get(33)?, composer_width: row.get(34)?,
selection_color: row.get(35)?, unread_font_weight: row.get(36)?, unread_badge_style: row.get(37)?, compact_headers: row.get::<_, i32>(38)? != 0, show_borders: row.get::<_, i32>(39)? != 0,
scrollbar_density: row.get(40)?, monochrome: row.get::<_, i32>(41)? != 0, folder_background: row.get(42)?, message_background: row.get(43)?, reader_background: row.get(44)?, compose_font_family: row.get(45)?, reply_position: row.get(46)?, quote_style: row.get(47)?, forward_mode: row.get(48)?, spellcheck_enabled: row.get::<_, i32>(49)? != 0, interface_skin: row.get(50)?, updated_at: row.get(51)?,
scrollbar_density: row.get(40)?, monochrome: row.get::<_, i32>(41)? != 0, folder_background: row.get(42)?, message_background: row.get(43)?, reader_background: row.get(44)?, compose_font_family: row.get(45)?, reply_position: row.get(46)?, quote_style: row.get(47)?, forward_mode: row.get(48)?, spellcheck_enabled: row.get::<_, i32>(49)? != 0, interface_skin: row.get(50)?, preset_scale_unlocked: row.get::<_, i32>(51)? != 0, updated_at: row.get(52)?,
}),
);
match result {
@@ -340,13 +343,24 @@ pub fn update_preferences(
"interface_skin",
v,
&[
"default",
"rustbox",
"roundcube-classic",
"roundcube-larry",
"roundcube-elastic",
"clean",
"gmail",
"proton",
"zoho",
"outlook",
"minimal",
"graphite",
"high-contrast",
"fastmail",
"apple-mail",
"yahoo",
"hey",
"nord",
],
)?;
}
@@ -479,6 +493,7 @@ pub fn update_preferences(
set_text!(forward_mode, "forward_mode");
set_bool!(spellcheck_enabled, "spellcheck_enabled");
set_text!(interface_skin, "interface_skin");
set_bool!(preset_scale_unlocked, "preset_scale_unlocked");
if sets.is_empty() {
return get_preferences(conn);
@@ -509,7 +524,7 @@ mod tests {
let update: UpdateDisplayPreferences = serde_json::from_value(serde_json::json!({
"theme":"dark", "language":"pl", "color_preset":"blue", "accent_color":"#336699",
"font_size":15, "row_height":64, "folder_pane_width":250, "message_pane_width":480,
"show_avatars":false, "reduce_motion":true, "interface_skin":"roundcube-elastic"
"show_avatars":false, "reduce_motion":true, "interface_skin":"roundcube-elastic", "preset_scale_unlocked":true
}))
.unwrap();
let prefs = update_preferences(&conn, &update).unwrap();
@@ -518,18 +533,30 @@ mod tests {
assert_eq!(prefs.font_size, 15);
assert!(!prefs.show_avatars);
assert_eq!(prefs.interface_skin, "roundcube-elastic");
assert!(prefs.preset_scale_unlocked);
}
#[test]
fn built_in_interface_skins_are_accepted() {
for skin in [
"default",
"rustbox",
"roundcube-classic",
"roundcube-larry",
"roundcube-elastic",
"clean",
"gmail",
"proton",
"zoho",
"outlook",
"minimal",
"graphite",
"high-contrast",
"fastmail",
"apple-mail",
"yahoo",
"hey",
"nord",
] {
let conn = open_test_db();
let update: UpdateDisplayPreferences =