feat: cartões de publicação em canais e corrreções de salas arquivadas
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled

- Canais: publicações viram cartões de largura total mantendo todas as
  funções do balão (reações, resposta, editar, excluir, comentários em
  thread). Composer de publicação fica restrito a admins no feed; membros
  comentam via tela de thread. Canais novos usam events_default 0 para
  permitir comentários e reações.
- Ao sair/excluir uma sala, a cópia local é removida do banco imediatamente;
  salas já deixadas no servidor não apresentam mais erro ao excluir de novo.
- Classificação mural/canal carregada direto do sync (room_type em
  importantStateEvents + postLoad) sem precisar abrir a sala.
- Diálogos com raio e padding reduzidos (dialogTheme, text input e ok/cancel).
- Ícones do app regenerados (logo_background) e dependência linkify.
This commit is contained in:
2026-09-14 08:30:25 -03:00
parent 41a6a52393
commit ebafa1dc39
29 changed files with 10543 additions and 9965 deletions

View File

@@ -31,13 +31,32 @@ class ArchiveController extends State<Archive> {
context: context,
future: () async {
Logs().v('Forget room ${archive.last.room.getLocalizedDisplayname()}');
await archive[i].room.forget();
await forgetRoom(archive[i].room);
archive.removeAt(i);
},
);
setState(() {});
}
/// Forgets [room] and treats a room that is already gone on the server as
/// success, so a leftover local copy can always be removed without errors.
Future<void> forgetRoom(Room room) async {
try {
await room.forget();
} on MatrixException catch (e, s) {
if (!{
MatrixError.M_FORBIDDEN,
MatrixError.M_NOT_FOUND,
MatrixError.M_UNKNOWN,
}.contains(e.error)) {
Logs().w('Failed to forget room ${room.id}', e, s);
rethrow;
}
Logs().w('Room ${room.id} is already gone, cleaning up locally...', e, s);
room.client.rooms.remove(room);
}
}
Future<void> forgetAllAction() async {
final archive = this.archive;
if (archive.isEmpty) return;
@@ -62,7 +81,7 @@ class ArchiveController extends State<Archive> {
Logs().v(
'Forget room ${archive.last.room.getLocalizedDisplayname()}',
);
await archive.last.room.forget();
await forgetRoom(archive.last.room);
archive.removeLast();
}
},