2024-06-09 17:06:10 +00:00
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:kalodings/food_entry_bloc.dart';
|
|
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
|
|
|
|
class FoodStorage {
|
2024-06-11 17:05:42 +00:00
|
|
|
static late FoodStorage _instance;
|
2024-06-09 17:06:10 +00:00
|
|
|
late String path;
|
|
|
|
FoodStorage._create();
|
|
|
|
|
|
|
|
static Future<FoodStorage> create() async {
|
|
|
|
var storage = FoodStorage._create();
|
|
|
|
var directory = await getApplicationCacheDirectory();
|
|
|
|
storage.path = directory.path;
|
2024-06-11 17:05:42 +00:00
|
|
|
_instance = storage;
|
2024-06-09 17:06:10 +00:00
|
|
|
|
2024-06-11 17:05:42 +00:00
|
|
|
return _instance;
|
2024-06-09 17:06:10 +00:00
|
|
|
}
|
|
|
|
|
2024-06-11 17:05:42 +00:00
|
|
|
static FoodStorage getInstance() => _instance;
|
|
|
|
|
2024-06-09 17:06:10 +00:00
|
|
|
Future<List<FoodEntry>> getEntriesForDate(DateTime date) async {
|
|
|
|
List<FoodEntry> entries = [];
|
|
|
|
var filePath = '$path/${date.year}/${date.month}/${date.day}';
|
|
|
|
|
|
|
|
var file = File(filePath);
|
|
|
|
var exists = await file.exists();
|
|
|
|
|
|
|
|
if (!exists) return [];
|
|
|
|
|
|
|
|
var lines = await file.readAsLines();
|
|
|
|
|
|
|
|
for (var line in lines) {
|
|
|
|
var fields = line.split(',');
|
|
|
|
var entry = FoodEntry(
|
|
|
|
name: fields[1],
|
|
|
|
mass: double.parse(fields[2]),
|
|
|
|
kcalPerMass: double.parse(fields[3]));
|
|
|
|
entries.add(entry);
|
|
|
|
}
|
|
|
|
|
|
|
|
return entries;
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> writeEntriesForDate(
|
|
|
|
DateTime date, List<FoodEntry> foodEntries) async {
|
|
|
|
var filePath = '$path/${date.year}/${date.month}/${date.day}';
|
|
|
|
var file = File(filePath);
|
|
|
|
|
|
|
|
var exists = await file.exists();
|
|
|
|
|
|
|
|
if (!exists) {
|
|
|
|
await file.create(recursive: true);
|
|
|
|
}
|
|
|
|
|
|
|
|
String fullString = '';
|
|
|
|
for (var entry in foodEntries) {
|
|
|
|
fullString += '${entry.toString()}\n';
|
|
|
|
}
|
|
|
|
|
|
|
|
await file.writeAsString(fullString);
|
|
|
|
}
|
2024-06-10 01:06:56 +00:00
|
|
|
|
|
|
|
Future<void> updateLimit(double limit) async {
|
|
|
|
var filePath = '$path/limit';
|
|
|
|
var file = File(filePath);
|
|
|
|
|
|
|
|
var exists = await file.exists();
|
|
|
|
if (!exists) {
|
|
|
|
await file.create();
|
|
|
|
}
|
|
|
|
|
|
|
|
await file.writeAsString(limit.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<double> readLimit() async {
|
|
|
|
var filePath = '$path/limit';
|
|
|
|
var file = File(filePath);
|
|
|
|
var exists = await file.exists();
|
|
|
|
|
|
|
|
if (!exists) {
|
|
|
|
return 2000;
|
|
|
|
}
|
|
|
|
|
|
|
|
var line = await file.readAsLines();
|
|
|
|
|
|
|
|
double limit;
|
|
|
|
try {
|
|
|
|
limit = double.parse(line[0]);
|
|
|
|
} catch (e) {
|
|
|
|
limit = 2000;
|
|
|
|
}
|
|
|
|
|
|
|
|
return limit;
|
|
|
|
}
|
2024-06-09 17:06:10 +00:00
|
|
|
}
|