start work on audio support

This commit is contained in:
Öppen 2020-08-21 16:59:07 +01:00
parent f5176d632e
commit eb169f8c8e
4 changed files with 30 additions and 9 deletions

View File

@ -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()

View File

@ -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()))
}
}
}
}
}

View File

@ -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 ->

View File

@ -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)