diff options
| author | xengineering <me@xengineering.eu> | 2026-03-20 17:02:39 +0100 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-03-20 20:48:52 +0100 |
| commit | 09330228991b73ede49ed186f74a2c4f306d2e20 (patch) | |
| tree | 9dbc60d01cc568ec388068ea69675efc890f22c4 | |
| parent | f021bffe2b37af563037195e0e93a74849cd860b (diff) | |
| download | sia-app-09330228991b73ede49ed186f74a2c4f306d2e20.tar sia-app-09330228991b73ede49ed186f74a2c4f306d2e20.tar.zst sia-app-09330228991b73ede49ed186f74a2c4f306d2e20.zip | |
Add reading server domain name from SQLite3 DB
It is annoying to type the server domain name on every app start. This
should be way more ergonomic.
As a minimal first step reading from the database is implemented and
tested with an externally injected database.
| -rw-r--r-- | lib/data.dart | 34 | ||||
| -rw-r--r-- | lib/ui.dart | 11 |
2 files changed, 43 insertions, 2 deletions
diff --git a/lib/data.dart b/lib/data.dart index 365f5bc..302908c 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -1,6 +1,11 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:sqlite3/sqlite3.dart'; +import 'package:path/path.dart' as p; const int brokerPort = 1883; const String topicPrefix = 'sia'; @@ -46,9 +51,36 @@ class AppState with ChangeNotifier { Map<String, bool> contacts = <String, bool>{}; late MqttServerClient _client; + late Directory supportDir; String fqdn = ''; - AppState(); + AppState() { + loadPersistence(); + } + + void loadPersistence() async { + supportDir = await getApplicationSupportDirectory(); + String dbPath = p.join(supportDir.path, 'main.sqlite3'); + + final Database db = sqlite3.open(dbPath); + try { + final ResultSet result = db.select( + 'SELECT value FROM key_value WHERE key = \'server_fqdn\';' + ); + if (result.length == 1) { + fqdn = result[0]['value']; + notifyListeners(); + } + } catch (e) { + // loading persistence is optional + } finally { + db.close(); + } + } + + void setFqdn(String value) { + fqdn = value; + } void process(MachineEvent event) { MachineState lastState = state; diff --git a/lib/ui.dart b/lib/ui.dart index 9603562..3a98be9 100644 --- a/lib/ui.dart +++ b/lib/ui.dart @@ -41,8 +41,17 @@ class _ConnectionPageState extends State<ConnectionPage> { final AppState provider = context.read<AppState>(); controller = TextEditingController(text: provider.fqdn); + provider.addListener(() { + if (controller.text != provider.fqdn) { + controller.text = provider.fqdn; + controller.selection = TextSelection.fromPosition( + TextPosition(offset: controller.text.length), + ); + } + }); + controller.addListener(() { - provider.fqdn = controller.text; + provider.setFqdn(controller.text); }); } |
