From b66d794af38461b9098e32466a565f8b5a0ee6e3 Mon Sep 17 00:00:00 2001 From: TRTomasz Date: Thu, 5 Dec 2024 17:21:23 +0100 Subject: [PATCH 1/5] feature: Add service in foreground mobile app setting --- src/constants.rs | 2 +- src/runtime/env.rs | 68 ++++++++++++++++++++++ src/types/profile/settings.rs | 2 + src/unit_tests/serde/default_tokens_ext.rs | 4 +- src/unit_tests/serde/settings.rs | 9 ++- 5 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/constants.rs b/src/constants.rs index f7bf865f9..c71c5c62e 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -39,7 +39,7 @@ pub const CALENDAR_ITEMS_COUNT: usize = 100; pub const WATCHED_THRESHOLD_COEF: f64 = 0.7; pub const CREDITS_THRESHOLD_COEF: f64 = 0.9; /// The latest migration scheme version -pub const SCHEMA_VERSION: u32 = 15; +pub const SCHEMA_VERSION: u32 = 16; pub const IMDB_LINK_CATEGORY: &str = "imdb"; pub const GENRES_LINK_CATEGORY: &str = "Genres"; pub const CINEMETA_TOP_CATALOG_ID: &str = "top"; diff --git a/src/runtime/env.rs b/src/runtime/env.rs index 9c3d02683..23a619d42 100644 --- a/src/runtime/env.rs +++ b/src/runtime/env.rs @@ -271,6 +271,12 @@ pub trait Env { .await?; schema_version = 15; } + if schema_version == 15 { + migrate_storage_schema_to_v16::() + .map_err(|error| EnvError::StorageSchemaVersionUpgrade(Box::new(error))) + .await?; + schema_version = 16; + } if schema_version != SCHEMA_VERSION { panic!( "Storage schema version must be upgraded from {} to {}", @@ -606,6 +612,29 @@ fn migrate_storage_schema_to_v15() -> TryEnvFuture<()> { .boxed_env() } +fn migrate_storage_schema_to_v16() -> TryEnvFuture<()> { + E::get_storage::(PROFILE_STORAGE_KEY) + .and_then(|mut profile| { + match profile + .as_mut() + .and_then(|profile| profile.as_object_mut()) + .and_then(|profile| profile.get_mut("settings")) + .and_then(|settings| settings.as_object_mut()) + { + Some(settings) => { + settings.insert( + "serverInForeground".to_owned(), + serde_json::Value::Bool(false), + ); + E::set_storage(PROFILE_STORAGE_KEY, Some(&profile)) + } + _ => E::set_storage::<()>(PROFILE_STORAGE_KEY, None), + } + }) + .and_then(|_| E::set_storage(SCHEMA_VERSION_STORAGE_KEY, Some(&16))) + .boxed_env() +} + #[cfg(test)] mod test { use serde_json::{json, Value}; @@ -616,6 +645,7 @@ mod test { }, runtime::{ env::{ + migrate_storage_schema_to_v16, migrate_storage_schema_to_v10, migrate_storage_schema_to_v11, migrate_storage_schema_to_v12, migrate_storage_schema_to_v13, migrate_storage_schema_to_v14, migrate_storage_schema_to_v15, @@ -1150,4 +1180,42 @@ mod test { assert_storage_schema_version(15); } } + + #[tokio::test] + async fn test_migration_from_15_to_16() { + let _test_env_guard = TestEnv::reset().expect("Should lock TestEnv"); + + let init_profile = json!({ + "settings": {} + }); + + let migrated_profile = json!({ + "settings": { + "serverInForeground": false + } + }); + + set_profile_and_schema_version(&init_profile, 15); + + migrate_storage_schema_to_v16::() + .await + .expect("Should migrate"); + + let storage = STORAGE.read().expect("Should lock"); + + assert_eq!( + &16.to_string(), + storage + .get(SCHEMA_VERSION_STORAGE_KEY) + .expect("Should have the schema set"), + "Scheme version should now be updated" + ); + assert_eq!( + &migrated_profile.to_string(), + storage + .get(PROFILE_STORAGE_KEY) + .expect("Should have the serverInForegroundSet set"), + "Profile should match" + ); + } } diff --git a/src/types/profile/settings.rs b/src/types/profile/settings.rs index 721617555..e32ce5a46 100644 --- a/src/types/profile/settings.rs +++ b/src/types/profile/settings.rs @@ -38,6 +38,7 @@ pub struct Settings { pub pause_on_minimize: bool, pub surround_sound: bool, pub streaming_server_warning_dismissed: Option>, + pub server_in_foreground: bool } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -77,6 +78,7 @@ impl Default for Settings { pause_on_minimize: false, surround_sound: false, streaming_server_warning_dismissed: None, + server_in_foreground: false } } } diff --git a/src/unit_tests/serde/default_tokens_ext.rs b/src/unit_tests/serde/default_tokens_ext.rs index b3462f6e9..7a98ba322 100644 --- a/src/unit_tests/serde/default_tokens_ext.rs +++ b/src/unit_tests/serde/default_tokens_ext.rs @@ -374,7 +374,7 @@ impl DefaultTokens for Settings { vec![ Token::Struct { name: "Settings", - len: 27, + len: 28, }, Token::Str("interfaceLanguage"), Token::Str("eng"), @@ -435,6 +435,8 @@ impl DefaultTokens for Settings { Token::Bool(false), Token::Str("streamingServerWarningDismissed"), Token::None, + Token::Str("serverInForeground"), + Token::Bool(false), Token::StructEnd, ] } diff --git a/src/unit_tests/serde/settings.rs b/src/unit_tests/serde/settings.rs index 1e19e49cb..b03be6926 100644 --- a/src/unit_tests/serde/settings.rs +++ b/src/unit_tests/serde/settings.rs @@ -36,11 +36,12 @@ fn settings() { streaming_server_warning_dismissed: Some( Utc.with_ymd_and_hms(2021, 1, 1, 0, 0, 0).unwrap(), ), + server_in_foreground: false }, &[ Token::Struct { name: "Settings", - len: 27, + len: 28, }, Token::Str("interfaceLanguage"), Token::Str("interface_language"), @@ -105,6 +106,8 @@ fn settings() { Token::Str("streamingServerWarningDismissed"), Token::Some, Token::Str("2021-01-01T00:00:00Z"), + Token::Str("serverInForeground"), + Token::Bool(false), Token::StructEnd, ], ); @@ -117,7 +120,7 @@ fn settings_de() { &[ Token::Struct { name: "Settings", - len: 22, + len: 23, }, Token::Str("interfaceLanguage"), Token::Str("eng"), @@ -174,6 +177,8 @@ fn settings_de() { Token::Bool(false), Token::Str("streamingServerWarningDismissed"), Token::None, + Token::Str("serverInForeground"), + Token::Bool(false), Token::StructEnd, ], ); From 3c62ccb029f608c05402bc340d25c88c448ad8f5 Mon Sep 17 00:00:00 2001 From: TRTomasz Date: Thu, 5 Dec 2024 17:34:03 +0100 Subject: [PATCH 2/5] feat: add setting for sending crash reports --- src/runtime/env.rs | 9 +++++++-- src/types/profile/settings.rs | 6 ++++-- src/unit_tests/serde/default_tokens_ext.rs | 4 +++- src/unit_tests/serde/settings.rs | 11 ++++++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/runtime/env.rs b/src/runtime/env.rs index 23a619d42..977e54d19 100644 --- a/src/runtime/env.rs +++ b/src/runtime/env.rs @@ -626,6 +626,10 @@ fn migrate_storage_schema_to_v16() -> TryEnvFuture<()> { "serverInForeground".to_owned(), serde_json::Value::Bool(false), ); + settings.insert( + "sendCrashReports".to_owned(), + serde_json::Value::Bool(false), + ); E::set_storage(PROFILE_STORAGE_KEY, Some(&profile)) } _ => E::set_storage::<()>(PROFILE_STORAGE_KEY, None), @@ -1191,7 +1195,8 @@ mod test { let migrated_profile = json!({ "settings": { - "serverInForeground": false + "serverInForeground": false, + "sendCrashReports": false } }); @@ -1214,7 +1219,7 @@ mod test { &migrated_profile.to_string(), storage .get(PROFILE_STORAGE_KEY) - .expect("Should have the serverInForegroundSet set"), + .expect("Should have the profile set"), "Profile should match" ); } diff --git a/src/types/profile/settings.rs b/src/types/profile/settings.rs index e32ce5a46..6446331bd 100644 --- a/src/types/profile/settings.rs +++ b/src/types/profile/settings.rs @@ -38,7 +38,8 @@ pub struct Settings { pub pause_on_minimize: bool, pub surround_sound: bool, pub streaming_server_warning_dismissed: Option>, - pub server_in_foreground: bool + pub server_in_foreground: bool, + pub send_crash_reports: bool, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -78,7 +79,8 @@ impl Default for Settings { pause_on_minimize: false, surround_sound: false, streaming_server_warning_dismissed: None, - server_in_foreground: false + server_in_foreground: false, + send_crash_reports: false, } } } diff --git a/src/unit_tests/serde/default_tokens_ext.rs b/src/unit_tests/serde/default_tokens_ext.rs index 7a98ba322..4174593c0 100644 --- a/src/unit_tests/serde/default_tokens_ext.rs +++ b/src/unit_tests/serde/default_tokens_ext.rs @@ -374,7 +374,7 @@ impl DefaultTokens for Settings { vec![ Token::Struct { name: "Settings", - len: 28, + len: 29, }, Token::Str("interfaceLanguage"), Token::Str("eng"), @@ -437,6 +437,8 @@ impl DefaultTokens for Settings { Token::None, Token::Str("serverInForeground"), Token::Bool(false), + Token::Str("sendCrashReports"), + Token::Bool(false), Token::StructEnd, ] } diff --git a/src/unit_tests/serde/settings.rs b/src/unit_tests/serde/settings.rs index b03be6926..6e12cf648 100644 --- a/src/unit_tests/serde/settings.rs +++ b/src/unit_tests/serde/settings.rs @@ -36,12 +36,13 @@ fn settings() { streaming_server_warning_dismissed: Some( Utc.with_ymd_and_hms(2021, 1, 1, 0, 0, 0).unwrap(), ), - server_in_foreground: false + server_in_foreground: false, + send_crash_reports: false, }, &[ Token::Struct { name: "Settings", - len: 28, + len: 29, }, Token::Str("interfaceLanguage"), Token::Str("interface_language"), @@ -108,6 +109,8 @@ fn settings() { Token::Str("2021-01-01T00:00:00Z"), Token::Str("serverInForeground"), Token::Bool(false), + Token::Str("sendCrashReports"), + Token::Bool(false), Token::StructEnd, ], ); @@ -120,7 +123,7 @@ fn settings_de() { &[ Token::Struct { name: "Settings", - len: 23, + len: 24, }, Token::Str("interfaceLanguage"), Token::Str("eng"), @@ -179,6 +182,8 @@ fn settings_de() { Token::None, Token::Str("serverInForeground"), Token::Bool(false), + Token::Str("sendCrashReports"), + Token::Bool(false), Token::StructEnd, ], ); From 1529dfbd77bde3d58f32686de17fa51714dbb8d5 Mon Sep 17 00:00:00 2001 From: TRTomasz Date: Thu, 5 Dec 2024 17:37:33 +0100 Subject: [PATCH 3/5] other: fix formatting --- src/runtime/env.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/runtime/env.rs b/src/runtime/env.rs index 977e54d19..5c84d78ce 100644 --- a/src/runtime/env.rs +++ b/src/runtime/env.rs @@ -649,12 +649,12 @@ mod test { }, runtime::{ env::{ - migrate_storage_schema_to_v16, migrate_storage_schema_to_v10, migrate_storage_schema_to_v11, migrate_storage_schema_to_v12, migrate_storage_schema_to_v13, migrate_storage_schema_to_v14, migrate_storage_schema_to_v15, - migrate_storage_schema_to_v6, migrate_storage_schema_to_v7, - migrate_storage_schema_to_v8, migrate_storage_schema_to_v9, + migrate_storage_schema_to_v16, migrate_storage_schema_to_v6, + migrate_storage_schema_to_v7, migrate_storage_schema_to_v8, + migrate_storage_schema_to_v9, }, Env, }, From 0304f3f5efce37b663f8945b9963d3a6b4c70a03 Mon Sep 17 00:00:00 2001 From: TRTomasz Date: Fri, 6 Dec 2024 10:25:42 +0100 Subject: [PATCH 4/5] fix: change default send crash reports value to true --- src/runtime/env.rs | 4 ++-- src/types/profile/settings.rs | 2 +- src/unit_tests/serde/default_tokens_ext.rs | 2 +- src/unit_tests/serde/settings.rs | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/runtime/env.rs b/src/runtime/env.rs index 5c84d78ce..bfff5af03 100644 --- a/src/runtime/env.rs +++ b/src/runtime/env.rs @@ -628,7 +628,7 @@ fn migrate_storage_schema_to_v16() -> TryEnvFuture<()> { ); settings.insert( "sendCrashReports".to_owned(), - serde_json::Value::Bool(false), + serde_json::Value::Bool(true), ); E::set_storage(PROFILE_STORAGE_KEY, Some(&profile)) } @@ -1196,7 +1196,7 @@ mod test { let migrated_profile = json!({ "settings": { "serverInForeground": false, - "sendCrashReports": false + "sendCrashReports": true } }); diff --git a/src/types/profile/settings.rs b/src/types/profile/settings.rs index 6446331bd..bea632b38 100644 --- a/src/types/profile/settings.rs +++ b/src/types/profile/settings.rs @@ -80,7 +80,7 @@ impl Default for Settings { surround_sound: false, streaming_server_warning_dismissed: None, server_in_foreground: false, - send_crash_reports: false, + send_crash_reports: true, } } } diff --git a/src/unit_tests/serde/default_tokens_ext.rs b/src/unit_tests/serde/default_tokens_ext.rs index 4174593c0..6a53cd98d 100644 --- a/src/unit_tests/serde/default_tokens_ext.rs +++ b/src/unit_tests/serde/default_tokens_ext.rs @@ -438,7 +438,7 @@ impl DefaultTokens for Settings { Token::Str("serverInForeground"), Token::Bool(false), Token::Str("sendCrashReports"), - Token::Bool(false), + Token::Bool(true), Token::StructEnd, ] } diff --git a/src/unit_tests/serde/settings.rs b/src/unit_tests/serde/settings.rs index 6e12cf648..72932d29e 100644 --- a/src/unit_tests/serde/settings.rs +++ b/src/unit_tests/serde/settings.rs @@ -37,7 +37,7 @@ fn settings() { Utc.with_ymd_and_hms(2021, 1, 1, 0, 0, 0).unwrap(), ), server_in_foreground: false, - send_crash_reports: false, + send_crash_reports: true, }, &[ Token::Struct { @@ -110,7 +110,7 @@ fn settings() { Token::Str("serverInForeground"), Token::Bool(false), Token::Str("sendCrashReports"), - Token::Bool(false), + Token::Bool(true), Token::StructEnd, ], ); @@ -183,7 +183,7 @@ fn settings_de() { Token::Str("serverInForeground"), Token::Bool(false), Token::Str("sendCrashReports"), - Token::Bool(false), + Token::Bool(true), Token::StructEnd, ], ); From 798742e0bcabd4f76a01acd344d8b80f8d0d57f8 Mon Sep 17 00:00:00 2001 From: TRTomasz Date: Fri, 6 Dec 2024 10:29:12 +0100 Subject: [PATCH 5/5] other: fix formatting --- src/runtime/env.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/runtime/env.rs b/src/runtime/env.rs index bfff5af03..dbbc072ca 100644 --- a/src/runtime/env.rs +++ b/src/runtime/env.rs @@ -626,10 +626,7 @@ fn migrate_storage_schema_to_v16() -> TryEnvFuture<()> { "serverInForeground".to_owned(), serde_json::Value::Bool(false), ); - settings.insert( - "sendCrashReports".to_owned(), - serde_json::Value::Bool(true), - ); + settings.insert("sendCrashReports".to_owned(), serde_json::Value::Bool(true)); E::set_storage(PROFILE_STORAGE_KEY, Some(&profile)) } _ => E::set_storage::<()>(PROFILE_STORAGE_KEY, None),