mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-29 21:52:31 +02:00
making MediaCompressor configurable
This commit is contained in:
@@ -41,6 +41,7 @@ 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
|
||||||
@@ -223,6 +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))
|
||||||
},
|
},
|
||||||
|
mediaQaulity = CompressorQuality.LOW,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ import com.vitorpamplona.amethyst.model.Account
|
|||||||
import com.vitorpamplona.amethyst.service.FileHeader
|
import com.vitorpamplona.amethyst.service.FileHeader
|
||||||
import com.vitorpamplona.amethyst.service.Nip96MediaServers
|
import com.vitorpamplona.amethyst.service.Nip96MediaServers
|
||||||
import com.vitorpamplona.amethyst.service.Nip96Uploader
|
import com.vitorpamplona.amethyst.service.Nip96Uploader
|
||||||
|
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.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.ammolite.relays.RelaySetupInfo
|
import com.vitorpamplona.ammolite.relays.RelaySetupInfo
|
||||||
@@ -166,6 +167,7 @@ open class NewMediaModel : ViewModel() {
|
|||||||
uploadingDescription.value = null
|
uploadingDescription.value = null
|
||||||
onError(stringRes(context, R.string.error_when_compressing_media, it))
|
onError(stringRes(context, R.string.error_when_compressing_media, it))
|
||||||
},
|
},
|
||||||
|
mediaQaulity = CompressorQuality.LOW,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,6 +46,7 @@ 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
|
||||||
@@ -909,6 +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))
|
||||||
},
|
},
|
||||||
|
mediaQaulity = CompressorQuality.LOW,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,7 @@ import androidx.lifecycle.viewModelScope
|
|||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.service.Nip96Uploader
|
import com.vitorpamplona.amethyst.service.Nip96Uploader
|
||||||
|
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.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.quartz.events.GitHubIdentity
|
import com.vitorpamplona.quartz.events.GitHubIdentity
|
||||||
@@ -211,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))
|
||||||
},
|
},
|
||||||
|
mediaQaulity = CompressorQuality.MEDIUM,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,10 +46,20 @@ class MediaCompressor {
|
|||||||
applicationContext: Context,
|
applicationContext: Context,
|
||||||
onReady: (Uri, String?, Long?) -> Unit,
|
onReady: (Uri, String?, Long?) -> Unit,
|
||||||
onError: (Int) -> Unit,
|
onError: (Int) -> Unit,
|
||||||
|
mediaQaulity: CompressorQuality?,
|
||||||
) {
|
) {
|
||||||
checkNotInMainThread()
|
checkNotInMainThread()
|
||||||
|
|
||||||
if (contentType?.startsWith("video", true) == true) {
|
if (contentType?.startsWith("video", true) == true) {
|
||||||
|
val videoQuality =
|
||||||
|
when (mediaQaulity) {
|
||||||
|
CompressorQuality.VERY_LOW -> VideoQuality.VERY_LOW
|
||||||
|
CompressorQuality.LOW -> VideoQuality.LOW
|
||||||
|
CompressorQuality.MEDIUM -> VideoQuality.MEDIUM
|
||||||
|
CompressorQuality.HIGH -> VideoQuality.HIGH
|
||||||
|
CompressorQuality.VERY_HIGH -> VideoQuality.VERY_HIGH
|
||||||
|
else -> VideoQuality.MEDIUM
|
||||||
|
}
|
||||||
VideoCompressor.start(
|
VideoCompressor.start(
|
||||||
// => This is required
|
// => This is required
|
||||||
context = applicationContext,
|
context = applicationContext,
|
||||||
@@ -65,7 +75,7 @@ class MediaCompressor {
|
|||||||
appSpecificStorageConfiguration = AppSpecificStorageConfiguration(),
|
appSpecificStorageConfiguration = AppSpecificStorageConfiguration(),
|
||||||
configureWith =
|
configureWith =
|
||||||
Configuration(
|
Configuration(
|
||||||
quality = VideoQuality.MEDIUM,
|
quality = videoQuality,
|
||||||
// => required name
|
// => required name
|
||||||
videoNames = listOf(UUID.randomUUID().toString()),
|
videoNames = listOf(UUID.randomUUID().toString()),
|
||||||
),
|
),
|
||||||
@@ -110,10 +120,19 @@ class MediaCompressor {
|
|||||||
!contentType.contains("gif") &&
|
!contentType.contains("gif") &&
|
||||||
!contentType.contains("svg")
|
!contentType.contains("svg")
|
||||||
) {
|
) {
|
||||||
|
val imageQuality =
|
||||||
|
when (mediaQaulity) {
|
||||||
|
CompressorQuality.VERY_LOW -> 40
|
||||||
|
CompressorQuality.LOW -> 50
|
||||||
|
CompressorQuality.MEDIUM -> 60
|
||||||
|
CompressorQuality.HIGH -> 80
|
||||||
|
CompressorQuality.VERY_HIGH -> 90
|
||||||
|
else -> 60
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
val compressedImageFile =
|
val compressedImageFile =
|
||||||
Compressor.compress(applicationContext, from(uri, contentType, applicationContext)) {
|
Compressor.compress(applicationContext, from(uri, contentType, applicationContext)) {
|
||||||
default(width = 640, format = Bitmap.CompressFormat.JPEG)
|
default(width = 640, format = Bitmap.CompressFormat.JPEG, quality = imageQuality)
|
||||||
}
|
}
|
||||||
onReady(compressedImageFile.toUri(), contentType, compressedImageFile.length())
|
onReady(compressedImageFile.toUri(), contentType, compressedImageFile.length())
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -163,3 +182,11 @@ class MediaCompressor {
|
|||||||
return arrayOf(name, extension)
|
return arrayOf(name, extension)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class CompressorQuality {
|
||||||
|
VERY_LOW,
|
||||||
|
LOW,
|
||||||
|
MEDIUM,
|
||||||
|
HIGH,
|
||||||
|
VERY_HIGH,
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user