Store active browser columns in col state

This commit is contained in:
RumovZ 2021-04-09 22:53:02 +02:00
parent 769b5ac833
commit d7f7deafd4
6 changed files with 22 additions and 44 deletions

View file

@ -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
##########################################################################

View file

@ -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 {

View file

@ -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<pb::Empty> {
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<pb::BrowserRow> {
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<pb::Empty> {
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<pb::Empty> {
self.with_col(|col| col.set_desktop_browser_note_columns(input.into()))?;
Ok(().into())
}
}
impl From<Option<SortOrderProto>> for SortMode {

View file

@ -246,13 +246,12 @@ impl Collection {
pub fn browser_row_for_id(&mut self, id: i64) -> Result<Row> {
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)
}

View file

@ -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<DeckId, Arc<Deck>>,
pub(crate) scheduler_info: Option<SchedulerInfo>,
pub(crate) card_queues: Option<CardQueues>,
pub(crate) active_browser_columns: Option<Arc<Vec<browser_table::Column>>>,
/// 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,

View file

@ -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<Vec<Column>> {
self.get_config_optional(ConfigKey::DesktopBrowserCardColumns)
}
pub(crate) fn set_desktop_browser_card_columns(&mut self, columns: Vec<Column>) -> Result<()> {
self.set_config(ConfigKey::DesktopBrowserCardColumns, &columns)
}
pub(crate) fn get_desktop_browser_note_columns(&self) -> Option<Vec<Column>> {
self.get_config_optional(ConfigKey::DesktopBrowserNoteColumns)
}
pub(crate) fn set_desktop_browser_note_columns(&mut self, columns: Vec<Column>) -> Result<()> {
self.set_config(ConfigKey::DesktopBrowserNoteColumns, &columns)
}
pub(crate) fn get_creation_utc_offset(&self) -> Option<i32> {
self.get_config_optional(ConfigKey::CreationOffset)
}