mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Merge pull request #1277 from RumovZ/config-keys
Add constants for literal config keys
This commit is contained in:
commit
44ef810f67
8 changed files with 70 additions and 84 deletions
35
pylib/anki/browser.py
Normal file
35
pylib/anki/browser.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright: Ankitects Pty Ltd and contributors
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
|
||||
class BrowserConfig:
|
||||
ACTIVE_CARD_COLUMNS_KEY = "activeCols"
|
||||
ACTIVE_NOTE_COLUMNS_KEY = "activeNoteCols"
|
||||
CARDS_SORT_COLUMN_KEY = "sortType"
|
||||
NOTES_SORT_COLUMN_KEY = "noteSortType"
|
||||
CARDS_SORT_BACKWARDS_KEY = "sortBackwards"
|
||||
NOTES_SORT_BACKWARDS_KEY = "browserNoteSortBackwards"
|
||||
|
||||
@staticmethod
|
||||
def active_columns_key(is_notes_mode: bool) -> str:
|
||||
if is_notes_mode:
|
||||
return BrowserConfig.ACTIVE_NOTE_COLUMNS_KEY
|
||||
return BrowserConfig.ACTIVE_CARD_COLUMNS_KEY
|
||||
|
||||
@staticmethod
|
||||
def sort_column_key(is_notes_mode: bool) -> str:
|
||||
if is_notes_mode:
|
||||
return BrowserConfig.NOTES_SORT_COLUMN_KEY
|
||||
return BrowserConfig.CARDS_SORT_COLUMN_KEY
|
||||
|
||||
@staticmethod
|
||||
def sort_backwards_key(is_notes_mode: bool) -> str:
|
||||
if is_notes_mode:
|
||||
return BrowserConfig.NOTES_SORT_BACKWARDS_KEY
|
||||
return BrowserConfig.CARDS_SORT_BACKWARDS_KEY
|
||||
|
||||
|
||||
class BrowserDefaults:
|
||||
CARD_COLUMNS = ["noteFld", "template", "cardDue", "deck"]
|
||||
NOTE_COLUMNS = ["noteFld", "note", "noteCards", "noteTags"]
|
|
@ -37,6 +37,7 @@ from dataclasses import dataclass, field
|
|||
import anki.latex
|
||||
from anki import hooks
|
||||
from anki._backend import RustBackend, Translations
|
||||
from anki.browser import BrowserConfig, BrowserDefaults
|
||||
from anki.cards import Card, CardId
|
||||
from anki.config import Config, ConfigManager
|
||||
from anki.consts import *
|
||||
|
@ -493,14 +494,10 @@ class Collection(DeprecatedNamesMixin):
|
|||
if order is False:
|
||||
return _pb.SortOrder(none=_pb.Empty())
|
||||
# order=True: set args to sort column and reverse from config
|
||||
sort_key = "noteSortType" if finding_notes else "sortType"
|
||||
sort_key = BrowserConfig.sort_column_key(finding_notes)
|
||||
order = self.get_browser_column(self.get_config(sort_key))
|
||||
reverse_key = (
|
||||
Config.Bool.BROWSER_NOTE_SORT_BACKWARDS
|
||||
if finding_notes
|
||||
else Config.Bool.BROWSER_SORT_BACKWARDS
|
||||
)
|
||||
reverse = self.get_config_bool(reverse_key)
|
||||
reverse_key = BrowserConfig.sort_backwards_key(finding_notes)
|
||||
reverse = self.get_config(reverse_key)
|
||||
if isinstance(order, BrowserColumns.Column):
|
||||
if order.sorting != BrowserColumns.SORTING_NONE:
|
||||
return _pb.SortOrder(
|
||||
|
@ -679,25 +676,25 @@ class Collection(DeprecatedNamesMixin):
|
|||
def load_browser_card_columns(self) -> List[str]:
|
||||
"""Return the stored card column names and ensure the backend columns are set and in sync."""
|
||||
columns = self.get_config(
|
||||
"activeCols", ["noteFld", "template", "cardDue", "deck"]
|
||||
BrowserConfig.ACTIVE_CARD_COLUMNS_KEY, BrowserDefaults.CARD_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.set_config(BrowserConfig.ACTIVE_CARD_COLUMNS_KEY, 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"]
|
||||
BrowserConfig.ACTIVE_NOTE_COLUMNS_KEY, BrowserDefaults.NOTE_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.set_config(BrowserConfig.ACTIVE_NOTE_COLUMNS_KEY, columns)
|
||||
self._backend.set_active_browser_columns(columns)
|
||||
|
||||
# Config
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# coding: utf-8
|
||||
import pytest
|
||||
|
||||
from anki.collection import Config
|
||||
from anki.browser import BrowserConfig
|
||||
from anki.consts import *
|
||||
from tests.shared import getEmptyCol, isNearCutoff
|
||||
|
||||
|
@ -121,7 +121,7 @@ def test_find_cards():
|
|||
col.conf["sortType"] = "cardMod"
|
||||
assert col.find_cards("", order=True)[-1] in latestCardIds
|
||||
assert col.find_cards("", order=True)[0] == firstCardId
|
||||
col.set_config_bool(Config.Bool.BROWSER_SORT_BACKWARDS, True)
|
||||
col.set_config(BrowserConfig.CARDS_SORT_BACKWARDS_KEY, True)
|
||||
assert col.find_cards("", order=True)[0] in latestCardIds
|
||||
assert (
|
||||
col.find_cards("", order=col.get_browser_column("cardDue"), reverse=False)[0]
|
||||
|
|
|
@ -6,21 +6,24 @@ from __future__ import annotations
|
|||
from abc import ABC, abstractmethod, abstractproperty
|
||||
from typing import List, Sequence, Union, cast
|
||||
|
||||
from anki.browser import BrowserConfig
|
||||
from anki.cards import Card, CardId
|
||||
from anki.collection import Collection, Config
|
||||
from anki.collection import Collection
|
||||
from anki.notes import Note, NoteId
|
||||
from anki.utils import ids2str
|
||||
from aqt.browser.table import Column, ItemId, ItemList
|
||||
|
||||
|
||||
class ItemState(ABC):
|
||||
config_key_prefix: str
|
||||
GEOMETRY_KEY_PREFIX: str
|
||||
SORT_COLUMN_KEY: str
|
||||
SORT_BACKWARDS_KEY: str
|
||||
_active_columns: List[str]
|
||||
_sort_column: str
|
||||
_sort_backwards: bool
|
||||
|
||||
def __init__(self, col: Collection) -> None:
|
||||
self.col = col
|
||||
self._sort_column = self.col.get_config(self.SORT_COLUMN_KEY)
|
||||
self._sort_backwards = self.col.get_config(self.SORT_BACKWARDS_KEY, False)
|
||||
|
||||
def is_notes_mode(self) -> bool:
|
||||
"""Return True if the state is a NoteState."""
|
||||
|
@ -56,21 +59,23 @@ class ItemState(ABC):
|
|||
def toggle_active_column(self, column: str) -> None:
|
||||
"""Add or remove an active column."""
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
def sort_column(self) -> str:
|
||||
"""Return the sort column from the config."""
|
||||
return self._sort_column
|
||||
|
||||
@sort_column.setter
|
||||
def sort_column(self, column: str) -> None:
|
||||
"""Save the sort column in the config."""
|
||||
self.col.set_config(self.SORT_COLUMN_KEY, column)
|
||||
self._sort_column = column
|
||||
|
||||
@abstractproperty
|
||||
@property
|
||||
def sort_backwards(self) -> bool:
|
||||
"""Return the sort order from the config."""
|
||||
return self._sort_backwards
|
||||
|
||||
@sort_backwards.setter
|
||||
def sort_backwards(self, order: bool) -> None:
|
||||
"""Save the sort order in the config."""
|
||||
self.col.set_config(self.SORT_BACKWARDS_KEY, order)
|
||||
self._sort_backwards = order
|
||||
|
||||
# Get objects
|
||||
|
||||
|
@ -114,14 +119,13 @@ class ItemState(ABC):
|
|||
|
||||
|
||||
class CardState(ItemState):
|
||||
GEOMETRY_KEY_PREFIX = "editor"
|
||||
SORT_COLUMN_KEY = BrowserConfig.CARDS_SORT_COLUMN_KEY
|
||||
SORT_BACKWARDS_KEY = BrowserConfig.CARDS_SORT_BACKWARDS_KEY
|
||||
|
||||
def __init__(self, col: Collection) -> None:
|
||||
super().__init__(col)
|
||||
self.config_key_prefix = "editor"
|
||||
self._active_columns = self.col.load_browser_card_columns()
|
||||
self._sort_column = self.col.get_config("sortType")
|
||||
self._sort_backwards = self.col.get_config_bool(
|
||||
Config.Bool.BROWSER_SORT_BACKWARDS
|
||||
)
|
||||
|
||||
@property
|
||||
def active_columns(self) -> List[str]:
|
||||
|
@ -134,24 +138,6 @@ class CardState(ItemState):
|
|||
self._active_columns.append(column)
|
||||
self.col.set_browser_card_columns(self._active_columns)
|
||||
|
||||
@property
|
||||
def sort_column(self) -> str:
|
||||
return self._sort_column
|
||||
|
||||
@sort_column.setter
|
||||
def sort_column(self, column: str) -> None:
|
||||
self.col.set_config("sortType", column)
|
||||
self._sort_column = column
|
||||
|
||||
@property
|
||||
def sort_backwards(self) -> bool:
|
||||
return self._sort_backwards
|
||||
|
||||
@sort_backwards.setter
|
||||
def sort_backwards(self, order: bool) -> None:
|
||||
self.col.set_config_bool(Config.Bool.BROWSER_SORT_BACKWARDS, order)
|
||||
self._sort_backwards = order
|
||||
|
||||
def get_card(self, item: ItemId) -> Card:
|
||||
return self.col.get_card(CardId(item))
|
||||
|
||||
|
@ -180,14 +166,13 @@ class CardState(ItemState):
|
|||
|
||||
|
||||
class NoteState(ItemState):
|
||||
GEOMETRY_KEY_PREFIX = "editorNotesMode"
|
||||
SORT_COLUMN_KEY = BrowserConfig.NOTES_SORT_COLUMN_KEY
|
||||
SORT_BACKWARDS_KEY = BrowserConfig.NOTES_SORT_BACKWARDS_KEY
|
||||
|
||||
def __init__(self, col: Collection) -> None:
|
||||
super().__init__(col)
|
||||
self.config_key_prefix = "editorNotesMode"
|
||||
self._active_columns = self.col.load_browser_note_columns()
|
||||
self._sort_column = self.col.get_config("noteSortType")
|
||||
self._sort_backwards = self.col.get_config_bool(
|
||||
Config.Bool.BROWSER_NOTE_SORT_BACKWARDS
|
||||
)
|
||||
|
||||
@property
|
||||
def active_columns(self) -> List[str]:
|
||||
|
@ -200,24 +185,6 @@ class NoteState(ItemState):
|
|||
self._active_columns.append(column)
|
||||
self.col.set_browser_note_columns(self._active_columns)
|
||||
|
||||
@property
|
||||
def sort_column(self) -> str:
|
||||
return self._sort_column
|
||||
|
||||
@sort_column.setter
|
||||
def sort_column(self, column: str) -> None:
|
||||
self.col.set_config("noteSortType", column)
|
||||
self._sort_column = column
|
||||
|
||||
@property
|
||||
def sort_backwards(self) -> bool:
|
||||
return self._sort_backwards
|
||||
|
||||
@sort_backwards.setter
|
||||
def sort_backwards(self, order: bool) -> None:
|
||||
self.col.set_config_bool(Config.Bool.BROWSER_NOTE_SORT_BACKWARDS, order)
|
||||
self._sort_backwards = order
|
||||
|
||||
def get_card(self, item: ItemId) -> Card:
|
||||
return self.get_note(item).cards()[0]
|
||||
|
||||
|
|
|
@ -252,11 +252,11 @@ class Table:
|
|||
hh.setCascadingSectionResizes(False)
|
||||
|
||||
def _save_header(self) -> None:
|
||||
saveHeader(self._view.horizontalHeader(), self._state.config_key_prefix)
|
||||
saveHeader(self._view.horizontalHeader(), self._state.GEOMETRY_KEY_PREFIX)
|
||||
|
||||
def _restore_header(self) -> None:
|
||||
self._view.horizontalHeader().blockSignals(True)
|
||||
restoreHeader(self._view.horizontalHeader(), self._state.config_key_prefix)
|
||||
restoreHeader(self._view.horizontalHeader(), self._state.GEOMETRY_KEY_PREFIX)
|
||||
self._set_column_sizes()
|
||||
self._set_sort_indicator()
|
||||
self._view.horizontalHeader().blockSignals(False)
|
||||
|
|
|
@ -1447,8 +1447,6 @@ message Config {
|
|||
message Bool {
|
||||
enum Key {
|
||||
BROWSER_TABLE_SHOW_NOTES_MODE = 0;
|
||||
BROWSER_SORT_BACKWARDS = 1;
|
||||
BROWSER_NOTE_SORT_BACKWARDS = 2;
|
||||
PREVIEW_BOTH_SIDES = 3;
|
||||
COLLAPSE_TAGS = 4;
|
||||
COLLAPSE_NOTETYPES = 5;
|
||||
|
|
|
@ -16,8 +16,6 @@ impl From<BoolKeyProto> for BoolKey {
|
|||
fn from(k: BoolKeyProto) -> Self {
|
||||
match k {
|
||||
BoolKeyProto::BrowserTableShowNotesMode => BoolKey::BrowserTableShowNotesMode,
|
||||
BoolKeyProto::BrowserSortBackwards => BoolKey::BrowserSortBackwards,
|
||||
BoolKeyProto::BrowserNoteSortBackwards => BoolKey::BrowserNoteSortBackwards,
|
||||
BoolKeyProto::PreviewBothSides => BoolKey::PreviewBothSides,
|
||||
BoolKeyProto::CollapseTags => BoolKey::CollapseTags,
|
||||
BoolKeyProto::CollapseNotetypes => BoolKey::CollapseNotetypes,
|
||||
|
|
|
@ -11,7 +11,6 @@ use crate::prelude::*;
|
|||
#[strum(serialize_all = "camelCase")]
|
||||
pub enum BoolKey {
|
||||
BrowserTableShowNotesMode,
|
||||
BrowserNoteSortBackwards,
|
||||
CardCountsSeparateInactive,
|
||||
CollapseCardState,
|
||||
CollapseDecks,
|
||||
|
@ -28,8 +27,6 @@ pub enum BoolKey {
|
|||
PreviewBothSides,
|
||||
Sched2021,
|
||||
|
||||
#[strum(to_string = "sortBackwards")]
|
||||
BrowserSortBackwards,
|
||||
#[strum(to_string = "normalize_note_text")]
|
||||
NormalizeNoteText,
|
||||
#[strum(to_string = "dayLearnFirst")]
|
||||
|
@ -50,12 +47,6 @@ struct BoolLike(#[serde(deserialize_with = "deserialize_bool_from_anything")] bo
|
|||
impl Collection {
|
||||
pub fn get_config_bool(&self, key: BoolKey) -> bool {
|
||||
match key {
|
||||
BoolKey::BrowserSortBackwards => {
|
||||
// older clients were storing this as an int
|
||||
self.get_config_default::<BoolLike, _>(BoolKey::BrowserSortBackwards)
|
||||
.0
|
||||
}
|
||||
|
||||
// some keys default to true
|
||||
BoolKey::InterruptAudioWhenAnswering
|
||||
| BoolKey::ShowIntervalsAboveAnswerButtons
|
||||
|
|
Loading…
Reference in a new issue