messing around with arcs

This commit is contained in:
Timo Kösters 2022-10-05 15:33:57 +02:00 committed by Nyaaori
parent face766e0f
commit cff52d7ebb
No known key found for this signature in database
GPG key ID: E7819C3ED4D1F82E
77 changed files with 598 additions and 434 deletions

View file

@ -184,11 +184,11 @@ pub async fn register_route(
None,
&user_id,
GlobalAccountDataEventType::PushRules.to_string().into(),
&ruma::events::push_rules::PushRulesEvent {
&serde_json::to_value(ruma::events::push_rules::PushRulesEvent {
content: ruma::events::push_rules::PushRulesEventContent {
global: push::Ruleset::server_default(&user_id),
},
},
}).expect("to json always works"),
)?;
// Inhibit login does not work for guests

View file

@ -40,12 +40,12 @@ pub async fn create_content_route(
services().media
.create(
mxc.clone(),
&body
body
.filename
.as_ref()
.map(|filename| "inline; filename=".to_owned() + filename)
.as_deref(),
&body.content_type.as_deref(),
body.content_type.as_deref(),
&body.file,
)
.await?;
@ -76,8 +76,8 @@ pub async fn get_remote_content(
services().media
.create(
mxc.to_string(),
&content_response.content_disposition.as_deref(),
&content_response.content_type.as_deref(),
content_response.content_disposition.as_deref(),
content_response.content_type.as_deref(),
&content_response.file,
)
.await?;
@ -195,8 +195,8 @@ pub async fn get_content_thumbnail_route(
services().media
.upload_thumbnail(
mxc,
&None,
&get_thumbnail_response.content_type.as_deref(),
None,
get_thumbnail_response.content_type.as_deref(),
body.width.try_into().expect("all UInts are valid u32s"),
body.height.try_into().expect("all UInts are valid u32s"),
&get_thumbnail_response.file,

View file

@ -860,9 +860,8 @@ pub(crate) async fn invite_helper<'a>(
"Could not accept incoming PDU as timeline event.",
))?;
let servers = services()
.rooms
.state_cache
// Bind to variable because of lifetimes
let servers = services().rooms.state_cache
.room_servers(room_id)
.filter_map(|r| r.ok())
.filter(|server| &**server != services().globals.server_name());

View file

@ -20,7 +20,7 @@ pub async fn get_pushrules_all_route(
) -> Result<get_pushrules_all::v3::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -32,8 +32,12 @@ pub async fn get_pushrules_all_route(
"PushRules event not found.",
))?;
let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?
.content;
Ok(get_pushrules_all::v3::Response {
global: event.content.global,
global: account_data.global,
})
}
@ -45,7 +49,7 @@ pub async fn get_pushrule_route(
) -> Result<get_pushrule::v3::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -57,7 +61,11 @@ pub async fn get_pushrule_route(
"PushRules event not found.",
))?;
let global = event.content.global;
let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?
.content;
let global = account_data.global;
let rule = match body.kind {
RuleKind::Override => global
.override_
@ -108,7 +116,7 @@ pub async fn set_pushrule_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -120,7 +128,10 @@ pub async fn set_pushrule_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let mut account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?;
let global = &mut account_data.content.global;
match body.kind {
RuleKind::Override => {
global.override_.replace(
@ -187,7 +198,7 @@ pub async fn set_pushrule_route(
None,
sender_user,
GlobalAccountDataEventType::PushRules.to_string().into(),
&event,
&serde_json::to_value(account_data).expect("to json value always works"),
)?;
Ok(set_pushrule::v3::Response {})
@ -208,7 +219,7 @@ pub async fn get_pushrule_actions_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -220,7 +231,11 @@ pub async fn get_pushrule_actions_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?
.content;
let global = account_data.global;
let actions = match body.kind {
RuleKind::Override => global
.override_
@ -265,7 +280,7 @@ pub async fn set_pushrule_actions_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -277,7 +292,10 @@ pub async fn set_pushrule_actions_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let mut account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?;
let global = &mut account_data.content.global;
match body.kind {
RuleKind::Override => {
if let Some(mut rule) = global.override_.get(body.rule_id.as_str()).cloned() {
@ -316,7 +334,7 @@ pub async fn set_pushrule_actions_route(
None,
sender_user,
GlobalAccountDataEventType::PushRules.to_string().into(),
&event,
&serde_json::to_value(account_data).expect("to json value always works"),
)?;
Ok(set_pushrule_actions::v3::Response {})
@ -337,7 +355,7 @@ pub async fn get_pushrule_enabled_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -349,7 +367,10 @@ pub async fn get_pushrule_enabled_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?;
let global = account_data.content.global;
let enabled = match body.kind {
RuleKind::Override => global
.override_
@ -397,7 +418,7 @@ pub async fn set_pushrule_enabled_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -409,7 +430,10 @@ pub async fn set_pushrule_enabled_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let mut account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?;
let global = &mut account_data.content.global;
match body.kind {
RuleKind::Override => {
if let Some(mut rule) = global.override_.get(body.rule_id.as_str()).cloned() {
@ -453,7 +477,7 @@ pub async fn set_pushrule_enabled_route(
None,
sender_user,
GlobalAccountDataEventType::PushRules.to_string().into(),
&event,
&serde_json::to_value(account_data).expect("to json value always works"),
)?;
Ok(set_pushrule_enabled::v3::Response {})
@ -474,7 +498,7 @@ pub async fn delete_pushrule_route(
));
}
let mut event: PushRulesEvent = services()
let event = services()
.account_data
.get(
None,
@ -486,7 +510,10 @@ pub async fn delete_pushrule_route(
"PushRules event not found.",
))?;
let global = &mut event.content.global;
let mut account_data = serde_json::from_str::<PushRulesEvent>(event.get())
.map_err(|_| Error::bad_database("Invalid account data event in db."))?;
let global = &mut account_data.content.global;
match body.kind {
RuleKind::Override => {
if let Some(rule) = global.override_.get(body.rule_id.as_str()).cloned() {
@ -520,7 +547,7 @@ pub async fn delete_pushrule_route(
None,
sender_user,
GlobalAccountDataEventType::PushRules.to_string().into(),
&event,
&serde_json::to_value(account_data).expect("to json value always works"),
)?;
Ok(delete_pushrule::v3::Response {})

View file

@ -27,7 +27,7 @@ pub async fn set_read_marker_route(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::FullyRead,
&fully_read_event,
&serde_json::to_value(fully_read_event).expect("to json value always works"),
)?;
if let Some(event) = &body.read_receipt {

View file

@ -175,7 +175,7 @@ async fn sync_helper(
services().rooms.edus.presence.ping_presence(&sender_user)?;
// Setup watchers, so if there's no response, we can wait for them
let watcher = services().globals.db.watch(&sender_user, &sender_device);
let watcher = services().globals.watch(&sender_user, &sender_device);
let next_batch = services().globals.current_count()?;
let next_batch_string = next_batch.to_string();

View file

@ -1,4 +1,4 @@
use crate::{Result, Ruma, services};
use crate::{Result, Ruma, services, Error};
use ruma::{
api::client::tag::{create_tag, delete_tag, get_tags},
events::{
@ -18,18 +18,22 @@ pub async fn update_tag_route(
) -> Result<create_tag::v3::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let mut tags_event = services()
let event = services()
.account_data
.get(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
)?
.unwrap_or_else(|| TagEvent {
)?;
let mut tags_event = event.map(|e| serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db.")))
.unwrap_or_else(|| Ok(TagEvent {
content: TagEventContent {
tags: BTreeMap::new(),
},
});
}))?;
tags_event
.content
.tags
@ -39,7 +43,7 @@ pub async fn update_tag_route(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
&tags_event,
&serde_json::to_value(tags_event).expect("to json value always works"),
)?;
Ok(create_tag::v3::Response {})
@ -55,25 +59,29 @@ pub async fn delete_tag_route(
) -> Result<delete_tag::v3::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let mut tags_event = services()
let mut event = services()
.account_data
.get(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
)?
.unwrap_or_else(|| TagEvent {
)?;
let mut tags_event = event.map(|e| serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db.")))
.unwrap_or_else(|| Ok(TagEvent {
content: TagEventContent {
tags: BTreeMap::new(),
},
});
}))?;
tags_event.content.tags.remove(&body.tag.clone().into());
services().account_data.update(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
&tags_event,
&serde_json::to_value(tags_event).expect("to json value always works"),
)?;
Ok(delete_tag::v3::Response {})
@ -89,20 +97,23 @@ pub async fn get_tags_route(
) -> Result<get_tags::v3::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let mut event = services()
.account_data
.get(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
)?;
let mut tags_event = event.map(|e| serde_json::from_str(e.get())
.map_err(|_| Error::bad_database("Invalid account data event in db.")))
.unwrap_or_else(|| Ok(TagEvent {
content: TagEventContent {
tags: BTreeMap::new(),
},
}))?;
Ok(get_tags::v3::Response {
tags: services()
.account_data
.get(
Some(&body.room_id),
sender_user,
RoomAccountDataEventType::Tag,
)?
.unwrap_or_else(|| TagEvent {
content: TagEventContent {
tags: BTreeMap::new(),
},
})
.content
.tags,
tags: tags_event.content.tags,
})
}