Skip to content

Commit

Permalink
feat(file_manager): read and write gzip-compressed files (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Dec 5, 2021
1 parent 9cdae9b commit 9dd70d0
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
5 changes: 3 additions & 2 deletions lib/model/cabin_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:cabin_booking/model/booking.dart';
import 'package:cabin_booking/model/booking_manager.dart';
import 'package:cabin_booking/model/cabin.dart';
import 'package:cabin_booking/model/date_range.dart';
import 'package:cabin_booking/model/file_manager.dart';
import 'package:cabin_booking/model/recurring_booking.dart';
import 'package:cabin_booking/model/writable_manager.dart';
import 'package:cabin_booking/utils/time_of_day_extension.dart';
Expand Down Expand Up @@ -359,7 +360,7 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
Future<Set<Cabin>> readFromFile() async {
try {
final file = await fileManager.localFile(fileName);
final content = await file.readAsString();
final content = await file.readAsUncompressedString();

final cabins = _parseCabins(content);

Expand All @@ -383,7 +384,7 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
try {
final file = await fileManager.localFile(fileName);

await file.writeAsString(
await file.writeAsCompressedString(
json.encode(cabinsToJson()),
);

Expand Down
12 changes: 11 additions & 1 deletion lib/model/file_manager.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'dart:io' show File;
import 'dart:convert';
import 'dart:io' show File, gzip;

import 'package:path_provider/path_provider.dart';

Expand All @@ -21,3 +22,12 @@ class FileManager {
return File('$path/$fileName.json');
}
}

extension FileExtension on File {
Future<File> writeAsCompressedString(String contents) => writeAsString(
String.fromCharCodes(gzip.encode(utf8.encode(contents))),
);

Future<String> readAsUncompressedString() async =>
utf8.decode(gzip.decode((await readAsString()).codeUnits));
}

0 comments on commit 9dd70d0

Please sign in to comment.