From a2dcd701777968a65d3176eaf28aa7023d97c16b Mon Sep 17 00:00:00 2001 From: Ludwig Schwiedrzik Date: Tue, 13 Aug 2024 17:23:45 +0200 Subject: Implementation of Persistent Storage API to the flutter homescreen Added protobuf definition of Persistent Storage API. Generated grpc-compliant code from protobuf API definition. Set up storage_client based on similar radio_client. Updated app_confi_provider and app_provider to include new API features and prepare for implementation of persistent storage of users, user preferences. Added unit tests for all API rpcs. Bug-AGL: [SPEC-5227] Change-Id: I759501bcb9de3a70a14718f8b3a87bedcf811baa Signed-off-by: Tom Kronsbein Signed-off-by: Ludwig Schwiedrzik --- lib/data/data_providers/app_config_provider.dart | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'lib/data/data_providers/app_config_provider.dart') diff --git a/lib/data/data_providers/app_config_provider.dart b/lib/data/data_providers/app_config_provider.dart index 6a4ea02..b82eb54 100644 --- a/lib/data/data_providers/app_config_provider.dart +++ b/lib/data/data_providers/app_config_provider.dart @@ -56,6 +56,23 @@ class RadioConfig { } } +class StorageConfig { + final String hostname; + final int port; + + static String defaultHostname = 'localhost'; + static int defaultPort = 50054; + + StorageConfig( + {required this.hostname, required this.port}); + + static StorageConfig defaultConfig() { + return StorageConfig( + hostname: StorageConfig.defaultHostname, + port: StorageConfig.defaultPort); + } +} + class MpdConfig { final String hostname; final int port; @@ -77,6 +94,7 @@ class AppConfig { final bool randomHybridAnimation; final KuksaConfig kuksaConfig; final RadioConfig radioConfig; + final StorageConfig storageConfig; final MpdConfig mpdConfig; static String configFilePath = '/etc/xdg/AGL/ics-homescreen.yaml'; @@ -87,6 +105,7 @@ class AppConfig { required this.randomHybridAnimation, required this.kuksaConfig, required this.radioConfig, + required this.storageConfig, required this.mpdConfig}); static KuksaConfig parseKuksaConfig(YamlMap kuksaMap) { @@ -182,6 +201,25 @@ class AppConfig { } } + static StorageConfig parseStorageConfig(YamlMap storageMap) { + try { + String hostname = StorageConfig.defaultHostname; + if (storageMap.containsKey('hostname')) { + hostname = storageMap['hostname']; + } + + int port = StorageConfig.defaultPort; + if (storageMap.containsKey('port')) { + port = storageMap['port']; + } + + return StorageConfig(hostname: hostname, port: port); + } catch (_) { + debugPrint("Invalid storage configuration, using defaults"); + return StorageConfig.defaultConfig(); + } + } + static MpdConfig parseMpdConfig(YamlMap mpdMap) { try { String hostname = MpdConfig.defaultHostname; @@ -229,6 +267,13 @@ final appConfigProvider = Provider((ref) { radioConfig = RadioConfig.defaultConfig(); } + StorageConfig storageConfig; + if (yamlMap.containsKey('storage')) { + storageConfig = AppConfig.parseStorageConfig(yamlMap['storage']); + } else { + storageConfig = StorageConfig.defaultConfig(); + } + MpdConfig mpdConfig; if (yamlMap.containsKey('mpd')) { mpdConfig = AppConfig.parseMpdConfig(yamlMap['mpd']); @@ -266,6 +311,7 @@ final appConfigProvider = Provider((ref) { randomHybridAnimation: randomHybridAnimation, kuksaConfig: kuksaConfig, radioConfig: radioConfig, + storageConfig: storageConfig, mpdConfig: mpdConfig); } catch (_) { return AppConfig( @@ -274,6 +320,7 @@ final appConfigProvider = Provider((ref) { randomHybridAnimation: false, kuksaConfig: KuksaConfig.defaultConfig(), radioConfig: RadioConfig.defaultConfig(), + storageConfig: StorageConfig.defaultConfig(), mpdConfig: MpdConfig.defaultConfig()); } }); -- cgit 1.2.3-korg