mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-20 09:11:24 +01:00
add type-safe accessors to account_data service
This commit is contained in:
parent
b82458a460
commit
88ad596e8d
12 changed files with 202 additions and 179 deletions
|
|
@ -5,10 +5,10 @@ use std::{
|
|||
|
||||
use ruma::{
|
||||
events::{
|
||||
direct::DirectEventContent,
|
||||
ignored_user_list::IgnoredUserListEventContent,
|
||||
room::member::MembershipState, AnyGlobalAccountDataEventContent,
|
||||
AnyStrippedStateEvent, AnySyncStateEvent, GlobalAccountDataEventType,
|
||||
RoomAccountDataEventType,
|
||||
room::member::MembershipState, tag::TagEventContent,
|
||||
AnyStrippedStateEvent, AnySyncStateEvent,
|
||||
},
|
||||
serde::Raw,
|
||||
OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
|
||||
|
|
@ -96,14 +96,9 @@ impl Service {
|
|||
// We want to know if the sender is ignored by the receiver
|
||||
let is_ignored = services()
|
||||
.account_data
|
||||
// Ignored users are in global account data
|
||||
.get_global(
|
||||
// Receiver
|
||||
user_id,
|
||||
&GlobalAccountDataEventType::IgnoredUserList,
|
||||
)?
|
||||
.get_global::<IgnoredUserListEventContent>(user_id)?
|
||||
.map(|event| {
|
||||
event.deserialize_as::<IgnoredUserListEventContent>()
|
||||
event.deserialize()
|
||||
.map_err(|error| {
|
||||
warn!(
|
||||
%error,
|
||||
|
|
@ -192,20 +187,15 @@ impl Service {
|
|||
from_room_id: &RoomId,
|
||||
to_room_id: &RoomId,
|
||||
) -> Result<()> {
|
||||
let Some(event) = services().account_data.get_room(
|
||||
from_room_id,
|
||||
user_id,
|
||||
&RoomAccountDataEventType::Tag,
|
||||
)?
|
||||
let Some(event) = services()
|
||||
.account_data
|
||||
.get_room::<TagEventContent>(from_room_id, user_id)?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
if let Err(error) = services().account_data.update_room(
|
||||
to_room_id,
|
||||
user_id,
|
||||
&RoomAccountDataEventType::Tag,
|
||||
&event,
|
||||
) {
|
||||
if let Err(error) =
|
||||
services().account_data.update_room(to_room_id, user_id, &event)
|
||||
{
|
||||
warn!(%error, "error writing m.tag account data to upgraded room");
|
||||
}
|
||||
|
||||
|
|
@ -223,7 +213,7 @@ impl Service {
|
|||
) -> Result<()> {
|
||||
let Some(event_content) = services()
|
||||
.account_data
|
||||
.get_global(user_id, &GlobalAccountDataEventType::Direct)?
|
||||
.get_global::<DirectEventContent>(user_id)?
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
|
|
@ -270,10 +260,9 @@ impl Service {
|
|||
if event_updated {
|
||||
if let Err(error) = services().account_data.update_global(
|
||||
user_id,
|
||||
&GlobalAccountDataEventType::Direct,
|
||||
&Raw::new(&event_content)
|
||||
.expect("json serialization should always succeed")
|
||||
.cast::<AnyGlobalAccountDataEventContent>(),
|
||||
.cast::<DirectEventContent>(),
|
||||
) {
|
||||
warn!(%error, "error writing m.direct account data event after upgrading room");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ use ruma::{
|
|||
power_levels::RoomPowerLevelsEventContent,
|
||||
redaction::RoomRedactionEventContent,
|
||||
},
|
||||
GlobalAccountDataEventType, StateEventType, TimelineEventType,
|
||||
StateEventType, TimelineEventType,
|
||||
},
|
||||
push::{Action, Ruleset, Tweak},
|
||||
state_res::{self, Event},
|
||||
|
|
@ -417,15 +417,11 @@ impl Service {
|
|||
|
||||
let rules_for_user = services()
|
||||
.account_data
|
||||
.get_global(user, &GlobalAccountDataEventType::PushRules)?
|
||||
.get_global::<PushRulesEventContent>(user)?
|
||||
.map(|event| {
|
||||
event.deserialize_as::<PushRulesEventContent>().map_err(
|
||||
|_| {
|
||||
Error::bad_database(
|
||||
"Invalid push rules event in db.",
|
||||
)
|
||||
},
|
||||
)
|
||||
event.deserialize().map_err(|_| {
|
||||
Error::bad_database("Invalid push rules event in db.")
|
||||
})
|
||||
})
|
||||
.transpose()?
|
||||
.map_or_else(|| Ruleset::server_default(user), |ev| ev.global);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue