53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
from .filters import FieldSubstringFilter, ModelFilter
|
|
from .model import Model
|
|
from .model_item import ModelItem
|
|
|
|
|
|
class AllRooms(FieldSubstringFilter):
|
|
def __init__(self) -> None:
|
|
super().__init__(sync_id="all_rooms", fields=("display_name",))
|
|
|
|
|
|
def accept_source(self, source: Model) -> bool:
|
|
return (
|
|
isinstance(source.sync_id, tuple) and
|
|
len(source.sync_id) == 2 and
|
|
source.sync_id[1] == "rooms" # type: ignore
|
|
)
|
|
|
|
|
|
class MatchingAccounts(ModelFilter):
|
|
def __init__(self, all_rooms: AllRooms) -> None:
|
|
super().__init__(sync_id="matching_accounts")
|
|
self.all_rooms = all_rooms
|
|
self.all_rooms.items_changed_callbacks.append(self.refilter)
|
|
|
|
|
|
def accept_source(self, source: Model) -> bool:
|
|
return source.sync_id == "accounts"
|
|
|
|
|
|
def accept_item(self, item: ModelItem) -> bool:
|
|
if not self.all_rooms.filter:
|
|
return True
|
|
|
|
return next(
|
|
(r for r in self.all_rooms.values() if r.for_account == item.id),
|
|
False,
|
|
)
|
|
|
|
|
|
class FilteredMembers(FieldSubstringFilter):
|
|
def __init__(self, user_id: str, room_id: str) -> None:
|
|
self.user_id = user_id
|
|
self.room_id = room_id
|
|
sync_id = (user_id, room_id, "filtered_members")
|
|
|
|
super().__init__(sync_id=sync_id, fields=("display_name",))
|
|
|
|
|
|
def accept_source(self, source: Model) -> bool:
|
|
return source.sync_id == (self.user_id, self.room_id, "members")
|