Merge branch 'develop' into feature/bma/readReceipts

This commit is contained in:
Benoit Marty 2023-11-20 12:15:32 +01:00 committed by GitHub
commit 58012268f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 646 additions and 93 deletions

View file

@ -21,12 +21,11 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.ForwardEventException
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull
import io.element.android.libraries.matrix.impl.timeline.runWithTimelineListenerRegistered
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.withTimeout
import org.matrix.rustcomponents.sdk.Room
import org.matrix.rustcomponents.sdk.RoomListService
import org.matrix.rustcomponents.sdk.TimelineDiff
import org.matrix.rustcomponents.sdk.TimelineListener
import kotlin.time.Duration.Companion.milliseconds
/**
@ -56,16 +55,14 @@ class RoomContentForwarder(
val failedForwardingTo = mutableSetOf<RoomId>()
targetRooms.parallelMap { room ->
room.use { targetRoom ->
val result = runCatching {
runCatching {
// Sending a message requires a registered timeline listener
targetRoom.addTimelineListener(NoOpTimelineListener)
withTimeout(timeoutMs.milliseconds) {
targetRoom.send(content)
targetRoom.runWithTimelineListenerRegistered {
withTimeout(timeoutMs.milliseconds) {
targetRoom.send(content)
}
}
}
// After sending, we remove the timeline
targetRoom.removeTimeline()
result
}.onFailure {
failedForwardingTo.add(RoomId(room.id()))
if (it is CancellationException) {
@ -75,11 +72,7 @@ class RoomContentForwarder(
}
if (failedForwardingTo.isNotEmpty()) {
throw ForwardEventException(toRoomIds.toList())
throw ForwardEventException(failedForwardingTo.toList())
}
}
private object NoOpTimelineListener : TimelineListener {
override fun onUpdate(diff: List<TimelineDiff>) = Unit
}
}

View file

@ -70,3 +70,17 @@ internal fun Room.backPaginationStatusFlow(): Flow<BackPaginationStatus> =
subscribeToBackPaginationStatus(listener)
}
}.buffer(Channel.UNLIMITED)
internal suspend fun Room.runWithTimelineListenerRegistered(action: suspend () -> Unit) {
val result = addTimelineListener(NoOpTimelineListener)
try {
action()
} finally {
result.itemsStream.cancelAndDestroy()
result.items.destroyAll()
}
}
private object NoOpTimelineListener : TimelineListener {
override fun onUpdate(diff: List<TimelineDiff>) = Unit
}

View file

@ -9,12 +9,14 @@
<string name="a11y_play">"Воспроизвести"</string>
<string name="a11y_poll">"Опрос"</string>
<string name="a11y_poll_end">"Опрос завершен"</string>
<string name="a11y_read_receipts_single">"Прочитано %1$s"</string>
<string name="a11y_send_files">"Отправить файлы"</string>
<string name="a11y_show_password">"Показать пароль"</string>
<string name="a11y_start_call">"Начать звонок"</string>
<string name="a11y_user_menu">"Меню пользователя"</string>
<string name="a11y_voice_message_record">"Записать голосовое сообщение."</string>
<string name="a11y_voice_message_stop_recording">"Остановить запись"</string>
<string name="a11y_read_receipts_multiple">"Прочитано %1$s и %2$s"</string>
<string name="action_accept">"Разрешить"</string>
<string name="action_add_to_timeline">"Добавить в хронологию"</string>
<string name="action_back">"Назад"</string>
@ -81,6 +83,7 @@
<string name="action_start_verification">"Начать подтверждение"</string>
<string name="action_static_map_load">"Нажмите, чтобы загрузить карту"</string>
<string name="action_take_photo">"Сделать фото"</string>
<string name="action_tap_for_options">"Нажмите для просмотра вариантов"</string>
<string name="action_try_again">"Повторить попытку"</string>
<string name="action_view_source">"Показать источник"</string>
<string name="action_yes">"Да"</string>
@ -89,12 +92,14 @@
<string name="common_acceptable_use_policy">"Политика допустимого использования"</string>
<string name="common_advanced_settings">"Дополнительные параметры"</string>
<string name="common_analytics">"Аналитика"</string>
<string name="common_appearance">"Оформление"</string>
<string name="common_audio">"Аудио"</string>
<string name="common_bubbles">"Пузыри"</string>
<string name="common_chat_backup">"Резервная копия чатов"</string>
<string name="common_copyright">"Авторское право"</string>
<string name="common_creating_room">"Создание комнаты…"</string>
<string name="common_current_user_left_room">"Покинул комнату"</string>
<string name="common_dark">"Темная"</string>
<string name="common_decryption_error">"Ошибка расшифровки"</string>
<string name="common_developer_options">"Для разработчика"</string>
<string name="common_edited_suffix">"(изменено)"</string>
@ -113,6 +118,7 @@
<string name="common_install_apk_android">"Установить APK"</string>
<string name="common_invite_unknown_profile">"Идентификатор Matrix ID не найден, приглашение может быть не получено."</string>
<string name="common_leaving_room">"Покинуть комнату"</string>
<string name="common_light">"Светлая"</string>
<string name="common_link_copied_to_clipboard">"Ссылка скопирована в буфер обмена"</string>
<string name="common_loading">"Загрузка…"</string>
<string name="common_message">"Сообщение"</string>
@ -146,7 +152,10 @@
<string name="common_search_for_someone">"Поиск человека"</string>
<string name="common_search_results">"Результаты поиска"</string>
<string name="common_security">"Безопасность"</string>
<string name="common_seen_by">"Просмотрено"</string>
<string name="common_sending">"Отправка…"</string>
<string name="common_sending_failed">"Сбой отправки"</string>
<string name="common_sent">"Отправлено"</string>
<string name="common_server_not_supported">"Сервер не поддерживается"</string>
<string name="common_server_url">"Адрес сервера"</string>
<string name="common_settings">"Настройки"</string>
@ -157,6 +166,7 @@
<string name="common_success">"Успешно"</string>
<string name="common_suggestions">"Рекомендации"</string>
<string name="common_syncing">"Синхронизация"</string>
<string name="common_system">"Системная"</string>
<string name="common_text">"Текст"</string>
<string name="common_third_party_notices">"Уведомление о третьей стороне"</string>
<string name="common_thread">"Обсуждение"</string>
@ -198,6 +208,11 @@
<item quantity="few">"Ведено %1$d цифр"</item>
<item quantity="many">"Введено много цифр"</item>
</plurals>
<plurals name="a11y_read_receipts_multiple_with_others">
<item quantity="one">"Прочитано %1$s и %2$d другим"</item>
<item quantity="few">"Прочитано %1$s и %2$d другими"</item>
<item quantity="many">"Прочитано %1$s и %2$d другими"</item>
</plurals>
<plurals name="common_member_count">
<item quantity="one">"%1$d участник"</item>
<item quantity="few">"%1$d участников"</item>

View file

@ -9,12 +9,14 @@
<string name="a11y_play">"Prehrať"</string>
<string name="a11y_poll">"Anketa"</string>
<string name="a11y_poll_end">"Ukončená anketa"</string>
<string name="a11y_read_receipts_single">"Prečítal/a %1$s"</string>
<string name="a11y_send_files">"Odoslať súbory"</string>
<string name="a11y_show_password">"Zobraziť heslo"</string>
<string name="a11y_start_call">"Začať hovor"</string>
<string name="a11y_user_menu">"Používateľské menu"</string>
<string name="a11y_voice_message_record">"Nahrať hlasovú správu."</string>
<string name="a11y_voice_message_stop_recording">"Zastaviť nahrávanie"</string>
<string name="a11y_read_receipts_multiple">"Prečítal/a %1$s a %2$s"</string>
<string name="action_accept">"Prijať"</string>
<string name="action_add_to_timeline">"Pridať na časovú os"</string>
<string name="action_back">"Späť"</string>
@ -81,6 +83,7 @@
<string name="action_start_verification">"Spustiť overovanie"</string>
<string name="action_static_map_load">"Ťuknutím načítate mapu"</string>
<string name="action_take_photo">"Urobiť fotku"</string>
<string name="action_tap_for_options">"Klepnutím získate možnosti"</string>
<string name="action_try_again">"Skúste to znova"</string>
<string name="action_view_source">"Zobraziť zdroj"</string>
<string name="action_yes">"Áno"</string>
@ -89,12 +92,14 @@
<string name="common_acceptable_use_policy">"Zásady prijateľného používania"</string>
<string name="common_advanced_settings">"Pokročilé nastavenia"</string>
<string name="common_analytics">"Analytika"</string>
<string name="common_appearance">"Vzhľad"</string>
<string name="common_audio">"Zvuk"</string>
<string name="common_bubbles">"Bubliny"</string>
<string name="common_chat_backup">"Záloha konverzácie"</string>
<string name="common_copyright">"Autorské práva"</string>
<string name="common_creating_room">"Vytváranie miestnosti…"</string>
<string name="common_current_user_left_room">"Opustil/a miestnosť"</string>
<string name="common_dark">"Tmavý"</string>
<string name="common_decryption_error">"Chyba dešifrovania"</string>
<string name="common_developer_options">"Možnosti pre vývojárov"</string>
<string name="common_edited_suffix">"(upravené)"</string>
@ -113,6 +118,7 @@
<string name="common_install_apk_android">"Inštalovať APK"</string>
<string name="common_invite_unknown_profile">"Toto Matrix ID sa nedá nájsť, takže pozvánka nemusí byť prijatá."</string>
<string name="common_leaving_room">"Opustenie miestnosti"</string>
<string name="common_light">"Svetlý"</string>
<string name="common_link_copied_to_clipboard">"Odkaz bol skopírovaný do schránky"</string>
<string name="common_loading">"Načítava sa…"</string>
<string name="common_message">"Správa"</string>
@ -146,7 +152,10 @@
<string name="common_search_for_someone">"Vyhľadať niekoho"</string>
<string name="common_search_results">"Výsledky hľadania"</string>
<string name="common_security">"Bezpečnosť"</string>
<string name="common_seen_by">"Videné"</string>
<string name="common_sending">"Odosiela sa…"</string>
<string name="common_sending_failed">"Odoslanie zlyhalo"</string>
<string name="common_sent">"Odoslané"</string>
<string name="common_server_not_supported">"Server nie je podporovaný"</string>
<string name="common_server_url">"URL adresa servera"</string>
<string name="common_settings">"Nastavenia"</string>
@ -157,6 +166,7 @@
<string name="common_success">"Úspech"</string>
<string name="common_suggestions">"Návrhy"</string>
<string name="common_syncing">"Synchronizuje sa"</string>
<string name="common_system">"Systém"</string>
<string name="common_text">"Text"</string>
<string name="common_third_party_notices">"Oznámenia tretích strán"</string>
<string name="common_thread">"Vlákno"</string>
@ -198,6 +208,11 @@
<item quantity="few">"%1$d zadané číslice"</item>
<item quantity="other">"%1$d zadaných číslic"</item>
</plurals>
<plurals name="a11y_read_receipts_multiple_with_others">
<item quantity="one">"Prečítal/a %1$s a %2$d ďalší"</item>
<item quantity="few">"Prečítal/a %1$s a %2$d ďalší"</item>
<item quantity="other">"Prečítal/a %1$s a %2$d ďalších"</item>
</plurals>
<plurals name="common_member_count">
<item quantity="one">"%1$d člen"</item>
<item quantity="few">"%1$d členovia"</item>