mirror of https://git.sr.ht/~oppen/ariane
start work on audio support
This commit is contained in:
parent
f5176d632e
commit
eb169f8c8e
|
@ -13,6 +13,7 @@ sealed class TvaState {
|
|||
data class ResponseInput(val uri: URI, val header: GeminiResponse.Header) : TvaState()
|
||||
data class ResponseText(val uri: URI, val header: GeminiResponse.Header, val content: String) : TvaState()
|
||||
data class ResponseImage(val uri: URI, val header: GeminiResponse.Header, val cacheUri: Uri) : TvaState()
|
||||
data class ResponseAudio(val uri: URI, val header: GeminiResponse.Header, val cacheUri: Uri) : TvaState()
|
||||
data class ResponseError(val header: GeminiResponse.Header): TvaState()
|
||||
|
||||
data class TabChange(val count: Int) : TvaState()
|
||||
|
|
|
@ -177,6 +177,7 @@ class GeminiDatasource(val context: Context): Datasource {
|
|||
header.meta.startsWith("text/gemini") -> getGemtext(socket, uri, header, onUpdate)
|
||||
header.meta.startsWith("text/") -> getString(socket, uri, header, onUpdate)
|
||||
header.meta.startsWith("image/") -> getBinary(socket, uri, header, onUpdate)
|
||||
header.meta.startsWith("audio/") -> getBinary(socket, uri, header, onUpdate)
|
||||
else -> onUpdate(TvaState.ResponseError(header))
|
||||
}
|
||||
}
|
||||
|
@ -210,16 +211,28 @@ class GeminiDatasource(val context: Context): Datasource {
|
|||
val filenameRegex = Regex("[^A-Za-z0-9]")
|
||||
val cacheFile = File(context.cacheDir, filenameRegex.replace(uri.path, "_"))
|
||||
|
||||
if(cacheFile.exists()){
|
||||
onUpdate(TvaState.ResponseImage(uri, header, cacheFile.toUri()))
|
||||
}else{
|
||||
cacheFile.createNewFile()
|
||||
cacheFile.outputStream().use{ outputStream ->
|
||||
socket?.inputStream?.copyTo(outputStream)
|
||||
socket?.close()
|
||||
}
|
||||
|
||||
onUpdate(TvaState.ResponseImage(uri, header, cacheFile.toUri()))
|
||||
|
||||
when {
|
||||
cacheFile.exists() -> {
|
||||
when {
|
||||
header.meta.startsWith("image/") -> onUpdate(TvaState.ResponseImage(uri, header, cacheFile.toUri()))
|
||||
header.meta.startsWith("audio/") -> onUpdate(TvaState.ResponseAudio(uri, header, cacheFile.toUri()))
|
||||
}
|
||||
|
||||
}
|
||||
else -> {
|
||||
cacheFile.createNewFile()
|
||||
cacheFile.outputStream().use{ outputStream ->
|
||||
socket?.inputStream?.copyTo(outputStream)
|
||||
socket?.close()
|
||||
}
|
||||
|
||||
when {
|
||||
header.meta.startsWith("image/") -> onUpdate(TvaState.ResponseImage(uri, header, cacheFile.toUri()))
|
||||
header.meta.startsWith("audio/") -> onUpdate(TvaState.ResponseAudio(uri, header, cacheFile.toUri()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -40,6 +40,7 @@ import java.io.FileOutputStream
|
|||
import java.net.URLEncoder
|
||||
|
||||
const val CREATE_IMAGE_FILE_REQ = 628
|
||||
const val CREATE_AUDIO_FILE_REQ = 629
|
||||
|
||||
class TvaActivity : AppCompatActivity() {
|
||||
|
||||
|
@ -93,6 +94,7 @@ class TvaActivity : AppCompatActivity() {
|
|||
is TvaState.ResponseGemtext -> renderGemtext(state)
|
||||
is TvaState.ResponseText -> renderText(state)
|
||||
is TvaState.ResponseImage -> renderImage(state)
|
||||
is TvaState.ResponseAudio -> renderAudio(state)
|
||||
is TvaState.TabChange -> binding.tabCount.text = "${state.count}"
|
||||
is TvaState.Blank -> {
|
||||
binding.addressEdit.setText("")
|
||||
|
@ -215,6 +217,10 @@ class TvaActivity : AppCompatActivity() {
|
|||
|
||||
var imageState: TvaState.ResponseImage? = null
|
||||
|
||||
private fun renderAudio(state: TvaState.ResponseAudio) = runOnUiThread {
|
||||
//todo - display audio player
|
||||
}
|
||||
|
||||
private fun renderImage(state: TvaState.ResponseImage) = runOnUiThread{
|
||||
loadingView(false)
|
||||
ImageDialog.show(this, state){ state ->
|
||||
|
|
|
@ -56,6 +56,7 @@ class TvaViewModel: ViewModel() {
|
|||
is TvaState.ResponseInput -> onState(state)
|
||||
is TvaState.ResponseGemtext -> renderGemini(state)
|
||||
is TvaState.ResponseImage -> onState(state)
|
||||
is TvaState.ResponseAudio -> onState(state)
|
||||
is TvaState.Requesting -> onState(state)
|
||||
is TvaState.ResponseError -> onState(state)
|
||||
is TvaState.NotGeminiRequest -> onState(state)
|
||||
|
|
Loading…
Reference in New Issue