summaryrefslogtreecommitdiff
path: root/lib/services
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-08-18 11:03:01 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2022-08-18 11:03:01 +0200
commit349d704b67cf7d07bd8f8878735f98158a9a1756 (patch)
treecd5a4772c4c9457f7b77f1fc20889544b472b7da /lib/services
parentd7d1fccb42424c11e6a716558ac63fd633c9f3a4 (diff)
shifts worden per week opgeslagen in bestanden
Diffstat (limited to 'lib/services')
-rw-r--r--lib/services/local_shift_provider_service.dart69
1 files changed, 49 insertions, 20 deletions
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<Directory> get _localDir async {
+ final directory = await getApplicationDocumentsDirectory();
+ return directory;
+ }
+
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
- Future<File> get _localFile async {
+ Future<File> _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<void> writeShiftsFromFile(List<Shift> shifts) async {
+ Future<void> writeShiftsToFile(List<Shift> 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<List<Shift>> readShiftsFromFile() async {
+ Future<List<Shift>> 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<Shift> data =
@@ -59,7 +69,8 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<void> updateShift(Shift shift) async {
- List<Shift> savedShifts = await readShiftsFromFile();
+ List<Shift> 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<bool> addShift(Shift shift) async {
- List<Shift> savedShifts = await readShiftsFromFile();
+ List<Shift> 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<List<Shift>> getPastShifts() async {
- List<Shift> shifts = await readShiftsFromFile();
+ List<Shift> 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<Shift> data =
+ List<Shift>.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<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek) async {
- var items = await getPastShifts();
+ var items = await readShiftsFromFile(
+ DateUtilities.DateUtils.firstDayOfWeek(firstDayOfWeek));
List<Shift> result = [];
for (var item in items) {
@@ -111,13 +139,14 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<void> deleteShift(Shift shift) async {
- List<Shift> savedShifts = await readShiftsFromFile();
+ List<Shift> 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);
}
}