Skip to content

Commit

Permalink
Only show scene preview sprits if available
Browse files Browse the repository at this point in the history
  • Loading branch information
damontecres committed Feb 14, 2024
1 parent b59520c commit 1ecb3f2
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,15 @@ import com.github.damontecres.stashapp.util.MutationEngine
import com.github.damontecres.stashapp.util.ServerPreferences
import com.github.damontecres.stashapp.util.StashCoroutineExceptionHandler
import com.github.damontecres.stashapp.util.StashPreviewLoader
import com.github.damontecres.stashapp.util.createOkHttpClient
import com.github.rubensousa.previewseekbar.PreviewBar
import com.github.rubensousa.previewseekbar.media3.PreviewTimeBar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.Request
import java.util.concurrent.atomic.AtomicBoolean
import kotlin.time.DurationUnit
import kotlin.time.toDuration
Expand Down Expand Up @@ -189,15 +193,18 @@ class PlaybackExoFragment :

videoView = view.findViewById(R.id.video_view)
videoView.controllerShowTimeoutMs = controllerShowTimeoutMs
videoView.setControllerVisibilityListener(PlayerView.ControllerVisibilityListener {
val visStr = when (it) {
View.VISIBLE -> "VISIBLE"
View.INVISIBLE -> "INVISIBLE"
View.GONE -> "GONE"
else -> it.toString()
}
Log.v(TAG, "ControllerVisibilityListener visibility=$visStr")
})
videoView.setControllerVisibilityListener(
PlayerView.ControllerVisibilityListener {
val visStr =
when (it) {
View.VISIBLE -> "VISIBLE"
View.INVISIBLE -> "INVISIBLE"
View.GONE -> "GONE"
else -> it.toString()
}
Log.v(TAG, "ControllerVisibilityListener visibility=$visStr")
},
)

val mFocusedZoom =
requireContext().resources.getFraction(
Expand Down Expand Up @@ -245,35 +252,50 @@ class PlaybackExoFragment :
val previewImageView = view.findViewById<ImageView>(R.id.video_preview_image_view)
previewTimeBar = view.findViewById(R.id.exo_progress)

if (scene.spriteUrl != null) {
previewTimeBar.isPreviewEnabled = true
previewTimeBar.setPreviewLoader(
StashPreviewLoader(
requireContext(),
previewImageView,
scene,
),
)
previewTimeBar.addOnScrubListener(
object : PreviewBar.OnScrubListener {
override fun onScrubStart(previewBar: PreviewBar) {
player!!.playWhenReady = false
}
previewTimeBar.isPreviewEnabled = false
previewTimeBar.addOnScrubListener(
object : PreviewBar.OnScrubListener {
override fun onScrubStart(previewBar: PreviewBar) {
player!!.playWhenReady = false
}

override fun onScrubMove(
previewBar: PreviewBar,
progress: Int,
fromUser: Boolean,
) {
}
override fun onScrubMove(
previewBar: PreviewBar,
progress: Int,
fromUser: Boolean,
) {
}

override fun onScrubStop(previewBar: PreviewBar) {
player!!.playWhenReady = true
override fun onScrubStop(previewBar: PreviewBar) {
player!!.playWhenReady = true
}
},
)

if (scene.spriteUrl != null) {
// Usually even if not null, there may not be sprites and the server will return a 404
viewLifecycleOwner.lifecycleScope.launch(StashCoroutineExceptionHandler()) {
withContext(Dispatchers.IO) {
val client = createOkHttpClient(requireContext())
val request = Request.Builder().url(scene.spriteUrl!!).get().build()
client.newCall(request).execute().use {
Log.d(
TAG,
"Sprite URL check isSuccessful=${it.isSuccessful}, code=${it.code}",
)
if (it.isSuccessful) {
previewTimeBar.isPreviewEnabled = true
previewTimeBar.setPreviewLoader(
StashPreviewLoader(
requireContext(),
previewImageView,
scene,
),
)
}
}
},
)
} else {
previewTimeBar.isPreviewEnabled = false
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.github.damontecres.stashapp.api.fragment.SavedFilterData
import com.github.damontecres.stashapp.api.fragment.SlimSceneData
import com.github.damontecres.stashapp.api.type.FindFilterType
import com.github.damontecres.stashapp.data.DataType
import com.github.damontecres.stashapp.util.Constants.STASH_API_HEADER
import okhttp3.OkHttpClient
import java.io.File
import java.security.SecureRandom
Expand Down Expand Up @@ -85,18 +86,33 @@ val TRUST_ALL_CERTS: TrustManager =
}
}

fun createUnsafeOkHttpClient(): OkHttpClient {
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, arrayOf(TRUST_ALL_CERTS), SecureRandom())
return OkHttpClient.Builder()
.sslSocketFactory(
fun createOkHttpClient(context: Context): OkHttpClient {
val trustAll =
PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean("trustAllCerts", false)
val apiKey =
PreferenceManager.getDefaultSharedPreferences(context)
.getString("stashApiKey", null)
val builder = OkHttpClient.Builder()
if (trustAll) {
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, arrayOf(TRUST_ALL_CERTS), SecureRandom())
builder.sslSocketFactory(
sslContext.socketFactory,
TRUST_ALL_CERTS as X509TrustManager,
)
.hostnameVerifier { _, _ ->
true
.hostnameVerifier { _, _ ->
true
}
}
if (apiKey.isNotNullOrBlank()) {
builder.addInterceptor {
val request =
it.request().newBuilder().addHeader(STASH_API_HEADER, apiKey.trim()).build()
it.proceed(request)
}
.build()
}
return builder.build()
}

fun configureHttpsTrust(
Expand Down Expand Up @@ -195,7 +211,7 @@ fun createApolloClient(context: Context): ApolloClient? {
.getBoolean("trustAllCerts", false)
val httpEngine =
if (trustAll) {
DefaultHttpEngine(createUnsafeOkHttpClient())
DefaultHttpEngine(createOkHttpClient(context))
} else {
DefaultHttpEngine()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class UnsafeOkHttpGlideModule : AppGlideModule() {
registry.replace<GlideUrl, InputStream>(
GlideUrl::class.java,
InputStream::class.java,
OkHttpUrlLoader.Factory(createUnsafeOkHttpClient()),
OkHttpUrlLoader.Factory(createOkHttpClient(context)),
)
}
}
Expand Down

0 comments on commit 1ecb3f2

Please sign in to comment.