Passing media quality from Slider to Compressor

setting media quality to MEDIUM where ui has no option for setting it (ChannelScreen, ChatroomScreen, NewUserMetadataViewModel)
This commit is contained in:
David Kaspar
2024-09-05 09:09:10 +02:00
parent 7e4d9fb708
commit fcf5e972d6
8 changed files with 39 additions and 14 deletions
@@ -330,8 +330,8 @@ fun EditPostView(
ImageVideoDescription( ImageVideoDescription(
url, url,
accountViewModel.account.settings.defaultFileServer, accountViewModel.account.settings.defaultFileServer,
onAdd = { alt, server, sensitiveContent -> onAdd = { alt, server, sensitiveContent, mediaQuality ->
postViewModel.upload(url, alt, sensitiveContent, false, server, accountViewModel::toast, context) postViewModel.upload(url, alt, sensitiveContent, mediaQuality, false, server, accountViewModel::toast, context)
if (!server.isNip95) { if (!server.isNip95) {
accountViewModel.account.settings.changeDefaultFileServer(server.server) accountViewModel.account.settings.changeDefaultFileServer(server.server)
} }
@@ -41,7 +41,6 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.FileHeader
import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.service.Nip96Uploader
import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource
import com.vitorpamplona.amethyst.ui.components.CompressorQuality
import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.components.MediaCompressor
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -149,6 +148,7 @@ open class EditPostViewModel : ViewModel() {
galleryUri: Uri, galleryUri: Uri,
alt: String?, alt: String?,
sensitiveContent: Boolean, sensitiveContent: Boolean,
mediaQuality: Float,
isPrivate: Boolean = false, isPrivate: Boolean = false,
server: ServerOption, server: ServerOption,
onError: (String, String) -> Unit, onError: (String, String) -> Unit,
@@ -224,7 +224,7 @@ open class EditPostViewModel : ViewModel() {
isUploadingImage = false isUploadingImage = false
onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it)) onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it))
}, },
mediaQuality = CompressorQuality.LOW, mediaQuality = MediaCompressor().floatToCompressorQuality(mediaQuality),
) )
} }
} }
@@ -493,8 +493,8 @@ fun NewPostView(
ImageVideoDescription( ImageVideoDescription(
url, url,
accountViewModel.account.settings.defaultFileServer, accountViewModel.account.settings.defaultFileServer,
onAdd = { alt, server, sensitiveContent -> onAdd = { alt, server, sensitiveContent, mediaQuality ->
postViewModel.upload(url, alt, sensitiveContent, false, server, accountViewModel::toast, context) postViewModel.upload(url, alt, sensitiveContent, mediaQuality, false, server, accountViewModel::toast, context)
if (!server.isNip95) { if (!server.isNip95) {
accountViewModel.account.settings.changeDefaultFileServer(server.server) accountViewModel.account.settings.changeDefaultFileServer(server.server)
} }
@@ -1610,7 +1610,7 @@ fun CreateButton(
fun ImageVideoDescription( fun ImageVideoDescription(
uri: Uri, uri: Uri,
defaultServer: Nip96MediaServers.ServerName, defaultServer: Nip96MediaServers.ServerName,
onAdd: (String, ServerOption, Boolean) -> Unit, onAdd: (String, ServerOption, Boolean, Float) -> Unit,
onCancel: () -> Unit, onCancel: () -> Unit,
onError: (Int) -> Unit, onError: (Int) -> Unit,
accountViewModel: AccountViewModel, accountViewModel: AccountViewModel,
@@ -1668,7 +1668,7 @@ fun ImageVideoDescription(
} }
var message by remember { mutableStateOf("") } var message by remember { mutableStateOf("") }
var sensitiveContent by remember { mutableStateOf(false) } var sensitiveContent by remember { mutableStateOf(false) }
var sliderPosition by remember { mutableStateOf(1f) } // 0 = Low, 1 = Medium, 2 = High var mediaQualitySlider by remember { mutableStateOf(1f) } // 0 = Low, 1 = Medium, 2 = High
Column( Column(
modifier = modifier =
@@ -1861,15 +1861,15 @@ fun ImageVideoDescription(
) { ) {
Column { Column {
Slider( Slider(
value = sliderPosition, value = mediaQualitySlider,
onValueChange = { sliderPosition = it }, onValueChange = { mediaQualitySlider = it },
valueRange = 0f..2f, valueRange = 0f..2f,
steps = 1, steps = 1,
) )
Text( Text(
text = text =
when (sliderPosition.toInt()) { when (mediaQualitySlider.toInt()) {
0 -> CompressorQuality.LOW.toString() 0 -> CompressorQuality.LOW.toString()
1 -> CompressorQuality.MEDIUM.toString() 1 -> CompressorQuality.MEDIUM.toString()
2 -> CompressorQuality.HIGH.toString() 2 -> CompressorQuality.HIGH.toString()
@@ -1884,7 +1884,7 @@ fun ImageVideoDescription(
Modifier Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 10.dp), .padding(vertical = 10.dp),
onClick = { onAdd(message, selectedServer, sensitiveContent) }, onClick = { onAdd(message, selectedServer, sensitiveContent, mediaQualitySlider) },
shape = QuoteBorder, shape = QuoteBorder,
colors = colors =
ButtonDefaults.buttonColors( ButtonDefaults.buttonColors(
@@ -46,7 +46,6 @@ import com.vitorpamplona.amethyst.service.FileHeader
import com.vitorpamplona.amethyst.service.LocationUtil import com.vitorpamplona.amethyst.service.LocationUtil
import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.service.Nip96Uploader
import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource
import com.vitorpamplona.amethyst.ui.components.CompressorQuality
import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.components.MediaCompressor
import com.vitorpamplona.amethyst.ui.components.Split import com.vitorpamplona.amethyst.ui.components.Split
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -835,6 +834,7 @@ open class NewPostViewModel : ViewModel() {
galleryUri: Uri, galleryUri: Uri,
alt: String?, alt: String?,
sensitiveContent: Boolean, sensitiveContent: Boolean,
mediaQuality: Float,
isPrivate: Boolean = false, isPrivate: Boolean = false,
server: ServerOption, server: ServerOption,
onError: (title: String, message: String) -> Unit, onError: (title: String, message: String) -> Unit,
@@ -910,7 +910,7 @@ open class NewPostViewModel : ViewModel() {
isUploadingImage = false isUploadingImage = false
onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it)) onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it))
}, },
mediaQuality = CompressorQuality.LOW, mediaQuality = MediaCompressor().floatToCompressorQuality(mediaQuality),
) )
} }
} }
@@ -212,6 +212,7 @@ class NewUserMetadataViewModel : ViewModel() {
onError(stringRes(context, R.string.error_when_compressing_media), stringRes(context, it)) onError(stringRes(context, R.string.error_when_compressing_media), stringRes(context, it))
}, },
// Use MEDIUM quality as default
mediaQuality = CompressorQuality.MEDIUM, mediaQuality = CompressorQuality.MEDIUM,
) )
} }
@@ -184,6 +184,22 @@ class MediaCompressor {
} }
return arrayOf(name, extension) return arrayOf(name, extension)
} }
fun floatToCompressorQuality(mediaQualityFloat: Float): CompressorQuality =
when (mediaQualityFloat) {
0f -> CompressorQuality.LOW
1f -> CompressorQuality.MEDIUM
2f -> CompressorQuality.HIGH
else -> CompressorQuality.MEDIUM
}
fun compressorQualityToFloat(compressorQuality: CompressorQuality): Float =
when (compressorQuality) {
CompressorQuality.LOW -> 0f
CompressorQuality.MEDIUM -> 1f
CompressorQuality.HIGH -> 2f
else -> 1f
}
} }
enum class CompressorQuality { enum class CompressorQuality {
@@ -116,7 +116,9 @@ import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel
import com.vitorpamplona.amethyst.ui.actions.ServerOption import com.vitorpamplona.amethyst.ui.actions.ServerOption
import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery
import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation
import com.vitorpamplona.amethyst.ui.components.CompressorQuality
import com.vitorpamplona.amethyst.ui.components.LoadNote import com.vitorpamplona.amethyst.ui.components.LoadNote
import com.vitorpamplona.amethyst.ui.components.MediaCompressor
import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage
import com.vitorpamplona.amethyst.ui.components.SensitivityWarning import com.vitorpamplona.amethyst.ui.components.SensitivityWarning
import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer
@@ -466,6 +468,8 @@ fun EditFieldRow(
galleryUri = it, galleryUri = it,
alt = null, alt = null,
sensitiveContent = false, sensitiveContent = false,
// Use MEDIUM quality
mediaQuality = MediaCompressor().compressorQualityToFloat(CompressorQuality.MEDIUM),
server = ServerOption(accountViewModel.account.settings.defaultFileServer, false), server = ServerOption(accountViewModel.account.settings.defaultFileServer, false),
onError = accountViewModel::toast, onError = accountViewModel::toast,
context = context, context = context,
@@ -92,6 +92,8 @@ import com.vitorpamplona.amethyst.ui.actions.PostButton
import com.vitorpamplona.amethyst.ui.actions.ServerOption import com.vitorpamplona.amethyst.ui.actions.ServerOption
import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery
import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation
import com.vitorpamplona.amethyst.ui.components.CompressorQuality
import com.vitorpamplona.amethyst.ui.components.MediaCompressor
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture
import com.vitorpamplona.amethyst.ui.note.IncognitoIconOff import com.vitorpamplona.amethyst.ui.note.IncognitoIconOff
import com.vitorpamplona.amethyst.ui.note.IncognitoIconOn import com.vitorpamplona.amethyst.ui.note.IncognitoIconOn
@@ -443,6 +445,8 @@ fun PrivateMessageEditFieldRow(
galleryUri = it, galleryUri = it,
alt = null, alt = null,
sensitiveContent = false, sensitiveContent = false,
// use MEDIUM quality
mediaQuality = MediaCompressor().compressorQualityToFloat(CompressorQuality.MEDIUM),
isPrivate = isPrivate, isPrivate = isPrivate,
server = ServerOption(accountViewModel.account.settings.defaultFileServer, false), server = ServerOption(accountViewModel.account.settings.defaultFileServer, false),
onError = accountViewModel::toast, onError = accountViewModel::toast,