mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
feat: Implement MSC4472
This commit is contained in:
Generated
+11
-11
@@ -4174,7 +4174,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma"
|
name = "ruma"
|
||||||
version = "0.15.1"
|
version = "0.15.1"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assign",
|
"assign",
|
||||||
"js_int",
|
"js_int",
|
||||||
@@ -4193,7 +4193,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-appservice-api"
|
name = "ruma-appservice-api"
|
||||||
version = "0.15.0"
|
version = "0.15.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
@@ -4205,7 +4205,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-client-api"
|
name = "ruma-client-api"
|
||||||
version = "0.23.1"
|
version = "0.23.1"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"assign",
|
"assign",
|
||||||
@@ -4227,7 +4227,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-common"
|
name = "ruma-common"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
@@ -4260,7 +4260,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-events"
|
name = "ruma-events"
|
||||||
version = "0.33.0"
|
version = "0.33.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
@@ -4281,7 +4281,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-federation-api"
|
name = "ruma-federation-api"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"headers",
|
"headers",
|
||||||
@@ -4304,7 +4304,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-identifiers-validation"
|
name = "ruma-identifiers-validation"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
@@ -4313,7 +4313,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-macros"
|
name = "ruma-macros"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@@ -4329,7 +4329,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-push-gateway-api"
|
name = "ruma-push-gateway-api"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
@@ -4341,7 +4341,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-signatures"
|
name = "ruma-signatures"
|
||||||
version = "0.20.0"
|
version = "0.20.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"ed25519-dalek",
|
"ed25519-dalek",
|
||||||
@@ -4357,7 +4357,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-state-res"
|
name = "ruma-state-res"
|
||||||
version = "0.16.0"
|
version = "0.16.0"
|
||||||
source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
|||||||
+4
-2
@@ -343,8 +343,9 @@ version = "1.1.1"
|
|||||||
# Used for matrix spec type definitions and helpers
|
# Used for matrix spec type definitions and helpers
|
||||||
[workspace.dependencies.ruma]
|
[workspace.dependencies.ruma]
|
||||||
# version = "0.14.1"
|
# version = "0.14.1"
|
||||||
git = "https://github.com/ruma/ruma.git"
|
#git = "https://github.com/ruma/ruma.git"
|
||||||
rev = "9c9dccc93f054bbd28f23f630223fffa6289ecbc"
|
git = "https://github.com/timedoutuk/ruma.git"
|
||||||
|
rev = "9679644f410bf19fe71ec2ad55bce7faeee3de0f"
|
||||||
features = [
|
features = [
|
||||||
"appservice-api-c",
|
"appservice-api-c",
|
||||||
"client-api",
|
"client-api",
|
||||||
@@ -379,6 +380,7 @@ features = [
|
|||||||
"unstable-msc4293",
|
"unstable-msc4293",
|
||||||
"unstable-msc4406",
|
"unstable-msc4406",
|
||||||
"unstable-msc4439",
|
"unstable-msc4439",
|
||||||
|
"unstable-msc4472",
|
||||||
"unstable-extensible-events",
|
"unstable-extensible-events",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use axum::extract::State;
|
use axum::extract::State;
|
||||||
use conduwuit::{Result, Server};
|
use conduwuit::{
|
||||||
|
Result, Server,
|
||||||
|
info::room_version::{STABLE_ROOM_VERSIONS, UNSTABLE_ROOM_VERSIONS},
|
||||||
|
};
|
||||||
|
use itertools::Itertools;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
RoomVersionId,
|
RoomVersionId,
|
||||||
api::client::discovery::get_capabilities::{
|
api::client::discovery::get_capabilities::{
|
||||||
@@ -25,7 +29,13 @@ pub(crate) async fn get_capabilities_route(
|
|||||||
body: Ruma<get_capabilities::v3::Request>,
|
body: Ruma<get_capabilities::v3::Request>,
|
||||||
) -> Result<get_capabilities::v3::Response> {
|
) -> Result<get_capabilities::v3::Response> {
|
||||||
let available: BTreeMap<RoomVersionId, RoomVersionStability> =
|
let available: BTreeMap<RoomVersionId, RoomVersionStability> =
|
||||||
Server::available_room_versions().collect();
|
Server::available_room_versions()
|
||||||
|
.filter(|(version, _)| {
|
||||||
|
(services.config.allow_unstable_room_versions
|
||||||
|
&& UNSTABLE_ROOM_VERSIONS.contains(version))
|
||||||
|
|| STABLE_ROOM_VERSIONS.contains(version)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
let mut capabilities = Capabilities::default();
|
let mut capabilities = Capabilities::default();
|
||||||
capabilities.room_versions = RoomVersionsCapability::new(
|
capabilities.room_versions = RoomVersionsCapability::new(
|
||||||
|
|||||||
@@ -21,6 +21,16 @@ pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[
|
|||||||
pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] =
|
pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] =
|
||||||
&[RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
|
&[RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
|
||||||
|
|
||||||
|
pub const DEPRECATED_ROOM_VERSIONS: &[RoomVersionId] = &[
|
||||||
|
RoomVersionId::V3,
|
||||||
|
RoomVersionId::V4,
|
||||||
|
RoomVersionId::V5,
|
||||||
|
RoomVersionId::V6,
|
||||||
|
RoomVersionId::V7,
|
||||||
|
RoomVersionId::V8,
|
||||||
|
RoomVersionId::V9,
|
||||||
|
];
|
||||||
|
|
||||||
type RoomVersion = (RoomVersionId, RoomVersionStability);
|
type RoomVersion = (RoomVersionId, RoomVersionStability);
|
||||||
|
|
||||||
impl crate::Server {
|
impl crate::Server {
|
||||||
@@ -29,6 +39,13 @@ impl crate::Server {
|
|||||||
self.supported_room_versions().any(is_equal_to!(*version))
|
self.supported_room_versions().any(is_equal_to!(*version))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn version_is_deprecated(&self, version: &RoomVersionId) -> bool {
|
||||||
|
DEPRECATED_ROOM_VERSIONS
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.any(is_equal_to!(*version))
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn supported_room_versions(&self) -> impl Iterator<Item = RoomVersionId> + '_ {
|
pub fn supported_room_versions(&self) -> impl Iterator<Item = RoomVersionId> + '_ {
|
||||||
Self::available_room_versions()
|
Self::available_room_versions()
|
||||||
@@ -52,10 +69,15 @@ pub fn available_room_versions() -> impl Iterator<Item = RoomVersion> {
|
|||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.zip(once(RoomVersionStability::Unstable).cycle());
|
.zip(once(RoomVersionStability::Unstable).cycle());
|
||||||
|
let deprecated_room_versions = DEPRECATED_ROOM_VERSIONS
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.zip(once(RoomVersionStability::Deprecated).cycle());
|
||||||
|
|
||||||
STABLE_ROOM_VERSIONS
|
STABLE_ROOM_VERSIONS
|
||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.zip(once(RoomVersionStability::Stable).cycle())
|
.zip(once(RoomVersionStability::Stable).cycle())
|
||||||
.chain(unstable_room_versions)
|
.chain(unstable_room_versions)
|
||||||
|
.chain(deprecated_room_versions)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::{borrow::Borrow, collections::BTreeSet};
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use futures::{
|
use futures::{
|
||||||
Future,
|
Future,
|
||||||
@@ -824,7 +824,7 @@ where
|
|||||||
|
|
||||||
let prev_event_is_create_event = prev_events
|
let prev_event_is_create_event = prev_events
|
||||||
.next()
|
.next()
|
||||||
.is_some_and(|event_id| event_id.borrow() == create_room.event_id().borrow());
|
.is_some_and(|event_id| event_id == create_room.event_id());
|
||||||
let no_more_prev_events = prev_events.next().is_none();
|
let no_more_prev_events = prev_events.next().is_none();
|
||||||
|
|
||||||
if prev_event_is_create_event && no_more_prev_events {
|
if prev_event_is_create_event && no_more_prev_events {
|
||||||
|
|||||||
Reference in New Issue
Block a user