summaryrefslogtreecommitdiff
path: root/lib/services/log_service.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/services/log_service.dart')
-rw-r--r--lib/services/log_service.dart57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/services/log_service.dart b/lib/services/log_service.dart
new file mode 100644
index 0000000..f2f662c
--- /dev/null
+++ b/lib/services/log_service.dart
@@ -0,0 +1,57 @@
+import 'dart:io';
+
+import 'package:intl/intl.dart';
+import 'package:path/path.dart' as p;
+
+class LogEntry {
+ LogEntry({required this.file, required this.timestamp});
+ final File file;
+ final DateTime timestamp;
+}
+
+final _filenameRegex = RegExp(r'^ql-(\d{6})-(\d{6})\.md$');
+final _timestampFormat = DateFormat('yyMMdd-HHmmss');
+
+Future<File> logEntry(String dir, String text, {DateTime? now}) async {
+ final stamp = _timestampFormat.format(now ?? DateTime.now());
+ final file = File(p.join(dir, 'ql-$stamp.md'));
+ await file.writeAsString(text);
+ return file;
+}
+
+Future<List<LogEntry>> listEntries(String dir) async {
+ final directory = Directory(dir);
+ if (!await directory.exists()) return const [];
+ final entries = <LogEntry>[];
+ await for (final entity in directory.list(followLinks: false)) {
+ if (entity is! File) continue;
+ final ts = _parseFilename(p.basename(entity.path));
+ if (ts == null) continue;
+ entries.add(LogEntry(file: entity, timestamp: ts));
+ }
+ entries.sort((a, b) => b.timestamp.compareTo(a.timestamp));
+ return entries;
+}
+
+Future<void> deleteEntry(File f) async {
+ if (await f.exists()) await f.delete();
+}
+
+DateTime? _parseFilename(String name) {
+ final m = _filenameRegex.firstMatch(name);
+ if (m == null) return null;
+ final d = m.group(1)!; // YYMMDD
+ final t = m.group(2)!; // HHMMSS
+ try {
+ return DateTime(
+ 2000 + int.parse(d.substring(0, 2)),
+ int.parse(d.substring(2, 4)),
+ int.parse(d.substring(4, 6)),
+ int.parse(t.substring(0, 2)),
+ int.parse(t.substring(2, 4)),
+ int.parse(t.substring(4, 6)),
+ );
+ } catch (_) {
+ return null;
+ }
+}