mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 01:25:21 +00:00
* tor voice wip * worky BLE a bit * can send sound * remove tor * ui cleanup * recording time * progress bar color * nicknames for audio * onboarding permissions no microphone * may work * fix destionation * extend * refactor voice input component * fix keyboard collapse issue * send images * wip image open * image sending works * wip waveforms * better * better animation * fix cursor for sending audio * image sending animation * image sending animation * full screen image viewer * gossip sync for fragments too * reduce delays * fix keyboard focus * use v2 for file transfers * do not sync fragments * scrollable image viewer * ui * ui adjustments * nicer animation * seek through audio * add spec * add more details to documentation * File sharing E2E: - Add TLV BitchatFilePacket, FileSharingManager - Implement sendFileNote in ChatViewModel - File receive path: save to files/incoming and render [file] messages with FileMessageItem or FileSendingAnimation during transfer - SAF FilePickerButton and dispatcher wiring; image/file choice to follow in MediaPickerOptions - Add FileViewerDialog with system open/save, FileProvider and file_paths - Hook transfer progress to file sending UI - Manifest: READ_MEDIA_* and FileProvider - Fix MessageHandler saving and prefix for non-image payloads - Add helper utils (FileUtils) * kinda wip * fix buttons * files half working * wip file transfer * file packet has 2-byte TLV and chunks. it wokrs but it sucks * clean * remove gossip sync for fragments * fix audio and image rendering * adjust FILE_SIZE TLV size too * cleanup * haptic * private messages media * read receipts for media * use enum for message type not string * delivery ack checks dont push content * check * animation fix * refactor * ui adjustments * comments * refactor * fix crash on send and receive of the same file * refactor notifications * tests
31 lines
1.1 KiB
Kotlin
31 lines
1.1 KiB
Kotlin
package com.bitchat.android.mesh
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.SupervisorJob
|
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
|
import kotlinx.coroutines.flow.SharedFlow
|
|
import kotlinx.coroutines.launch
|
|
|
|
data class TransferProgressEvent(
|
|
val transferId: String,
|
|
val sent: Int,
|
|
val total: Int,
|
|
val completed: Boolean
|
|
)
|
|
|
|
object TransferProgressManager {
|
|
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
|
private val _events = MutableSharedFlow<TransferProgressEvent>(replay = 0, extraBufferCapacity = 32)
|
|
val events: SharedFlow<TransferProgressEvent> = _events
|
|
|
|
fun start(id: String, total: Int) { emit(id, 0, total, false) }
|
|
fun progress(id: String, sent: Int, total: Int) { emit(id, sent, total, sent >= total) }
|
|
fun complete(id: String, total: Int) { emit(id, total, total, true) }
|
|
|
|
private fun emit(id: String, sent: Int, total: Int, done: Boolean) {
|
|
scope.launch { _events.emit(TransferProgressEvent(id, sent, total, done)) }
|
|
}
|
|
}
|
|
|