Skip to content

🐛 Fladder fails to start playback after HDD spin-up #399

@sh-jus

Description

@sh-jus

Description

When attempting to play media stored on a sleeping hard drive through Fladder's Native & Selfhosted Web clients, the application enters an indefinite loading state and never begins playback, even after the drives have successfully spun up. The client appears to not poll or check for status updates from the Jellyfin server after the initial request. Pausing the playback, waiting and then unpausing does not have any effect as it still continously loads.

Expected Behavior:
After the 15-20 second drive spin-up period, Fladder should begin media playback automatically, similar to the behavior of:

Jellyfin Web client
Jellyfin Desktop client
Other third-party clients (Delfin (Linux), Streamyfin (iOS), Swiftfin (iOS, tvOS)

Actual Behavior:
Fladder clients remain in a perpetual loading state and never initiate playback, requiring the user to cancel and retry the playback request (after cancelling). If you play 'Continue watching' media that has progress already and have to cancel out, the playback progress is also reset unintentionally for that media item.

(log attached is what spits out after a while but im not sure if its related)
(screenshot posted of the macos client)

Reproduction steps

1. Configure Jellyfin server with a media library stored on a hard drive that enters sleep mode after inactivity
2. Allow the drive to enter sleep mode
3. Open Fladder client (Linux AppImage, macOS app, iOS app or Selfhosted Web App)
4. Navigate to media stored on the sleeping drive
5. Click play on any media item
6. Observe that Fladder remains in a loading state indefinitely

Screenshots

loadingclient-mac

Logs

[SEVERE  |  Flutter error: SocketException: Connection failed (OS Error: No such file or directory, errno = 2), address = /var/run/dbus/system_bus_socket, port = 0, 2025-06-27T21:30:42.838919

#0      _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:822)
#1      _NativeSocket.connect (dart:io-patch/socket_patch.dart:1147)
#2      _RawSocket.connect (dart:io-patch/socket_patch.dart:2270)
#3      RawSocket.connect (dart:io-patch/socket_patch.dart:31)
#4      DBusClient._openSocket (package:dbus/src/dbus_client.dart:784)
#5      DBusClient._connect (package:dbus/src/dbus_client.dart:804)
#6      DBusClient.callMethod (package:dbus/src/dbus_client.dart:624)
#7      DBusClient.getNameOwner (package:dbus/src/dbus_client.dart:465)
#8      DBusClient._findUniqueName (package:dbus/src/dbus_client.dart:641)
#9      DBusSignalStream._onListen (package:dbus/src/dbus_client.dart:132)
#10     _runGuarded (dart:async/stream_controller.dart:838)
#11     _BroadcastStreamController._subscribe (dart:async/broadcast_stream_controller.dart:220)
#12     _ControllerStream._createSubscription (dart:async/stream_controller.dart:854)
#13     _StreamImpl.listen (dart:async/stream_impl.dart:516)
#14     DBusSignalStream.listen (package:dbus/src/dbus_client.dart:124)
#15     new _ForwardingStreamSubscription (dart:async/stream_pipe.dart:141)
#16     _ForwardingStream._createSubscription (dart:async/stream_pipe.dart:105)
#17     _ForwardingStream.listen (dart:async/stream_pipe.dart:96)
#18     NetworkManagerClient.connect (package:nm/src/network_manager_client.dart:2303)
#19     ConnectivityPlusLinuxPlugin._startListenConnectivity (package:connectivity_plus/src/connectivity_plus_linux.dart:73)
#20     _runGuarded (dart:async/stream_controller.dart:838)
#21     _BroadcastStreamController._subscribe (dart:async/broadcast_stream_controller.dart:220)
#22     _ControllerStream._createSubscription (dart:async/stream_controller.dart:854)
#23     _StreamImpl.listen (dart:async/stream_impl.dart:516)
#24     new _ForwardingStreamSubscription (dart:async/stream_pipe.dart:141)
#25     new _StateStreamSubscription (dart:async/stream_pipe.dart:373)
#26     _DistinctStream._createSubscription (dart:async/stream_pipe.dart:500)
#27     _ForwardingStream.listen (dart:async/stream_pipe.dart:96)
#28     ConnectivityStatus.build (package:fladder/providers/connectivity_provider.dart:24)
#29     NotifierProviderImpl.runNotifierBuild (package:riverpod/src/notifier/base.dart:166)
#30     NotifierProviderElement.create (package:riverpod/src/notifier/base.dart:212)
#31     ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:426)
#32     ProviderElementBase.mount (package:riverpod/src/framework/element.dart:228)
#33     _StateReader._create (package:riverpod/src/framework/container.dart:47)
#34     _StateReader.getElement (package:riverpod/src/framework/container.dart:35)
#35     ProviderContainer.readProviderElement (package:riverpod/src/framework/container.dart:479)
#36     ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:79)
#37     ProviderContainer.listen (package:riverpod/src/framework/container.dart:280)
#38     ConsumerStatefulElement.watch.<anonymous closure> (package:flutter_riverpod/src/consumer.dart:564)
#39     _LinkedHashMapMixin.putIfAbsent (dart:_compact_hash:674)
#40     ConsumerStatefulElement.watch (package:flutter_riverpod/src/consumer.dart:557)
#41     _PlayerSettingsPageState.build (package:fladder/screens/settings/player_settings_page.dart:44)
#42     StatefulElement.build (package:flutter/src/widgets/framework.dart:5823)
#43     ConsumerStatefulElement.build (package:flutter_riverpod/src/consumer.dart:539)
#44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5715)
#45     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5874)
#46     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#47     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5697)
#48     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5865)
#49     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5691)
#50     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4539)
#51     Element.updateChild (package:flutter/src/widgets/framework.dart:4004)
#52     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#53     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#54     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5697)
#55     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5691)
#56     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4539)
#57     Element.updateChild (package:flutter/src/widgets/framework.dart:3998)
#58     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7015)
#59     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#60     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7015)
#61     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#62     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#63     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#64     ProxyElement.update (package:flutter/src/widgets/framework.dart:6041)
#65     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#66     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#67     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#68     StatelessElement.update (package:flutter/src/widgets/framework.dart:5787)
#69     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#70     Element.updateChildren (package:flutter/src/widgets/framework.dart:4140)
#71     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7192)
#72     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#73     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#74     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#75     StatelessElement.update (package:flutter/src/widgets/framework.dart:5787)
#76     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#77     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#78     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5874)
#79     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#80     StatefulElement.update (package:flutter/src/widgets/framework.dart:5899)
#81     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#82     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7015)
#83     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#84     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#85     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5874)
#86     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#87     StatefulElement.update (package:flutter/src/widgets/framework.dart:5899)
#88     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#89     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#90     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#91     ProxyElement.update (package:flutter/src/widgets/framework.dart:6041)
#92     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#93     Element.updateChildren (package:flutter/src/widgets/framework.dart:4140)
#94     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7192)
#95     Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#96     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#97     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5874)
#98     Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#99     StatefulElement.update (package:flutter/src/widgets/framework.dart:5899)
#100    Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#101    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#102    Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#103    StatelessElement.update (package:flutter/src/widgets/framework.dart:5787)
#104    Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#105    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#106    Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#107    ProxyElement.update (package:flutter/src/widgets/framework.dart:6041)
#108    Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#109    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#110    Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#111    ProxyElement.update (package:flutter/src/widgets/framework.dart:6041)
#112    Element.updateChild (package:flutter/src/widgets/framework.dart:3982)
#113    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5738)
#114    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5874)
#115    Element.rebuild (package:flutter/src/widgets/framework.dart:5427)
#116    BuildScope._tryRebuild (package:flutter/src/widgets/framework.dart:2694)
#117    BuildScope._flushDirtyElements (package:flutter/src/widgets/framework.dart:2752)
#118    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3056)
#119    _LayoutBuilderElement._rebuildWithConstraints (package:flutter/src/widgets/layout_builder.dart:272)
#120    RenderAbstractLayoutBuilderMixin.layoutCallback (package:flutter/src/widgets/layout_builder.dart:335)
#121    RenderObjectWithLayoutCallbackMixin.runLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:4209)
#122    RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:2941)
#123    PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1209)
#124    RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2940)
#125    RenderObjectWithLayoutCallbackMixin.runLayoutCallback (package:flutter/src/rendering/object.dart:4209)
#126    _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:449)
#127    RenderObject.layout (package:flutter/src/rendering/object.dart:2822)
#128    MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:180)
#129    _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1118)
#130    MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:249)
#131    RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:419)
#132    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2655)
#133    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1160)
#134    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1173)
#135    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:629)
#136    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1242)
#137    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:495)
#138    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1438)
#139    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1351)
#140    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1204)
#141    _invoke (dart:ui/hooks.dart:331)
#142    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:444)
#143    _drawFrame (dart:ui/hooks.dart:303)
]

Platform

iOS, Linux, Macos, Web

App Version

v0.7.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions