From eb169f8c8ed45b233d6d43ca604661eaf354bc44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96ppen?= Date: Fri, 21 Aug 2020 16:59:07 +0100 Subject: [PATCH] start work on audio support --- app/src/main/java/oppen/tva/io/TvaState.kt | 1 + .../oppen/tva/io/gemini/GeminiDatasource.kt | 31 +++++++++++++------ app/src/main/java/oppen/tva/ui/TvaActivity.kt | 6 ++++ .../main/java/oppen/tva/ui/TvaViewModel.kt | 1 + 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/oppen/tva/io/TvaState.kt b/app/src/main/java/oppen/tva/io/TvaState.kt index c52974e..11aaa93 100644 --- a/app/src/main/java/oppen/tva/io/TvaState.kt +++ b/app/src/main/java/oppen/tva/io/TvaState.kt @@ -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() diff --git a/app/src/main/java/oppen/tva/io/gemini/GeminiDatasource.kt b/app/src/main/java/oppen/tva/io/gemini/GeminiDatasource.kt index a2cd141..2b90bbd 100644 --- a/app/src/main/java/oppen/tva/io/gemini/GeminiDatasource.kt +++ b/app/src/main/java/oppen/tva/io/gemini/GeminiDatasource.kt @@ -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())) + } + } } } } \ No newline at end of file diff --git a/app/src/main/java/oppen/tva/ui/TvaActivity.kt b/app/src/main/java/oppen/tva/ui/TvaActivity.kt index 3653709..1300358 100644 --- a/app/src/main/java/oppen/tva/ui/TvaActivity.kt +++ b/app/src/main/java/oppen/tva/ui/TvaActivity.kt @@ -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 -> diff --git a/app/src/main/java/oppen/tva/ui/TvaViewModel.kt b/app/src/main/java/oppen/tva/ui/TvaViewModel.kt index 48e4d20..4dd6269 100644 --- a/app/src/main/java/oppen/tva/ui/TvaViewModel.kt +++ b/app/src/main/java/oppen/tva/ui/TvaViewModel.kt @@ -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)