diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html index f85479d..e923c4a 100644 --- a/android/build/reports/problems/problems-report.html +++ b/android/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index e1e6aa1..c14f47d 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -894,6 +894,9 @@ }, "chatPermissions": "Chat permissions", "@chatPermissions": {}, + "chatThreads": "Threads", + "@chatThreads": {}, + "chatThreadsDescription": "See all threads in this room", "editDisplayname": "Edit displayname", "@editDisplayname": { "type": "String", diff --git a/assets/l10n/intl_ru.arb b/assets/l10n/intl_ru.arb index 8e50924..af8a974 100644 --- a/assets/l10n/intl_ru.arb +++ b/assets/l10n/intl_ru.arb @@ -893,6 +893,9 @@ }, "chatPermissions": "Права в чате", "@chatPermissions": {}, + "chatThreads": "Обсуждения", + "@chatThreads": {}, + "chatThreadsDescription": "Список всех обсуждений в этой комнате", "editDisplayname": "Отображаемое имя", "@editDisplayname": { "type": "String", @@ -937,7 +940,7 @@ "@globalChatId": {}, "accessAndVisibility": "Доступность и видимость", "@accessAndVisibility": {}, - "accessAndVisibilityDescription": "Кто может зайти и как найти этот чат.", + "accessAndVisibilityDescription": "Кто может зайти и как найти этот чат", "@accessAndVisibilityDescription": {}, "calls": "Звонки", "@calls": {}, diff --git a/lib/config/routes.dart b/lib/config/routes.dart index ed84b31..2841c06 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,6 +1,7 @@ import 'dart:async'; -import 'package:extera_next/pages/thread/thread.dart'; +import 'package:extera_next/pages/chat_thread/chat_threads.dart'; +import 'package:extera_next/pages/chat_thread/thread.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; @@ -152,6 +153,13 @@ abstract class AppRoutes { routes: [ GoRoute( path: 'threads', + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + ChatThreads( + roomId: state.pathParameters['roomid']!, + ), + ), redirect: loggedOutRedirect, routes: [ GoRoute( diff --git a/lib/generated/l10n/l10n.dart b/lib/generated/l10n/l10n.dart index 0142cb1..7d1a5ea 100644 --- a/lib/generated/l10n/l10n.dart +++ b/lib/generated/l10n/l10n.dart @@ -1317,6 +1317,18 @@ abstract class L10n { /// **'Chat permissions'** String get chatPermissions; + /// No description provided for @chatThreads. + /// + /// In en, this message translates to: + /// **'Threads'** + String get chatThreads; + + /// No description provided for @chatThreadsDescription. + /// + /// In en, this message translates to: + /// **'See all threads in this room'** + String get chatThreadsDescription; + /// No description provided for @editDisplayname. /// /// In en, this message translates to: diff --git a/lib/generated/l10n/l10n_ar.dart b/lib/generated/l10n/l10n_ar.dart index 1dca7be..129d998 100644 --- a/lib/generated/l10n/l10n_ar.dart +++ b/lib/generated/l10n/l10n_ar.dart @@ -659,6 +659,12 @@ class L10nAr extends L10n { @override String get chatPermissions => 'صلاحيات المحادثة'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'حرر الاسم العلني'; diff --git a/lib/generated/l10n/l10n_be.dart b/lib/generated/l10n/l10n_be.dart index e56739a..47ea2b6 100644 --- a/lib/generated/l10n/l10n_be.dart +++ b/lib/generated/l10n/l10n_be.dart @@ -663,6 +663,12 @@ class L10nBe extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_bn.dart b/lib/generated/l10n/l10n_bn.dart index 9999e47..bbd7340 100644 --- a/lib/generated/l10n/l10n_bn.dart +++ b/lib/generated/l10n/l10n_bn.dart @@ -663,6 +663,12 @@ class L10nBn extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_bo.dart b/lib/generated/l10n/l10n_bo.dart index 218b960..5ca3f14 100644 --- a/lib/generated/l10n/l10n_bo.dart +++ b/lib/generated/l10n/l10n_bo.dart @@ -663,6 +663,12 @@ class L10nBo extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_ca.dart b/lib/generated/l10n/l10n_ca.dart index ceadb89..16bb4b1 100644 --- a/lib/generated/l10n/l10n_ca.dart +++ b/lib/generated/l10n/l10n_ca.dart @@ -668,6 +668,12 @@ class L10nCa extends L10n { @override String get chatPermissions => 'Permisos del xat'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edita l\'àlies'; diff --git a/lib/generated/l10n/l10n_cs.dart b/lib/generated/l10n/l10n_cs.dart index 1c440b6..bd2a35c 100644 --- a/lib/generated/l10n/l10n_cs.dart +++ b/lib/generated/l10n/l10n_cs.dart @@ -667,6 +667,12 @@ class L10nCs extends L10n { @override String get chatPermissions => 'Oprávnění konverzace'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Změnit přezdívku'; diff --git a/lib/generated/l10n/l10n_de.dart b/lib/generated/l10n/l10n_de.dart index 08b344f..4a353ff 100644 --- a/lib/generated/l10n/l10n_de.dart +++ b/lib/generated/l10n/l10n_de.dart @@ -669,6 +669,12 @@ class L10nDe extends L10n { @override String get chatPermissions => 'Chatberechtigungen'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Anzeigename ändern'; diff --git a/lib/generated/l10n/l10n_el.dart b/lib/generated/l10n/l10n_el.dart index c01c3a3..18d28c0 100644 --- a/lib/generated/l10n/l10n_el.dart +++ b/lib/generated/l10n/l10n_el.dart @@ -664,6 +664,12 @@ class L10nEl extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_en.dart b/lib/generated/l10n/l10n_en.dart index bfc5779..04c491b 100644 --- a/lib/generated/l10n/l10n_en.dart +++ b/lib/generated/l10n/l10n_en.dart @@ -663,6 +663,12 @@ class L10nEn extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_eo.dart b/lib/generated/l10n/l10n_eo.dart index d1be07f..62a3a8a 100644 --- a/lib/generated/l10n/l10n_eo.dart +++ b/lib/generated/l10n/l10n_eo.dart @@ -666,6 +666,12 @@ class L10nEo extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Redakti prezentan nomon'; diff --git a/lib/generated/l10n/l10n_es.dart b/lib/generated/l10n/l10n_es.dart index 45b37ea..e80a010 100644 --- a/lib/generated/l10n/l10n_es.dart +++ b/lib/generated/l10n/l10n_es.dart @@ -667,6 +667,12 @@ class L10nEs extends L10n { @override String get chatPermissions => 'Permisos del chat'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Editar nombre visible'; diff --git a/lib/generated/l10n/l10n_et.dart b/lib/generated/l10n/l10n_et.dart index 108e526..afda2ec 100644 --- a/lib/generated/l10n/l10n_et.dart +++ b/lib/generated/l10n/l10n_et.dart @@ -665,6 +665,12 @@ class L10nEt extends L10n { @override String get chatPermissions => 'Vestluse õigused'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Muuda kuvatavat nime'; diff --git a/lib/generated/l10n/l10n_eu.dart b/lib/generated/l10n/l10n_eu.dart index 5ed11ca..a4c5eb4 100644 --- a/lib/generated/l10n/l10n_eu.dart +++ b/lib/generated/l10n/l10n_eu.dart @@ -666,6 +666,12 @@ class L10nEu extends L10n { @override String get chatPermissions => 'Txataren baimenak'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Editatu ezizena'; diff --git a/lib/generated/l10n/l10n_fa.dart b/lib/generated/l10n/l10n_fa.dart index e41eaf6..a796961 100644 --- a/lib/generated/l10n/l10n_fa.dart +++ b/lib/generated/l10n/l10n_fa.dart @@ -661,6 +661,12 @@ class L10nFa extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'ویرایش نام نمایشی'; diff --git a/lib/generated/l10n/l10n_fi.dart b/lib/generated/l10n/l10n_fi.dart index c786c02..0accfcc 100644 --- a/lib/generated/l10n/l10n_fi.dart +++ b/lib/generated/l10n/l10n_fi.dart @@ -668,6 +668,12 @@ class L10nFi extends L10n { @override String get chatPermissions => 'Keskustelun oikeudet'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Muokkaa näyttönimeä'; diff --git a/lib/generated/l10n/l10n_fil.dart b/lib/generated/l10n/l10n_fil.dart index 72e0637..20010ed 100644 --- a/lib/generated/l10n/l10n_fil.dart +++ b/lib/generated/l10n/l10n_fil.dart @@ -669,6 +669,12 @@ class L10nFil extends L10n { @override String get chatPermissions => 'Mga pahintulot ng chat'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'I-edit ang display name'; diff --git a/lib/generated/l10n/l10n_fr.dart b/lib/generated/l10n/l10n_fr.dart index eb38cff..33e4d5a 100644 --- a/lib/generated/l10n/l10n_fr.dart +++ b/lib/generated/l10n/l10n_fr.dart @@ -672,6 +672,12 @@ class L10nFr extends L10n { @override String get chatPermissions => 'Permissions du salon'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Changer de nom d\'affichage'; diff --git a/lib/generated/l10n/l10n_ga.dart b/lib/generated/l10n/l10n_ga.dart index 6c55850..94b2051 100644 --- a/lib/generated/l10n/l10n_ga.dart +++ b/lib/generated/l10n/l10n_ga.dart @@ -671,6 +671,12 @@ class L10nGa extends L10n { @override String get chatPermissions => 'Ceadanna comhrá'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Cuir ainm taispeána in eagar'; diff --git a/lib/generated/l10n/l10n_gl.dart b/lib/generated/l10n/l10n_gl.dart index 5d1caec..1f4e199 100644 --- a/lib/generated/l10n/l10n_gl.dart +++ b/lib/generated/l10n/l10n_gl.dart @@ -666,6 +666,12 @@ class L10nGl extends L10n { @override String get chatPermissions => 'Permisos da conversa'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Editar nome público'; diff --git a/lib/generated/l10n/l10n_he.dart b/lib/generated/l10n/l10n_he.dart index 9bae162..3d32ec7 100644 --- a/lib/generated/l10n/l10n_he.dart +++ b/lib/generated/l10n/l10n_he.dart @@ -661,6 +661,12 @@ class L10nHe extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'ערוך את שם התצוגה'; diff --git a/lib/generated/l10n/l10n_hi.dart b/lib/generated/l10n/l10n_hi.dart index fc80631..a12d291 100644 --- a/lib/generated/l10n/l10n_hi.dart +++ b/lib/generated/l10n/l10n_hi.dart @@ -663,6 +663,12 @@ class L10nHi extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_hr.dart b/lib/generated/l10n/l10n_hr.dart index 9187316..02d5df4 100644 --- a/lib/generated/l10n/l10n_hr.dart +++ b/lib/generated/l10n/l10n_hr.dart @@ -664,6 +664,12 @@ class L10nHr extends L10n { @override String get chatPermissions => 'Dozvole za razgovor'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Uredi prikazano ime'; diff --git a/lib/generated/l10n/l10n_hu.dart b/lib/generated/l10n/l10n_hu.dart index 0485832..bb01c3e 100644 --- a/lib/generated/l10n/l10n_hu.dart +++ b/lib/generated/l10n/l10n_hu.dart @@ -666,6 +666,12 @@ class L10nHu extends L10n { @override String get chatPermissions => 'Csevegés engedélyek'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Megjelenítési név szerkesztése'; diff --git a/lib/generated/l10n/l10n_ia.dart b/lib/generated/l10n/l10n_ia.dart index 8ea9d92..c3fed88 100644 --- a/lib/generated/l10n/l10n_ia.dart +++ b/lib/generated/l10n/l10n_ia.dart @@ -663,6 +663,12 @@ class L10nIa extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_id.dart b/lib/generated/l10n/l10n_id.dart index e0c5964..12c4c3b 100644 --- a/lib/generated/l10n/l10n_id.dart +++ b/lib/generated/l10n/l10n_id.dart @@ -670,6 +670,12 @@ class L10nId extends L10n { @override String get chatPermissions => 'Perizinan obrolan'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit nama tampilan'; diff --git a/lib/generated/l10n/l10n_ie.dart b/lib/generated/l10n/l10n_ie.dart index 1074ddb..7d3b20a 100644 --- a/lib/generated/l10n/l10n_ie.dart +++ b/lib/generated/l10n/l10n_ie.dart @@ -662,6 +662,12 @@ class L10nIe extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Redacter li visibil nómine'; diff --git a/lib/generated/l10n/l10n_it.dart b/lib/generated/l10n/l10n_it.dart index eb05dec..2be51c0 100644 --- a/lib/generated/l10n/l10n_it.dart +++ b/lib/generated/l10n/l10n_it.dart @@ -667,6 +667,12 @@ class L10nIt extends L10n { @override String get chatPermissions => 'Permessi della chat'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Modifica il nominativo'; diff --git a/lib/generated/l10n/l10n_ja.dart b/lib/generated/l10n/l10n_ja.dart index 04a1d22..e3fe6bb 100644 --- a/lib/generated/l10n/l10n_ja.dart +++ b/lib/generated/l10n/l10n_ja.dart @@ -654,6 +654,12 @@ class L10nJa extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => '表示名を編集'; diff --git a/lib/generated/l10n/l10n_ka.dart b/lib/generated/l10n/l10n_ka.dart index 53c423f..3010bdd 100644 --- a/lib/generated/l10n/l10n_ka.dart +++ b/lib/generated/l10n/l10n_ka.dart @@ -665,6 +665,12 @@ class L10nKa extends L10n { @override String get chatPermissions => 'ჩატის უფლებები'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'ნაჩვენები სახელის შეცვლა'; diff --git a/lib/generated/l10n/l10n_ko.dart b/lib/generated/l10n/l10n_ko.dart index 92b8286..7b80318 100644 --- a/lib/generated/l10n/l10n_ko.dart +++ b/lib/generated/l10n/l10n_ko.dart @@ -652,6 +652,12 @@ class L10nKo extends L10n { @override String get chatPermissions => '채팅 권한'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => '표시 이름 수정'; diff --git a/lib/generated/l10n/l10n_lt.dart b/lib/generated/l10n/l10n_lt.dart index 28362b4..0a81214 100644 --- a/lib/generated/l10n/l10n_lt.dart +++ b/lib/generated/l10n/l10n_lt.dart @@ -665,6 +665,12 @@ class L10nLt extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Redaguoti rodomą vardą'; diff --git a/lib/generated/l10n/l10n_lv.dart b/lib/generated/l10n/l10n_lv.dart index b3417a4..5b32b8a 100644 --- a/lib/generated/l10n/l10n_lv.dart +++ b/lib/generated/l10n/l10n_lv.dart @@ -669,6 +669,12 @@ class L10nLv extends L10n { @override String get chatPermissions => 'Tērzēšanas atļaujas'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Labot attēlojamo vārdu'; diff --git a/lib/generated/l10n/l10n_nb.dart b/lib/generated/l10n/l10n_nb.dart index d6fc856..e4df751 100644 --- a/lib/generated/l10n/l10n_nb.dart +++ b/lib/generated/l10n/l10n_nb.dart @@ -663,6 +663,12 @@ class L10nNb extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Rediger visningsnavn'; diff --git a/lib/generated/l10n/l10n_nl.dart b/lib/generated/l10n/l10n_nl.dart index af0eceb..e4be809 100644 --- a/lib/generated/l10n/l10n_nl.dart +++ b/lib/generated/l10n/l10n_nl.dart @@ -665,6 +665,12 @@ class L10nNl extends L10n { @override String get chatPermissions => 'Chat toestemmingen'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Naam wijzigen'; diff --git a/lib/generated/l10n/l10n_pl.dart b/lib/generated/l10n/l10n_pl.dart index a8791df..0d1522d 100644 --- a/lib/generated/l10n/l10n_pl.dart +++ b/lib/generated/l10n/l10n_pl.dart @@ -666,6 +666,12 @@ class L10nPl extends L10n { @override String get chatPermissions => 'Uprawnienia w czacie'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edytuj nazwę wyświetlaną'; diff --git a/lib/generated/l10n/l10n_pt.dart b/lib/generated/l10n/l10n_pt.dart index aae1a03..9ac3270 100644 --- a/lib/generated/l10n/l10n_pt.dart +++ b/lib/generated/l10n/l10n_pt.dart @@ -663,6 +663,12 @@ class L10nPt extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_ro.dart b/lib/generated/l10n/l10n_ro.dart index 589e285..27570ba 100644 --- a/lib/generated/l10n/l10n_ro.dart +++ b/lib/generated/l10n/l10n_ro.dart @@ -668,6 +668,12 @@ class L10nRo extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Schimbați displayname'; diff --git a/lib/generated/l10n/l10n_ru.dart b/lib/generated/l10n/l10n_ru.dart index 6ee67f0..b3cab54 100644 --- a/lib/generated/l10n/l10n_ru.dart +++ b/lib/generated/l10n/l10n_ru.dart @@ -665,6 +665,12 @@ class L10nRu extends L10n { @override String get chatPermissions => 'Права в чате'; + @override + String get chatThreads => 'Обсуждения'; + + @override + String get chatThreadsDescription => 'Список всех обсуждений в этой комнате'; + @override String get editDisplayname => 'Отображаемое имя'; @@ -698,7 +704,7 @@ class L10nRu extends L10n { @override String get accessAndVisibilityDescription => - 'Кто может зайти и как найти этот чат.'; + 'Кто может зайти и как найти этот чат'; @override String get calls => 'Звонки'; diff --git a/lib/generated/l10n/l10n_sk.dart b/lib/generated/l10n/l10n_sk.dart index 33f6390..eaf5a91 100644 --- a/lib/generated/l10n/l10n_sk.dart +++ b/lib/generated/l10n/l10n_sk.dart @@ -665,6 +665,12 @@ class L10nSk extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Zmeniť prezývku'; diff --git a/lib/generated/l10n/l10n_sl.dart b/lib/generated/l10n/l10n_sl.dart index e12d910..36b0412 100644 --- a/lib/generated/l10n/l10n_sl.dart +++ b/lib/generated/l10n/l10n_sl.dart @@ -667,6 +667,12 @@ class L10nSl extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_sr.dart b/lib/generated/l10n/l10n_sr.dart index 9928fe1..ed06706 100644 --- a/lib/generated/l10n/l10n_sr.dart +++ b/lib/generated/l10n/l10n_sr.dart @@ -663,6 +663,12 @@ class L10nSr extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Уреди име за приказ'; diff --git a/lib/generated/l10n/l10n_sv.dart b/lib/generated/l10n/l10n_sv.dart index 6b67f5c..72be4e4 100644 --- a/lib/generated/l10n/l10n_sv.dart +++ b/lib/generated/l10n/l10n_sv.dart @@ -664,6 +664,12 @@ class L10nSv extends L10n { @override String get chatPermissions => 'Chatt-behörigheter'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Ändra visningsnamn'; diff --git a/lib/generated/l10n/l10n_ta.dart b/lib/generated/l10n/l10n_ta.dart index 34d65dd..2406198 100644 --- a/lib/generated/l10n/l10n_ta.dart +++ b/lib/generated/l10n/l10n_ta.dart @@ -673,6 +673,12 @@ class L10nTa extends L10n { @override String get chatPermissions => 'அரட்டை அனுமதிகள்'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'காட்சி பெயர் திருத்து'; diff --git a/lib/generated/l10n/l10n_te.dart b/lib/generated/l10n/l10n_te.dart index 5822fb2..64c73fb 100644 --- a/lib/generated/l10n/l10n_te.dart +++ b/lib/generated/l10n/l10n_te.dart @@ -663,6 +663,12 @@ class L10nTe extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_th.dart b/lib/generated/l10n/l10n_th.dart index 6361640..ea57c24 100644 --- a/lib/generated/l10n/l10n_th.dart +++ b/lib/generated/l10n/l10n_th.dart @@ -665,6 +665,12 @@ class L10nTh extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Edit displayname'; diff --git a/lib/generated/l10n/l10n_tr.dart b/lib/generated/l10n/l10n_tr.dart index f5c32a3..91dbd9d 100644 --- a/lib/generated/l10n/l10n_tr.dart +++ b/lib/generated/l10n/l10n_tr.dart @@ -665,6 +665,12 @@ class L10nTr extends L10n { @override String get chatPermissions => 'Sohbet izinleri'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Görünen adı düzenle'; diff --git a/lib/generated/l10n/l10n_uk.dart b/lib/generated/l10n/l10n_uk.dart index 60aa8ac..4964ed8 100644 --- a/lib/generated/l10n/l10n_uk.dart +++ b/lib/generated/l10n/l10n_uk.dart @@ -667,6 +667,12 @@ class L10nUk extends L10n { @override String get chatPermissions => 'Дозволи бесіди'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Змінити показуване ім\'я'; diff --git a/lib/generated/l10n/l10n_vi.dart b/lib/generated/l10n/l10n_vi.dart index 1ac0e9d..1bcb6d4 100644 --- a/lib/generated/l10n/l10n_vi.dart +++ b/lib/generated/l10n/l10n_vi.dart @@ -663,6 +663,12 @@ class L10nVi extends L10n { @override String get chatPermissions => 'Chat permissions'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => 'Sửa tên hiển thị'; diff --git a/lib/generated/l10n/l10n_zh.dart b/lib/generated/l10n/l10n_zh.dart index ef91fd3..0550d1a 100644 --- a/lib/generated/l10n/l10n_zh.dart +++ b/lib/generated/l10n/l10n_zh.dart @@ -647,6 +647,12 @@ class L10nZh extends L10n { @override String get chatPermissions => '聊天权限'; + @override + String get chatThreads => 'Threads'; + + @override + String get chatThreadsDescription => 'See all threads in this room'; + @override String get editDisplayname => '编辑昵称'; diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index f807fd4..54f2a14 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -15,7 +15,7 @@ import 'package:extera_next/utils/platform_infos.dart'; class ChatEventList extends StatelessWidget { final ChatController controller; - + const ChatEventList({ super.key, required this.controller, diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 7cda110..76cab5d 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -328,7 +328,9 @@ class ChatView extends StatelessWidget { Expanded( child: GestureDetector( onTap: controller.clearSingleSelectedEvent, - child: ChatEventList(controller: controller), + child: ChatEventList( + controller: controller, + ), ), ), if (controller.showScrollDownButton) diff --git a/lib/pages/chat/translated_event_dialog.dart b/lib/pages/chat/translated_event_dialog.dart index 337701f..7b9f399 100644 --- a/lib/pages/chat/translated_event_dialog.dart +++ b/lib/pages/chat/translated_event_dialog.dart @@ -16,14 +16,13 @@ class TranslatedEventDialog extends StatefulWidget { }); @override - TranslatedEventDialogState createState() => - TranslatedEventDialogState(event, timeline); + TranslatedEventDialogState createState() => TranslatedEventDialogState(); } class TranslatedEventDialogState extends State { - final Event event; - final Timeline timeline; - TranslatedEventDialogState(this.event, this.timeline); + Event get event => widget.event; + Timeline get timeline => widget.timeline; + TranslatedEventDialogState(); @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -33,35 +32,31 @@ class TranslatedEventDialogState extends State { theme.bubbleColor, ]; - final message = Message( - event, - colors: colors, - onInfoTab: (Event ev) => {}, - onMention: () => {}, - onSelect: (Event ev) => {}, - onSwipe: () => {}, - scrollToEventId: (String p0) => {}, - timeline: timeline, - animateIn: false, - displayReadMarker: false, - highlightMarker: false, - longPressSelect: false, - selected: false, - wallpaperMode: false, - gradient: false - ); + final message = Message( + event, + colors: colors, + onInfoTab: (Event ev) => {}, + onMention: () => {}, + onSelect: (Event ev) => {}, + onSwipe: () => {}, + scrollToEventId: (String p0) => {}, + timeline: timeline, + animateIn: false, + displayReadMarker: false, + highlightMarker: false, + longPressSelect: false, + selected: false, + wallpaperMode: false, + gradient: false, + ); return Scaffold( - appBar: AppBar( - title: Text(L10n.of(context).translatedMessage) - ), - body: Container( - child: Column( - children: [ - message, - ], - ), - ), - ); + appBar: AppBar(title: Text(L10n.of(context).translatedMessage)), + body: Column( + children: [ + message, + ], + ), + ); } } diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index a0efa8c..c3cc32c 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -1,3 +1,4 @@ +import 'package:extera_next/pages/chat_thread/chat_threads_view.dart'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index f5f4ccc..e990f40 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -259,6 +259,21 @@ class ChatDetailsView extends StatelessWidget { const SizedBox(height: 16), ], Divider(color: theme.dividerColor), + ListTile( + leading: CircleAvatar( + backgroundColor: theme.scaffoldBackgroundColor, + foregroundColor: iconColor, + child: const Icon( + Icons.chat_bubble_outline, + ), + ), + title: Text(L10n.of(context).chatThreads), + subtitle: + Text(L10n.of(context).chatThreadsDescription), + onTap: () => + context.push('/rooms/${room.id}/threads'), + trailing: const Icon(Icons.chevron_right_outlined), + ), ListTile( leading: CircleAvatar( backgroundColor: theme.scaffoldBackgroundColor, @@ -360,4 +375,4 @@ class ChatDetailsView extends StatelessWidget { }, ); } -} \ No newline at end of file +} diff --git a/lib/pages/chat_thread/chat_threads.dart b/lib/pages/chat_thread/chat_threads.dart new file mode 100644 index 0000000..ff0d001 --- /dev/null +++ b/lib/pages/chat_thread/chat_threads.dart @@ -0,0 +1,53 @@ +import 'package:extera_next/pages/chat_thread/chat_threads_view.dart'; +import 'package:extera_next/widgets/matrix.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:matrix/matrix.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; + +class ChatThreads extends StatefulWidget { + final String roomId; + + const ChatThreads({ + super.key, + required this.roomId, + }); + + @override + ChatThreadsController createState() => ChatThreadsController(); +} + +class ChatThreadsController extends State { + String get roomId => widget.roomId; + Room? get room => Matrix.of(context).client.getRoomById(roomId); + + bool isLoadingThreads = false; + + final AutoScrollController scrollController = AutoScrollController(); + + @override + Widget build(BuildContext context) => ChatThreadsView(this); + + void loadThreads([dynamic _]) async { + final room = Matrix.of(context).client.getRoomById(roomId); + + if (room == null) { + return; + } + + isLoadingThreads = true; + + await room.loadThreadsFromServer(); + + isLoadingThreads = false; + } + + List? get threads => room?.threads.values.toList(); + + Stream get onChanged => Matrix.of(context).client.onSync.stream.where( + (e) => + (e.rooms?.join?.containsKey(roomId) ?? false) && + (e.rooms!.join![roomId]?.timeline?.events + ?.any((s) => s.type == EventTypes.Message && s.content['m.relates_to'] != null) ?? + false), + ); +} \ No newline at end of file diff --git a/lib/pages/chat_thread/chat_threads_view.dart b/lib/pages/chat_thread/chat_threads_view.dart new file mode 100644 index 0000000..15ef1d2 --- /dev/null +++ b/lib/pages/chat_thread/chat_threads_view.dart @@ -0,0 +1,110 @@ +import 'package:extera_next/config/themes.dart'; +import 'package:extera_next/generated/l10n/l10n.dart'; +import 'package:extera_next/pages/chat_thread/chat_threads.dart'; +import 'package:extera_next/utils/platform_infos.dart'; +import 'package:extera_next/widgets/avatar.dart'; +import 'package:extera_next/widgets/layouts/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; + +class ChatThreadsView extends StatelessWidget { + final ChatThreadsController controller; + + const ChatThreadsView(this.controller, {super.key}); + + @override + Widget build(BuildContext context) { + final horizontalPadding = FluffyThemes.isColumnMode(context) ? 8.0 : 0.0; + + return Scaffold( + appBar: AppBar( + leading: const Center(child: BackButton()), + title: Text(L10n.of(context).chatThreads), + ), + body: MaxWidthBody( + child: ListView.custom( + padding: EdgeInsets.only( + top: 16, + bottom: 8, + left: horizontalPadding, + right: horizontalPadding, + ), + reverse: true, + controller: controller.scrollController, + keyboardDismissBehavior: PlatformInfos.isIOS + ? ScrollViewKeyboardDismissBehavior.onDrag + : ScrollViewKeyboardDismissBehavior.manual, + childrenDelegate: SliverChildBuilderDelegate( + (BuildContext context, int i) { + if (i == (controller.threads?.length ?? 0) + 1) { + if (controller.isLoadingThreads) { + return const Center( + child: CircularProgressIndicator.adaptive(strokeWidth: 2), + ); + } else if (!(controller.room?.loadedAllThreads ?? false)) { + return Builder( + builder: (context) { + WidgetsBinding.instance + .addPostFrameCallback(controller.loadThreads); + return Center( + child: IconButton( + onPressed: controller.loadThreads, + icon: const Icon(Icons.refresh_outlined), + ), + ); + }, + ); + } + i--; + + final thread = controller.threads![i]; + + return AutoScrollTag( + key: ValueKey(thread.rootEvent.eventId), + index: i, + controller: controller.scrollController, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 16.0, + vertical: 8.0, + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + FutureBuilder( + future: thread.rootEvent.fetchSenderUser(), + builder: (context, snapshot) { + final user = snapshot.data ?? + thread.rootEvent.senderFromMemoryOrFallback; + + return Avatar( + mxContent: user.avatarUrl, + name: user.calcDisplayname(), + size: 48, + ); + }, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(thread.rootEvent.senderFromMemoryOrFallback.calcDisplayname()), + ], + ), + ), + const SizedBox(height: 4.0), + Text(thread.rootEvent.text), + ], + ), + ), + ); + } + }, + childCount: (controller.threads?.length ?? 0) + 1, + ), + ), + ), + ); + } +} diff --git a/lib/pages/thread/thread.dart b/lib/pages/chat_thread/thread.dart similarity index 97% rename from lib/pages/thread/thread.dart rename to lib/pages/chat_thread/thread.dart index 4c032bf..b1f0bf4 100644 --- a/lib/pages/thread/thread.dart +++ b/lib/pages/chat_thread/thread.dart @@ -3,7 +3,6 @@ import 'package:extera_next/pages/chat/chat.dart'; import 'package:extera_next/widgets/matrix.dart'; import 'package:extera_next/widgets/share_scaffold_dialog.dart'; import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; class ThreadPage extends StatelessWidget { final String roomId; diff --git a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart index 4732c56..b7340cf 100644 --- a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart +++ b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart @@ -8,6 +8,10 @@ extension VisibleInGuiExtension on List { return where((e) => e.isThreaded == threaded).toList(); } + List filterThreadRoots() { + return where((e) => e.room.threads.containsKey(e.eventId)).toList(); + } + List filterByVisibleInGui({String? exceptionEventId}) { final visibleEvents = where((e) => e.isVisibleInGui || e.eventId == exceptionEventId)