From 349d704b67cf7d07bd8f8878735f98158a9a1756 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 18 Aug 2022 11:03:01 +0200 Subject: shifts worden per week opgeslagen in bestanden --- README | 4 +- lib/services/local_shift_provider_service.dart | 69 ++++++++++++++++++-------- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/README b/README index c42ee59..cac3a0d 100644 --- a/README +++ b/README @@ -1,7 +1,5 @@ # Aanpassingen - exceptions afhandelen binnen localShiftProvider en doorgeven aan ui -- uursalaris opslaan per shift zodat aanpassingen oudere shifts niet aanpassen -- bestand per week maken # Nog te doen - laad animaties voor het lezen van locale bestanden (testen met delays) @@ -13,7 +11,7 @@ - Begin en eindtijd invullen/aanpassen per shift - Begin en eindtijd live bijhouden - Maandelijks overzicht van gewerkte uren en inkomen -- data wordt lokaal opgeslagen +- data wordt lokaal en veilig opgeslagen - gemakkelijk meerdere shifts tegelijk aanmelden - schatting over aantal ingeplande uren en inkomen - werkt on alle soorten schermen diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart index 917e382..d6cec51 100644 --- a/lib/services/local_shift_provider_service.dart +++ b/lib/services/local_shift_provider_service.dart @@ -10,40 +10,50 @@ import 'package:path_provider/path_provider.dart'; class LocalShiftProviderService extends IProgramProviderService { LocalShiftProviderService() {} + Future get _localDir async { + final directory = await getApplicationDocumentsDirectory(); + return directory; + } + Future get _localPath async { final directory = await getApplicationDocumentsDirectory(); return directory.path; } - Future get _localFile async { + Future _localFile(String postfix) async { final path = await _localPath; - File file = File('$path/shifts.json'); + String fullPath = '$path/shifts_' + postfix + '.json'; + File file = File(fullPath); bool exists = await file.exists(); if (!exists) { - print('created shifts.json'); + print('creating ' + fullPath); await file.create(); - await writeShiftsFromFile([]); + await file.writeAsString(jsonEncode([])); } - return File('$path/shifts.json'); + return File(fullPath); } - Future writeShiftsFromFile(List shifts) async { + Future writeShiftsToFile(List shifts) async { try { - final file = await _localFile; - String content = jsonEncode(shifts); - print('writing content: ' + content); - await file.writeAsString(content); + for (var shift in shifts) { + final file = await _localFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); + print(DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); + String content = jsonEncode(shifts); + print('writing content to ' + file.path + ' -- ' + content); + await file.writeAsString(content); + } } catch (e, stacktrace) { print(stacktrace); print(e); } } - Future> readShiftsFromFile() async { + Future> readShiftsFromFile(DateTime startOfWeek) async { try { - final file = await _localFile; + final file = await _localFile(startOfWeek.toString()); final contents = await file.readAsString(); final Iterable iterable = await jsonDecode(contents); List data = @@ -59,7 +69,8 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future updateShift(Shift shift) async { - List savedShifts = await readShiftsFromFile(); + List savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { item.isActive = shift.isActive; @@ -69,12 +80,13 @@ class LocalShiftProviderService extends IProgramProviderService { break; } } - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); } @override Future addShift(Shift shift) async { - List savedShifts = await readShiftsFromFile(); + List savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { return false; @@ -82,13 +94,28 @@ class LocalShiftProviderService extends IProgramProviderService { } savedShifts.add(shift); - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); return true; } @override Future> getPastShifts() async { - List shifts = await readShiftsFromFile(); + List shifts = []; + Directory dir = await _localDir; + var list = dir.listSync(); + for (var item in list) { + if (!item.path.endsWith('.json') || !item.path.contains('shifts')) { + continue; + } + + final file = File(item.path); + final contents = await file.readAsString(); + final Iterable iterable = await jsonDecode(contents); + List data = + List.from(iterable.map((model) => Shift.fromJson(model))); + shifts.addAll(data); + } + shifts.sort((a, b) => a.start.compareTo(b.start)); return shifts; @@ -96,7 +123,8 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future> getShiftsForWeek(DateTime firstDayOfWeek) async { - var items = await getPastShifts(); + var items = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(firstDayOfWeek)); List result = []; for (var item in items) { @@ -111,13 +139,14 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future deleteShift(Shift shift) async { - List savedShifts = await readShiftsFromFile(); + List savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { savedShifts.remove(item); break; } } - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); } } -- cgit v1.2.3-70-g09d2