summaryrefslogtreecommitdiff
path: root/lib/pages
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2023-06-09 21:25:23 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2023-06-09 21:25:23 +0200
commit97e0c8cef73064d121dcb38ab904e8d5d8ba5cdd (patch)
tree85b854c1d7591a5860bab8135252ce59034b6c23 /lib/pages
parentcc5fc184b6ea35cf8204803958fe0d29ee256735 (diff)
backup function
Diffstat (limited to 'lib/pages')
-rw-r--r--lib/pages/developer_page.dart76
-rw-r--r--lib/pages/navigation_page.dart6
2 files changed, 78 insertions, 4 deletions
diff --git a/lib/pages/developer_page.dart b/lib/pages/developer_page.dart
index daf0838..2b1b54c 100644
--- a/lib/pages/developer_page.dart
+++ b/lib/pages/developer_page.dart
@@ -1,6 +1,10 @@
import 'dart:io';
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_archive/flutter_archive.dart';
+import 'package:path_provider/path_provider.dart';
+import 'package:permission_handler/permission_handler.dart';
import 'package:training_planner/config/defaults.dart';
import 'package:training_planner/events/RefreshWeekEvent.dart';
import 'package:training_planner/main.dart';
@@ -69,6 +73,74 @@ class _DeveloperPageState extends State<DeveloperPage> {
});
}
+ Future<String?> getDownloadPath() async {
+ Directory? directory;
+ try {
+ if (Platform.isIOS) {
+ directory = await getApplicationDocumentsDirectory();
+ } else {
+ directory = Directory('/storage/emulated/0/Download');
+ // Put file in global download folder, if for an unknown reason it didn't exist, we fallback
+ // ignore: avoid_slow_async_io
+ if (!await directory.exists())
+ directory = await getExternalStorageDirectory();
+ }
+ } catch (err, stack) {
+ print("Cannot get download folder path");
+ }
+ return directory?.path;
+ }
+
+ File _createZipFile(String fileName) {
+ final zipFilePath = fileName;
+ final zipFile = File(zipFilePath);
+
+ if (zipFile.existsSync()) {
+ print("Deleting existing zip file: ${zipFile.path}");
+ zipFile.deleteSync();
+ }
+ return zipFile;
+ }
+
+ _exportLocalFiles() async {
+ List<String> result = [];
+ Directory dir = await getApplicationDocumentsDirectory();
+ var list = dir.listSync();
+ for (var item in list) {
+ if (item.path.endsWith('.json')) {
+ result.add(item.path);
+ }
+ }
+
+ if (await Permission.storage.request().isGranted) {
+ String? path = await getDownloadPath();
+ if (path != null) {
+ path += '/backup.zip';
+ var zip = _createZipFile(path);
+
+ int onProgressCallCount1 = 0;
+ try {
+ await ZipFile.createFromDirectory(
+ sourceDir: await getApplicationDocumentsDirectory(),
+ zipFile: zip,
+ recurseSubDirs: false,
+ includeBaseDirectory: false,
+ onZipping: (fileName, isDirectory, progress) {
+ ++onProgressCallCount1;
+ print('Zip #1:');
+ print('progress: ${progress.toStringAsFixed(1)}%');
+ print('name: $fileName');
+ print('isDirectory: $isDirectory');
+ return ZipFileOperation.includeItem;
+ },
+ );
+ } on PlatformException catch (e) {
+ print(e);
+ }
+ }
+ }
+ }
+
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -86,7 +158,9 @@ class _DeveloperPageState extends State<DeveloperPage> {
Text('Bestanden: ' + file_count.toString()),
ElevatedButton(
onPressed: _toggleDebugMode,
- child: Text('Test Modus: ' + debug_mode.toString()))
+ child: Text('Test Modus: ' + debug_mode.toString())),
+ ElevatedButton(
+ onPressed: _exportLocalFiles, child: Text('Export'))
/*
TextButton(
onPressed: () {
diff --git a/lib/pages/navigation_page.dart b/lib/pages/navigation_page.dart
index 9cf7277..9fcc9ae 100644
--- a/lib/pages/navigation_page.dart
+++ b/lib/pages/navigation_page.dart
@@ -67,7 +67,7 @@ class _NavigationPageState extends State<NavigationPage> {
initState() {
super.initState();
- SystemChrome.setEnabledSystemUIOverlays([]);
+ SystemChrome.setPreferredOrientations([]);
Wakelock.enable();
AutoOrientation.portraitDownMode();
@@ -251,8 +251,8 @@ class _NavigationPageState extends State<NavigationPage> {
taskLoadedEvent?.cancel();
Wakelock.disable();
AutoOrientation.portraitUpMode();
- SystemChrome.setEnabledSystemUIOverlays(
- [SystemUiOverlay.top, SystemUiOverlay.bottom]);
+ SystemChrome.setPreferredOrientations(
+ [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
super.dispose();
}
}