todo-app/lib/sync/local_backup_factory_io.dart
Krzysztof kuhy Rudnicki a0d37c4df8
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
file-length / file length <= 250 lines (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
release-apk / release (APK) (push) Waiting to run
Re-point paths for the ~ reorganisation (home-tidy)
Also bumps Flutter 3.47.3, flutter_secure_storage 11.1.0, idb_shim 2.9.9,
sqflite_common_ffi 2.4.3, very_good_analysis 11 and mcp 2.2.0 so the
freshness gate lets this through; v11 adds async_return_with_no_await, so
the 18 flagged return sites now await explicitly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwtowrowDXx6ccmWVPkCaF
2026-09-11 19:49:03 +02:00

38 lines
1.4 KiB
Dart

// coverage:ignore-file
// Real-filesystem platform wiring, extracted verbatim from the
// `coverage:ignore` block it previously lived in inside capture_screen.dart.
// It resolves paths from the actual HOME/documents directory, so exercising it
// under test would write outside the sandbox; tests inject an in-memory
// LocalBackup instead. Verified by running the app.
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:todo/data/note_repository.dart';
import 'package:todo/sync/local_backup.dart';
/// Builds the platform [LocalBackup] on a `dart:io` host (Android).
///
/// On mobile this lives in the app's documents directory, where Android Auto
/// Backup can pick it up.
LocalBackup createLocalBackup(NoteRepository repository) {
Future<File> backupFile() async {
if (Platform.isAndroid || Platform.isIOS) {
final dir = await getApplicationDocumentsDirectory();
return File('${dir.path}/todo-backlog.md');
}
final home = Platform.environment['HOME'] ?? Directory.current.path;
final dir = Directory('$home/todo')..createSync(recursive: true);
return File('${dir.path}/BACKLOG.md');
}
return LocalBackup(
fetch: repository.listNotes,
reader: () async {
final file = await backupFile();
return file.existsSync() ? await file.readAsString() : null;
},
writer: (markdown) async =>
await (await backupFile()).writeAsString(markdown),
);
}