From 9144664c98824924e3d7668557a4455693bcf7f6 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Tue, 16 Aug 2022 15:14:43 +0200 Subject: saving and reading --- lib/services/program_provider_service.dart | 104 +++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 lib/services/program_provider_service.dart (limited to 'lib/services') 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 get _localPath async { + final directory = await getApplicationDocumentsDirectory(); + return directory.path; + } + + Future get _localFile async { + final path = await _localPath; + return File('$path/shifts.json'); + } + + Future writeShiftsFromFile(List 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> readShiftsFromFile() async { + try { + final file = await _localFile; + final contents = await file.readAsString(); + final Iterable iterable = await jsonDecode(contents); + List data = + List.from(iterable.map((model) => Shift.fromJson(model))); + print('Read from file: ' + contents); + + return data; + } catch (e, stacktrace) { + print(stacktrace); + print(e); + return []; + } + } + + @override + Future updateShift(Shift shift) async { + List 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 addShift(Shift shift) async { + List 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> getPastShifts() async { + List shifts = await readShiftsFromFile(); + shifts.sort((a, b) => a.start.compareTo(b.start)); + + return shifts; + } + + @override + Future> getShiftsForWeek(DateTime firstDayOfWeek) async { + var items = await getPastShifts(); + List result = []; + + for (var item in items) { + if (DateUtilities.DateUtils.firstDayOfWeek(item.start) == + firstDayOfWeek) { + result.add(item); + } + } + + return result; + } +} -- cgit v1.2.3-70-g09d2