73 lines
1.9 KiB
Dart
73 lines
1.9 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../../../app/error_message.dart';
|
|
import '../../../app/load_state.dart';
|
|
import '../../../models/schedule_task.dart';
|
|
import '../../shared/providers/core_providers.dart';
|
|
|
|
final tasksProvider =
|
|
NotifierProvider<TasksNotifier, LoadState<List<ScheduleTask>>>(
|
|
() => TasksNotifier(),
|
|
);
|
|
|
|
class TasksNotifier extends Notifier<LoadState<List<ScheduleTask>>> {
|
|
@override
|
|
LoadState<List<ScheduleTask>> build() =>
|
|
const LoadState.idle(<ScheduleTask>[]);
|
|
|
|
Future<void> load() async {
|
|
state = LoadState.loading(state.data);
|
|
try {
|
|
final api = ref.read(apiProvider);
|
|
final res = await api.getTasks();
|
|
final tasks = ScheduleTask.listFromApi(res.data);
|
|
|
|
state = tasks.isEmpty ? LoadState.empty(tasks) : LoadState.data(tasks);
|
|
} catch (e) {
|
|
state = LoadState.error(state.data, describeLoadError(e));
|
|
}
|
|
}
|
|
|
|
Future<void> cancel(String jobId) async {
|
|
await ref.read(apiProvider).cancelTask(jobId);
|
|
await load();
|
|
}
|
|
|
|
Future<void> addOnce({
|
|
required String targetId,
|
|
required bool targetState,
|
|
int? hoursFromNow,
|
|
String? runAt,
|
|
bool isGroup = true,
|
|
}) async {
|
|
final params = <String, dynamic>{
|
|
'target_id': targetId,
|
|
'state': targetState,
|
|
'is_group': isGroup,
|
|
};
|
|
if (hoursFromNow != null) params['hours_from_now'] = hoursFromNow;
|
|
if (runAt != null) params['run_at'] = runAt;
|
|
await ref.read(apiProvider).scheduleOnce(params);
|
|
await load();
|
|
}
|
|
|
|
Future<void> addCron({
|
|
required String targetId,
|
|
required String hour,
|
|
required String minute,
|
|
String dayOfWeek = '*',
|
|
bool isGroup = true,
|
|
bool targetState = true,
|
|
}) async {
|
|
await ref.read(apiProvider).scheduleCron({
|
|
'target_id': targetId,
|
|
'hour': hour,
|
|
'minute': minute,
|
|
'day_of_week': dayOfWeek,
|
|
'is_group': isGroup,
|
|
'state': targetState,
|
|
});
|
|
await load();
|
|
}
|
|
}
|