Turn bookmarks/aliases/at_index into Sections

This commit is contained in:
miruka 2020-11-14 11:30:03 -04:00
parent fbd3f6f4a2
commit 3564e7a571
7 changed files with 64 additions and 61 deletions

View File

@ -1,7 +1,11 @@
# TODO
- login page password spinner
- Encrypted rooms don't show invites in member list after Mirage restart
- Fix MatrixForbidden when switching rooms with Alt+numbers
- Verify PCN include_builtin works under QRC
- PCN docstrings
- PCN error handling
- PCN documentation
- Room display name not updated when someone removes theirs
- Fix right margin of own `<image url>\n<image url>` messages

View File

@ -1147,7 +1147,7 @@ class MatrixClient(nio.AsyncClient):
room.bookmarked = not room.bookmarked
settings = self.backend.settings
bookmarks = settings.RoomList.bookmarks
bookmarks = settings.RoomList.Bookmarks
user_bookmarks = bookmarks.setdefault(self.user_id, [])
if room.bookmarked and room_id not in user_bookmarks:
@ -1157,10 +1157,7 @@ class MatrixClient(nio.AsyncClient):
user_bookmarks.remove(room_id)
# Changes inside dicts/lists aren't monitored, need to reassign
settings.RoomList.bookmarks = {
**bookmarks, self.user_id: user_bookmarks,
}
settings.RoomList.Bookmarks[self.user_id] = user_bookmarks
self.backend.settings.save()
async def room_forget(self, room_id: str) -> None:
@ -1874,7 +1871,7 @@ class MatrixClient(nio.AsyncClient):
)
unverified_devices = registered.unverified_devices
bookmarks = self.backend.settings.RoomList.bookmarks
bookmarks = self.backend.settings.RoomList.Bookmarks
room_item = Room(
id = room.room_id,
for_account = self.user_id,
@ -1921,7 +1918,7 @@ class MatrixClient(nio.AsyncClient):
local_highlights = local_highlights,
lexical_sorting = self.backend.settings.RoomList.lexical_sort,
bookmarked = room.room_id in bookmarks.get(self.user_id, {}),
bookmarked = room.room_id in bookmarks.get(self.user_id, []),
)
self.models[self.user_id, "rooms"][room.room_id] = room_item

View File

@ -267,8 +267,7 @@ class PCNFile(MappingFile):
def deserialized(self, data: str) -> Tuple[Section, bool]:
root = Section.from_source_code(data, self.path)
edits = self.write_path.read_text() if self.write_path.exists() else ""
root.deep_merge_edits(json.loads(edits))
return (root, False)
return (root, root.deep_merge_edits(json.loads(edits)))
def serialized(self) -> str:
edits = self.data.edits_as_dict()

View File

