toasterofbread / spmp

A YouTube Music client with a focus on customisation of colours and song metadata. Built with Compose Multiplatform for Android and desktop.
GNU General Public License v3.0
1.17k stars 44 forks source link

[Flatpak/Linux] java.io.FileNotFoundException: ~/.cache/spmp/thumbnails/<filename>.png (No such file or directory) #405

Open PopCat19 opened 4 days ago

PopCat19 commented 4 days ago

Checklist

Steps to reproduce

  1. Install spmp through flatpak following: https://spmp.toastbits.dev/docs/0.4.x/client/installation/#flatpak
  2. Launch spmp through Rofi or run flatpak run spmp in Kitty terminal.

Expected behavior

Program should run without crashes.

Actual behavior

Program crashed due to

java.io.FileNotFoundException: /home/popcat19/.cache/spmp/thumbnails/VLRDCLAK5uy_l39bpxtMK-nGlOep-fF0yW_rFTdG0P5Ig.0.png (No such file or directory)

Screenshots / recordings

241125_18h49m38s_screenshot

Logs

~
❯ flatpak run dev.toastbits.spmp 
Database is already up to date (version 6)
Loading resource file at values/strings.xml
Loading resource file at values-en-US/strings.xml
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
Event (true, null): PROPERTY_CHANGED({key="is_playing", value=false})
Connecting to server at tcp://127.0.0.1:3973...
Sending handshake message to server at tcp://127.0.0.1:3973...
Waiting for reply from server at tcp://127.0.0.1:3973...
Received reply handshake from server with the following content:
[{"name":"spmp-server","device_name":"popcat19-pc0 on Linux","spms_api_version":2,"server_state":{"queue":[],"state":"IDLE","is_playing":false,"current_item_index":-1,"current_position_ms":0,"duration_ms":0,"repeat_mode":"NONE"},"machine_id":"TYwYXCcw"}]
Sent connection reply to Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=2454)): SpMsServerHandshake(name=spmp-server, device_name=popcat19-pc0 on Linux, spms_api_version=2, server_state=SpMsServerState(queue=[], state=IDLE, is_playing=false, current_item_index=-1, current_position_ms=0, duration_ms=0, repeat_mode=NONE), machine_id=TYwYXCcw, action_replies=null)
Client connected: Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=2454))
sendRequest !clients [] false
GOT MSG FROM CLIENT [!clients, []]
Performing server action clients with [] from Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=157281509))
Sending reply to client: [SpMsActionReply(success=true, error=null, error_cause=null, result=[{"name":"spmp-server","type":"SERVER","language":"EN","machine_id":"TYwYXCcw","player_port":3973},{"name":"SpMp [Linux, popcat19-pc0]","type":"SPMP_STANDALONE","language":"EN","machine_id":"TYwYXCcw","is_caller":true}])]
sendRequest setAuthInfo [null] false
GOT MSG FROM CLIENT [setAuthInfo, [null]]
Performing player action setAuthInfo with [null] from Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=409086586))
Sending reply to client: []
sendRequest !clients [] false
GOT MSG FROM CLIENT [!clients, []]
Performing server action clients with [] from Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=1129838756))
Sending reply to client: [SpMsActionReply(success=true, error=null, error_cause=null, result=[{"name":"spmp-server","type":"SERVER","language":"EN","machine_id":"TYwYXCcw","player_port":3973},{"name":"SpMp [Linux, popcat19-pc0]","type":"SPMP_STANDALONE","language":"EN","machine_id":"TYwYXCcw","is_caller":true}])]
sendRequest setLocalFiles [{}] false
GOT MSG FROM CLIENT [setLocalFiles, [{}]]
Performing player action setLocalFiles with [{}] from Client(id=30385170, name=SpMp [Linux, popcat19-pc0], type=SPMP_STANDALONE, language=EN, event_head=0, last_heartbeat=ValueTimeMark(reading=1242562235))
Sending reply to client: []
java.io.FileNotFoundException: /home/popcat19/.cache/spmp/thumbnails/l6_w3887Rwo.0.png (No such file or directory)
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(Unknown Source)
    at java.base/java.io.FileOutputStream.<init>(Unknown Source)
    at java.base/java.io.FileOutputStream.<init>(Unknown Source)
    at kotlin.io.FilesKt__FileReadWriteKt.writeBytes(FileReadWrite.kt:114)
    at com.toasterofbread.spmp.model.mediaitem.loader.MediaItemThumbnailLoader$performLoad$2.invokeSuspend(MediaItemThumbnailLoader.kt:128)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
    at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111)
    at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
    Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.scene.ComposeContainer$DesktopCoroutineExceptionHandler@4eba452e, androidx.compose.runtime.BroadcastFrameClock@13f7bec2, StandaloneCoroutine{Cancelling}@71ddaf1e, FlushCoroutineDispatcher@3da3bae4]
