A framework for building convergent cross-platform Nextcloud clients using Flutter.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.0 KiB

part of '../neon_notes.dart';
3 years ago
abstract interface class NotesBlocEvents {
void createNote({
final String title = '',
final String category = '',
});
void updateNote(
final int id,
final String etag, {
final String? title,
final String? category,
final String? content,
final bool? favorite,
});
void deleteNote(final int id);
3 years ago
}
abstract interface class NotesBlocStates {
BehaviorSubject<Result<List<notes.Note>>> get notesList;
3 years ago
}
class NotesBloc extends InteractiveBloc implements NotesBlocEvents, NotesBlocStates {
3 years ago
NotesBloc(
this.options,
this.account,
3 years ago
) {
unawaited(refresh());
3 years ago
}
final NotesAppSpecificOptions options;
final Account account;
3 years ago
@override
void dispose() {
unawaited(notesList.close());
3 years ago
super.dispose();
}
@override
BehaviorSubject<Result<List<notes.Note>>> notesList = BehaviorSubject<Result<List<notes.Note>>>();
@override
Future<void> refresh() async {
await RequestManager.instance.wrapNextcloud<List<notes.Note>, BuiltList<notes.Note>, void>(
account.id,
'notes-notes',
notesList,
account.client.notes.getNotesRaw(),
(final response) => List<notes.Note>.from(response.body),
);
}
3 years ago
@override
void createNote({final String title = '', final String category = ''}) {
wrapAction(
() async => account.client.notes.createNote(
title: title,
category: category,
),
);
}
@override
void deleteNote(final int id) {
wrapAction(() async => account.client.notes.deleteNote(id: id));
}
@override
void updateNote(
final int id,
final String etag, {
final String? title,
final String? category,
final String? content,
final bool? favorite,
}) {
wrapAction(
() async => account.client.notes.updateNote(
id: id,
title: title,
category: category,
content: content,
favorite: favorite ?? false ? 1 : 0,
ifMatch: '"$etag"',
),
);
}
3 years ago
}