messing around with arcs
This commit is contained in:
parent
face766e0f
commit
cff52d7ebb
77 changed files with 598 additions and 434 deletions
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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 {})
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue