Skip to content

Conversation

@cookiemonsternz
Copy link

This fixes Dopamine freezing when selecting a playlist with many tracks, or with tracks in a location which takes a significant time to read. For example, if a file from the playlist is in an unavailable network drive, Dopamine completely freezes for approximately 2.5s.

The cause of the freezing is fs.existsSync() via PlaylistService.getTracksAsync() -> PlaylistService.decodePlaylistAsync() -> FileValidator.isPlayableAudioFile().

Fix uses async method fs.access() instead of the blocking fs.existsSync().

Note that this also means that other functions reliant on FileValidator.isPlayableAudioFile() will also freeze Dopamine in a similar case, so it is potentially worth swapping those to a different method as well.

@cookiemonsternz
Copy link
Author

Just noticed an issue with this, if you select a playlist with one of these slow loading files and then select another playlist while it is still getting the tracks, it doesn't show the tracks from the currently selected playlist, instead showing those from the originally selected. I'll see about fixing this soon.

@cookiemonsternz
Copy link
Author

Alright; I've implemented a potentially quite hacky fix, which is to set a global flag while a playlist is fetching tracks and just wait for that to be false before starting on the next playlist fetch. I understand this is far from an ideal solution but I'm not entirely sure how to get a better working solution - any ideas would be greatly appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant