From d7f7deafd400744152d62d2e96419f41bbd8756b Mon Sep 17 00:00:00 2001 From: RumovZ Date: Fri, 9 Apr 2021 22:53:02 +0200 Subject: [PATCH] Store active browser columns in col state --- pylib/anki/collection.py | 8 ++++---- rslib/backend.proto | 3 +-- rslib/src/backend/search/mod.rs | 21 +++++++++------------ rslib/src/browser_table.rs | 13 ++++++------- rslib/src/collection.rs | 2 ++ rslib/src/config/mod.rs | 19 ------------------- 6 files changed, 22 insertions(+), 44 deletions(-) diff --git a/pylib/anki/collection.py b/pylib/anki/collection.py index 6311dbe8f..fce008e3a 100644 --- a/pylib/anki/collection.py +++ b/pylib/anki/collection.py @@ -717,24 +717,24 @@ class Collection: columns = self.get_config( "activeCols", ["noteFld", "template", "cardDue", "deck"] ) - self._backend.set_desktop_browser_card_columns(columns) + self._backend.set_active_browser_columns(columns) return columns def set_browser_card_columns(self, columns: List[str]) -> None: self.set_config("activeCols", columns) - self._backend.set_desktop_browser_card_columns(columns) + self._backend.set_active_browser_columns(columns) def load_browser_note_columns(self) -> List[str]: """Return the stored note column names and ensure the backend columns are set and in sync.""" columns = self.get_config( "activeNoteCols", ["noteFld", "note", "noteCards", "noteTags"] ) - self._backend.set_desktop_browser_note_columns(columns) + self._backend.set_active_browser_columns(columns) return columns def set_browser_note_columns(self, columns: List[str]) -> None: self.set_config("activeNoteCols", columns) - self._backend.set_desktop_browser_note_columns(columns) + self._backend.set_active_browser_columns(columns) # Config ########################################################################## diff --git a/rslib/backend.proto b/rslib/backend.proto index afa6ab58f..f36ac6550 100644 --- a/rslib/backend.proto +++ b/rslib/backend.proto @@ -250,8 +250,7 @@ service SearchService { rpc FindAndReplace(FindAndReplaceIn) returns (OpChangesWithCount); rpc AllBrowserColumns(Empty) returns (BrowserColumns); rpc BrowserRowForId(Int64) returns (BrowserRow); - rpc SetDesktopBrowserCardColumns(StringList) returns (Empty); - rpc SetDesktopBrowserNoteColumns(StringList) returns (Empty); + rpc SetActiveBrowserColumns(StringList) returns (Empty); } service StatsService { diff --git a/rslib/src/backend/search/mod.rs b/rslib/src/backend/search/mod.rs index 189832a1b..23ff04c95 100644 --- a/rslib/src/backend/search/mod.rs +++ b/rslib/src/backend/search/mod.rs @@ -4,8 +4,7 @@ mod browser_table; mod search_node; -use std::convert::TryInto; -use std::str::FromStr; +use std::{convert::TryInto, str::FromStr, sync::Arc}; use super::Backend; use crate::{ @@ -92,19 +91,17 @@ impl SearchService for Backend { self.with_col(|col| Ok(col.all_browser_columns())) } + fn set_active_browser_columns(&self, input: pb::StringList) -> Result { + self.with_col(|col| { + col.state.active_browser_columns = Some(Arc::new(input.into())); + Ok(()) + }) + .map(Into::into) + } + fn browser_row_for_id(&self, input: pb::Int64) -> Result { self.with_col(|col| col.browser_row_for_id(input.val).map(Into::into)) } - - fn set_desktop_browser_card_columns(&self, input: pb::StringList) -> Result { - self.with_col(|col| col.set_desktop_browser_card_columns(input.into()))?; - Ok(().into()) - } - - fn set_desktop_browser_note_columns(&self, input: pb::StringList) -> Result { - self.with_col(|col| col.set_desktop_browser_note_columns(input.into()))?; - Ok(().into()) - } } impl From> for SortMode { diff --git a/rslib/src/browser_table.rs b/rslib/src/browser_table.rs index a74a03247..ef4ef4874 100644 --- a/rslib/src/browser_table.rs +++ b/rslib/src/browser_table.rs @@ -246,13 +246,12 @@ impl Collection { pub fn browser_row_for_id(&mut self, id: i64) -> Result { let notes_mode = self.get_bool(BoolKey::BrowserTableShowNotesMode); - let columns = if notes_mode { - self.get_desktop_browser_note_columns() - .ok_or_else(|| AnkiError::invalid_input("Note columns not set."))? - } else { - self.get_desktop_browser_card_columns() - .ok_or_else(|| AnkiError::invalid_input("Card columns not set."))? - }; + let columns = Arc::clone( + self.state + .active_browser_columns + .as_ref() + .ok_or_else(|| AnkiError::invalid_input("Active browser columns not set."))?, + ); RowContext::new(self, id, notes_mode, card_render_required(&columns))?.browser_row(&columns) } diff --git a/rslib/src/collection.rs b/rslib/src/collection.rs index 6e8348c9d..a2bc09ce7 100644 --- a/rslib/src/collection.rs +++ b/rslib/src/collection.rs @@ -3,6 +3,7 @@ use crate::types::Usn; use crate::{ + browser_table, decks::{Deck, DeckId}, notetype::{Notetype, NotetypeId}, prelude::*, @@ -66,6 +67,7 @@ pub struct CollectionState { pub(crate) deck_cache: HashMap>, pub(crate) scheduler_info: Option, pub(crate) card_queues: Option, + pub(crate) active_browser_columns: Option>>, /// True if legacy Python code has executed SQL that has modified the /// database, requiring modification time to be bumped. pub(crate) modified_by_dbproxy: bool, diff --git a/rslib/src/config/mod.rs b/rslib/src/config/mod.rs index e26239280..d908a3a16 100644 --- a/rslib/src/config/mod.rs +++ b/rslib/src/config/mod.rs @@ -64,9 +64,6 @@ pub(crate) enum ConfigKey { NextNewCardPosition, #[strum(to_string = "schedVer")] SchedulerVersion, - - DesktopBrowserCardColumns, - DesktopBrowserNoteColumns, } #[derive(PartialEq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)] @@ -140,22 +137,6 @@ impl Collection { .unwrap_or(Column::NoteCreation) } - pub(crate) fn get_desktop_browser_card_columns(&self) -> Option> { - self.get_config_optional(ConfigKey::DesktopBrowserCardColumns) - } - - pub(crate) fn set_desktop_browser_card_columns(&mut self, columns: Vec) -> Result<()> { - self.set_config(ConfigKey::DesktopBrowserCardColumns, &columns) - } - - pub(crate) fn get_desktop_browser_note_columns(&self) -> Option> { - self.get_config_optional(ConfigKey::DesktopBrowserNoteColumns) - } - - pub(crate) fn set_desktop_browser_note_columns(&mut self, columns: Vec) -> Result<()> { - self.set_config(ConfigKey::DesktopBrowserNoteColumns, &columns) - } - pub(crate) fn get_creation_utc_offset(&self) -> Option { self.get_config_optional(ConfigKey::CreationOffset) }