Merge pull request #5085 from pangeachat/merge-prod-into-main

Merge prod into main
This commit is contained in:
ggurdin 2026-01-06 13:37:44 -05:00 committed by GitHub
commit b1dbf0cf37
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
61 changed files with 718 additions and 71 deletions

View file

@ -1,6 +1,6 @@
{
"@@locale": "ar",
"@@last_modified": "2026-01-05 16:38:13.770707",
"@@last_modified": "2026-01-06 13:02:07.966839",
"about": "حول",
"@about": {
"type": "String",
@ -10947,5 +10947,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "الأنشطة لفتح الموضوع التالي",
"activitiesToUnlockTopicDesc": "حدد عدد الأنشطة لفتح موضوع الدورة التالي",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1911,7 +1911,7 @@
"playWithAI": "Пакуль гуляйце з ШІ",
"courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!",
"@@locale": "be",
"@@last_modified": "2026-01-05 16:38:05.473989",
"@@last_modified": "2026-01-06 13:01:53.730932",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11829,5 +11829,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Дзеянні для адкрыцця наступнай тэмы",
"activitiesToUnlockTopicDesc": "Усталюйце колькасць дзеянняў для адкрыцця наступнай тэмы курса",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:23.798517",
"@@last_modified": "2026-01-06 13:02:28.649450",
"about": "সম্পর্কে",
"@about": {
"type": "String",
@ -11834,5 +11834,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "পরবর্তী বিষয় উন্মুক্ত করার জন্য কার্যক্রম",
"activitiesToUnlockTopicDesc": "পরবর্তী কোর্স বিষয় উন্মুক্ত করার জন্য কার্যক্রমের সংখ্যা নির্ধারণ করুন",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4279,7 +4279,7 @@
"joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།",
"startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།",
"@@locale": "bo",
"@@last_modified": "2026-01-05 16:38:21.732804",
"@@last_modified": "2026-01-06 13:02:23.320520",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -10484,5 +10484,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktiviteti për të Çliruar Temën Tjetër",
"activitiesToUnlockTopicDesc": "Caktoni numrin e aktiviteteve për të çliruar temën tjetër të kursit",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:06.597232",
"@@last_modified": "2026-01-06 13:01:55.665527",
"about": "Quant a",
"@about": {
"type": "String",
@ -10754,5 +10754,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Activitats per Desbloquejar el Proper Tema",
"activitiesToUnlockTopicDesc": "Estableix el nombre d'activitats per desbloquejar el proper tema del curs",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "cs",
"@@last_modified": "2026-01-05 16:38:03.220672",
"@@last_modified": "2026-01-06 13:01:46.866113",
"about": "O aplikaci",
"@about": {
"type": "String",
@ -11337,5 +11337,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivity k odemčení dalšího tématu",
"activitiesToUnlockTopicDesc": "Nastavte počet aktivit k odemčení dalšího tématu kurzu",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1930,7 +1930,7 @@
"playWithAI": "Leg med AI for nu",
"courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!",
"@@locale": "da",
"@@last_modified": "2026-01-05 16:37:42.228072",
"@@last_modified": "2026-01-06 13:01:06.115252",
"@aboutHomeserver": {
"type": "String",
"placeholders": {
@ -11791,5 +11791,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktiviteter til at låse op for næste emne",
"activitiesToUnlockTopicDesc": "Indstil antallet af aktiviteter for at låse op for det næste kursusemne",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "de",
"@@last_modified": "2026-01-05 16:37:56.618492",
"@@last_modified": "2026-01-06 13:01:34.264308",
"alwaysUse24HourFormat": "true",
"@alwaysUse24HourFormat": {
"description": "Set to true to always display time of day in 24 hour format."
@ -10737,5 +10737,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivitäten zum Freischalten des nächsten Themas",
"activitiesToUnlockTopicDesc": "Legen Sie die Anzahl der Aktivitäten fest, um das nächste Kursthema freizuschalten",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4456,7 +4456,7 @@
"playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν",
"courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!",
"@@locale": "el",
"@@last_modified": "2026-01-05 16:38:28.703056",
"@@last_modified": "2026-01-06 13:02:36.159093",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11788,5 +11788,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Δραστηριότητες για Ξεκλείδωμα Επόμενου Θέματος",
"activitiesToUnlockTopicDesc": "Ορίστε τον αριθμό των δραστηριοτήτων για να ξεκλειδώσετε το επόμενο θέμα του μαθήματος",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -5015,5 +5015,16 @@
"disableLanguageToolsDesc": "Would you like to disable automatic language assistance?",
"recordingPermissionDenied": "Permission denied. Enable recording permissions to record audio messages.",
"genericWebRecordingError": "Something went wrong. We recommend using the Chrome browser when recording messages.",
"screenSizeWarning": "For the best experience using this application, please expand your screen size."
"screenSizeWarning": "For the best experience using this application, please expand your screen size.",
"noSavedActivitiesYet": "Activities will appear here once they are completed and saved.",
"practiceActivityCompleted": "Practice activity completed",
"changeCourse": "Change course",
"changeCourseDesc": "Here you can change this course's course plan.",
"introChatTitle": "Create Introductions Chat",
"introChatDesc": "Anyone in the space can post.",
"announcementsChatTitle": "Announcements Chat",
"announcementsChatDesc": "Only space admin can post.",
"inOngoingActivity": "You have an ongoing activity!",
"activitiesToUnlockTopicTitle": "Activities to Unlock Next Topic",
"activitiesToUnlockTopicDesc": "Set the number of activities to unlock the next course topic"
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:33.016786",
"@@last_modified": "2026-01-06 13:02:41.310107",
"about": "Prio",
"@about": {
"type": "String",
@ -11819,5 +11819,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivecoj por Malŝlosi Sekvan Temon",
"activitiesToUnlockTopicDesc": "Agordu la nombron de aktivecoj por malŝlosi la sekvan kurson",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "es",
"@@last_modified": "2026-01-05 16:37:39.035821",
"@@last_modified": "2026-01-06 13:00:57.006469",
"about": "Acerca de",
"@about": {
"type": "String",
@ -7964,5 +7964,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Actividades para Desbloquear el Siguiente Tema",
"activitiesToUnlockTopicDesc": "Establecer el número de actividades para desbloquear el siguiente tema del curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "et",
"@@last_modified": "2026-01-05 16:37:55.798786",
"@@last_modified": "2026-01-06 13:01:32.507692",
"about": "Rakenduse teave",
"@about": {
"type": "String",
@ -11001,5 +11001,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Tegevused järgmise teema avamiseks",
"activitiesToUnlockTopicDesc": "Määrake tegevuste arv järgmise kursuse teema avamiseks",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "eu",
"@@last_modified": "2026-01-05 16:37:53.798875",
"@@last_modified": "2026-01-06 13:01:29.144037",
"about": "Honi buruz",
"@about": {
"type": "String",
@ -10730,5 +10730,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Hurrengo gaia irekitzeko jarduerak",
"activitiesToUnlockTopicDesc": "Hurrengo ikastaro gaia irekitzeko jardueren kopurua ezarri",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:24.728515",
"@@last_modified": "2026-01-06 13:02:30.390244",
"repeatPassword": "تکرار رمزعبور",
"@repeatPassword": {},
"about": "درباره",
@ -11462,5 +11462,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "فعالیت‌ها برای باز کردن موضوع بعدی",
"activitiesToUnlockTopicDesc": "تعداد فعالیت‌ها را برای باز کردن موضوع بعدی دوره تنظیم کنید",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4009,7 +4009,7 @@
"playWithAI": "Leiki tekoälyn kanssa nyt",
"courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!",
"@@locale": "fi",
"@@last_modified": "2026-01-05 16:37:41.097310",
"@@last_modified": "2026-01-06 13:01:04.204663",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11353,5 +11353,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Toiminnot seuraavan aiheen avaamiseksi",
"activitiesToUnlockTopicDesc": "Aseta toimintojen määrä seuraavan kurssiaiheen avaamiseksi",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2787,7 +2787,7 @@
"selectAll": "Piliin lahat",
"deselectAll": "Huwag piliin lahat",
"@@locale": "fil",
"@@last_modified": "2026-01-05 16:38:11.298437",
"@@last_modified": "2026-01-06 13:02:03.027217",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -11706,5 +11706,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Mga Aktibidad upang I-unlock ang Susunod na Paksa",
"activitiesToUnlockTopicDesc": "Itakda ang bilang ng mga aktibidad upang i-unlock ang susunod na paksa ng kurso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "fr",
"@@last_modified": "2026-01-05 16:38:38.848549",
"@@last_modified": "2026-01-06 13:02:50.687446",
"about": "À propos",
"@about": {
"type": "String",
@ -11054,5 +11054,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Activités à débloquer pour le prochain sujet",
"activitiesToUnlockTopicDesc": "Définissez le nombre d'activités pour débloquer le prochain sujet de cours",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4517,7 +4517,7 @@
"playWithAI": "Imir le AI faoi láthair",
"courseStartDesc": "Tá Bot Pangea réidh chun dul am ar bith!\n\n...ach is fearr foghlaim le cairde!",
"@@locale": "ga",
"@@last_modified": "2026-01-05 16:38:37.925567",
"@@last_modified": "2026-01-06 13:02:48.899020",
"@customReaction": {
"type": "String",
"placeholders": {}
@ -10728,5 +10728,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Gníomhaíochtaí le hOscail an Topaic Seo chugainn",
"activitiesToUnlockTopicDesc": "Socraigh an líon gníomhaíochtaí le hOscail an topaic chúrsa seo chugainn",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "gl",
"@@last_modified": "2026-01-05 16:37:40.076175",
"@@last_modified": "2026-01-06 13:01:01.095511",
"about": "Acerca de",
"@about": {
"type": "String",
@ -10727,5 +10727,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Actividades para Desbloquear o Próximo Tema",
"activitiesToUnlockTopicDesc": "Establece o número de actividades para desbloquear o próximo tema do curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:50.615411",
"@@last_modified": "2026-01-06 13:01:22.903727",
"about": "אודות",
"@about": {
"type": "String",
@ -11779,5 +11779,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "פעילויות לפתיחת נושא הבא",
"activitiesToUnlockTopicDesc": "קבע את מספר הפעילויות לפתיחת נושא הקורס הבא",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4483,7 +4483,7 @@
"playWithAI": "अभी के लिए एआई के साथ खेलें",
"courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!",
"@@locale": "hi",
"@@last_modified": "2026-01-05 16:38:31.274500",
"@@last_modified": "2026-01-06 13:02:39.726780",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11815,5 +11815,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "अगले विषय को अनलॉक करने के लिए गतिविधियाँ",
"activitiesToUnlockTopicDesc": "अगले पाठ्यक्रम विषय को अनलॉक करने के लिए गतिविधियों की संख्या निर्धारित करें",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hr",
"@@last_modified": "2026-01-05 16:37:49.277534",
"@@last_modified": "2026-01-06 13:01:21.058681",
"about": "Informacije",
"@about": {
"type": "String",
@ -11102,5 +11102,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivnosti za otključavanje sljedeće teme",
"activitiesToUnlockTopicDesc": "Postavite broj aktivnosti za otključavanje sljedeće teme tečaja",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "hu",
"@@last_modified": "2026-01-05 16:37:43.701539",
"@@last_modified": "2026-01-06 13:01:08.359844",
"about": "Névjegy",
"@about": {
"type": "String",
@ -10731,5 +10731,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Tevékenységek a következő téma feloldásához",
"activitiesToUnlockTopicDesc": "Állítsa be a tevékenységek számát a következő tanfolyam téma feloldásához",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1958,7 +1958,7 @@
"playWithAI": "Joca con le IA pro ora",
"courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ia",
"@@last_modified": "2026-01-05 16:37:51.436479",
"@@last_modified": "2026-01-06 13:01:24.542087",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11808,5 +11808,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Actividades para Desbloquear el Siguiente Tema",
"activitiesToUnlockTopicDesc": "Establecer el número de actividades para desbloquear el siguiente tema del curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:44.683070",
"@@last_modified": "2026-01-06 13:01:11.059266",
"setAsCanonicalAlias": "Atur sebagai alias utama",
"@setAsCanonicalAlias": {
"type": "String",
@ -10721,5 +10721,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Kegiatan untuk Membuka Topik Berikutnya",
"activitiesToUnlockTopicDesc": "Tentukan jumlah kegiatan untuk membuka topik kursus berikutnya",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4372,7 +4372,7 @@
"playWithAI": "Joca con AI pro ora",
"courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!",
"@@locale": "ie",
"@@last_modified": "2026-01-05 16:37:48.179981",
"@@last_modified": "2026-01-06 13:01:17.481803",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11704,5 +11704,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Gníomhaíochtaí le hOscail an Conradh Nua",
"activitiesToUnlockTopicDesc": "Socraigh an líon gníomhaíochtaí le hOscail an chéad ábhar cúrsa",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:00.729830",
"@@last_modified": "2026-01-06 13:01:39.801417",
"about": "Informazioni",
"@about": {
"type": "String",
@ -10733,5 +10733,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Attività per sbloccare il prossimo argomento",
"activitiesToUnlockTopicDesc": "Imposta il numero di attività per sbloccare il prossimo argomento del corso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ja",
"@@last_modified": "2026-01-05 16:38:29.839926",
"@@last_modified": "2026-01-06 13:02:37.951868",
"about": "このアプリについて",
"@about": {
"type": "String",
@ -11520,5 +11520,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "次のトピックをアンロックするためのアクティビティ",
"activitiesToUnlockTopicDesc": "次のコーストピックをアンロックするためのアクティビティの数を設定します",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2594,7 +2594,7 @@
"playWithAI": "ამ დროისთვის ითამაშეთ AI-თან",
"courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!",
"@@locale": "ka",
"@@last_modified": "2026-01-05 16:38:35.679503",
"@@last_modified": "2026-01-06 13:02:45.195897",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11760,5 +11760,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "აქტივობები შემდეგ თემაზე გადასასვლელად",
"activitiesToUnlockTopicDesc": "განსაზღვრეთ აქტივობების რაოდენობა, რათა გახსნათ შემდეგი კურსის თემა",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:38.047396",
"@@last_modified": "2026-01-06 13:00:55.145584",
"about": "소개",
"@about": {
"type": "String",
@ -10838,5 +10838,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "다음 주제를 잠금 해제할 활동",
"activitiesToUnlockTopicDesc": "다음 과정 주제를 잠금 해제할 활동 수를 설정하세요",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -3861,7 +3861,7 @@
"playWithAI": "Žaiskite su dirbtiniu intelektu dabar",
"courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!",
"@@locale": "lt",
"@@last_modified": "2026-01-05 16:38:17.264007",
"@@last_modified": "2026-01-06 13:02:14.517811",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11535,5 +11535,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Veiklos, kad atrakintumėte kitą temą",
"activitiesToUnlockTopicDesc": "Nustatykite veiklų skaičių, kad atrakintumėte kitą kurso temą",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4482,7 +4482,7 @@
"playWithAI": "Tagad spēlējiet ar AI",
"courseStartDesc": "Pangea bots ir gatavs jebkurā laikā!\n\n...bet mācīties ir labāk ar draugiem!",
"@@locale": "lv",
"@@last_modified": "2026-01-05 16:38:12.653109",
"@@last_modified": "2026-01-06 13:02:05.693062",
"analyticsInactiveTitle": "Pieprasījumi neaktīviem lietotājiem nevar tikt nosūtīti",
"analyticsInactiveDesc": "Neaktīvi lietotāji, kuri nav pieteikušies kopš šīs funkcijas ieviešanas, neredzēs jūsu pieprasījumu.\n\nPieprasījuma poga parādīsies, kad viņi atgriezīsies. Jūs varat atkārtoti nosūtīt pieprasījumu vēlāk, noklikšķinot uz pieprasījuma pogas viņu vārdā, kad tā būs pieejama.",
"accessRequestedTitle": "Pieprasījums piekļūt analītikai",
@ -10716,5 +10716,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivitātes, lai atbloķētu nākamo tēmu",
"activitiesToUnlockTopicDesc": "Iestatiet aktivitāšu skaitu, lai atbloķētu nākamo kursa tēmu",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:04.551246",
"@@last_modified": "2026-01-06 13:01:49.200225",
"about": "Om",
"@about": {
"type": "String",
@ -11823,5 +11823,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktiviteter for å låse opp neste emne",
"activitiesToUnlockTopicDesc": "Sett antall aktiviteter for å låse opp neste kurs emne",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:20.626242",
"@@last_modified": "2026-01-06 13:02:20.252502",
"about": "Over ons",
"@about": {
"type": "String",
@ -10730,5 +10730,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Activiteiten om het Volgende Onderwerp te Ontgrendelen",
"activitiesToUnlockTopicDesc": "Stel het aantal activiteiten in om het volgende cursusonderwerp te ontgrendelen",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "pl",
"@@last_modified": "2026-01-05 16:38:26.150302",
"@@last_modified": "2026-01-06 13:02:32.127346",
"about": "O aplikacji",
"@about": {
"type": "String",
@ -10728,5 +10728,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktywności do odblokowania następnego tematu",
"activitiesToUnlockTopicDesc": "Ustaw liczbę aktywności do odblokowania następnego tematu kursu",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:54.720470",
"@@last_modified": "2026-01-06 13:01:30.651964",
"copiedToClipboard": "Copiada para a área de transferência",
"@copiedToClipboard": {
"type": "String",
@ -11830,5 +11830,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico",
"activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:52.450718",
"@@last_modified": "2026-01-06 13:01:26.266378",
"about": "Sobre",
"@about": {
"type": "String",
@ -11088,5 +11088,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico",
"activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -3331,7 +3331,7 @@
"selectAll": "Selecionar tudo",
"deselectAll": "Desmarcar tudo",
"@@locale": "pt_PT",
"@@last_modified": "2026-01-05 16:38:09.051462",
"@@last_modified": "2026-01-06 13:01:59.189375",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11759,5 +11759,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico",
"activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:37:45.672693",
"@@last_modified": "2026-01-06 13:01:12.939720",
"about": "Despre",
"@about": {
"type": "String",
@ -11465,5 +11465,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Activități pentru deblocarea următorului subiect",
"activitiesToUnlockTopicDesc": "Stabilește numărul de activități pentru a debloca următorul subiect al cursului",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "ru",
"@@last_modified": "2026-01-05 16:38:34.147725",
"@@last_modified": "2026-01-06 13:02:42.875671",
"about": "О проекте",
"@about": {
"type": "String",
@ -10835,5 +10835,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Деятельности для разблокировки следующей темы",
"activitiesToUnlockTopicDesc": "Установите количество действий для разблокировки следующей темы курса",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "sk",
"@@last_modified": "2026-01-05 16:37:46.929621",
"@@last_modified": "2026-01-06 13:01:15.636781",
"about": "O aplikácii",
"@about": {
"type": "String",
@ -11814,5 +11814,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivity na odomknutie nasledujúcej témy",
"activitiesToUnlockTopicDesc": "Nastavte počet aktivít na odomknutie nasledujúcej témy kurzu",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -2464,7 +2464,7 @@
"playWithAI": "Za zdaj igrajte z AI-jem",
"courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!",
"@@locale": "sl",
"@@last_modified": "2026-01-05 16:37:58.302159",
"@@last_modified": "2026-01-06 13:01:36.111015",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11811,5 +11811,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Dejavnosti za odklepanje naslednje teme",
"activitiesToUnlockTopicDesc": "Določite število dejavnosti za odklepanje naslednje teme tečaja",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:36.598473",
"@@last_modified": "2026-01-06 13:02:46.667322",
"about": "О програму",
"@about": {
"type": "String",
@ -11832,5 +11832,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktivnosti za otključavanje sledeće teme",
"activitiesToUnlockTopicDesc": "Postavite broj aktivnosti za otključavanje sledeće teme kursa",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:27.488003",
"@@last_modified": "2026-01-06 13:02:34.358506",
"about": "Om",
"@about": {
"type": "String",
@ -11208,5 +11208,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Aktiviteter för att låsa upp nästa ämne",
"activitiesToUnlockTopicDesc": "Ange antalet aktiviteter för att låsa upp nästa kursämne",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:19.591743",
"@@last_modified": "2026-01-06 13:02:17.997622",
"acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது",
"@acceptedTheInvitation": {
"type": "String",
@ -10954,5 +10954,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "அடுத்த தலைப்பை திறக்க செயல்பாடுகள்",
"activitiesToUnlockTopicDesc": "அடுத்த பாடத்தொகுப்பை திறக்க செயல்பாடுகளின் எண்ணிக்கையை அமைக்கவும்",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1920,7 +1920,7 @@
"playWithAI": "ఇప్పుడే AI తో ఆడండి",
"courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!",
"@@locale": "te",
"@@last_modified": "2026-01-05 16:38:15.933952",
"@@last_modified": "2026-01-06 13:02:11.522520",
"@setCustomPermissionLevel": {
"type": "String",
"placeholders": {}
@ -11819,5 +11819,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "తరువాతి అంశాన్ని అన్లాక్ చేయడానికి కార్యకలాపాలు",
"activitiesToUnlockTopicDesc": "తరువాతి కోర్సు అంశాన్ని అన్లాక్ చేయడానికి కార్యకలాపాల సంఖ్యను సెట్ చేయండి",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -4456,7 +4456,7 @@
"playWithAI": "เล่นกับ AI ชั่วคราว",
"courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!",
"@@locale": "th",
"@@last_modified": "2026-01-05 16:38:08.017220",
"@@last_modified": "2026-01-06 13:01:57.436131",
"@alwaysUse24HourFormat": {
"type": "String",
"placeholders": {}
@ -11788,5 +11788,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "กิจกรรมเพื่อปลดล็อกหัวข้อถัดไป",
"activitiesToUnlockTopicDesc": "กำหนดจำนวนกิจกรรมเพื่อปลดล็อกหัวข้อหลักสูตรถัดไป",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "tr",
"@@last_modified": "2026-01-05 16:38:14.793952",
"@@last_modified": "2026-01-06 13:02:09.596458",
"about": "Hakkında",
"@about": {
"type": "String",
@ -10952,5 +10952,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Sonraki Konuyu Açmak için Aktiviteler",
"activitiesToUnlockTopicDesc": "Sonraki kurs konusunu açmak için aktivite sayısını ayarlayın",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "uk",
"@@last_modified": "2026-01-05 16:38:01.988748",
"@@last_modified": "2026-01-06 13:01:42.034870",
"about": "Про застосунок",
"@about": {
"type": "String",
@ -10724,5 +10724,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Дії для розблокування наступної теми",
"activitiesToUnlockTopicDesc": "Встановіть кількість дій для розблокування наступної теми курсу",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:18.272455",
"@@last_modified": "2026-01-06 13:02:16.250270",
"about": "Giới thiệu",
"@about": {
"type": "String",
@ -6300,5 +6300,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "Các hoạt động để mở khóa chủ đề tiếp theo",
"activitiesToUnlockTopicDesc": "Đặt số lượng hoạt động để mở khóa chủ đề khóa học tiếp theo",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1856,7 +1856,7 @@
"selectAll": "全選",
"deselectAll": "取消全選",
"@@locale": "yue",
"@@last_modified": "2026-01-05 16:37:59.724310",
"@@last_modified": "2026-01-06 13:01:38.057632",
"@ignoreUser": {
"type": "String",
"placeholders": {}
@ -11821,5 +11821,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "解鎖下一主題的活動",
"activitiesToUnlockTopicDesc": "設置解鎖下一課程主題所需的活動數量",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,6 +1,6 @@
{
"@@locale": "zh",
"@@last_modified": "2026-01-05 16:38:22.675043",
"@@last_modified": "2026-01-06 13:02:25.686469",
"about": "关于",
"@about": {
"type": "String",
@ -10721,5 +10721,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "解锁下一个主题的活动",
"activitiesToUnlockTopicDesc": "设置解锁下一个课程主题所需的活动数量",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -1,5 +1,5 @@
{
"@@last_modified": "2026-01-05 16:38:10.069994",
"@@last_modified": "2026-01-06 13:02:01.182495",
"about": "關於",
"@about": {
"type": "String",
@ -10728,5 +10728,15 @@
"@screenSizeWarning": {
"type": "String",
"placeholders": {}
},
"activitiesToUnlockTopicTitle": "解鎖下一主題的活動",
"activitiesToUnlockTopicDesc": "設定解鎖下一課程主題所需的活動數量",
"@activitiesToUnlockTopicTitle": {
"type": "String",
"placeholders": {}
},
"@activitiesToUnlockTopicDesc": {
"type": "String",
"placeholders": {}
}
}

View file

@ -14,6 +14,7 @@ class ButtonDetails {
final bool isToggle;
final bool value;
final SpaceSettingsTabs? tab;
final Widget? trailing;
const ButtonDetails({
required this.title,
@ -26,6 +27,7 @@ class ButtonDetails {
this.value = false,
this.showInMainView = true,
this.tab,
this.trailing,
});
}

View file

@ -26,6 +26,7 @@ import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'
import 'package:fluffychat/pangea/space_analytics/space_analytics.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
@ -140,13 +141,59 @@ class SpaceDetailsContent extends StatelessWidget {
icon: const Icon(Icons.school_outlined, size: 30.0),
onPressed: () => showFutureLoadingDialog(
context: context,
future: () => room.setTeacherMode(!room.isTeacherMode),
future: () => room.setTeacherMode(
room.teacherMode.copyWith(enabled: !room.isTeacherMode),
),
),
enabled: room.isRoomAdmin,
showInMainView: false,
isToggle: true,
value: room.isTeacherMode,
),
ButtonDetails(
title: L10n.of(context).activitiesToUnlockTopicTitle,
description: L10n.of(context).activitiesToUnlockTopicDesc,
icon: const Icon(Icons.lock_open_outlined, size: 30.0),
onPressed: () async {
final current = room.teacherMode.activitiesToUnlockTopic;
final resp = await showTextInputDialog(
context: context,
title: L10n.of(context).activitiesToUnlockTopicTitle,
keyboardType: TextInputType.number,
validator: (input) {
if (input.isEmpty ||
int.tryParse(input) == null ||
int.parse(input) < 0) {
return L10n.of(context).enterNumber;
}
return null;
},
initialText: current != null ? "$current" : null,
);
if (resp == null) return;
await showFutureLoadingDialog(
context: context,
future: () => room.setTeacherMode(
room.teacherMode.copyWith(
activitiesToUnlockTopic: int.parse(resp),
),
),
);
},
enabled: room.isRoomAdmin,
visible: room.isTeacherMode,
showInMainView: false,
trailing: room.teacherMode.activitiesToUnlockTopic != null
? Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Text(
"${room.teacherMode.activitiesToUnlockTopic}",
style: Theme.of(context).textTheme.labelLarge,
),
)
: null,
),
ButtonDetails(
title: l10n.permissions,
description: l10n.permissionsDesc,
@ -390,6 +437,7 @@ class SpaceDetailsContent extends StatelessWidget {
onTap: b.enabled
? () => b.onPressed?.call()
: null,
trailing: b.trailing,
),
);
}).toList(),

View file

@ -152,21 +152,31 @@ mixin ActivitySummariesProvider<T extends StatefulWidget> on State<T> {
bool _hasCompletedTopic(
String userID,
CourseTopicModel topic,
int? activitiesToCompleteOverride,
) {
final topicActivityIds = topic.activityIds.toSet();
final completedTopicActivities =
_completedActivities(userID).intersection(topicActivityIds);
if (completedTopicActivities.length >= topicActivityIds.length) {
return true;
}
if (activitiesToCompleteOverride != null) {
return completedTopicActivities.length >= activitiesToCompleteOverride;
}
final numTwoPersonActivities = topic.loadedActivities.values
.where((a) => a.req.numberOfParticipants <= 2)
.length;
final completedTopicActivities =
_completedActivities(userID).intersection(topicActivityIds);
return completedTopicActivities.length >= numTwoPersonActivities;
}
String? currentTopicId(
String userID,
CoursePlanModel course,
int? activitiesToCompleteOverride,
) {
if (course.loadedTopics.isEmpty) {
return null;
@ -178,7 +188,12 @@ mixin ActivitySummariesProvider<T extends StatefulWidget> on State<T> {
if (topic == null) continue;
if (!topic.activityListComplete) continue;
if (!_hasCompletedTopic(userID, topic) && topic.activityIds.isNotEmpty) {
if (!_hasCompletedTopic(
userID,
topic,
activitiesToCompleteOverride,
) &&
topic.activityIds.isNotEmpty) {
return topicId;
}
}
@ -188,12 +203,17 @@ mixin ActivitySummariesProvider<T extends StatefulWidget> on State<T> {
Map<String, List<User>> topicsToUsers(
Room room,
CoursePlanModel course,
int? activitiesToCompleteOverride,
) {
final Map<String, List<User>> topicUserMap = {};
final users = room.getParticipants();
for (final user in users) {
if (user.id == BotName.byEnvironment) continue;
final topicId = currentTopicId(user.id, course);
final topicId = currentTopicId(
user.id,
course,
activitiesToCompleteOverride,
);
if (topicId != null) {
topicUserMap.putIfAbsent(topicId, () => []).add(user);
}

View file

@ -12,6 +12,7 @@ import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart
import 'package:fluffychat/pangea/course_chats/course_chats_settings_model.dart';
import 'package:fluffychat/pangea/course_chats/course_default_chats_enum.dart';
import 'package:fluffychat/pangea/course_plans/courses/course_plan_event.dart';
import 'package:fluffychat/pangea/course_settings/teacher_mode_model.dart';
import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart';
import 'package:fluffychat/pangea/extensions/join_rule_extension.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
@ -124,21 +125,22 @@ extension CoursePlanRoomExtension on Room {
return roomID;
}
bool get isTeacherMode {
final event = getState(PangeaEventTypes.teacherMode, client.userID!);
if (event == null) return false;
final content = event.content;
return content['enabled'] == true;
TeacherModeModel get teacherMode {
final state = getState(PangeaEventTypes.teacherMode);
if (state == null) {
return const TeacherModeModel(enabled: false);
}
return TeacherModeModel.fromJson(state.content);
}
Future<void> setTeacherMode(bool enabled) async {
bool get isTeacherMode => teacherMode.enabled && isRoomAdmin;
Future<void> setTeacherMode(TeacherModeModel model) async {
await client.setRoomStateWithKey(
id,
PangeaEventTypes.teacherMode,
client.userID!,
{
'enabled': enabled,
},
'',
model.toJson(),
);
}

View file

@ -106,6 +106,7 @@ class CourseSettings extends StatelessWidget {
final activeTopicId = controller.currentTopicId(
Matrix.of(context).client.userID!,
controller.course!,
room.teacherMode.activitiesToUnlockTopic,
);
final int? topicIndex = activeTopicId == null
@ -117,6 +118,7 @@ class CourseSettings extends StatelessWidget {
: controller.topicsToUsers(
room,
controller.course!,
room.teacherMode.activitiesToUnlockTopic,
);
final teacherMode = room.isTeacherMode;

View file

@ -0,0 +1,32 @@
class TeacherModeModel {
final bool enabled;
final int? activitiesToUnlockTopic;
const TeacherModeModel({
required this.enabled,
this.activitiesToUnlockTopic,
});
TeacherModeModel copyWith({
bool? enabled,
int? activitiesToUnlockTopic,
}) {
return TeacherModeModel(
enabled: enabled ?? this.enabled,
activitiesToUnlockTopic:
activitiesToUnlockTopic ?? this.activitiesToUnlockTopic,
);
}
Map<String, dynamic> toJson() => {
'enabled': enabled,
'activities_to_unlock_topic': activitiesToUnlockTopic,
};
factory TeacherModeModel.fromJson(Map<String, dynamic> json) {
return TeacherModeModel(
enabled: json['enabled'] ?? false,
activitiesToUnlockTopic: json['activities_to_unlock_topic'],
);
}
}

View file

@ -6,7 +6,7 @@ description: Learn a language while texting your friends.
# Pangea#
publish_to: none
# On version bump also increase the build number for F-Droid
version: 4.1.15+12
version: 4.1.15+13
environment:
sdk: ">=3.0.0 <4.0.0"