import 'dart:convert'; import 'package:localstore/localstore.dart'; import 'apiResponse.dart'; import 'webuntis/webuntisError.dart'; abstract class RequestCache { static const int cacheNothing = 0; static const int cacheMinute = 60; static const int cacheHour = 60 * 60; static const int cacheDay = 60 * 60 * 24; int maxCacheTime; Function(T) onUpdate; Function(Exception) onError; bool? renew; RequestCache(this.maxCacheTime, this.onUpdate, {this.onError = ignore, this.renew = false}); static void ignore(Exception e) {} Future start(String file, String document) async { var tableData = await Localstore.instance.collection(file).doc(document).get(); if(tableData != null) { onUpdate(onLocalData(tableData['json'])); } if(DateTime.now().millisecondsSinceEpoch - (maxCacheTime * 1000) < (tableData?['lastupdate'] ?? 0)) { if(renew == null || !renew!) return; } try { var newValue = await onLoad(); onUpdate(newValue); Localstore.instance.collection(file).doc(document).set({ 'json': jsonEncode(newValue), 'lastupdate': DateTime.now().millisecondsSinceEpoch }); } on WebuntisError catch(e) { onError(e); } } T onLocalData(String json); Future onLoad(); }