tuwunel_service/migrations/
remove_remote_media_userid.rs1use ruma::{MxcUri, UserId};
2use tuwunel_core::{
3 Result, info,
4 utils::{ReadyExt, stream::TryExpect},
5 warn,
6};
7
8use crate::Services;
9
10pub(super) async fn remove_remote_media_userid(services: &Services) -> Result {
11 let db = &services.db;
12 let cork = db.cork_and_sync();
13 let mediaid_user = db["mediaid_user"].clone();
14
15 warn!("Removing stored user id for remote media");
16
17 let (checked, removed_remote, removed_invalid) = mediaid_user
18 .keys()
19 .expect_ok()
20 .ready_fold(
21 (0, 0, 0),
22 |(mut checked, mut removed_remote, mut removed_invalid): (usize, usize, usize),
23 (mxc_uri, user_id): (&MxcUri, &UserId)| {
24 checked = checked.saturating_add(1);
25
26 let Ok(mxc) = mxc_uri.parts() else {
27 warn!(?mxc_uri, "Invalid MXC URL, removing it");
28
29 mediaid_user.del((mxc_uri, user_id));
30
31 removed_invalid = removed_invalid.saturating_add(1);
32
33 return (checked, removed_remote, removed_invalid);
34 };
35
36 if !services.globals.server_is_ours(mxc.server_name) {
37 mediaid_user.del((mxc_uri, user_id));
38
39 removed_remote = removed_remote.saturating_add(1);
40
41 return (checked, removed_remote, removed_invalid);
42 }
43
44 (checked, removed_remote, removed_invalid)
45 },
46 )
47 .await;
48
49 drop(cork);
50 info!(
51 %checked,
52 %removed_remote,
53 %removed_invalid,
54 "Removed stored user id for remote media"
55 );
56
57 db["global"].insert(b"remove_remote_media_userid", []);
58 mediaid_user.sort()
59}