summaryrefslogtreecommitdiff
path: root/lib/services
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 15:14:43 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 15:14:43 +0200
commit9144664c98824924e3d7668557a4455693bcf7f6 (patch)
tree5427daae2a5aa20a99809da44d11e33d0fe800a0 /lib/services
parent00bf8823311c067f5b0e9a785a5048e6bd8ad122 (diff)
saving and reading
Diffstat (limited to 'lib/services')
-rw-r--r--lib/services/program_provider_service.dart104
1 files changed, 104 insertions, 0 deletions
diff --git a/lib/services/program_provider_service.dart b/lib/services/program_provider_service.dart
new file mode 100644
index 0000000..375ed8b
--- /dev/null
+++ b/lib/services/program_provider_service.dart
@@ -0,0 +1,104 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:training_planner/services/ishift_provider_service.dart';
+import 'package:training_planner/shift.dart';
+import 'package:uuid/uuid.dart';
+import 'package:in_date_utils/in_date_utils.dart' as DateUtilities;
+import 'package:path_provider/path_provider.dart';
+
+class ShiftProviderService extends IProgramProviderService {
+ ShiftProviderService() {
+ writeShiftsFromFile([]);
+ }
+
+ Future<String> get _localPath async {
+ final directory = await getApplicationDocumentsDirectory();
+ return directory.path;
+ }
+
+ Future<File> get _localFile async {
+ final path = await _localPath;
+ return File('$path/shifts.json');
+ }
+
+ Future<void> writeShiftsFromFile(List<Shift> shifts) async {
+ try {
+ final file = await _localFile;
+ String content = jsonEncode(shifts);
+ await file.writeAsString(content);
+ print('Writing to file: ' + content);
+ } catch (e, stacktrace) {
+ print(stacktrace);
+ print(e);
+ }
+ }
+
+ Future<List<Shift>> readShiftsFromFile() async {
+ try {
+ final file = await _localFile;
+ final contents = await file.readAsString();
+ final Iterable iterable = await jsonDecode(contents);
+ List<Shift> data =
+ List<Shift>.from(iterable.map((model) => Shift.fromJson(model)));
+ print('Read from file: ' + contents);
+
+ return data;
+ } catch (e, stacktrace) {
+ print(stacktrace);
+ print(e);
+ return [];
+ }
+ }
+
+ @override
+ Future<void> updateShift(Shift shift) async {
+ List<Shift> savedShifts = await readShiftsFromFile();
+ for (var item in savedShifts) {
+ if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) {
+ item.isActive = shift.isActive;
+ item.start = shift.start;
+ item.end = shift.end;
+ item.type = shift.type;
+ break;
+ }
+ }
+ await writeShiftsFromFile(savedShifts);
+ }
+
+ @override
+ Future<void> addShift(Shift shift) async {
+ List<Shift> savedShifts = await readShiftsFromFile();
+ for (var item in savedShifts) {
+ if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) {
+ return;
+ }
+ }
+
+ savedShifts.add(shift);
+ await writeShiftsFromFile(savedShifts);
+ }
+
+ @override
+ Future<List<Shift>> getPastShifts() async {
+ List<Shift> shifts = await readShiftsFromFile();
+ shifts.sort((a, b) => a.start.compareTo(b.start));
+
+ return shifts;
+ }
+
+ @override
+ Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek) async {
+ var items = await getPastShifts();
+ List<Shift> result = [];
+
+ for (var item in items) {
+ if (DateUtilities.DateUtils.firstDayOfWeek(item.start) ==
+ firstDayOfWeek) {
+ result.add(item);
+ }
+ }
+
+ return result;
+ }
+}