mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 10:58:40 +00:00
auto update a day #121
This commit is contained in:
parent
9295de7b76
commit
0b1f51713c
3 changed files with 47 additions and 15 deletions
|
|
@ -10,6 +10,7 @@ import 'package:twonly/src/services/api.service.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:twonly/src/providers/connection.provider.dart';
|
import 'package:twonly/src/providers/connection.provider.dart';
|
||||||
import 'package:twonly/src/providers/settings.provider.dart';
|
import 'package:twonly/src/providers/settings.provider.dart';
|
||||||
|
import 'package:twonly/src/services/backup.identitiy.service.dart';
|
||||||
import 'package:twonly/src/services/fcm.service.dart';
|
import 'package:twonly/src/services/fcm.service.dart';
|
||||||
import 'package:twonly/src/services/notification.service.dart';
|
import 'package:twonly/src/services/notification.service.dart';
|
||||||
import 'package:twonly/src/utils/log.dart';
|
import 'package:twonly/src/utils/log.dart';
|
||||||
|
|
@ -48,6 +49,8 @@ void main() async {
|
||||||
purgeReceivedMediaFiles();
|
purgeReceivedMediaFiles();
|
||||||
purgeSendMediaFiles();
|
purgeSendMediaFiles();
|
||||||
|
|
||||||
|
performTwonlySafeBackup();
|
||||||
|
|
||||||
await initFileDownloader();
|
await initFileDownloader();
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import 'package:drift/drift.dart';
|
||||||
import 'package:drift_flutter/drift_flutter.dart';
|
import 'package:drift_flutter/drift_flutter.dart';
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
import 'package:hashlib/hashlib.dart';
|
import 'package:hashlib/hashlib.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:path/path.dart';
|
import 'package:path/path.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:twonly/src/constants/secure_storage_keys.dart';
|
import 'package:twonly/src/constants/secure_storage_keys.dart';
|
||||||
|
|
@ -17,8 +18,23 @@ import 'package:twonly/src/utils/log.dart';
|
||||||
import 'package:twonly/src/utils/storage.dart';
|
import 'package:twonly/src/utils/storage.dart';
|
||||||
import 'package:twonly/src/views/settings/backup/backup.view.dart';
|
import 'package:twonly/src/views/settings/backup/backup.view.dart';
|
||||||
|
|
||||||
|
Future<String?> getTwonlySafeBackupUrl() async {
|
||||||
|
final user = await getUser();
|
||||||
|
if (user == null || user.twonlySafeBackup == null) return null;
|
||||||
|
|
||||||
|
String backupServerUrl = "https://safe.twonly.eu/";
|
||||||
|
|
||||||
|
if (user.backupServer != null) {
|
||||||
|
backupServerUrl = user.backupServer!.serverUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
String backupId =
|
||||||
|
uint8ListToHex(user.twonlySafeBackup!.backupId).toLowerCase();
|
||||||
|
|
||||||
|
return "${backupServerUrl}backups/$backupId";
|
||||||
|
}
|
||||||
|
|
||||||
Future performTwonlySafeBackup({bool force = false}) async {
|
Future performTwonlySafeBackup({bool force = false}) async {
|
||||||
Log.info("Starting new backup creation.");
|
|
||||||
final user = await getUser();
|
final user = await getUser();
|
||||||
|
|
||||||
if (user == null || user.twonlySafeBackup == null) {
|
if (user == null || user.twonlySafeBackup == null) {
|
||||||
|
|
@ -32,6 +48,15 @@ Future performTwonlySafeBackup({bool force = false}) async {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DateTime? lastUpdateTime = user.twonlySafeBackup!.lastBackupDone;
|
||||||
|
if (!force && lastUpdateTime != null) {
|
||||||
|
if (lastUpdateTime.isAfter(DateTime.now().subtract(Duration(days: 1)))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.info("Starting new twonly Safe-Backup.");
|
||||||
|
|
||||||
final baseDir = (await getApplicationSupportDirectory()).path;
|
final baseDir = (await getApplicationSupportDirectory()).path;
|
||||||
|
|
||||||
final backupDir = Directory(join(baseDir, "backup_twonly_safe/"));
|
final backupDir = Directory(join(baseDir, "backup_twonly_safe/"));
|
||||||
|
|
@ -133,11 +158,7 @@ Future performTwonlySafeBackup({bool force = false}) async {
|
||||||
Log.info(
|
Log.info(
|
||||||
"Create twonly Safe backup with a size of ${encryptedBackupBytes.length} bytes.");
|
"Create twonly Safe backup with a size of ${encryptedBackupBytes.length} bytes.");
|
||||||
|
|
||||||
String backupServerUrl = "https://safe.twonly.eu/";
|
|
||||||
|
|
||||||
if (user.backupServer != null) {
|
if (user.backupServer != null) {
|
||||||
backupServerUrl = user.backupServer!.serverUrl;
|
|
||||||
|
|
||||||
if (encryptedBackupBytes.length > user.backupServer!.maxBackupBytes) {
|
if (encryptedBackupBytes.length > user.backupServer!.maxBackupBytes) {
|
||||||
Log.error("Backup is to big for the alternative backup server.");
|
Log.error("Backup is to big for the alternative backup server.");
|
||||||
await updateUserdata((user) {
|
await updateUserdata((user) {
|
||||||
|
|
@ -148,14 +169,11 @@ Future performTwonlySafeBackup({bool force = false}) async {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String backupId =
|
|
||||||
uint8ListToHex(user.twonlySafeBackup!.backupId).toLowerCase();
|
|
||||||
|
|
||||||
final task = UploadTask.fromFile(
|
final task = UploadTask.fromFile(
|
||||||
taskId: "backup",
|
taskId: "backup",
|
||||||
file: encryptedBackupBytesFile,
|
file: encryptedBackupBytesFile,
|
||||||
httpRequestMethod: "PUT",
|
httpRequestMethod: "PUT",
|
||||||
url: "${backupServerUrl}backups/$backupId",
|
url: (await getTwonlySafeBackupUrl())!,
|
||||||
requiresWiFi: true,
|
requiresWiFi: true,
|
||||||
priority: 5,
|
priority: 5,
|
||||||
retries: 2,
|
retries: 2,
|
||||||
|
|
@ -218,21 +236,31 @@ Future enableTwonlySafe(String password) async {
|
||||||
);
|
);
|
||||||
return user;
|
return user;
|
||||||
});
|
});
|
||||||
startTwonlySafeBackup();
|
performTwonlySafeBackup(force: true);
|
||||||
performTwonlySafeBackup();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future disableTwonlySafe() async {
|
Future disableTwonlySafe() async {
|
||||||
|
final serverUrl = await getTwonlySafeBackupUrl();
|
||||||
|
if (serverUrl != null) {
|
||||||
|
try {
|
||||||
|
final response = await http.delete(
|
||||||
|
Uri.parse(serverUrl),
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json', // Set the content type if needed
|
||||||
|
// Add any other headers if required
|
||||||
|
},
|
||||||
|
);
|
||||||
|
Log.info("Download deleted with: ${response.statusCode}");
|
||||||
|
} catch (e) {
|
||||||
|
Log.error("Could not connect to the server.");
|
||||||
|
}
|
||||||
|
}
|
||||||
await updateUserdata((user) {
|
await updateUserdata((user) {
|
||||||
user.twonlySafeBackup = null;
|
user.twonlySafeBackup = null;
|
||||||
return user;
|
return user;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future startTwonlySafeBackup() async {
|
|
||||||
print("startTwonlySafeBackup");
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<(Uint8List, Uint8List)> getMasterKey(
|
Future<(Uint8List, Uint8List)> getMasterKey(
|
||||||
String password,
|
String password,
|
||||||
String username,
|
String username,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ class _TwonlyIdentityBackupViewState extends State<TwonlyIdentityBackupView> {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await Future.delayed(Duration(milliseconds: 100));
|
||||||
await enableTwonlySafe(passwordCtrl.text);
|
await enableTwonlySafe(passwordCtrl.text);
|
||||||
|
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue