feat: persist timetable and validate confirmed imports

This commit is contained in:
Codex
2026-10-12 23:18:51 +08:00
parent ae8e347e49
commit 808af007a2
13 changed files with 852 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
import '../domain/course_occurrence.dart';
class DeviceCalendar {
const DeviceCalendar(this.id, this.name);
final String id, name;
}
abstract class CalendarService {
Future<bool> requestAccess();
Future<List<DeviceCalendar>> listWritableCalendars();
Future<Map<String, String>> sync(
List<CourseOccurrence> occurrences,
String calendarId,
Map<String, String> knownEventIds,
);
Future<void> deleteOwned(Map<String, String> eventIds);
}
@@ -0,0 +1,25 @@
import '../domain/app_settings.dart';
import '../domain/course_occurrence.dart';
enum ReminderStatus { off, permissionDenied, exact, inexact, error }
class ReminderResult {
const ReminderResult(
this.status, {
this.scheduledCount = 0,
this.message = '',
});
final ReminderStatus status;
final int scheduledCount;
final String message;
}
abstract class NotificationService {
Future<ReminderResult> reconcile(
List<CourseOccurrence> occurrences,
AppSettings settings,
DateTime now,
);
Future<void> requestPermissions();
Future<void> cancelOwned();
}