Refactor room_version support code
Fix advertising unsupported room versions
This commit is contained in:
@@ -4,7 +4,7 @@ use either::Either;
|
||||
use itertools::Itertools;
|
||||
|
||||
use super::{DEPRECATED_KEYS, IdentityProvider};
|
||||
use crate::{Config, Err, Result, Server, debug, debug_info, error, warn};
|
||||
use crate::{Config, Err, Result, debug, debug_info, error, warn};
|
||||
|
||||
/// Performs check() with additional checks specific to reloading old config
|
||||
/// with new config.
|
||||
@@ -294,9 +294,7 @@ pub fn check(config: &Config) -> Result {
|
||||
));
|
||||
}
|
||||
|
||||
if !Server::available_room_versions()
|
||||
.any(|(version, _)| version == config.default_room_version)
|
||||
{
|
||||
if !config.supported_room_version(&config.default_room_version) {
|
||||
return Err!(Config(
|
||||
"default_room_version",
|
||||
"Room version {:?} is not available",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
pub mod check;
|
||||
pub mod manager;
|
||||
pub mod proxy;
|
||||
pub mod room_version;
|
||||
|
||||
use std::{
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
|
||||
56
src/core/config/room_version.rs
Normal file
56
src/core/config/room_version.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
use ruma::{RoomVersionId, api::client::discovery::get_capabilities::v3::RoomVersionStability};
|
||||
|
||||
use crate::Config;
|
||||
|
||||
/// Partially supported non-compliant room versions
|
||||
pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] =
|
||||
&[RoomVersionId::V2, RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
|
||||
|
||||
/// Supported and stable room versions
|
||||
pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[
|
||||
RoomVersionId::V6,
|
||||
RoomVersionId::V7,
|
||||
RoomVersionId::V8,
|
||||
RoomVersionId::V9,
|
||||
RoomVersionId::V10,
|
||||
RoomVersionId::V11,
|
||||
RoomVersionId::V12,
|
||||
];
|
||||
|
||||
/// Experimental and prototype room versions under development.
|
||||
pub const EXPERIMENTAL_ROOM_VERSIONS: &[RoomVersionId] = &[];
|
||||
|
||||
impl Config {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
pub fn supported_room_version(&self, version: &RoomVersionId) -> bool {
|
||||
self.supported_room_versions()
|
||||
.any(|(supported_version, _)| &supported_version == version)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn supported_room_versions(
|
||||
&self,
|
||||
) -> impl Iterator<Item = (RoomVersionId, RoomVersionStability)> + '_ {
|
||||
let stable_room_versions = STABLE_ROOM_VERSIONS
|
||||
.iter()
|
||||
.cloned()
|
||||
.map(|version| (version, RoomVersionStability::Stable));
|
||||
|
||||
let unstable_room_versions = UNSTABLE_ROOM_VERSIONS
|
||||
.iter()
|
||||
.filter(|_| self.allow_unstable_room_versions)
|
||||
.cloned()
|
||||
.map(|version| (version, RoomVersionStability::Unstable));
|
||||
|
||||
let experimental_room_versions = EXPERIMENTAL_ROOM_VERSIONS
|
||||
.iter()
|
||||
.filter(|_| self.allow_experimental_room_versions)
|
||||
.cloned()
|
||||
.map(|version| (version, RoomVersionStability::Unstable));
|
||||
|
||||
stable_room_versions
|
||||
.chain(unstable_room_versions)
|
||||
.chain(experimental_room_versions)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user