fast4x / RiMusic

A multilingual Android application for streaming music from YouTube Music.
https://rimusic.xyz
GNU General Public License v3.0
2.52k stars 131 forks source link

IllegalSeekPositionException when trying to play a song #3465

Closed twistios closed 2 months ago

twistios commented 2 months ago

Steps to reproduce the bug

Use my database: rimusic_20240828194610.db.zip

  1. Import the database
  2. Go to "Songs" Menu
  3. Select "All"
  4. Scroll down far enough
  5. Play a song

Expected behavior

The song should play.

Actual behavior

The app crashs.

Screenshots/Screen recordings

No response

Logs

Stack trace

```` 2024-08-29T00:01:33.939: androidx.media3.common.IllegalSeekPositionException androidx.media3.exoplayer.ExoPlayerImpl.setMediaSourcesInternal(ExoPlayerImpl.java:2366) androidx.media3.exoplayer.ExoPlayerImpl.setMediaSources(ExoPlayerImpl.java:644) androidx.media3.exoplayer.ExoPlayerImpl.setMediaItems(ExoPlayerImpl.java:602) it.fast4x.rimusic.utils.PlayerKt.forcePlayAtIndex(Player.kt:76) it.fast4x.rimusic.ui.screens.home.HomeSongsModernKt$HomeSongsModern$24$1$15$6$2$1.invoke(HomeSongsModern.kt:1639) it.fast4x.rimusic.ui.screens.home.HomeSongsModernKt$HomeSongsModern$24$1$15$6$2$1.invoke(HomeSongsModern.kt:1631) androidx.compose.foundation.CombinedClickableNodeImpl$clickPointerInput$5.invoke-k-4lQ0M(Clickable.kt:792) androidx.compose.foundation.CombinedClickableNodeImpl$clickPointerInput$5.invoke(Clickable.kt:778) androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapGestures$2$1.invokeSuspend(TapGestureDetector.kt:138) kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:175) kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:164) kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:466) kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:500) kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:489) kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:364) androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:719) androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:598) androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:620) androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:1044) androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:387) androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373) androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373) androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373) androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373) androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:229) androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:144) androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:120) androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1993) androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1944) androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1828) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801) com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:490) com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1904) android.app.Activity.dispatchTouchEvent(Activity.java:4377) androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:448) android.view.View.dispatchPointerEvent(View.java:15919) android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7021) android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6815) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229) android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286) android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252) android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6417) android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260) android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6474) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233) android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286) android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252) android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233) android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9211) android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9162) android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9131) android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9337) android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267) android.os.MessageQueue.nativePollOnce(Native Method) android.os.MessageQueue.next(MessageQueue.java:335) android.os.Looper.loopOnce(Looper.java:162) android.os.Looper.loop(Looper.java:294) android.app.ActivityThread.main(ActivityThread.java:8177) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) ````

RiMusic version

0.6.49.2

Android version

14

Additional information

I had the problem that the original error was this (the comments are already based on my research):

Original error

```` 2024-08-28T20:20:11.144: g5.i // special java.lang.IllegalStateException: "response" "cachedResponseText" "Bad response: " ". Text: \"" u2.B.j0(SourceFile:63) // j0(Ljava/util/ArrayList;IJZ)V d6.b.M(SourceFile:31) L6.k0.a(SourceFile:130) w.A.b(SourceFile:18) y.f1.u(SourceFile:334) g7.a.i(SourceFile:9) z7.C.B(SourceFile:79) z7.g.s(SourceFile:105) z7.g.E(SourceFile:33) z7.g.i(SourceFile:17) C0.L.A0(SourceFile:51) C0.L.K(SourceFile:32) w.j.K(SourceFile:111) C0.h.h(SourceFile:157) C0.h.h(SourceFile:136) C0.h.h(SourceFile:136) C0.h.h(SourceFile:136) C0.h.h(SourceFile:136) B2.c.E(SourceFile:36) C0.x.c(SourceFile:142) J0.y.K(SourceFile:81) J0.y.m(SourceFile:383) J0.y.dispatchTouchEvent(SourceFile:76) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3328) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:776) com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1967) android.app.Activity.dispatchTouchEvent(Activity.java:4548) j.x.dispatchTouchEvent(SourceFile:3) com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:734) android.view.View.dispatchPointerEvent(View.java:16489) android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:8602) android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:8353) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7682) android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7739) android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7705) android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7908) android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7713) android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7965) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7686) android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7739) android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7705) android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7713) android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7686) android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:11250) android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:11119) android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:11075) android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:11384) android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:337) android.os.MessageQueue.nativePollOnce(Native Method) android.os.MessageQueue.next(MessageQueue.java:335) android.os.Looper.loopOnce(Looper.java:187) android.os.Looper.loop(Looper.java:319) android.app.ActivityThread.main(ActivityThread.java:8919) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) ````

One might know that the crash logs are somewhat obfuscated in the release version. In this case even the Error was obfuscated. When I tried to reproduce it on my phone, I got the problem that not only this crash happens but also one in the "misc" settings so I was not able to copy the crash log to the clipboard. Even logcat did not show any output about the crash, it seemed like the app just closed itself for no reason. Then I copied the database to my PC and there imported it into the emulator where I was able to get the crash log without obfuscation.

nojdug commented 2 months ago

Steps to reproduce the bug

Use my database: rimusic_20240828194610.db.zip

1. Import the database

2. Go to "Songs" Menu

3. Select "All"

4. Scroll down far enough

5. Play a song

Expected behavior

The song should play.

Actual behavior

The app crashs.

Screenshots/Screen recordings

No response

Logs

Stack trace

RiMusic version

0.6.49.2

Android version

14

Additional information

I had the problem that the original error was this (the comments are already based on my research): Original error

One might know that the crash logs are somewhat obfuscated in the release version. In this case even the Error was obfuscated. When I tried to reproduce it on my phone, I got the problem that not only this crash happens but also one in the "misc" settings so I was not able to copy the crash log to the clipboard. Even logcat did not show any output about the crash, it seemed like the app just closed itself for no reason. Then I copied the database to my PC and there imported it into the emulator where I was able to get the crash log without obfuscation.

twistios commented 2 months ago

@nojdug what were you trying to say?