summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/database/mod.rs147
1 files changed, 78 insertions, 69 deletions
diff --git a/src/database/mod.rs b/src/database/mod.rs
index dce4eff..ccc8177 100644
--- a/src/database/mod.rs
+++ b/src/database/mod.rs
@@ -7,7 +7,8 @@ use directories::ProjectDirs;
use lru_cache::LruCache;
use ruma::{
events::{
- push_rules::{PushRulesEventContent, PushRulesEvent}, room::message::RoomMessageEventContent,
+ push_rules::{PushRulesEvent, PushRulesEventContent},
+ room::message::RoomMessageEventContent,
GlobalAccountDataEvent, GlobalAccountDataEventType, StateEventType,
},
push::Ruleset,
@@ -405,7 +406,7 @@ impl KeyValueDatabase {
}
// If the database has any data, perform data migrations before starting
- let latest_database_version = 11;
+ let latest_database_version = 12;
if services().users.count()? > 0 {
// MIGRATIONS
@@ -801,73 +802,81 @@ impl KeyValueDatabase {
warn!("Migration: 10 -> 11 finished");
}
- if services().globals.database_version()? < 12 {
-
- for username in services().users.list_local_users().unwrap() {
-
- let user = UserId::parse_with_server_name(username, services().globals.server_name())
- .unwrap();
-
-
- let raw_rules_list = services().account_data
- .get(
- None,
- &user,
- GlobalAccountDataEventType::PushRules.to_string().into())
- .unwrap()
- .expect("Username is invalid");
-
- let mut account_data = serde_json::from_str::<PushRulesEvent>(raw_rules_list.get()).unwrap();
- let rules_list = &mut account_data.content.global;
-
- //content rule
- {
- let content_rule_transformation =
- [".m.rules.contains_user_name", ".m.rule.contains_user_name"];
-
- let rule = rules_list.content.get(content_rule_transformation[0]);
- if rule.is_some() {
- let mut rule = rule.unwrap().clone();
- rule.rule_id = content_rule_transformation[1].to_string();
- rules_list.content.remove(content_rule_transformation[0]);
- rules_list.content.insert(rule);
- }
- }
-
- //underride rules
- {
- let underride_rule_transformation =
- [[".m.rules.call", ".m.rule.call"],
- [".m.rules.room_one_to_one", ".m.rule.room_one_to_one"],
- [".m.rules.encrypted_room_one_to_one", ".m.rule.encrypted_room_one_to_one"],
- [".m.rules.message", ".m.rule.message"],
- [".m.rules.encrypted", ".m.rule.encrypted"]];
-
- for transformation in underride_rule_transformation {
- let rule = rules_list.underride.get(transformation[0]);
- if rule.is_some() {
- let mut rule = rule.unwrap().clone();
- rule.rule_id = transformation[1].to_string();
- rules_list.underride.remove(transformation[0]);
- rules_list.underride.insert(rule);
- }
- }
- }
-
- services().account_data.update(
- None,
- &user,
- GlobalAccountDataEventType::PushRules.to_string().into(),
- &serde_json::to_value(account_data).expect("to json value always works"),
- )?;
- }
-
- services().globals.bump_database_version(12)?;
-
- warn!("Migration: 11 -> 12 finished");
- }
-
- assert_eq!(11, latest_database_version);
+ if services().globals.database_version()? < 12 {
+ for username in services().users.list_local_users().unwrap() {
+ let user =
+ UserId::parse_with_server_name(username, services().globals.server_name())
+ .unwrap();
+
+ let raw_rules_list = services()
+ .account_data
+ .get(
+ None,
+ &user,
+ GlobalAccountDataEventType::PushRules.to_string().into(),
+ )
+ .unwrap()
+ .expect("Username is invalid");
+
+ let mut account_data =
+ serde_json::from_str::<PushRulesEvent>(raw_rules_list.get()).unwrap();
+ let rules_list = &mut account_data.content.global;
+
+ //content rule
+ {
+ let content_rule_transformation =
+ [".m.rules.contains_user_name", ".m.rule.contains_user_name"];
+
+ let rule = rules_list.content.get(content_rule_transformation[0]);
+ if rule.is_some() {
+ let mut rule = rule.unwrap().clone();
+ rule.rule_id = content_rule_transformation[1].to_string();
+ rules_list.content.remove(content_rule_transformation[0]);
+ rules_list.content.insert(rule);
+ }
+ }
+
+ //underride rules
+ {
+ let underride_rule_transformation = [
+ [".m.rules.call", ".m.rule.call"],
+ [".m.rules.room_one_to_one", ".m.rule.room_one_to_one"],
+ [
+ ".m.rules.encrypted_room_one_to_one",
+ ".m.rule.encrypted_room_one_to_one",
+ ],
+ [".m.rules.message", ".m.rule.message"],
+ [".m.rules.encrypted", ".m.rule.encrypted"],
+ ];
+
+ for transformation in underride_rule_transformation {
+ let rule = rules_list.underride.get(transformation[0]);
+ if rule.is_some() {
+ let mut rule = rule.unwrap().clone();
+ rule.rule_id = transformation[1].to_string();
+ rules_list.underride.remove(transformation[0]);
+ rules_list.underride.insert(rule);
+ }
+ }
+ }
+
+ services().account_data.update(
+ None,
+ &user,
+ GlobalAccountDataEventType::PushRules.to_string().into(),
+ &serde_json::to_value(account_data).expect("to json value always works"),
+ )?;
+ }
+
+ services().globals.bump_database_version(12)?;
+
+ warn!("Migration: 11 -> 12 finished");
+ }
+
+ assert_eq!(
+ services().globals.database_version().unwrap(),
+ latest_database_version
+ );
info!(
"Loaded {} database with version {}",