fluffychat/lib/pages/archive/archive.dart

70 lines
1.9 KiB
Dart
Raw Normal View History

2021-10-26 16:50:34 +00:00
import 'package:flutter/material.dart';
2021-05-01 06:12:14 +00:00
import 'package:adaptive_dialog/adaptive_dialog.dart';
2021-10-26 16:50:34 +00:00
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:matrix/matrix.dart';
2021-10-26 16:50:34 +00:00
2021-11-09 20:32:16 +00:00
import 'package:fluffychat/pages/archive/archive_view.dart';
2021-05-22 06:53:52 +00:00
import 'package:fluffychat/widgets/matrix.dart';
2021-04-12 16:33:43 +00:00
class Archive extends StatefulWidget {
const Archive({super.key});
2021-10-14 16:09:30 +00:00
2021-04-12 16:33:43 +00:00
@override
ArchiveController createState() => ArchiveController();
}
class ArchiveController extends State<Archive> {
2023-10-29 09:59:07 +00:00
List<Room> archive = [];
2021-04-12 16:33:43 +00:00
Future<List<Room>> getArchive(BuildContext context) async {
2023-10-29 09:59:07 +00:00
if (archive.isNotEmpty) return archive;
return archive = await Matrix.of(context).client.loadArchive();
}
void forgetRoomAction(int i) async {
await showFutureLoadingDialog(
context: context,
future: () async {
Logs().v('Forget room ${archive.last.getLocalizedDisplayname()}');
await archive[i].forget();
archive.removeAt(i);
},
);
setState(() {});
2021-04-12 16:33:43 +00:00
}
2021-05-01 06:12:14 +00:00
void forgetAllAction() async {
2021-12-13 08:40:53 +00:00
final archive = this.archive;
2023-10-29 09:59:07 +00:00
final client = Matrix.of(context).client;
if (archive.isEmpty) return;
2021-05-01 06:12:14 +00:00
if (await showOkCancelAlertDialog(
useRootNavigator: false,
2021-05-01 06:12:14 +00:00
context: context,
2021-12-13 08:40:53 +00:00
title: L10n.of(context)!.areYouSure,
okLabel: L10n.of(context)!.yes,
cancelLabel: L10n.of(context)!.cancel,
message: L10n.of(context)!.clearArchive,
2021-05-01 06:12:14 +00:00
) !=
OkCancelResult.ok) {
return;
}
await showFutureLoadingDialog(
context: context,
future: () async {
while (archive.isNotEmpty) {
2023-01-20 15:59:50 +00:00
Logs().v('Forget room ${archive.last.getLocalizedDisplayname()}');
2021-05-01 06:12:14 +00:00
await archive.last.forget();
archive.removeLast();
}
},
);
2023-10-29 09:59:07 +00:00
client.clearArchivesFromCache();
2021-12-13 08:40:53 +00:00
setState(() {});
2021-05-01 06:12:14 +00:00
}
2021-04-12 16:33:43 +00:00
@override
2021-05-22 06:57:49 +00:00
Widget build(BuildContext context) => ArchiveView(this);
2021-04-12 16:33:43 +00:00
}