diff options
| author | xengineering <me@xengineering.eu> | 2026-04-03 21:29:39 +0200 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-04-03 21:42:15 +0200 |
| commit | 2dc31225e08260a4a8f84fd61623e28f1c8c001e (patch) | |
| tree | 07ad68ce8662823b6c1713c0610596f3600086dd /lib/db.dart | |
| parent | a406df320080bf31e32cb181136928793cb5d37b (diff) | |
| download | sia-app-2dc31225e08260a4a8f84fd61623e28f1c8c001e.tar sia-app-2dc31225e08260a4a8f84fd61623e28f1c8c001e.tar.zst sia-app-2dc31225e08260a4a8f84fd61623e28f1c8c001e.zip | |
Introduce class DB
This centralises database related code in one class.
Diffstat (limited to 'lib/db.dart')
| -rw-r--r-- | lib/db.dart | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/db.dart b/lib/db.dart new file mode 100644 index 0000000..8afd3eb --- /dev/null +++ b/lib/db.dart @@ -0,0 +1,55 @@ +import 'dart:io'; +import 'dart:async'; + +import 'package:path_provider/path_provider.dart'; +import 'package:sqlite3/sqlite3.dart'; +import 'package:path/path.dart' as p; + +class DB { + final Completer<Database?> _dbCompleter = Completer<Database?>(); + + Future<void> connect() async { + String path = await _getDbPath(); + Database candidate = sqlite3.open(path); + + int? userVersion = _getUserVersion(candidate); + if (userVersion == null || userVersion != 0) { + _dbCompleter.complete(null); + return; + } + + _dbCompleter.complete(candidate); + } + + void dispose() async { + if (_dbCompleter.isCompleted == false) { + return; + } + Database? db = await _dbCompleter.future; + if (db == null) return; + db.close(); + } + + static Future<String> _getDbPath() async { + Directory supportDir = await getApplicationSupportDirectory(); + return p.join(supportDir.path, 'main.sqlite3'); + } + + static int? _getUserVersion(Database db) { + ResultSet result = db.select('PRAGMA user_version;'); + if (result.length != 1) return null; + return result.first.values.first as int; + } + + Future<String?> getServerFqdn() async { + Database? db = await _dbCompleter.future; + if (db == null) return null; + + ResultSet result = db.select( + 'SELECT value FROM key_value WHERE key = \'server_fqdn\';' + ); + if (result.length != 1) return null; + + return result[0]['value']; + } +} |
