matrix-rust-sdk/crates/matrix-sdk/src/lib.rs

113 lines
3.8 KiB
Rust
Raw Normal View History

// Copyright 2020 Damir Jelić
// Copyright 2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#![doc = include_str!("../README.md")]
#![warn(missing_debug_implementations, missing_docs)]
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
2019-10-20 11:56:46 +00:00
pub use async_trait::async_trait;
pub use bytes;
pub use matrix_sdk_base::{
deserialized_responses, DisplayName, Room as BaseRoom, RoomInfo, RoomMember as BaseRoomMember,
2023-03-13 11:17:15 +00:00
RoomState, Session, StateChanges, StoreError,
};
pub use matrix_sdk_common::*;
2020-08-26 12:47:43 +00:00
pub use reqwest;
#[doc(no_inline)]
pub use ruma;
2019-10-20 11:56:46 +00:00
mod account;
pub mod attachment;
mod client;
pub mod config;
mod error;
2021-06-22 09:36:33 +00:00
pub mod event_handler;
mod http_client;
pub mod media;
2021-03-05 13:55:06 +00:00
pub mod room;
pub mod sync;
#[cfg(feature = "experimental-sliding-sync")]
pub mod sliding_sync;
feat: implement " MSC 3575: sliding sync " behind a feature flag (#728) * starting with jack-in * starting by flying tui * connecting to real server, showing info * add .env to gitignore * infrastructure for tests * display loading time for syncv2 * minor design updates * initial sync * finalise first edition of sliding sync * directly link to sliding sync and show rooms list * nicer UI, toggle logs * passing through sliding sync homeserver * separate syncs and disable v2 autostart * selecting rooms * nicer view * configurable batches and more default needed events * selecting rooms * calculate and show status info per room * precalculated room stats * restructure code to allow for cancellation of streams * finish up merge updates * fix calculation error in room list len * cleaning up system flow * fixing sync up * new multi-view API * move sliding sync in separate module * fixing format * adding and clearning views * expose filters and timeline limits * renamed * adding room subscriptions to sliding sync * update summary * live fetching and subscriptions in jack-in * subscribe to selected room * starting to switch to tuireal - using example * status bar and first linkup * re-adding rooms * implementing port for customised update event * showing details and timeline * fix formatting * cleaner UI, updating details quickly * make it green * implement other Ops * proper handling of invalidation * saving sliding sync results to db, too * saving new prev_batch field if given * split events and timeline * cleaning up * live updates * upgrading to latest ruma and matrix-sdk * Update tui-logger to fix the broken build * fixing latest ruma sliding-sync-branch updates * feat: first set of ffi sliding sync * expose sliding sync via FFI * implement un-/subscribe * implement view state updates * updating to latest JSON format and ruma update * implementing room selecting for new data model * fixing room selection * fixing feature flag requirements for sliding-sync * fixing style, clippy and docs * style(sliding-sync): fixing rust format styles * fix(ffi): fixing sliding sync merge failure * fix(jack-in): update jack-in to latest ruma * fix(sliding-sync): need to have a version set before polling proxy * expose sliding sync builder over ffi * add SlidingSyncViewBuilder * add forgotten changes on sdk itself * new file logger feature on jack for deeper logging * fix(http-client): log the raw request we are sending out * feat(sliding-sync): better logging * fix(sliding-sync): switch to full-listen after reaching live state in full-sync and make sure we replace the correct entries * feat(ffi): expose sliding sync view ranges * fix(ffi): fixing sliding sync start_sync loop to actually loop * feat(sliding-sync): allow lookup of room data * feat(sliding-sync-ffi): fetching name of room * feat(ffi): expose unread_notifications of rooms * feat(ffi): stoppable spawn for sliding sync * fix(ffi): expose has_unread_notifications on room * feat(sliding-sync): latest room message * fix(sliding-sync): update to latest ruma layout * doc(sliding-sync): adding docs to builder fns * feat(sliding-sync): extra signal on the view to inform about general updates * fix(sync-v4-ffi): expose new callbacks via ffi * fix(sliding-sync): reduce default required states to make things faster * fix(sliding-sync): fix build params * feat(jack-in): extended instrumentation * fix(sliding-sync): unbreak faulty feature-gate * fix(sliding-sync-ffi): mut where mut is due * fix(sdk): allow separate homeserver on every request to unbreak using send on client while in sliding sync on a proxy * fix(jack-in): update to latest dependencies, that work * feat(ffi): helper to patch sliding sync room into regular room * style(jack-in): cargo fmt * fix(sliding-sync): Update to latest ruma changes * fix(sliding-sync): fix missing FFI updates to latest ruma * feat(sliding-sync)!: simplify stream cancellation, cancel ffi sync if already existing * fix: timeline backwards pagination must work without synctoken * fix(sliding-sync): clarify order of messaes in alive TL; pick correct last item * fix: update view delegate api for clarity * style(jack-in): fix cargo warnings * feat(sliding-sync): update room details * fix(sliding-sync): only update room info selectively when given * fix(sliding-sync-ffi): convert and store counts as u32, check against 0 for has notificaitons * style: cargo fmt, file endings and a few other minor style fixes * docs(jack-in): improving CLI and Readme * feat(sliding-sync): allow setting of required event_states on viewbuilder * style(sliding-sync): docs and minor fixes * style(sliding-sync): various clippy fixes * style(jack-in): clippy suggestions applied * fix(sliding-sync): Delegate becomes observer * test(sdk): adding test for request config * docs: Fixing copyright header * style(ffi): Nicer naming of params for observer * fix(ffi): sliding sync is not optional for now * fix(sdk): remove superflusous tracing instrumentation * fix(sdk): use structured logging * fix(jack-in): removed unneded log import * fix(jack-in): use server_name rather than deprecated user_id on ClientBuilder * style: typo and clippy * style(sliding-sync): clippy and formatting * fix(sliding-sync): cleaning up minor syntax issues * fix: remove unneded feature-definition section * fix(sliding-sync): minor fixes as per review * fix(sliding-sync): Make Builders owned * fix(sliding-sync): more minor style improvements * fix(sliding-sync): minor style improvements * fix(sliding-sync): remove homeserver from RequestConfig, use specific internal fn instead Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-09-15 11:45:29 +00:00
2022-04-20 12:26:54 +00:00
#[cfg(feature = "e2e-encryption")]
pub mod encryption;
#[cfg(feature = "experimental-timeline")]
mod events;
2020-07-29 12:19:47 +00:00
pub use account::Account;
#[cfg(feature = "sso-login")]
pub use client::SsoLoginBuilder;
pub use client::{Client, ClientBuildError, ClientBuilder, LoginBuilder, LoopCtrl, UnknownToken};
#[cfg(feature = "image-proc")]
pub use error::ImageError;
pub use error::{Error, HttpError, HttpResult, RefreshTokenError, Result, RumaApiError};
pub use http_client::HttpSend;
pub use media::Media;
pub use ruma::{IdParseError, OwnedServerName, ServerName};
#[cfg(feature = "experimental-sliding-sync")]
feat: implement " MSC 3575: sliding sync " behind a feature flag (#728) * starting with jack-in * starting by flying tui * connecting to real server, showing info * add .env to gitignore * infrastructure for tests * display loading time for syncv2 * minor design updates * initial sync * finalise first edition of sliding sync * directly link to sliding sync and show rooms list * nicer UI, toggle logs * passing through sliding sync homeserver * separate syncs and disable v2 autostart * selecting rooms * nicer view * configurable batches and more default needed events * selecting rooms * calculate and show status info per room * precalculated room stats * restructure code to allow for cancellation of streams * finish up merge updates * fix calculation error in room list len * cleaning up system flow * fixing sync up * new multi-view API * move sliding sync in separate module * fixing format * adding and clearning views * expose filters and timeline limits * renamed * adding room subscriptions to sliding sync * update summary * live fetching and subscriptions in jack-in * subscribe to selected room * starting to switch to tuireal - using example * status bar and first linkup * re-adding rooms * implementing port for customised update event * showing details and timeline * fix formatting * cleaner UI, updating details quickly * make it green * implement other Ops * proper handling of invalidation * saving sliding sync results to db, too * saving new prev_batch field if given * split events and timeline * cleaning up * live updates * upgrading to latest ruma and matrix-sdk * Update tui-logger to fix the broken build * fixing latest ruma sliding-sync-branch updates * feat: first set of ffi sliding sync * expose sliding sync via FFI * implement un-/subscribe * implement view state updates * updating to latest JSON format and ruma update * implementing room selecting for new data model * fixing room selection * fixing feature flag requirements for sliding-sync * fixing style, clippy and docs * style(sliding-sync): fixing rust format styles * fix(ffi): fixing sliding sync merge failure * fix(jack-in): update jack-in to latest ruma * fix(sliding-sync): need to have a version set before polling proxy * expose sliding sync builder over ffi * add SlidingSyncViewBuilder * add forgotten changes on sdk itself * new file logger feature on jack for deeper logging * fix(http-client): log the raw request we are sending out * feat(sliding-sync): better logging * fix(sliding-sync): switch to full-listen after reaching live state in full-sync and make sure we replace the correct entries * feat(ffi): expose sliding sync view ranges * fix(ffi): fixing sliding sync start_sync loop to actually loop * feat(sliding-sync): allow lookup of room data * feat(sliding-sync-ffi): fetching name of room * feat(ffi): expose unread_notifications of rooms * feat(ffi): stoppable spawn for sliding sync * fix(ffi): expose has_unread_notifications on room * feat(sliding-sync): latest room message * fix(sliding-sync): update to latest ruma layout * doc(sliding-sync): adding docs to builder fns * feat(sliding-sync): extra signal on the view to inform about general updates * fix(sync-v4-ffi): expose new callbacks via ffi * fix(sliding-sync): reduce default required states to make things faster * fix(sliding-sync): fix build params * feat(jack-in): extended instrumentation * fix(sliding-sync): unbreak faulty feature-gate * fix(sliding-sync-ffi): mut where mut is due * fix(sdk): allow separate homeserver on every request to unbreak using send on client while in sliding sync on a proxy * fix(jack-in): update to latest dependencies, that work * feat(ffi): helper to patch sliding sync room into regular room * style(jack-in): cargo fmt * fix(sliding-sync): Update to latest ruma changes * fix(sliding-sync): fix missing FFI updates to latest ruma * feat(sliding-sync)!: simplify stream cancellation, cancel ffi sync if already existing * fix: timeline backwards pagination must work without synctoken * fix(sliding-sync): clarify order of messaes in alive TL; pick correct last item * fix: update view delegate api for clarity * style(jack-in): fix cargo warnings * feat(sliding-sync): update room details * fix(sliding-sync): only update room info selectively when given * fix(sliding-sync-ffi): convert and store counts as u32, check against 0 for has notificaitons * style: cargo fmt, file endings and a few other minor style fixes * docs(jack-in): improving CLI and Readme * feat(sliding-sync): allow setting of required event_states on viewbuilder * style(sliding-sync): docs and minor fixes * style(sliding-sync): various clippy fixes * style(jack-in): clippy suggestions applied * fix(sliding-sync): Delegate becomes observer * test(sdk): adding test for request config * docs: Fixing copyright header * style(ffi): Nicer naming of params for observer * fix(ffi): sliding sync is not optional for now * fix(sdk): remove superflusous tracing instrumentation * fix(sdk): use structured logging * fix(jack-in): removed unneded log import * fix(jack-in): use server_name rather than deprecated user_id on ClientBuilder * style: typo and clippy * style(sliding-sync): clippy and formatting * fix(sliding-sync): cleaning up minor syntax issues * fix: remove unneded feature-definition section * fix(sliding-sync): minor fixes as per review * fix(sliding-sync): Make Builders owned * fix(sliding-sync): more minor style improvements * fix(sliding-sync): minor style improvements * fix(sliding-sync): remove homeserver from RequestConfig, use specific internal fn instead Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-09-15 11:45:29 +00:00
pub use sliding_sync::{
RoomListEntry, SlidingSync, SlidingSyncBuilder, SlidingSyncList, SlidingSyncListBuilder,
SlidingSyncMode, SlidingSyncRoom, SlidingSyncState, UpdateSummary,
feat: implement " MSC 3575: sliding sync " behind a feature flag (#728) * starting with jack-in * starting by flying tui * connecting to real server, showing info * add .env to gitignore * infrastructure for tests * display loading time for syncv2 * minor design updates * initial sync * finalise first edition of sliding sync * directly link to sliding sync and show rooms list * nicer UI, toggle logs * passing through sliding sync homeserver * separate syncs and disable v2 autostart * selecting rooms * nicer view * configurable batches and more default needed events * selecting rooms * calculate and show status info per room * precalculated room stats * restructure code to allow for cancellation of streams * finish up merge updates * fix calculation error in room list len * cleaning up system flow * fixing sync up * new multi-view API * move sliding sync in separate module * fixing format * adding and clearning views * expose filters and timeline limits * renamed * adding room subscriptions to sliding sync * update summary * live fetching and subscriptions in jack-in * subscribe to selected room * starting to switch to tuireal - using example * status bar and first linkup * re-adding rooms * implementing port for customised update event * showing details and timeline * fix formatting * cleaner UI, updating details quickly * make it green * implement other Ops * proper handling of invalidation * saving sliding sync results to db, too * saving new prev_batch field if given * split events and timeline * cleaning up * live updates * upgrading to latest ruma and matrix-sdk * Update tui-logger to fix the broken build * fixing latest ruma sliding-sync-branch updates * feat: first set of ffi sliding sync * expose sliding sync via FFI * implement un-/subscribe * implement view state updates * updating to latest JSON format and ruma update * implementing room selecting for new data model * fixing room selection * fixing feature flag requirements for sliding-sync * fixing style, clippy and docs * style(sliding-sync): fixing rust format styles * fix(ffi): fixing sliding sync merge failure * fix(jack-in): update jack-in to latest ruma * fix(sliding-sync): need to have a version set before polling proxy * expose sliding sync builder over ffi * add SlidingSyncViewBuilder * add forgotten changes on sdk itself * new file logger feature on jack for deeper logging * fix(http-client): log the raw request we are sending out * feat(sliding-sync): better logging * fix(sliding-sync): switch to full-listen after reaching live state in full-sync and make sure we replace the correct entries * feat(ffi): expose sliding sync view ranges * fix(ffi): fixing sliding sync start_sync loop to actually loop * feat(sliding-sync): allow lookup of room data * feat(sliding-sync-ffi): fetching name of room * feat(ffi): expose unread_notifications of rooms * feat(ffi): stoppable spawn for sliding sync * fix(ffi): expose has_unread_notifications on room * feat(sliding-sync): latest room message * fix(sliding-sync): update to latest ruma layout * doc(sliding-sync): adding docs to builder fns * feat(sliding-sync): extra signal on the view to inform about general updates * fix(sync-v4-ffi): expose new callbacks via ffi * fix(sliding-sync): reduce default required states to make things faster * fix(sliding-sync): fix build params * feat(jack-in): extended instrumentation * fix(sliding-sync): unbreak faulty feature-gate * fix(sliding-sync-ffi): mut where mut is due * fix(sdk): allow separate homeserver on every request to unbreak using send on client while in sliding sync on a proxy * fix(jack-in): update to latest dependencies, that work * feat(ffi): helper to patch sliding sync room into regular room * style(jack-in): cargo fmt * fix(sliding-sync): Update to latest ruma changes * fix(sliding-sync): fix missing FFI updates to latest ruma * feat(sliding-sync)!: simplify stream cancellation, cancel ffi sync if already existing * fix: timeline backwards pagination must work without synctoken * fix(sliding-sync): clarify order of messaes in alive TL; pick correct last item * fix: update view delegate api for clarity * style(jack-in): fix cargo warnings * feat(sliding-sync): update room details * fix(sliding-sync): only update room info selectively when given * fix(sliding-sync-ffi): convert and store counts as u32, check against 0 for has notificaitons * style: cargo fmt, file endings and a few other minor style fixes * docs(jack-in): improving CLI and Readme * feat(sliding-sync): allow setting of required event_states on viewbuilder * style(sliding-sync): docs and minor fixes * style(sliding-sync): various clippy fixes * style(jack-in): clippy suggestions applied * fix(sliding-sync): Delegate becomes observer * test(sdk): adding test for request config * docs: Fixing copyright header * style(ffi): Nicer naming of params for observer * fix(ffi): sliding sync is not optional for now * fix(sdk): remove superflusous tracing instrumentation * fix(sdk): use structured logging * fix(jack-in): removed unneded log import * fix(jack-in): use server_name rather than deprecated user_id on ClientBuilder * style: typo and clippy * style(sliding-sync): clippy and formatting * fix(sliding-sync): cleaning up minor syntax issues * fix: remove unneded feature-definition section * fix(sliding-sync): minor fixes as per review * fix(sliding-sync): Make Builders owned * fix(sliding-sync): more minor style improvements * fix(sliding-sync): minor style improvements * fix(sliding-sync): remove homeserver from RequestConfig, use specific internal fn instead Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-09-15 11:45:29 +00:00
};
#[cfg(any(test, feature = "testing"))]
pub mod test_utils;
2022-09-08 08:46:27 +00:00
#[cfg(all(test, not(target_arch = "wasm32")))]
#[ctor::ctor]
fn init_logging() {
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
tracing_subscriber::registry()
.with(tracing_subscriber::EnvFilter::from_default_env())
.with(tracing_subscriber::fmt::layer().with_test_writer())
.init();
}
/// Creates a server name from a user supplied string. The string is first
/// sanitized by removing whitespace, the http(s) scheme and any trailing
/// slashes before being parsed.
pub fn sanitize_server_name(s: &str) -> Result<OwnedServerName, IdParseError> {
ServerName::parse(
s.trim().trim_start_matches("http://").trim_start_matches("https://").trim_end_matches('/'),
)
}
#[cfg(test)]
mod tests {
use assert_matches::assert_matches;
use crate::sanitize_server_name;
#[test]
fn test_sanitize_server_name() {
assert_eq!(sanitize_server_name("matrix.org").unwrap().as_str(), "matrix.org");
assert_eq!(sanitize_server_name("https://matrix.org").unwrap().as_str(), "matrix.org");
assert_eq!(sanitize_server_name("http://matrix.org").unwrap().as_str(), "matrix.org");
assert_eq!(
sanitize_server_name("https://matrix.server.org").unwrap().as_str(),
"matrix.server.org"
);
assert_eq!(
sanitize_server_name("https://matrix.server.org/").unwrap().as_str(),
"matrix.server.org"
);
assert_eq!(
sanitize_server_name(" https://matrix.server.org// ").unwrap().as_str(),
"matrix.server.org"
);
assert_matches!(sanitize_server_name("https://matrix.server.org/something"), Err(_))
}
}