aome510 / spotify-player

A Spotify player in the terminal with full feature parity
MIT License
3.59k stars 163 forks source link

Display Freezes after Copying #538

Closed masroof-maindak closed 2 months ago

masroof-maindak commented 3 months ago

Describe the bug I am using spotify-player on Wayland with the latest Git build. Whenever I copy, my display freezes and no other inputs are registered. Music remains playing as is however.

To Reproduce Select the copy link option.

Expected behaviour App doesn't freeze.

Log and backtrace The backtrace file was empty. Here is the log file:

2024-08-08T16:58:49.045694Z  INFO spotify_player: Configurations: Configs { app_config: AppConfig { theme: "swamp light", client_id: "b60844fa1c1b48e3bc1b77f530ba02a1", client_port: 8080, player_event_hook_command: None, playback_format: "{track} • {artists}\n{album}\n{metadata}", notify_format: NotifyFormat { summary: "{track}", body: "{artists}" }, notify_timeout_in_secs: 0, tracks_playback_limit: 50, proxy: None, ap_port: None, app_refresh_duration_in_ms: 50, playback_refresh_duration_in_ms: 0, page_size_in_rows: 20, play_icon: "▶", pause_icon: "⏸", liked_icon: "♥", border_type: Plain, progress_bar_type: Rectangle, layout: LayoutConfig { library: LibraryLayoutConfig { playlist_percent: 40, album_percent: 40 }, playback_window_position: Bottom, playback_window_height: 4 }, cover_img_length: 10, cover_img_width: 5, cover_img_scale: 2.2, enable_media_control: true, enable_streaming: Always, enable_notify: true, enable_cover_image_cache: true, default_device: "sharktooth", device: DeviceConfig { name: "sharktooth", device_type: "computer", volume: 75, bitrate: 320, audio_cache: false, normalization: false, autoplay: false }, notify_streaming_only: false, seek_duration_secs: 5 }, keymap_config: KeymapConfig { keymaps: [Keymap { key_sequence: KeySequence { keys: [None(Char('n'))] }, command: NextTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('p'))] }, command: PreviousTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('.'))] }, command: PlayRandom }, Keymap { key_sequence: KeySequence { keys: [None(Char(' '))] }, command: ResumePause }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('r'))] }, command: Repeat }, Keymap { key_sequence: KeySequence { keys: [Alt(Char('r'))] }, command: ToggleFakeTrackRepeatMode }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('s'))] }, command: Shuffle }, Keymap { key_sequence: KeySequence { keys: [None(Char('+'))] }, command: VolumeUp }, Keymap { key_sequence: KeySequence { keys: [None(Char('-'))] }, command: VolumeDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('_'))] }, command: Mute }, Keymap { key_sequence: KeySequence { keys: [None(Char('>'))] }, command: SeekForward }, Keymap { key_sequence: KeySequence { keys: [None(Char('<'))] }, command: SeekBackward }, Keymap { key_sequence: KeySequence { keys: [None(Enter)] }, command: ChooseSelected }, Keymap { key_sequence: KeySequence { keys: [None(Char('r'))] }, command: RefreshPlayback }, Keymap { key_sequence: KeySequence { keys: [None(Char('/'))] }, command: Search }, Keymap { key_sequence: KeySequence { keys: [None(Char('z'))] }, command: Queue }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [None(Char('Z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char(' '))] }, command: ShowActionsOnSelectedItem }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('a'))] }, command: ShowActionsOnSelectedItem }, Keymap { key_sequence: KeySequence { keys: [None(Char('a'))] }, command: ShowActionsOnCurrentTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('R'))] }, command: RestartIntegratedClient }, Keymap { key_sequence: KeySequence { keys: [None(Tab)] }, command: FocusNextWindow }, Keymap { key_sequence: KeySequence { keys: [None(BackTab)] }, command: FocusPreviousWindow }, Keymap { key_sequence: KeySequence { keys: [None(Char('T'))] }, command: SwitchTheme }, Keymap { key_sequence: KeySequence { keys: [None(Char('D'))] }, command: SwitchDevice }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('p'))] }, command: BrowseUserPlaylists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('a'))] }, command: BrowseUserFollowedArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('A'))] }, command: BrowseUserSavedAlbums }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char(' '))] }, command: CurrentlyPlayingContextPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('t'))] }, command: TopTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('r'))] }, command: RecentlyPlayedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('y'))] }, command: LikedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('L'))] }, command: LyricPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('l'))] }, command: LyricPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('l'))] }, command: LibraryPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('s'))] }, command: SearchPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('b'))] }, command: BrowsePage }, Keymap { key_sequence: KeySequence { keys: [None(Backspace)] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('q'))] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('O'))] }, command: OpenSpotifyLinkFromClipboard }, Keymap { key_sequence: KeySequence { keys: [None(Char('?'))] }, command: OpenCommandHelp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('h'))] }, command: OpenCommandHelp }, Keymap { key_sequence: KeySequence { keys: [None(Char('q'))] }, command: Quit }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('c'))] }, command: Quit }, Keymap { key_sequence: KeySequence { keys: [None(Esc)] }, command: ClosePopup }, Keymap { key_sequence: KeySequence { keys: [None(Char('j'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('n'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Down)] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('k'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('p'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(Up)] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(PageUp)] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('b'))] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(PageDown)] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('f'))] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('g'))] }, command: SelectFirstOrScrollToTop }, Keymap { key_sequence: KeySequence { keys: [None(Home)] }, command: SelectFirstOrScrollToTop }, Keymap { key_sequence: KeySequence { keys: [None(Char('G'))] }, command: SelectLastOrScrollToBottom }, Keymap { key_sequence: KeySequence { keys: [None(End)] }, command: SelectLastOrScrollToBottom }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('t'))] }, command: SortTrackByTitle }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('a'))] }, command: SortTrackByArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('A'))] }, command: SortTrackByAlbum }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('d'))] }, command: SortTrackByDuration }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('D'))] }, command: SortTrackByAddedDate }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('r'))] }, command: ReverseTrackOrder }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('k'))] }, command: MovePlaylistItemUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('j'))] }, command: MovePlaylistItemDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('N'))] }, command: CreatePlaylist }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('c'))] }, command: JumpToCurrentTrackInContext }], actions: [] }, theme_config: ThemeConfig { themes: [Theme { name: "default", palette: Palette { background: None, foreground: None, black: Color { color: Black }, blue: Color { color: Blue }, cyan: Color { color: Cyan }, green: Color { color: Green }, magenta: Color { color: Magenta }, red: Color { color: Red }, white: Color { color: Gray }, yellow: Color { color: Yellow }, bright_black: Color { color: DarkGray }, bright_white: Color { color: White }, bright_red: Color { color: LightRed }, bright_magenta: Color { color: LightMagenta }, bright_green: Color { color: LightGreen }, bright_cyan: Color { color: LightCyan }, bright_blue: Color { color: LightBlue }, bright_yellow: Color { color: LightYellow } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None } }, Theme { name: "swamp", palette: Palette { background: Some(Color { color: Rgb(36, 32, 21) }), foreground: Some(Color { color: Rgb(235, 224, 187) }), black: Color { color: Rgb(39, 35, 22) }, blue: Color { color: Rgb(145, 80, 108) }, cyan: Color { color: Rgb(80, 137, 145) }, green: Color { color: Rgb(122, 118, 83) }, magenta: Color { color: Rgb(193, 102, 107) }, red: Color { color: Rgb(150, 41, 77) }, white: Color { color: Rgb(159, 136, 117) }, yellow: Color { color: Rgb(219, 147, 13) }, bright_black: Color { color: Rgb(58, 49, 36) }, bright_white: Color { color: Rgb(235, 224, 187) }, bright_red: Color { color: Rgb(168, 45, 86) }, bright_magenta: Color { color: Rgb(176, 93, 97) }, bright_green: Color { color: Rgb(116, 111, 78) }, bright_cyan: Color { color: Rgb(97, 160, 168) }, bright_blue: Color { color: Rgb(128, 70, 95) }, bright_yellow: Color { color: Rgb(176, 103, 51) } }, component_style: ComponentStyle { block_title: Some(Style { fg: Some(BrightYellow), bg: None, modifiers: [] }), border: Some(Style { fg: None, bg: None, modifiers: [] }), playback_status: None, playback_track: Some(Style { fg: Some(Yellow), bg: None, modifiers: [] }), playback_artists: Some(Style { fg: Some(Yellow), bg: None, modifiers: [] }), playback_album: Some(Style { fg: Some(Magenta), bg: None, modifiers: [] }), playback_metadata: Some(Style { fg: Some(White), bg: None, modifiers: [] }), playback_progress_bar: Some(Style { fg: Some(Green), bg: Some(BrightBlack), modifiers: [] }), playback_progress_bar_unfilled: None, current_playing: Some(Style { fg: Some(Green), bg: None, modifiers: [] }), page_desc: Some(Style { fg: Some(BrightRed), bg: None, modifiers: [] }), playlist_desc: None, table_header: Some(Style { fg: Some(Blue), bg: None, modifiers: [] }), selection: Some(Style { fg: None, bg: None, modifiers: [Reversed] }), secondary_row: None, like: None } }, Theme { name: "swamp light", palette: Palette { background: Some(Color { color: Rgb(241, 227, 209) }), foreground: Some(Color { color: Rgb(100, 81, 62) }), black: Color { color: Rgb(100, 81, 62) }, blue: Color { color: Rgb(163, 105, 122) }, cyan: Color { color: Rgb(117, 133, 140) }, green: Color { color: Rgb(144, 141, 106) }, magenta: Color { color: Rgb(191, 121, 121) }, red: Color { color: Rgb(153, 51, 51) }, white: Color { color: Rgb(241, 227, 209) }, yellow: Color { color: Rgb(218, 158, 1) }, bright_black: Color { color: Rgb(140, 123, 104) }, bright_white: Color { color: Rgb(201, 185, 167) }, bright_red: Color { color: Rgb(153, 51, 51) }, bright_magenta: Color { color: Rgb(191, 121, 121) }, bright_green: Color { color: Rgb(144, 141, 106) }, bright_cyan: Color { color: Rgb(117, 133, 140) }, bright_blue: Color { color: Rgb(163, 105, 122) }, bright_yellow: Color { color: Rgb(218, 158, 1) } }, component_style: ComponentStyle { block_title: Some(Style { fg: Some(BrightYellow), bg: None, modifiers: [] }), border: Some(Style { fg: None, bg: None, modifiers: [] }), playback_status: None, playback_track: Some(Style { fg: Some(Cyan), bg: None, modifiers: [] }), playback_artists: Some(Style { fg: Some(Cyan), bg: None, modifiers: [] }), playback_album: Some(Style { fg: Some(Yellow), bg: None, modifiers: [] }), playback_metadata: Some(Style { fg: Some(BrightBlack), bg: None, modifiers: [] }), playback_progress_bar: Some(Style { fg: Some(Green), bg: Some(BrightWhite), modifiers: [] }), playback_progress_bar_unfilled: None, current_playing: Some(Style { fg: Some(Yellow), bg: None, modifiers: [] }), page_desc: Some(Style { fg: Some(BrightRed), bg: None, modifiers: [] }), playlist_desc: None, table_header: Some(Style { fg: Some(Magenta), bg: None, modifiers: [] }), selection: Some(Style { fg: None, bg: None, modifiers: [Reversed] }), secondary_row: None, like: None } }] }, cache_folder: "/home/maindak/.cache/spotify-player" }
2024-08-08T16:58:49.045797Z  INFO spotify_player::state::data: Loading Playlists data from /home/maindak/.cache/spotify-player/Playlists_cache.json...
2024-08-08T16:58:49.045877Z  INFO spotify_player::state::data: Successfully loaded Playlists data!
2024-08-08T16:58:49.045883Z  INFO spotify_player::state::data: Loading FollowedArtists data from /home/maindak/.cache/spotify-player/FollowedArtists_cache.json...
2024-08-08T16:58:49.046093Z  INFO spotify_player::state::data: Successfully loaded FollowedArtists data!
2024-08-08T16:58:49.046100Z  INFO spotify_player::state::data: Loading SavedAlbums data from /home/maindak/.cache/spotify-player/SavedAlbums_cache.json...
2024-08-08T16:58:49.047746Z  INFO spotify_player::state::data: Successfully loaded SavedAlbums data!
2024-08-08T16:58:49.047758Z  INFO spotify_player::state::data: Loading SavedTracks data from /home/maindak/.cache/spotify-player/SavedTracks_cache.json...
2024-08-08T16:58:49.083898Z  INFO spotify_player::state::data: Successfully loaded SavedTracks data!
2024-08-08T16:58:50.082016Z  INFO spotify_player::auth: Successfully used the cached credentials to create a new session!
2024-08-08T16:58:50.107697Z  INFO spotify_player::token: Getting new authentication token...
2024-08-08T16:58:50.357775Z  INFO spotify_player::token: Got new token: Token { access_token: "BQBDsRPKRiyE0A-kFwH7So98t5UZm5VRE6cTb0hll-QaKMwfO7xdxtsHc-frQ5wOJLrZx9hnYqcVK_lW1XI6t6_9Fmo8my_-es_vF2DiyzAtVmLILqBHStVBNfysWgjOOEmjsfnQu_6McBAUMYmkxNGXFHMtl8lI17ECewyIE4OW6Rb29_r9MLpCF8TAXssD5jg2NTzHqlSuX6wFxCeeN_mkGmhXAylGcEM0gf6tutKfzUc2G91pPbA7NdP4xxeaI1UHW5qIw0Ad4tpP1uq1K67pFBWjtLRAg11b79EyHb9HSBy9bL_Je6XzpGljrnSimVk", expires_in: TimeDelta { secs: 3600, nanos: 0 }, expires_at: Some(2024-08-08T17:58:50.357767503Z), refresh_token: None, scopes: {} }
2024-08-08T16:58:50.357868Z  INFO spotify_player::streaming: Application's connect configurations: ConnectConfig { name: "sharktooth", device_type: Computer, initial_volume: Some(49151), has_volume_ctrl: true, autoplay: false }
2024-08-08T16:58:50.357913Z  INFO spotify_player::streaming: Initializing a new integrated player with device_id=27684bd2-e874-4c91-986f-8518ba557638
2024-08-08T16:58:50.358108Z  INFO spotify_player::streaming: Starting an integrated Spotify player using librespot's spirc protocol
2024-08-08T16:58:50.888357Z  INFO spotify_player::client: No playback found, trying to connect to an available device...
2024-08-08T16:58:50.888611Z  INFO spotify_player: Starting a client socket at 127.0.0.1:8080
2024-08-08T16:58:50.889498Z  INFO spotify_player::media_control: Initializing application's media control event watcher...
2024-08-08T16:58:51.389791Z  INFO client_request{request=GetCurrentUser}: spotify_player::client: Successfully handled the client request, took: 501ms
2024-08-08T16:58:52.137853Z  INFO spotify_player::client: Available devices: [Device { id: Some("27684bd2-e874-4c91-986f-8518ba557638"), is_active: false, is_private_session: false, is_restricted: false, name: "sharktooth", _type: Computer, volume_percent: Some(74) }]
2024-08-08T16:58:52.137909Z  INFO spotify_player::client: Trying to connect to device (id=27684bd2-e874-4c91-986f-8518ba557638)
2024-08-08T16:58:52.146397Z  INFO client_request{request=GetUserPlaylists}: spotify_player::client: Successfully handled the client request, took: 1257ms
2024-08-08T16:58:52.451929Z  INFO spotify_player::client: Connection succeeded (device_id=27684bd2-e874-4c91-986f-8518ba557638)!
2024-08-08T16:58:54.262225Z  INFO client_request{request=GetCurrentUserQueue}: spotify_player::client: Successfully handled the client request, took: 370ms
2024-08-08T16:58:54.847633Z  INFO spotify_player::streaming: Got a new player event: Paused { track_id: TrackId("7uhINGViZPygI2AljxO8KN"), position_ms: 138881, duration_ms: 281218 }

Screenshots N/A.

Environment

Additional Context I shifted from X11 to Wayland recently and noticed that my copy_command wasn't working. I replaced xclip with wl-copy and noticed it still wasn't working. Searching the issues led me to #393 and I ultimately removed the [copy_command] section.

juliamertz commented 3 months ago

I experienced the same behavior a while ago, for me this happens no matter what clipboard provider i use (xclip, xsel, pbcopy). I'm on X11 myself so i don't believe this is a wayland problem.

While debugging this i noticed that it does actually continue to run after a while, this takes anywhere between 30 seconds to 5 minutes for me. Before freezing it does successfully copy to the clipboard.

Some print statements revealed it gets stuck on this line, I haven't dug much further though since this isn't a feature i use much.