mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-04 10:39:47 -06:00
[client] Upgrade offtheline, clear data on logout
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:phylum/libphylum/db/resources.dart';
|
||||
|
||||
@@ -7,10 +9,11 @@ part 'db.g.dart';
|
||||
|
||||
@DriftDatabase(tables: [Resources])
|
||||
class AppDatabase extends _$AppDatabase {
|
||||
static String storageDir = '';
|
||||
static String tmpDir = '';
|
||||
static Directory? storageDir;
|
||||
static Directory? tmpDir;
|
||||
final String id;
|
||||
|
||||
AppDatabase(String id) : super(_openConnection(id));
|
||||
AppDatabase({required this.id}) : super(_openConnection(id));
|
||||
|
||||
@override
|
||||
int get schemaVersion => 5;
|
||||
@@ -23,7 +26,12 @@ class AppDatabase extends _$AppDatabase {
|
||||
await m.createAll();
|
||||
});
|
||||
|
||||
Future<void> dropDatabase() async {
|
||||
await super.close();
|
||||
await deleteDatabase(storageDir: storageDir, id: id);
|
||||
}
|
||||
|
||||
static QueryExecutor _openConnection(String id) {
|
||||
return openDatabase(storageDir: storageDir, tmpDir: tmpDir, name: '$id-drift');
|
||||
return openDatabase(storageDir: storageDir, tmpDir: tmpDir, id: id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,14 +6,25 @@ import 'package:path/path.dart' as p;
|
||||
import 'package:sqlite3/sqlite3.dart';
|
||||
|
||||
QueryExecutor openDatabase({
|
||||
required String storageDir,
|
||||
required String tmpDir,
|
||||
required String name,
|
||||
required Directory? storageDir,
|
||||
required Directory? tmpDir,
|
||||
required String id,
|
||||
}) {
|
||||
return LazyDatabase(() async {
|
||||
final file = File(p.join(storageDir, '$name.sqlite'));
|
||||
sqlite3.tempDirectory = tmpDir;
|
||||
final file = _dbFile(storageDir, id);
|
||||
sqlite3.tempDirectory = tmpDir!.path;
|
||||
|
||||
return NativeDatabase.createInBackground(file);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deleteDatabase({
|
||||
required Directory? storageDir,
|
||||
required String id,
|
||||
}) {
|
||||
return _dbFile(storageDir, id).delete();
|
||||
}
|
||||
|
||||
File _dbFile(Directory? storageDir, String id) {
|
||||
return File(p.join(storageDir!.path, '$id-phylum.db'));
|
||||
}
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
|
||||
QueryExecutor openDatabase({
|
||||
required String storageDir,
|
||||
required String tmpDir,
|
||||
required String name,
|
||||
required Directory? storageDir,
|
||||
required Directory? tmpDir,
|
||||
required String id,
|
||||
}) =>
|
||||
throw UnimplementedError();
|
||||
|
||||
Future<void> deleteDatabase({
|
||||
required Directory? storageDir,
|
||||
required String id,
|
||||
}) =>
|
||||
throw UnimplementedError();
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/wasm.dart';
|
||||
|
||||
QueryExecutor openDatabase({
|
||||
required String storageDir,
|
||||
required String tmpDir,
|
||||
required String name,
|
||||
required Directory? storageDir,
|
||||
required Directory? tmpDir,
|
||||
required String id,
|
||||
}) {
|
||||
return DatabaseConnection.delayed(Future(() async {
|
||||
final result = await WasmDatabase.open(
|
||||
databaseName: name,
|
||||
databaseName: _dbName(id),
|
||||
sqlite3Uri: Uri.parse('sqlite3.wasm'),
|
||||
driftWorkerUri: Uri.parse('drift_worker.js'),
|
||||
);
|
||||
@@ -24,3 +26,21 @@ QueryExecutor openDatabase({
|
||||
return result.resolvedExecutor;
|
||||
}));
|
||||
}
|
||||
|
||||
Future<void> deleteDatabase({
|
||||
required Directory? storageDir,
|
||||
required String id,
|
||||
}) async {
|
||||
final probe = await WasmDatabase.probe(
|
||||
sqlite3Uri: Uri.parse('sqlite3.wasm'),
|
||||
driftWorkerUri: Uri.parse('drift_worker.js'),
|
||||
databaseName: _dbName(id),
|
||||
);
|
||||
for (final db in probe.existingDatabases) {
|
||||
await probe.deleteDatabase(db);
|
||||
}
|
||||
}
|
||||
|
||||
String _dbName(String id) {
|
||||
return '$id-phylum.db';
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ class PhylumApiErrorResponse {
|
||||
Map<String, dynamic> _tansformResponse(String response) => (jsonDecode(response) as Map<String, dynamic>?) ?? const {};
|
||||
|
||||
class PhylumAccount extends Account<PhylumApiResponse, PhylumApiErrorResponse, PhylumAccount> {
|
||||
late final db = AppDatabase(id);
|
||||
late final db = AppDatabase(id: id);
|
||||
late final resourceRepository = ResourceRepository(account: this);
|
||||
final datastore = PhylumDatastore();
|
||||
final actionQueue = ApiActionQueue<PhylumApiResponse, PhylumApiErrorResponse, PhylumAccount>();
|
||||
@@ -78,7 +78,8 @@ class PhylumAccount extends Account<PhylumApiResponse, PhylumApiErrorResponse, P
|
||||
|
||||
@override
|
||||
Future<void> clearData() async {
|
||||
return db.close();
|
||||
await super.clearData();
|
||||
await db.dropDatabase();
|
||||
}
|
||||
|
||||
Future<void> addAction(ApiAction<PhylumAccount> action) async {
|
||||
|
||||
@@ -37,8 +37,8 @@ void main() async {
|
||||
final appDir = (Platform.isLinux)
|
||||
? Directory(path.join((await getApplicationSupportDirectory()).path, storageDir.isNotEmpty ? storageDir : 'data'))
|
||||
: await getApplicationDocumentsDirectory();
|
||||
AppDatabase.storageDir = appDir.path;
|
||||
AppDatabase.tmpDir = (await getTemporaryDirectory()).path;
|
||||
AppDatabase.storageDir = appDir;
|
||||
AppDatabase.tmpDir = await getTemporaryDirectory();
|
||||
|
||||
await appDir.create();
|
||||
Hive.init(appDir.path);
|
||||
|
||||
@@ -577,8 +577,8 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: "92e25481826031de13839d1a001e350eed4960db"
|
||||
resolved-ref: "92e25481826031de13839d1a001e350eed4960db"
|
||||
ref: ad3d1e804990bcb9ca65a1e5d003b1cb680908e0
|
||||
resolved-ref: ad3d1e804990bcb9ca65a1e5d003b1cb680908e0
|
||||
url: "https://codeberg.org/shroff/offtheline.git"
|
||||
source: git
|
||||
version: "0.14.0"
|
||||
|
||||
@@ -21,7 +21,7 @@ dependencies:
|
||||
offtheline:
|
||||
git:
|
||||
url: https://codeberg.org/shroff/offtheline.git
|
||||
ref: 92e25481826031de13839d1a001e350eed4960db
|
||||
ref: ad3d1e804990bcb9ca65a1e5d003b1cb680908e0
|
||||
open_file:
|
||||
path:
|
||||
path_provider:
|
||||
|
||||
Reference in New Issue
Block a user