@ -74,11 +74,6 @@ class RoomList:
# The application must be restarted to apply changes to this setting.
lexical_sort: bool = False
# Mapping of account user ID to list of room ID to always keep on top.
# You can copy a room's ID by right clicking on it in the room list.
# Example: {"@alice:example.org": ["!aBc@example.org", "!123:example.org"]}
bookmarks: Dict[str, List[str]] = {}
# When clicking on a room, recenter the room list on that room.
click_centers: bool = False
@ -90,6 +85,13 @@ class RoomList:
# in addition to focusing the current page or chat composer.
escape_clears_filter: bool = True
class Bookmarks:
# Each property in this section is an account user ID, and the
# value is a list of room ID to always keep on top.
# A room's ID can be copied by right clicking on it in the room list.
"@account:example.org": List[str] = ["!roomID:a.org", "!other:b.org"]
class Chat:
# Center the chat header (room avatar, name and topic) even when sidepanes
# aren't hidden (see comment for the hide_sidepanes_under setting).
@ -120,13 +122,15 @@ class Chat:
mark_read_delay: float = 0.2
class Composer:
# Mapping of account user ID to alias.
# From any chat, start a message with an alias followed by a space
# to type and send as this associated account.
# The account must have permission to talk in the room.
# To ignore an alias when typing, prepend it with a space.
# Example: {"@alice:example.org": "al", "@bob:example.org": "b"}
aliases: Dict[str, str] = {}
class Aliases:
# Each property is the user ID of an account, value is the alias.
# From any chat, start a message with an alias followed by a space
# to type and send as the associated account.
# The account must have permission to talk in the room.
# To ignore an alias when typing, prepend it with a space.
"!account:example.org": str = "u"
"!other_account:example.org": str = "oa"
class Files:
# Minimum width of the file name/size box for files without previews.
@ -154,7 +158,6 @@ class Chat:
# reveals the hidden controls.
autohide_image_controls_after: float = 2.0
class Keys:
# All keybind settings, unless their comment says otherwise, are list of
# the possible shortcuts for an action, e.g. ["Ctrl+A", "Alt+Shift+A"].
@ -242,21 +245,21 @@ class Keys:
previous = ["Alt+Shift+N"]
next = ["Alt+N"]
# Switch to the first room of the account number X in the list.
# This is a mapping of account number to keybind, e.g.
# {1: "Ctrl+1"} would bind Ctrl+1 to the switch to the first account.
at_index: Dict[int, str] = {
"1": f"{parent.os_ctrl()}+1",
"2": f"{parent.os_ctrl()}+2",
"3": f"{parent.os_ctrl()}+3",
"4": f"{parent.os_ctrl()}+4",
"5": f"{parent.os_ctrl()}+5",
"6": f"{parent.os_ctrl()}+6",
"7": f"{parent.os_ctrl()}+7",
"8": f"{parent.os_ctrl()}+8",
"9": f"{parent.os_ctrl()}+9",
"10": f"{parent.os_ctrl()}+0",
}
class AtIndex:
# Switch to the first room of the account number X in the list.
# Each property is a list of keybinds for the account number X.
# Numbers beyond the default ones can be added.
1 = [Keys.os_ctrl() + "+1"]
2 = [Keys.os_ctrl() + "+2"]
3 = [Keys.os_ctrl() + "+3"]
4 = [Keys.os_ctrl() + "+4"]
5 = [Keys.os_ctrl() + "+5"]
6 = [Keys.os_ctrl() + "+6"]
7 = [Keys.os_ctrl() + "+7"]
8 = [Keys.os_ctrl() + "+8"]
9 = [Keys.os_ctrl() + "+9"]
10 = [Keys.os_ctrl() + "+0"]
class Rooms:
# Add a new room (direct chat, join or create a group).
@ -282,21 +285,21 @@ class Keys:
previous_urgent = ["Alt+Shift+M"]
next_urgent = ["Alt+M"]
# Switch to room number X in the current account.
# This is a mapping of room number to keybind, e.g.
# {1: "Alt+1"} would bind Alt+1 to switch to the first room.
at_index: Dict[int, str] = {
"1": f"{parent.alt_or_cmd()}+1",
"2": f"{parent.alt_or_cmd()}+2",
"3": f"{parent.alt_or_cmd()}+3",
"4": f"{parent.alt_or_cmd()}+4",
"5": f"{parent.alt_or_cmd()}+5",
"6": f"{parent.alt_or_cmd()}+6",
"7": f"{parent.alt_or_cmd()}+7",
"8": f"{parent.alt_or_cmd()}+8",
"9": f"{parent.alt_or_cmd()}+9",
"10": f"{parent.alt_or_cmd()}+0",
}
class AtIndex:
# Switch to room number X in the current account.
# Each property is a list of keybinds for the room number X:
# Numbers beyond the default ones can be added.
1 = [Keys.alt_or_cmd() + "+1"]
2 = [Keys.alt_or_cmd() + "+2"]
3 = [Keys.alt_or_cmd() + "+3"]
4 = [Keys.alt_or_cmd() + "+4"]
5 = [Keys.alt_or_cmd() + "+5"]
6 = [Keys.alt_or_cmd() + "+6"]
7 = [Keys.alt_or_cmd() + "+7"]
8 = [Keys.alt_or_cmd() + "+8"]
9 = [Keys.alt_or_cmd() + "+9"]
10 = [Keys.alt_or_cmd() + "+0"]
class Chat:
# Keybinds specific to the current chat page.

View File

@ -275,22 +275,22 @@ HListView {
}
Repeater {
model: Object.keys(window.settings.Keys.Accounts.at_index)
model: Object.keys(window.settings.Keys.Accounts.AtIndex)
Item {
HShortcut {
sequence: window.settings.Keys.Accounts.at_index[modelData]
sequences: window.settings.Keys.Accounts.AtIndex[modelData]
onActivated: goToAccountNumber(parseInt(modelData, 10) - 1)
}
}
}
Repeater {
model: Object.keys(window.settings.Keys.Rooms.at_index)
model: Object.keys(window.settings.Keys.Rooms.AtIndex)
Item {
HShortcut {
sequence: window.settings.Keys.Rooms.at_index[modelData]
sequences: window.settings.Keys.Rooms.AtIndex[modelData]
onActivated: showAccountRoomAtIndex(parseInt(modelData,10) - 1)
}
}

View File

@ -34,7 +34,7 @@ HFlickableColumnPage {
}
if (aliasFieldItem.changed) {
window.settings.Chat.Composer.aliases[userId] =
window.settings.Chat.Composer.Aliases[userId] =
aliasFieldItem.text
window.saveSettings()
@ -251,7 +251,7 @@ HFlickableColumnPage {
HLabeledItem {
id: aliasField
readonly property var aliases: window.settings.Chat.Composer.aliases
readonly property var aliases: window.settings.Chat.Composer.Aliases
readonly property string currentAlias: aliases[userId] || ""
readonly property bool hasWhiteSpace: /\s/.test(item.text)

View File

@ -21,7 +21,7 @@ HTextArea {
readonly property var usableAliases: {
const obj = {}
const aliases = window.settings.Chat.Composer.aliases
const aliases = window.settings.Chat.Composer.Aliases
// Get accounts that are members of this room with permission to talk
for (const [id, alias] of Object.entries(aliases)) {