void NLXmms::update() { //look for running xmms if ( xmms_remote_get_version( 0 ) ) { QString newTrack; // see if it's playing if ( xmms_remote_is_playing( 0 ) && !xmms_remote_is_paused( 0 ) ) { m_playing = true; // get the artist and album title // get the song title newTrack = xmms_remote_get_playlist_title( 0, xmms_remote_get_playlist_pos( 0 ) ); //kdDebug( 14307 ) << "NLXmms::update() - track is: " << m_track << endl; m_artist = newTrack.section( " - ", 0, 0 ); newTrack = newTrack.section( " - ", -1, -1 ); } else m_playing = false; // check if it's a new song if ( newTrack != m_track ) { m_newTrack = true; m_track = newTrack; } else m_newTrack = false; kdDebug( 14307 ) << k_funcinfo << " - found xmms - " << m_track << endl; } else kdDebug( 14307 ) << k_funcinfo << " - xmms not found" << endl; }
/* * Callback funtion to handle delayed display. */ static gint timeout_func(gpointer data) { gint pos, volume, balance; gboolean playing, paused, repeat, shuffle; gchar *text; if (!osd) return FALSE; GDK_THREADS_ENTER(); pos = xmms_remote_get_playlist_pos (gp.xmms_session); playing = xmms_remote_is_playing (gp.xmms_session); paused = xmms_remote_is_paused (gp.xmms_session); volume = xmms_remote_get_main_volume (gp.xmms_session); shuffle = xmms_remote_is_shuffle (gp.xmms_session); repeat = xmms_remote_is_repeat (gp.xmms_session); balance = (xmms_remote_get_balance(gp.xmms_session) + 100) / 2; /** * Check if the position of the current song has changed. * DTM: bugfix * 1) 'get_playlist_time' seems "variable" for a song, don't use it * 2) we must free the titles we download */ if (pos != previous_song) { if (xmms_remote_get_playlist_length (gp.xmms_session)) /* otherwise it'll crash */ { text = xmms_remote_get_playlist_title (gp.xmms_session, pos); if (text) replace_hexcodes (text); /** * Check to see if the title of the song has changed. */ if ( !previous_title || g_strcasecmp(text, previous_title) != 0 ) { if (show_stop) { xosd_display (osd, 0, XOSD_string, playing ? "Play" : "Stopped"); xosd_display (osd, 1, XOSD_string, text); } save_previous_title( text ); } } else { /** No song titles available. */ if (show_stop) { xosd_display (osd, 0, XOSD_string, playing ? "Play" : "Stopped"); } save_previous_title( 0 ); } previous_song = pos; } else if (playing != previous_playing ) { if (playing && show_trackname) { xosd_display (osd, 0, XOSD_string, "Play"); text = xmms_remote_get_playlist_title (gp.xmms_session, pos); if (text) { replace_hexcodes (text); xosd_display (osd, 1, XOSD_string, text); save_previous_title ( text ); } } else if (!playing && show_stop ) { xosd_display (osd, 0, XOSD_string, "Stop"); xosd_display (osd, 1, XOSD_string, ""); } previous_playing = playing; } else if (paused != previous_paused && show_pause) { if (paused) { xosd_display (osd, 0, XOSD_string, "Paused"); xosd_display (osd, 1, XOSD_string, ""); } else { xosd_display (osd, 0, XOSD_string, "Unpaused"); text = xmms_remote_get_playlist_title (gp.xmms_session, pos); if (text) { replace_hexcodes (text); xosd_display (osd, 1, XOSD_string, text); save_previous_title( text ); } } previous_paused = paused; } else if (volume != previous_volume && show_volume) { xosd_display (osd, 0, XOSD_string, "Volume"); xosd_display (osd, 1, XOSD_percentage, volume); previous_volume = volume; } else if (balance != previous_balance && show_balance) { xosd_display (osd, 0, XOSD_string, "Balance"); xosd_display (osd, 1, XOSD_slider, balance); previous_balance = balance; } else if (repeat != previous_repeat && show_repeat ) { xosd_display (osd, 0, XOSD_string, "Repeat"); xosd_display (osd, 1, XOSD_string, repeat ? "On" : "Off"); previous_repeat = repeat; } else if (shuffle != previous_shuffle && show_shuffle ) { xosd_display (osd, 0, XOSD_string, "Shuffle"); xosd_display (osd, 1, XOSD_string, shuffle ? "On" : "Off"); previous_shuffle = shuffle; } GDK_THREADS_LEAVE(); return TRUE; }