KRTirtho / spotube

🎧 Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile!
https://spotube.krtirtho.dev/
Other
28.89k stars 1.19k forks source link

[Bug] Local file breakes playlists #432

Open Protonosgit opened 1 year ago

Protonosgit commented 1 year ago

Is there an existing issue for this?

Current Behavior

Playlist stops rendering after a local file was added. Also affects public playlists from other users.

Expected Behavior

The playlist shows as usual but without local files

Steps To Reproduce

  1. First open Spotify
  2. Create playlist
  3. Add some songs for comparison
  4. Enable show local files in settings
  5. Select a song from the local playlist
  6. Click add to playlist and select the playlist from above
  7. Add one or more songs from spotify servers
  8. Go back to Spotube and open the playlist

-> The local file in the playlist will stop the rest of the playlist from rendering correctly (shows white space) -> Public Playlist are also affected if they contain local files

Spotube Version

2.7.0

Operating System

Android

Linux Distribution (if applicable)

No response

Operating System Version

Android 13

Installation Source

Official Website (spotube.netlify.app)

Additional information

Simply removing listed local files from the playlist would fix the issue

KRTirtho commented 1 year ago

How are u adding local tracks to the playlist? Spotube doesn't allow that Can u share a screenshot?

Protonosgit commented 1 year ago

You can add local tracks in Spotify as mentioned above. These playlists with local tracks can also be played on Spotube. Screenshot_20230309_094032_Spotify

Protonosgit commented 1 year ago

ListView stops rendering after local track Screenshot_20230309_144533

KRTirtho commented 1 year ago

This is probably related to something else. Your local tracks stays on your device and Spotify doesn't keep any track of that in server so it shouldn't show up in Spotube or in Spotify running in different devices

Protonosgit commented 1 year ago

The tracks are listed on the servers but they can not be played on other devices!

MrDemocracy commented 5 months ago

I was gonna report this same issue until I saw it had already been reported. It could be because of the local file track in the playlist not having an album cover (if I'm reading the logs correctly). Alternatively it could be because the local file for the song has been deleted on the host device, because that's at least the case for me. I no longer have the file on my computer, but only have the song in the playlist still to remember the name.

Here are some logs ``` ============================== CATCHER 2 LOG ============================== ------- DEVICE INFO ------- computerName: DESKTOP numberOfCores: 8 systemMemoryInMegabytes: 65536 ------- APP INFO ------- environment: release version: 3.5.0 appName: spotube buildNumber: packageName: spotube ---------- ERROR ---------- PathNotFoundException: Cannot retrieve length of file, path = 'imageUrl' (OS Error: The system cannot find the file specified. , errno ------------ STACK TRACE ---#0 #0 _checkForErrorResponse (dart:io/common.dart:55) #1 _File.length. (dart:io/file_impl.dart:389) #2 FileImage._loadAsync (package:flutter/src/painting/image_provider.dart:1484) #3 MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:985) (package:spotube/services/queries/lyrics.dart:71) #1 useSpotifyQuery. (package:spotube/hooks/spotify/use_spotify_query.dart:30) #2 new Future.delayed. (dart:async/future.dart:422) #3 TickerFuture.whenCompleteOrCancel.thunk (package:flutter/src/scheduler/ticker.dart:435) #4 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398) #5 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429) #6 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184) ------- CUSTOM INFO ------- ``` ``` ============================== CATCHER 2 LOG ============================== ------- DEVICE INFO ------- computerName: DESKTOP numberOfCores: 8 systemMemoryInMegabytes: 65536 ------- APP INFO ------- environment: release version: 3.5.0 appName: spotube buildNumber: packageName: spotube ---------- ERROR ---------- Null check operator used on a null value ------- STACK TRACE ------- #0 TrackViewBodySection.build. (package:spotube/components/shared/tracks_view/sections/body/track_view_body.dart:110) #1 _SliverInfiniteListState.build. (package:very_good_infinite_list/src/sliver_infinite_list.dart:174) #2 SliverChildBuilderDelegate.build (package:flutter/src/widgets/scroll_delegate.dart:490) #3 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:829) #4 SliverMultiBoxAdaptorElement.createChild. (package:flutter/src/widgets/sliver.dart:843) #5 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2844) #6 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:835) #7 RenderSliverMultiBoxAdaptor._createOrObtainChild. (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:349) #8 RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:2686) #9 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1097) #10 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2686) #11 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:338) #12 RenderSliverMultiBoxAdaptor.insertAndLayoutChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:486) #13 RenderSliverList.performLayout.advance (package:flutter/src/rendering/sliver_list.dart:239) #14 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:281) #15 RenderObject.layout (package:flutter/src/rendering/object.dart:2575) #16 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:139) #17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:361) #18 RenderObject.layout (package:flutter/src/rendering/object.dart:2575) #19 RenderSliverMainAxisGroup.performLayout (package:flutter/src/rendering/sliver_group.dart:238) #20 RenderObject.layout (package:flutter/src/rendering/object.dart:2575) #21 RenderProxySliver.performLayout (package:flutter/src/rendering/proxy_sliver.dart:54) #22 RenderObject.layout (package:flutter/src/rendering/object.dart:2575) #23 RenderSliverStack.performLayout (package:sliver_tools/src/rendering/sliver_stack.dart:189) #24 RenderObject.layout (package:flutter/src/rendering/object.dart:2575) #25 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:601) #26 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1555) #27 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1464) #28 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2414) #29 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1051) #30 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1064) #31 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:582) #32 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:991) #33 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448) #34 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386) #35 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311) #36 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169) #37 _invoke (dart:ui/hooks.dart:312) #38 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399) #39 _drawFrame (dart:ui/hooks.dart:283) ------- CUSTOM INFO ------- ``` ``` ============================== CATCHER 2 LOG ============================== ------- DEVICE INFO ------- computerName: DESKTOP numberOfCores: 8 systemMemoryInMegabytes: 65536 ------- APP INFO ------- environment: release version: 3.5.0 appName: spotube buildNumber: packageName: spotube ---------- ERROR ---------- Null check operator used on a null value ------- STACK TRACE ------- #0 BlackListNotifier.contains (package:spotube/provider/blacklist_provider.dart:61) #1 IterableExtension.whereNot. (package:collection/src/iterable_extensions.dart:54) #2 WhereIterator.moveNext (dart:_internal/iterable.dart:451) #3 new _GrowableList._ofOther (dart:core-patch/growable_array.dart:202) #4 new _GrowableList.of (dart:core-patch/growable_array.dart:152) #5 new List.of (dart:core-patch/array_patch.dart:39) #6 Iterable.toList (dart:core/iterable.dart:497) #7 BlackListNotifier.filter (package:spotube/provider/blacklist_provider.dart:75) #8 ProxyPlaylistNotifier.load (package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart:318) #9 TrackViewBodySection.build.. (package:spotube/components/shared/tracks_view/sections/body/track_view_body.dart:132) #10 TrackTile.build... (package:spotube/components/shared/track_tile/track_tile.dart:93) ------- CUSTOM INFO ------- ```