2022-06-05 02:41:11 +02:00
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
|
|
|
|
import '../models/history/history_entry.dart';
|
2022-06-05 22:07:30 +02:00
|
|
|
import 'archive_format.dart';
|
2022-06-05 02:41:11 +02:00
|
|
|
import 'database.dart';
|
|
|
|
|
|
|
|
Future<Directory> exportDirectory() async {
|
|
|
|
final basedir = (await getExternalStorageDirectory())!;
|
2022-06-05 22:07:30 +02:00
|
|
|
final dir = basedir.exportDirectory;
|
2022-06-05 02:41:11 +02:00
|
|
|
dir.createSync(recursive: true);
|
|
|
|
return dir;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Returns the path to which the data was saved.
|
|
|
|
Future<String> exportData() async {
|
|
|
|
final dir = await exportDirectory();
|
2022-06-05 22:07:30 +02:00
|
|
|
final libraryDir = dir.libraryDir;
|
|
|
|
libraryDir.createSync();
|
2022-06-05 02:41:11 +02:00
|
|
|
|
|
|
|
await Future.wait([
|
|
|
|
exportHistoryTo(dir),
|
2022-06-05 22:07:30 +02:00
|
|
|
exportLibraryListsTo(libraryDir),
|
2022-06-05 02:41:11 +02:00
|
|
|
]);
|
|
|
|
return dir.path;
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> exportHistoryTo(Directory dir) async {
|
|
|
|
final file = File(dir.uri.resolve('history.json').path);
|
|
|
|
file.createSync();
|
|
|
|
final query = await db().query(TableNames.historyEntryOrderedByTimestamp);
|
|
|
|
final List<HistoryEntry> entries =
|
|
|
|
query.map((e) => HistoryEntry.fromDBMap(e)).toList();
|
|
|
|
final List<Map<String, Object?>> jsonEntries =
|
|
|
|
await Future.wait(entries.map((he) async => he.toJson()));
|
|
|
|
file.writeAsStringSync(jsonEncode(jsonEntries));
|
|
|
|
}
|
|
|
|
|
2022-06-05 22:07:30 +02:00
|
|
|
Future<void> exportLibraryListsTo(Directory dir) async {
|
2022-06-05 02:41:11 +02:00
|
|
|
// TODO:
|
2022-06-05 22:07:30 +02:00
|
|
|
// final query = db().query(TableNames.libraryList);
|
|
|
|
print('TODO: implement exportLibraryLists');
|
2022-06-05 02:41:11 +02:00
|
|
|
}
|