diff --git a/rslib/src/backend/config.rs b/rslib/src/backend/config.rs index c9fe7665b..9304dc4fd 100644 --- a/rslib/src/backend/config.rs +++ b/rslib/src/backend/config.rs @@ -1,22 +1,35 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -use crate::{backend_proto as pb, config::BoolKey}; -use pb::config::bool::Key; +use crate::{ + backend_proto as pb, + config::{BoolKey, StringKey}, +}; +use pb::config::bool::Key as BoolKeyProto; +use pb::config::string::Key as StringKeyProto; -impl From for BoolKey { - fn from(k: Key) -> Self { +impl From for BoolKey { + fn from(k: BoolKeyProto) -> Self { match k { - Key::BrowserSortBackwards => BoolKey::BrowserSortBackwards, - Key::PreviewBothSides => BoolKey::PreviewBothSides, - Key::CollapseTags => BoolKey::CollapseTags, - Key::CollapseNotetypes => BoolKey::CollapseNotetypes, - Key::CollapseDecks => BoolKey::CollapseDecks, - Key::CollapseSavedSearches => BoolKey::CollapseSavedSearches, - Key::CollapseToday => BoolKey::CollapseToday, - Key::CollapseCardState => BoolKey::CollapseCardState, - Key::CollapseFlags => BoolKey::CollapseFlags, - Key::Sched2021 => BoolKey::Sched2021, + BoolKeyProto::BrowserSortBackwards => BoolKey::BrowserSortBackwards, + BoolKeyProto::PreviewBothSides => BoolKey::PreviewBothSides, + BoolKeyProto::CollapseTags => BoolKey::CollapseTags, + BoolKeyProto::CollapseNotetypes => BoolKey::CollapseNotetypes, + BoolKeyProto::CollapseDecks => BoolKey::CollapseDecks, + BoolKeyProto::CollapseSavedSearches => BoolKey::CollapseSavedSearches, + BoolKeyProto::CollapseToday => BoolKey::CollapseToday, + BoolKeyProto::CollapseCardState => BoolKey::CollapseCardState, + BoolKeyProto::CollapseFlags => BoolKey::CollapseFlags, + BoolKeyProto::Sched2021 => BoolKey::Sched2021, + } + } +} + +impl From for StringKey { + fn from(k: StringKeyProto) -> Self { + match k { + StringKeyProto::SetDueBrowser => StringKey::SetDueBrowser, + StringKeyProto::SetDueReviewer => StringKey::SetDueReviewer, } } } diff --git a/rslib/src/backend/mod.rs b/rslib/src/backend/mod.rs index 02133ad31..14f3e5b28 100644 --- a/rslib/src/backend/mod.rs +++ b/rslib/src/backend/mod.rs @@ -1527,14 +1527,16 @@ impl BackendService for Backend { fn get_config_string(&self, input: pb::config::String) -> BackendResult { self.with_col(|col| { Ok(pb::String { - val: col.get_string(input), + val: col.get_string(input.key().into()), }) }) } fn set_config_string(&self, input: pb::SetConfigStringIn) -> BackendResult { - self.with_col(|col| col.transact(None, |col| col.set_string(input))) - .map(Into::into) + self.with_col(|col| { + col.transact(None, |col| col.set_string(input.key().into(), &input.value)) + }) + .map(Into::into) } fn get_preferences(&self, _input: Empty) -> BackendResult { diff --git a/rslib/src/config.rs b/rslib/src/config.rs index 35712c0e3..fbc12d5f6 100644 --- a/rslib/src/config.rs +++ b/rslib/src/config.rs @@ -2,10 +2,9 @@ // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html use crate::{ - backend_proto as pb, collection::Collection, decks::DeckID, err::Result, notetype::NoteTypeID, + collection::Collection, decks::DeckID, err::Result, notetype::NoteTypeID, timestamp::TimestampSecs, }; -pub use pb::config::string::Key as StringKey; use serde::{de::DeserializeOwned, Serialize}; use serde_aux::field_attributes::deserialize_bool_from_anything; use serde_derive::Deserialize; @@ -45,8 +44,6 @@ pub(crate) enum ConfigKey { FirstDayOfWeek, LocalOffset, Rollover, - SetDueBrowser, - SetDueReviewer, #[strum(to_string = "timeLim")] AnswerTimeLimitSecs, @@ -95,13 +92,11 @@ pub enum BoolKey { ShowRemainingDueCountsInStudy, } -impl From for ConfigKey { - fn from(key: StringKey) -> Self { - match key { - StringKey::SetDueBrowser => ConfigKey::SetDueBrowser, - StringKey::SetDueReviewer => ConfigKey::SetDueReviewer, - } - } +#[derive(Debug, Clone, Copy, IntoStaticStr)] +#[strum(serialize_all = "camelCase")] +pub enum StringKey { + SetDueBrowser, + SetDueReviewer, } #[derive(PartialEq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)] @@ -180,6 +175,20 @@ impl Collection { self.set_config(key, &value) } + pub(crate) fn get_string(&self, key: StringKey) -> String { + let default = match key { + StringKey::SetDueBrowser => "0", + StringKey::SetDueReviewer => "1", + // other => "", + }; + self.get_config_optional(key) + .unwrap_or_else(|| default.to_string()) + } + + pub(crate) fn set_string(&self, key: StringKey, val: &str) -> Result<()> { + self.set_config(key, &val) + } + pub(crate) fn get_browser_sort_kind(&self) -> SortKind { self.get_config_default(ConfigKey::BrowserSortKind) } @@ -300,21 +309,6 @@ impl Collection { pub(crate) fn set_last_unburied_day(&self, day: u32) -> Result<()> { self.set_config(ConfigKey::LastUnburiedDay, &day) } - - pub(crate) fn get_string(&self, config: pb::config::String) -> String { - let key = config.key(); - let default = match key { - StringKey::SetDueBrowser => "0", - StringKey::SetDueReviewer => "1", - // other => "", - }; - self.get_config_optional(ConfigKey::from(key)) - .unwrap_or_else(|| default.to_string()) - } - - pub(crate) fn set_string(&self, input: pb::SetConfigStringIn) -> Result<()> { - self.set_config(ConfigKey::from(input.key()), &input.value) - } } #[derive(Deserialize, PartialEq, Debug, Clone, Copy)]