java.io.FileNotFoundException: /home/popcat19/.cache/spmp/thumbnails/VLRDCLAK5uy_l39bpxtMK-nGlOep-fF0yW_rFTdG0P5Ig.0.png (No such file or directory)
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(Unknown Source)
    at java.base/java.io.FileOutputStream.<init>(Unknown Source)
    at java.base/java.io.FileOutputStream.<init>(Unknown Source)
    at kotlin.io.FilesKt__FileReadWriteKt.writeBytes(FileReadWrite.kt:114)
    at com.toasterofbread.spmp.model.mediaitem.loader.MediaItemThumbnailLoader$performLoad$2.invokeSuspend(MediaItemThumbnailLoader.kt:128)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
    at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111)
    at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
    Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.scene.ComposeContainer$DesktopCoroutineExceptionHandler@4eba452e, androidx.compose.runtime.BroadcastFrameClock@13f7bec2, StandaloneCoroutine{Cancelling}@6b4774db, FlushCoroutineDispatcher@3da3bae4]
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []
GOT MSG FROM CLIENT []
Sending reply to client: []

SpMp version

0.4.1

SpMp platform

Linux

OS version

CachyOS/Arch 6.12.1-2-cachyos

Additional information

Couldn't run debug release artifact

After executing spmp from ~/Downloads/spmp/bin with crash: java.lang.UnsupportedClassVersionError. | If I'm doing this wrong, please direct me with steps to properly run spmp latest debug version on Arch Linux. (jdk-openjdk 23.0.1 is installed)

Log ```log java.lang.UnsupportedClassVersionError: dev/toastbits/ytmkt/impl/youtubei/YoutubeiApi has been compiled by a more recent version of the Java Runtime (class file version 66.0), this version of the Java Runtime only recognizes class file versions up to 65.0 Stack trace: java.lang.UnsupportedClassVersionError: dev/toastbits/ytmkt/impl/youtubei/YoutubeiApi has been compiled by a more recent version of the Java Runtime (class file version 66.0), this version of the Java Runtime only recognizes class file versions up to 65.0 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(Unknown Source) at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(Unknown Source) at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at com.toasterofbread.spmp.youtubeapi.YtmApiType.instantiate(YtmApiType.kt:24) at com.toasterofbread.spmp.platform.AppContext.(AppContext.desktop.kt:56) at com.toasterofbread.spmp.platform.AppContext.(AppContext.desktop.kt) at com.toasterofbread.spmp.platform.AppContext$Companion.create(AppContext.desktop.kt:35) at com.toasterofbread.spmp.platform.AppContext$Companion$create$1.invokeSuspend(AppContext.desktop.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:28) at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101) at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69) at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:47) at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source) at MainKt.main(main.kt:41) ```

Distro: CachyOS (Arch-based) WM: Hyprland (Wayland)

~
❯ flatpak info dev.toastbits.spmp 

SpMp - A customisable YouTube Music client

          ID: dev.toastbits.spmp
         Ref: app/dev.toastbits.spmp/x86_64/master
        Arch: x86_64
      Branch: master
     Version: v0.4.1
     License: GPL-3.0-only
      Origin: toastbits
  Collection: 
Installation: system
   Installed: 507.7 MB
     Runtime: org.freedesktop.Platform/x86_64/23.08
         Sdk: org.freedesktop.Sdk/x86_64/23.08

      Commit: aae20f3b742fccea3a090e67846ee29808428633c9298532124dea203ef5fc3e
     Subject: Export dev.toastbits.spmp
        Date: 2024-10-28 17:50:21 +0000
PopCat19 commented 4 days ago

On an afterthought, this problem could be occuring because of my <800kb/s download speed. Nonetheless, it should still compensate load for the limited speed; youtube/ytm loads and runs without issues in Brave browser.