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';
|
2021-06-18 08:29:48 +00:00
|
|
|
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 {
|
2023-10-28 11:03:16 +00:00
|
|
|
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(
|
2024-01-25 08:13:08 +00:00
|
|
|
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
|
|
|
}
|