diff options
author | Benjamin Drung <bdrung@ubuntu.com> | 2010-06-29 10:01:17 +0200 |
---|---|---|
committer | Benjamin Drung <bdrung@ubuntu.com> | 2010-06-29 10:01:17 +0200 |
commit | e8b98d4a2a505405b6380e206cc1e0f553753794 (patch) | |
tree | 4f7745e028b087f2d770b39ad20d90adac1af063 /src/audacious | |
parent | 42318926e1c1585ccc266c4607cb1d6e855bd0b9 (diff) |
Imported Upstream version 2.4~alpha2
Diffstat (limited to 'src/audacious')
-rw-r--r-- | src/audacious/Makefile | 21 | ||||
-rw-r--r-- | src/audacious/auddrct.c | 12 | ||||
-rw-r--r-- | src/audacious/auddrct.h | 1 | ||||
-rw-r--r-- | src/audacious/chardet.c | 25 | ||||
-rw-r--r-- | src/audacious/credits.c | 3 | ||||
-rw-r--r-- | src/audacious/dbus-service.h | 3 | ||||
-rw-r--r-- | src/audacious/dbus.c | 21 | ||||
-rw-r--r-- | src/audacious/input.c | 35 | ||||
-rw-r--r-- | src/audacious/input.h | 15 | ||||
-rw-r--r-- | src/audacious/objects.xml | 3 | ||||
-rw-r--r-- | src/audacious/playback.c | 350 | ||||
-rw-r--r-- | src/audacious/playback.h | 8 | ||||
-rw-r--r-- | src/audacious/playlist-new.c | 38 | ||||
-rw-r--r-- | src/audacious/plugin.h | 2 | ||||
-rw-r--r-- | src/audacious/pluginenum.c | 16 | ||||
-rw-r--r-- | src/audacious/probe.c | 8 | ||||
-rw-r--r-- | src/audacious/ui/carbon-menubar.ui | 122 | ||||
-rw-r--r-- | src/audacious/ui/equalizer.ui | 36 | ||||
-rw-r--r-- | src/audacious/ui/mainwin.ui | 129 | ||||
-rw-r--r-- | src/audacious/ui/player.ui | 60 | ||||
-rw-r--r-- | src/audacious/ui/playlist.ui | 96 | ||||
-rw-r--r-- | src/audacious/ui_albumart.c | 4 | ||||
-rw-r--r-- | src/audacious/vis_runner.c | 8 |
23 files changed, 281 insertions, 735 deletions
diff --git a/src/audacious/Makefile b/src/audacious/Makefile index 7b19c5c..5ad9f81 100644 --- a/src/audacious/Makefile +++ b/src/audacious/Makefile @@ -79,20 +79,15 @@ DATA = images/about-logo.png \ images/playback.png \ images/playlist.png \ images/plugins.png \ - images/replay_gain.png \ - ui/equalizer.ui \ - ui/mainwin.ui \ - ui/player.ui \ - ui/playlist.ui \ - ui/carbon-menubar.ui + images/replay_gain.png CLEAN = build_stamp.c dbus-client-bindings.h dbus-server-bindings.h EXT_DEPS = ../libguess/libguess.a ifeq ($(USE_EGGSM),yes) EXT_DEPS += ../libeggsmclient/libeggsmclient.a -EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS} -EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS} +EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS} ${ICE_LIBS} +EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS} ${ICE_CFLAGS} endif include ../../buildsys.mk @@ -125,6 +120,7 @@ CPPFLAGS += -DHAVE_CONFIG_H \ -I../libaudtag LIBS += ${LDADD} \ + -lm \ -L../libaudcore -laudcore \ -L../libaudgui -laudgui \ -L../libaudtag -laudtag \ @@ -141,15 +137,6 @@ LIBS += ${LDADD} \ LDFLAGS += ${PROG_IMPLIB_LDFLAGS} ${AUDLDFLAGS} -build_stamp.c: - echo "#include <glib.h>" > build_stamp.c ; \ - if test -d ../../.hg ; then \ - revh=`hg tip --template 'const gchar *build_stamp = "{rev}:{node|short}";\n' 2>/dev/null`; \ - [ -z "$$revh" ] || echo "$$revh" >> build_stamp.c; \ - else \ - echo "const gchar *build_stamp = \"UNSUPPORTED VERSION\";" >> build_stamp.c; \ - fi - DBUS_BINDINGS_SOURCES = objects.xml \ mpris_root.xml \ mpris_tracklist.xml \ diff --git a/src/audacious/auddrct.c b/src/audacious/auddrct.c index fc190cb..de6cd8f 100644 --- a/src/audacious/auddrct.c +++ b/src/audacious/auddrct.c @@ -104,7 +104,10 @@ void drct_play (void) if (playback_get_playing () && playback_get_paused ()) playback_pause (); else + { + playlist_set_playing (playlist_get_active ()); playback_initiate (); + } return; } @@ -116,15 +119,6 @@ drct_pause ( void ) return; } -void -drct_stop ( void ) -{ - ip_data.stop = TRUE; - playback_stop(); - ip_data.stop = FALSE; - return; -} - gboolean drct_get_playing ( void ) { diff --git a/src/audacious/auddrct.h b/src/audacious/auddrct.h index 7a62bcf..25a7480 100644 --- a/src/audacious/auddrct.h +++ b/src/audacious/auddrct.h @@ -42,7 +42,6 @@ void drct_activate(void); void drct_initiate ( void ); void drct_play ( void ); void drct_pause ( void ); -void drct_stop ( void ); gboolean drct_get_playing ( void ); gboolean drct_get_paused ( void ); gboolean drct_get_stopped ( void ); diff --git a/src/audacious/chardet.c b/src/audacious/chardet.c index bc6ae22..f4720a9 100644 --- a/src/audacious/chardet.c +++ b/src/audacious/chardet.c @@ -17,6 +17,7 @@ * Audacious or using our public API to be a derived work. */ +#define DEBUG #include "config.h" #include "chardet.h" #include "audstrings.h" @@ -95,12 +96,31 @@ cd_chardet_to_utf8(const gchar * str, gssize len, gsize * arg_bytes_read, g_return_val_if_fail(str != NULL, NULL); #ifdef USE_CHARDET + if (dfa_validate_utf8(str, len)) + { + if (len < 0) + len = strlen (str); + + ret = g_malloc (len + 1); + memcpy (ret, str, len); + ret[len] = 0; + + if (arg_bytes_read != NULL) + * arg_bytes_read = len; + if (arg_bytes_write != NULL) + * arg_bytes_write = len; + + return ret; + } + if (cfg.chardet_detector) det = cfg.chardet_detector; if (det) { - encoding = (gchar *) guess_encoding(str, strlen(str), det); + AUDDBG("guess encoding (%s) %s\n", det, str); + encoding = (gchar *) guess_encoding(str, len, det); + AUDDBG("encoding = %s\n", encoding); if (encoding == NULL) goto fallback; @@ -150,7 +170,4 @@ void chardet_init(void) { str_to_utf8 = cd_str_to_utf8; chardet_to_utf8 = cd_chardet_to_utf8; -#ifdef USE_CHARDET - guess_init(); -#endif } diff --git a/src/audacious/credits.c b/src/audacious/credits.c index 7f6b135..9f5d816 100644 --- a/src/audacious/credits.c +++ b/src/audacious/credits.c @@ -98,11 +98,12 @@ static const gchar *credit_text[] = { "Mark Glines", "Hans de Goede", "Jussi Judin", - "Teru KAMOGASHIRA", + "Teru Kamogashira", "Chris Kehler", "Mark Loeser", "Alex Maclean", "Michael Hanselmann", + "Juho Heikkinen", "Joseph Jezak", "Henrik Johansson", "Rodrigo Martins de Matos Ventura", diff --git a/src/audacious/dbus-service.h b/src/audacious/dbus-service.h index 249f5b1..0475e1b 100644 --- a/src/audacious/dbus-service.h +++ b/src/audacious/dbus-service.h @@ -221,4 +221,7 @@ gboolean audacious_rc_set_eq_preamp(RemoteObject *obj, gdouble preamp, GError ** gboolean audacious_rc_set_eq_band(RemoteObject *obj, gint band, gdouble value, GError **error); gboolean audacious_rc_equalizer_activate(RemoteObject *obj, gboolean active, GError **error); +/* new in 2.4 */ +gboolean audacious_rc_get_active_playlist_name(RemoteObject *obj, gchar **title, GError **error); + #endif /* AUDACIOUS_DBUS_SERVICE_H */ diff --git a/src/audacious/dbus.c b/src/audacious/dbus.c index c75d7a6..a0b790c 100644 --- a/src/audacious/dbus.c +++ b/src/audacious/dbus.c @@ -59,7 +59,7 @@ struct InfoRequest { gint playlist; /* -1 = active, -2 = playing */ gint entry; /* -1 = current */ - gchar *filename, *title; + gchar *filename, *title, *pltitle; gint length; }; @@ -386,7 +386,7 @@ static void get_position(struct PositionRequest *request) static gboolean get_info_cb(void *data) { struct InfoRequest *request = data; - const gchar *filename, *title; + const gchar *filename, *title, *pltitle; g_mutex_lock(info_mutex); @@ -396,6 +396,8 @@ static gboolean get_info_cb(void *data) title = playlist_entry_get_title(request->playlist, request->entry); request->title = (title == NULL) ? NULL : g_strdup(title); request->length = playlist_entry_get_length(request->playlist, request->entry); + pltitle = playlist_get_title(request->playlist); + request->pltitle = (pltitle == NULL) ? NULL : g_strdup(pltitle); g_cond_signal(info_cond); g_mutex_unlock(info_mutex); @@ -737,7 +739,7 @@ gboolean mpris_player_get_status(MprisPlayer * obj, GValueArray * *status, GErro gboolean mpris_player_get_metadata(MprisPlayer * obj, GHashTable * *metadata, GError * *error) { - struct MprisMetadataRequest request = {.playlist = -2,.entry = -1 }; + struct MprisMetadataRequest request = {.playlist = -1,.entry = -1 }; get_mpris_metadata(&request); *metadata = request.metadata; @@ -1125,6 +1127,7 @@ gboolean audacious_rc_song_title(RemoteObject * obj, guint pos, gchar * *title, get_info(&request); g_free(request.filename); + g_free(request.pltitle); *title = request.title; return TRUE; } @@ -1136,6 +1139,7 @@ gboolean audacious_rc_song_filename(RemoteObject * obj, guint pos, gchar * *file get_info(&request); *filename = request.filename; g_free(request.title); + g_free(request.pltitle); return TRUE; } @@ -1153,6 +1157,7 @@ gboolean audacious_rc_song_frames(RemoteObject * obj, guint pos, gint * length, get_info(&request); g_free(request.filename); g_free(request.title); + g_free(request.pltitle); *length = request.length; return TRUE; } @@ -1466,6 +1471,16 @@ gboolean audacious_rc_equalizer_activate(RemoteObject * obj, gboolean active, GE return TRUE; } +gboolean audacious_rc_get_active_playlist_name(RemoteObject * obj, gchar * *title, GError * *error) +{ + struct InfoRequest request = {.playlist = -2 }; + + get_info(&request); + g_free(request.title); + g_free(request.filename); + *title = request.pltitle; + return TRUE; +} DBusGProxy *audacious_get_dbus_proxy(void) { diff --git a/src/audacious/input.c b/src/audacious/input.c index c5a6025..df1c9e2 100644 --- a/src/audacious/input.c +++ b/src/audacious/input.c @@ -34,27 +34,6 @@ #include "output.h" #include "plugin-registry.h" -PlaybackData ip_data = -{ - NULL, - FALSE, - FALSE, - FALSE, - NULL -}; - -InputPlayback * -get_current_input_playback(void) -{ - return ip_data.current_input_playback; -} - -void -set_current_input_playback(InputPlayback * ip) -{ - ip_data.current_input_playback = ip; -} - static gboolean plugin_list_func (void * plugin, void * data) { GList * * list = data; @@ -76,9 +55,8 @@ GList * get_input_list (void) void input_get_volume(gint * l, gint * r) { - if (ip_data.playing && ip_data.current_input_playback && - ip_data.current_input_playback->plugin->get_volume && - ip_data.current_input_playback->plugin->get_volume (l, r)) + if (current_playback && current_playback->plugin->get_volume && + current_playback->plugin->get_volume (l, r)) return; output_get_volume (l, r); @@ -87,15 +65,12 @@ input_get_volume(gint * l, gint * r) void input_set_volume(gint l, gint r) { - gint h_vol[2]; + gint h_vol[2] = {l, r}; - h_vol[0] = l; - h_vol[1] = r; hook_call("volume set", h_vol); - if (ip_data.playing && ip_data.current_input_playback && - ip_data.current_input_playback->plugin->set_volume && - ip_data.current_input_playback->plugin->set_volume (l, r)) + if (current_playback && current_playback->plugin->set_volume && + current_playback->plugin->set_volume (l, r)) return; output_set_volume (l, r); diff --git a/src/audacious/input.h b/src/audacious/input.h index 2ca35f5..f973961 100644 --- a/src/audacious/input.h +++ b/src/audacious/input.h @@ -28,16 +28,6 @@ #include "plugin.h" -typedef struct -{ - InputPlayback *current_input_playback; - gboolean playing; - gboolean paused; - gboolean stop; - GMutex *playback_mutex; -} -PlaybackData; - struct _VisNode { gint time; gint nch; @@ -48,13 +38,10 @@ struct _VisNode { typedef struct _VisNode VisNode; GList *get_input_list(void); -InputPlayback *get_current_input_playback(void); -void set_current_input_playback(InputPlayback * ip); -void set_current_input_data(void * data); void input_get_volume(gint * l, gint * r); void input_set_volume(gint l, gint r); -extern PlaybackData ip_data; +extern InputPlayback * current_playback; #endif /* AUDACIOUS_INPUT_H */ diff --git a/src/audacious/objects.xml b/src/audacious/objects.xml index 988c397..527171e 100644 --- a/src/audacious/objects.xml +++ b/src/audacious/objects.xml @@ -523,5 +523,8 @@ <arg type="b" name="active"/> </method> + <method name="GetActivePlaylistName"> + <arg type="s" direction="out" name="plname" /> + </method> </interface> </node> diff --git a/src/audacious/playback.c b/src/audacious/playback.c index e19a38a..d09ad15 100644 --- a/src/audacious/playback.c +++ b/src/audacious/playback.c @@ -55,9 +55,13 @@ static void set_gain_from_playlist (InputPlayback * playback); static gboolean playback_segmented_end(gpointer data); +static void playback_free (InputPlayback * playback); static gboolean playback_play_file (gint playlist, gint entry); -static gboolean pause_when_ready; +InputPlayback * current_playback = NULL; + +static gboolean paused; +static gboolean stopping; static gint seek_when_ready; static gint ready_source; static gint failed_entries; @@ -110,18 +114,19 @@ static void read_gain_from_tuple (Tuple * tuple) } } -static gboolean ready_cb (void * data) +static gboolean ready_cb (void * unused) { - InputPlayback * playback = data; - - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - g_mutex_lock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); ready_source = 0; - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (pause_when_ready) + if (paused) + { + paused = ! paused; /* playback_pause toggles it */ playback_pause (); + } if (seek_when_ready > 0) playback_seek (seek_when_ready); @@ -130,15 +135,15 @@ static gboolean ready_cb (void * data) return FALSE; } -static gboolean playback_is_ready (InputPlayback * playback) +static gboolean playback_is_ready (void) { gboolean ready; - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - g_mutex_lock (playback->pb_ready_mutex); - ready = (playback->pb_ready_val && ! ready_source); - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); + ready = (current_playback->pb_ready_val && ! ready_source); + g_mutex_unlock (current_playback->pb_ready_mutex); return ready; } @@ -147,7 +152,7 @@ playback_set_pb_ready(InputPlayback *playback) { g_mutex_lock(playback->pb_ready_mutex); playback->pb_ready_val = 1; - ready_source = g_timeout_add (0, ready_cb, playback); + ready_source = g_timeout_add (0, ready_cb, NULL); g_cond_signal(playback->pb_ready_cond); g_mutex_unlock(playback->pb_ready_mutex); return 0; @@ -163,15 +168,13 @@ playback_set_pb_change(InputPlayback *playback) static void update_cb (void * hook_data, void * user_data) { - InputPlayback * playback; - gint playlist, entry; + gint playlist, entry, length; const gchar * title; - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + g_return_if_fail (current_playback != NULL); if (GPOINTER_TO_INT (hook_data) < PLAYLIST_UPDATE_METADATA || - ! playback_is_ready (playback)) + ! playback_is_ready ()) return; playlist = playlist_get_playing (); @@ -180,32 +183,35 @@ static void update_cb (void * hook_data, void * user_data) if ((title = playlist_entry_get_title (playlist, entry)) == NULL) title = playlist_entry_get_filename (playlist, entry); - g_free (playback->title); - playback->title = g_strdup (title); - playback->length = playlist_entry_get_length (playlist, entry); + length = playlist_entry_get_length (playlist, entry); + if (! strcmp (title, current_playback->title) && length == + current_playback->length) + return; + + g_free (current_playback->title); + current_playback->title = g_strdup (title); + current_playback->length = length; hook_call ("title change", NULL); } static gint playback_get_time_real(void) { - InputPlayback * playback; gint time = -1; - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - if (! playback_is_ready (playback)) + if (! playback_is_ready ()) return seek_when_ready; - if (! playback->playing || playback->eof || playback->error) + if (! current_playback->playing || current_playback->error) return 0; - if (playback->plugin->get_time != NULL) - time = playback->plugin->get_time (playback); + if (current_playback->plugin->get_time != NULL) + time = current_playback->plugin->get_time (current_playback); - if (time == -1) + if (time < 0) time = get_output_time (); return time; @@ -213,13 +219,10 @@ playback_get_time_real(void) gint playback_get_time (void) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - if (playback->start > 0) - return playback_get_time_real () - playback->start; + if (current_playback->start > 0) + return playback_get_time_real () - current_playback->start; else return playback_get_time_real (); } @@ -260,28 +263,20 @@ void playback_initiate (void) void playback_pause (void) { - InputPlayback * playback; - gboolean paused; + g_return_if_fail (current_playback != NULL); - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + paused = ! paused; - if (playback_is_ready (playback)) + if (playback_is_ready ()) { - paused = ! ip_data.paused; - - if (playback->end_timeout) - g_source_remove(playback->end_timeout); - - g_return_if_fail (playback->plugin->pause != NULL); - playback->plugin->pause (playback, paused); + if (current_playback->end_timeout) + { + g_source_remove(current_playback->end_timeout); + current_playback->end_timeout = 0; + } - ip_data.paused = paused; - } - else - { - paused = ! pause_when_ready; - pause_when_ready = paused; + g_return_if_fail (current_playback->plugin->pause != NULL); + current_playback->plugin->pause (current_playback, paused); } if (paused) @@ -290,20 +285,21 @@ void playback_pause (void) { hook_call("playback unpause", NULL); - if (playback->end > 0) - playback->end_timeout = g_timeout_add (playback->end - - playback_get_time_real (), playback_segmented_end, playback); + if (current_playback->end > 0) + current_playback->end_timeout = g_timeout_add (current_playback->end + - playback_get_time_real (), playback_segmented_end, NULL); } } -static void playback_finalize (InputPlayback * playback) +static void playback_finalize (void) { hook_dissociate ("playlist update", update_cb); - g_mutex_lock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); - while (! playback->pb_ready_val) - g_cond_wait (playback->pb_ready_cond, playback->pb_ready_mutex); + while (! current_playback->pb_ready_val) + g_cond_wait (current_playback->pb_ready_cond, + current_playback->pb_ready_mutex); if (ready_source) { @@ -311,36 +307,45 @@ static void playback_finalize (InputPlayback * playback) ready_source = 0; } - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (playback->playing) - playback->plugin->stop (playback); + if (current_playback->playing) + current_playback->plugin->stop (current_playback); /* some plugins do this themselves */ - if (playback->thread != NULL) - g_thread_join (playback->thread); + if (current_playback->thread != NULL) + g_thread_join (current_playback->thread); - playback_free (playback); - ip_data.current_input_playback = NULL; cancel_set_tuple (); - if (playback->end_timeout) - g_source_remove(playback->end_timeout); + if (current_playback->end_timeout) + g_source_remove (current_playback->end_timeout); + + playback_free (current_playback); + current_playback = NULL; } -void playback_stop (void) +static void complete_stop (void) { - g_return_if_fail (ip_data.current_input_playback != NULL); + output_drain (); + hook_call ("playback stop", NULL); - ip_data.stop = TRUE; + if (cfg.stopaftersong) + { + cfg.stopaftersong = FALSE; + hook_call ("toggle stop after song", NULL); + } +} - playback_finalize (ip_data.current_input_playback); +void playback_stop (void) +{ + g_return_if_fail (current_playback != NULL); - ip_data.playing = FALSE; - ip_data.stop = FALSE; + stopping = TRUE; + playback_finalize (); + stopping = FALSE; - output_drain (); - hook_call ("playback stop", NULL); + complete_stop (); } static gboolean playback_ended (void * user_data) @@ -348,14 +353,14 @@ static gboolean playback_ended (void * user_data) gint playlist = playlist_get_playing (); gboolean play; - g_return_val_if_fail (ip_data.current_input_playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - if (ip_data.current_input_playback->error) + if (current_playback->error) failed_entries ++; else failed_entries = 0; - playback_finalize (ip_data.current_input_playback); + playback_finalize (); while (1) { @@ -375,8 +380,7 @@ static gboolean playback_ended (void * user_data) if (! play) { - output_drain (); - hook_call ("playback stop", NULL); + complete_stop (); break; } @@ -389,8 +393,7 @@ static gboolean playback_ended (void * user_data) return FALSE; } -static gboolean -playback_segmented_end(gpointer data) +static gboolean playback_segmented_end (void * unused) { if (playlist_next_song (playlist_get_playing (), cfg.repeat)) playback_initiate (); @@ -398,18 +401,20 @@ playback_segmented_end(gpointer data) return FALSE; } -static gboolean -playback_segmented_start(gpointer data) +static gboolean playback_segmented_start (void * unused) { - InputPlayback *playback = (InputPlayback *) data; + g_return_val_if_fail (current_playback != NULL, FALSE); - if (playback->plugin->mseek != NULL) - playback->plugin->mseek (playback, playback->start); - else if (playback->plugin->seek != NULL) - playback->plugin->seek (playback, playback->start / 1000); + if (current_playback->plugin->mseek != NULL) + current_playback->plugin->mseek (current_playback, + current_playback->start); + else if (current_playback->plugin->seek != NULL) + current_playback->plugin->seek (current_playback, + current_playback->start / 1000); - if (playback->end > 0) - playback->end_timeout = g_timeout_add(playback->end - playback->start, playback_segmented_end, playback); + if (current_playback->end > 0) + current_playback->end_timeout = g_timeout_add (current_playback->end - + current_playback->start, playback_segmented_end, current_playback); return FALSE; } @@ -417,16 +422,13 @@ playback_segmented_start(gpointer data) static gpointer playback_monitor_thread(gpointer data) { - InputPlayback *playback = (InputPlayback *) data; + if (current_playback->segmented) + g_idle_add (playback_segmented_start, current_playback); - if (playback->segmented) - g_idle_add(playback_segmented_start, playback); + current_playback->plugin->play_file (current_playback); - plugin_set_current((Plugin *)(playback->plugin)); - playback->plugin->play_file(playback); - - g_mutex_lock (playback->pb_ready_mutex); - playback->pb_ready_val = TRUE; + g_mutex_lock (current_playback->pb_ready_mutex); + current_playback->pb_ready_val = TRUE; if (ready_source != 0) { @@ -434,10 +436,10 @@ playback_monitor_thread(gpointer data) ready_source = 0; } - g_cond_signal (playback->pb_ready_cond); - g_mutex_unlock (playback->pb_ready_mutex); + g_cond_signal (current_playback->pb_ready_cond); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (! ip_data.stop) + if (! stopping) g_timeout_add (0, playback_ended, NULL); return NULL; @@ -470,8 +472,7 @@ static void playback_pass_audio (InputPlayback * playback, AFormat format, gint playback->output->write_audio (data, size); } -InputPlayback * -playback_new(void) +static InputPlayback * playback_new (void) { InputPlayback *playback = (InputPlayback *) g_slice_new0(InputPlayback); @@ -505,7 +506,7 @@ playback_new(void) * other sources for allocated playback data (like filename and title) * and this tries to deallocate all that data. */ -void playback_free(InputPlayback *playback) +static void playback_free (InputPlayback * playback) { g_free(playback->filename); g_free(playback->title); @@ -519,18 +520,19 @@ void playback_free(InputPlayback *playback) g_slice_free(InputPlayback, playback); } -void -playback_run(InputPlayback *playback) +static void playback_run (void) { - playback->playing = 0; - playback->eof = 0; - playback->error = 0; + current_playback->playing = FALSE; + current_playback->eof = FALSE; + current_playback->error = FALSE; - pause_when_ready = FALSE; + paused = FALSE; + stopping = FALSE; seek_when_ready = 0; ready_source = 0; - playback->thread = g_thread_create(playback_monitor_thread, playback, TRUE, NULL); + current_playback->thread = g_thread_create (playback_monitor_thread, + current_playback, TRUE, NULL); } static gboolean playback_play_file (gint playlist, gint entry) @@ -539,7 +541,8 @@ static gboolean playback_play_file (gint playlist, gint entry) const gchar * title = playlist_entry_get_title (playlist, entry); InputPlugin * decoder = playlist_entry_get_decoder (playlist, entry); Tuple * tuple = (Tuple *) playlist_entry_get_tuple (playlist, entry); - InputPlayback *playback; + + g_return_val_if_fail (current_playback == NULL, FALSE); if (decoder == NULL) decoder = file_find_decoder (filename, FALSE); @@ -563,85 +566,70 @@ static gboolean playback_play_file (gint playlist, gint entry) read_gain_from_tuple (tuple); /* even if tuple == NULL */ - ip_data.playing = TRUE; - ip_data.paused = FALSE; - ip_data.stop = FALSE; - - playback = playback_new(); - - playback->plugin = decoder; - playback->filename = g_strdup (filename); - playback->title = g_strdup ((title != NULL) ? title : filename); - playback->length = playlist_entry_get_length (playlist, entry); - playback->segmented = playlist_entry_is_segmented (playlist, entry); - playback->start = playlist_entry_get_start_time (playlist, entry); - playback->end = playlist_entry_get_end_time (playlist, entry); + current_playback = playback_new (); + current_playback->plugin = decoder; + current_playback->filename = g_strdup (filename); + current_playback->title = g_strdup ((title != NULL) ? title : filename); + current_playback->length = playlist_entry_get_length (playlist, entry); + current_playback->segmented = playlist_entry_is_segmented (playlist, entry); + current_playback->start = playlist_entry_get_start_time (playlist, entry); + current_playback->end = playlist_entry_get_end_time (playlist, entry); - set_current_input_playback(playback); - - playback_run(playback); + playback_run (); #ifdef USE_DBUS mpris_emit_track_change(mpris); #endif hook_associate ("playlist update", update_cb, NULL); - hook_call ("playback begin", playback); + hook_call ("playback begin", NULL); return TRUE; } gboolean playback_get_playing (void) { - return (ip_data.current_input_playback != NULL); + return (current_playback != NULL); } gboolean playback_get_paused (void) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - if (playback_is_ready (playback)) - return ip_data.paused; - else - return pause_when_ready; + return paused; } void playback_seek (gint time) { - InputPlayback * playback; + g_return_if_fail (current_playback != NULL); - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); - - if (playback->length <= 0) + if (current_playback->length <= 0) return; - time = CLAMP (time, 0, playback->length); + time = CLAMP (time, 0, current_playback->length); - if (playback_is_ready (playback)) + if (playback_is_ready ()) { - if (playback->start > 0) - time += playback->start; + if (current_playback->start > 0) + time += current_playback->start; - if (playback->plugin->mseek != NULL) - playback->plugin->mseek (playback, time); - else if (playback->plugin->seek != NULL) - playback->plugin->seek (playback, time / 1000); + if (current_playback->plugin->mseek != NULL) + current_playback->plugin->mseek (current_playback, time); + else if (current_playback->plugin->seek != NULL) + current_playback->plugin->seek (current_playback, time / 1000); - if (playback->end > 0) + if (current_playback->end > 0) { - if (playback->end_timeout) - g_source_remove(playback->end_timeout); + if (current_playback->end_timeout) + g_source_remove (current_playback->end_timeout); - playback->end_timeout = g_timeout_add(playback->end - time, playback_segmented_end, playback); + current_playback->end_timeout = g_timeout_add (current_playback->end + - time, playback_segmented_end, NULL); } } else seek_when_ready = time; - hook_call ("playback seek", playback); + hook_call ("playback seek", NULL); } static void set_params (InputPlayback * playback, const gchar * title, gint @@ -658,21 +646,31 @@ static gboolean set_tuple_cb (void * unused) { gint playlist = playlist_get_playing (); + g_return_val_if_fail (current_playback != NULL, FALSE); + g_mutex_lock (current_playback->pb_ready_mutex); + playlist_entry_set_tuple (playlist, playlist_get_position (playlist), tuple_to_be_set); set_tuple_source = 0; tuple_to_be_set = NULL; + + g_mutex_unlock (current_playback->pb_ready_mutex); + return FALSE; } static void set_tuple (InputPlayback * playback, Tuple * tuple) { + g_mutex_lock (playback->pb_ready_mutex); + /* playlist_entry_set_tuple must execute in main thread */ cancel_set_tuple (); set_tuple_source = g_timeout_add (0, set_tuple_cb, NULL); tuple_to_be_set = tuple; read_gain_from_tuple (tuple); + + g_mutex_unlock (playback->pb_ready_mutex); } static void set_gain_from_playlist (InputPlayback * playback) @@ -682,24 +680,23 @@ static void set_gain_from_playlist (InputPlayback * playback) gchar * playback_get_title (void) { - InputPlayback * playback; gchar * suffix, * title; - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, NULL); + g_return_val_if_fail (current_playback != NULL, NULL); - if (! playback_is_ready (playback)) + if (! playback_is_ready ()) return g_strdup (_("Buffering ...")); - suffix = (playback->length > 0) ? g_strdup_printf (" (%d:%02d)", - playback->length / 60000, playback->length / 1000 % 60) : NULL; + suffix = (current_playback->length > 0) ? g_strdup_printf (" (%d:%02d)", + current_playback->length / 60000, current_playback->length / 1000 % 60) : + NULL; if (cfg.show_numbers_in_pl) title = g_strdup_printf ("%d. %s%s", 1 + playlist_get_position - (playlist_get_playing ()), playback->title, (suffix != NULL) ? suffix : - ""); + (playlist_get_playing ()), current_playback->title, (suffix != NULL) ? + suffix : ""); else - title = g_strdup_printf ("%s%s", playback->title, (suffix != + title = g_strdup_printf ("%s%s", current_playback->title, (suffix != NULL) ? suffix : ""); g_free (suffix); @@ -708,19 +705,16 @@ gchar * playback_get_title (void) gint playback_get_length (void) { - g_return_val_if_fail (ip_data.current_input_playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - return ip_data.current_input_playback->length; + return current_playback->length; } void playback_get_info (gint * bitrate, gint * samplerate, gint * channels) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + g_return_if_fail (current_playback != NULL); - * bitrate = playback->rate; - * samplerate = playback->freq; - * channels = playback->nch; + * bitrate = current_playback->rate; + * samplerate = current_playback->freq; + * channels = current_playback->nch; } diff --git a/src/audacious/playback.h b/src/audacious/playback.h index a745ac4..9093240 100644 --- a/src/audacious/playback.h +++ b/src/audacious/playback.h @@ -37,14 +37,6 @@ void playback_stop(void); gboolean playback_get_playing(void); gboolean playback_get_paused(void); void playback_seek(gint time); -InputPlayback *playback_new(void); -void playback_free(InputPlayback *); -void playback_run(InputPlayback *); - -/* deprecated */ -void ip_set_info (const gchar * title, gint length, gint bitrate, gint - samplerate, gint channels); -void ip_set_info_text (const gchar * title); gchar * playback_get_title (void); gint playback_get_length (void); diff --git a/src/audacious/playlist-new.c b/src/audacious/playlist-new.c index 635039f..a377705 100644 --- a/src/audacious/playlist-new.c +++ b/src/audacious/playlist-new.c @@ -33,6 +33,8 @@ #include "plugin.h" #include "probe.h" +#define SCAN_DEBUG(...) + #define STATE_FILE "playlist-state" #define DECLARE_PLAYLIST \ @@ -139,6 +141,7 @@ static GCond * scan_cond; static const gchar * scan_filename; static InputPlugin * scan_decoder; static Tuple * scan_tuple; +static gboolean scan_quit; static GThread * scan_thread; static gint scan_position, updated_ago; @@ -366,6 +369,7 @@ void scan_receive (void) { struct entry * entry = index_get (active_playlist->entries, scan_position); + SCAN_DEBUG ("scan_receive\n"); entry_set_tuple (active_playlist, entry, scan_tuple); if (scan_tuple == NULL) @@ -380,7 +384,9 @@ static gboolean scan_next (void * unused) { gint entries; + SCAN_DEBUG ("scan_next: locking...\n"); g_mutex_lock (scan_mutex); + SCAN_DEBUG (" ...ok\n"); if (scan_filename != NULL) { @@ -403,6 +409,7 @@ static gboolean scan_next (void * unused) if (! entry->failed) { + SCAN_DEBUG (" ...waking scanner\n"); scan_filename = entry->filename; scan_decoder = entry->decoder; g_cond_signal (scan_cond); @@ -412,10 +419,12 @@ static gboolean scan_next (void * unused) if (updated_ago >= 10 || (scan_position == entries && updated_ago > 0)) { + SCAN_DEBUG (" ...queueing update\n"); queue_update (PLAYLIST_UPDATE_METADATA); updated_ago = 0; } + SCAN_DEBUG (" ...unlocking\n"); scan_source = 0; g_mutex_unlock (scan_mutex); return FALSE; @@ -423,11 +432,13 @@ static gboolean scan_next (void * unused) static void scan_continue (void) { + SCAN_DEBUG ("scan_continue\n"); scan_source = g_idle_add_full (G_PRIORITY_LOW, scan_next, NULL, NULL); } static void scan_reset (void) { + SCAN_DEBUG ("scan_reset\n"); scan_position = 0; updated_ago = 0; scan_continue (); @@ -435,7 +446,9 @@ static void scan_reset (void) static void scan_stop (void) { + SCAN_DEBUG ("scan_stop: locking...\n"); g_mutex_lock (scan_mutex); + SCAN_DEBUG (" ...ok\n"); if (scan_source != 0) { @@ -446,6 +459,7 @@ static void scan_stop (void) if (scan_filename != NULL) scan_receive (); + SCAN_DEBUG (" ...unlocking\n"); g_mutex_unlock (scan_mutex); } @@ -454,11 +468,22 @@ static void * scanner (void * unused) { for (;;) { + SCAN_DEBUG ("scanner: waiting...\n"); g_cond_wait (scan_cond, scan_mutex); - if (scan_filename == NULL) + if (scan_quit) + { + SCAN_DEBUG (" ...exiting\n"); return NULL; + } + + if (scan_filename == NULL) + { + SCAN_DEBUG (" ...nothing to scan\n"); + continue; + } + SCAN_DEBUG (" ...scanning\n"); scan_tuple = file_read_tuple (scan_filename, scan_decoder); scan_continue (); } @@ -508,6 +533,7 @@ void playlist_init (void) scan_tuple = NULL; scan_source = 0; g_mutex_lock (scan_mutex); + scan_quit = FALSE; scan_thread = g_thread_create (scanner, NULL, TRUE, NULL); scan_reset (); } @@ -518,7 +544,7 @@ void playlist_end(void) scan_stop (); g_mutex_lock (scan_mutex); - scan_filename = NULL; /* tell scanner to quit */ + scan_quit = TRUE; g_cond_signal (scan_cond); g_mutex_unlock (scan_mutex); g_thread_join (scan_thread); @@ -627,12 +653,12 @@ void playlist_set_filename(gint playlist_num, const gchar * filename) DECLARE_PLAYLIST; LOOKUP_PLAYLIST; - METADATA_WILL_CHANGE; + PLAYLIST_WILL_CHANGE; g_free(playlist->filename); playlist->filename = g_strdup(filename); - METADATA_HAS_CHANGED; + PLAYLIST_HAS_CHANGED; } const gchar *playlist_get_filename(gint playlist_num) @@ -649,12 +675,12 @@ void playlist_set_title(gint playlist_num, const gchar * title) DECLARE_PLAYLIST; LOOKUP_PLAYLIST; - METADATA_WILL_CHANGE; + PLAYLIST_WILL_CHANGE; g_free(playlist->title); playlist->title = g_strdup(title); - METADATA_HAS_CHANGED; + PLAYLIST_HAS_CHANGED; } const gchar *playlist_get_title(gint playlist_num) diff --git a/src/audacious/plugin.h b/src/audacious/plugin.h index 01bc054..b65755e 100644 --- a/src/audacious/plugin.h +++ b/src/audacious/plugin.h @@ -172,7 +172,7 @@ struct _AudaciousFuncTableV1 { /* VFS */ #ifdef __GNUC__ -#define WARN_RETURN __attribute__ ((warn_unused_result)) +#define WARN_RETURN /* __attribute__ ((warn_unused_result)) */ #else #define WARN_RETURN #endif diff --git a/src/audacious/pluginenum.c b/src/audacious/pluginenum.c index 9790648..37b0d2c 100644 --- a/src/audacious/pluginenum.c +++ b/src/audacious/pluginenum.c @@ -258,7 +258,7 @@ static struct _AudaciousFuncTableV1 _aud_papi_v1 = { .drct_initiate = drct_initiate, .drct_play = drct_play, .drct_pause = drct_pause, - .drct_stop = drct_stop, + .drct_stop = playback_stop, .drct_get_playing = drct_get_playing, .drct_get_paused = drct_get_paused, .drct_get_stopped = drct_get_stopped, @@ -838,12 +838,8 @@ void plugin_system_cleanup(void) if (ep->cleanup) ep->cleanup(); - - g_free (ep->filename); - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); + g_free (ep->filename); } } @@ -864,10 +860,6 @@ void plugin_system_cleanup(void) gp->cleanup(); g_free (gp->filename); - - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); } } @@ -888,10 +880,6 @@ void plugin_system_cleanup(void) vp->cleanup(); g_free (vp->filename); - - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); } } diff --git a/src/audacious/probe.c b/src/audacious/probe.c index 17c4b13..bc48f3f 100644 --- a/src/audacious/probe.c +++ b/src/audacious/probe.c @@ -21,6 +21,7 @@ #include <libaudcore/audstrings.h> #include <libaudcore/vfs.h> +#include <libaudcore/vfs_buffered_file.h> #include <stdio.h> #include <string.h> @@ -36,6 +37,8 @@ typedef struct } ProbeState; +// #define XXX_USE_BUFFERING + static gboolean check_opened (ProbeState * state) { if (state->handle != NULL) @@ -43,8 +46,13 @@ static gboolean check_opened (ProbeState * state) AUDDBG ("Opening %s.\n", state->filename); +#ifndef XXX_USE_BUFFERING if ((state->handle = vfs_fopen (state->filename, "r")) != NULL) return TRUE; +#else + if ((state->handle = vfs_buffered_file_new_from_uri(state->filename)) != NULL) + return TRUE; +#endif AUDDBG ("FAILED.\n"); return FALSE; diff --git a/src/audacious/ui/carbon-menubar.ui b/src/audacious/ui/carbon-menubar.ui deleted file mode 100644 index 2d1e11b..0000000 --- a/src/audacious/ui/carbon-menubar.ui +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="carbon-menubar"> - <menu action="dummy" name="main-menu"> - <menu action="file"> - <menuitem action="play file" /> - <menuitem action="play location" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save default" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="view"> - <menuitem action="show player" /> - <menuitem action="show playlist editor" /> - <menuitem action="show equalizer" /> - <separator /> - <menuitem action="view time elapsed" /> - <menuitem action="view time remaining" /> - <separator /> - <menuitem action="view always on top" /> - <menuitem action="view put on all workspaces" /> - <menuitem action="autoscroll songname" /> - <separator /> - <menuitem action="roll up player" /> - <menuitem action="roll up playlist editor" /> - <menuitem action="roll up equalizer" /> - <separator /> - <menuitem action="view scaled" /> - <menuitem action="view easy move" /> - </menu> - <menu action="visualization"> - <menu action="vismode"> - <menuitem action="vismode analyzer" /> - <menuitem action="vismode scope" /> - <menuitem action="vismode voiceprint" /> - <menuitem action="vismode off" /> - </menu> - <menu action="anamode"> - <menuitem action="anamode normal" /> - <menuitem action="anamode fire" /> - <menuitem action="anamode vertical lines" /> - <separator /> - <menuitem action="anatype lines" /> - <menuitem action="anatype bars" /> - <separator /> - <menuitem action="anamode peaks" /> - </menu> - <menu action="scomode"> - <menuitem action="scomode dot" /> - <menuitem action="scomode line" /> - <menuitem action="scomode solid" /> - </menu> - <menu action="vprmode"> - <menuitem action="vprmode normal" /> - <menuitem action="vprmode fire" /> - <menuitem action="vprmode ice" /> - </menu> - <menu action="wshmode"> - <menuitem action="wshmode normal" /> - <menuitem action="wshmode smooth" /> - </menu> - <menu action="anafoff"> - <menuitem action="anafoff slowest" /> - <menuitem action="anafoff slow" /> - <menuitem action="anafoff medium" /> - <menuitem action="anafoff fast" /> - <menuitem action="anafoff fastest" /> - </menu> - <menu action="peafoff"> - <menuitem action="peafoff slowest" /> - <menuitem action="peafoff slow" /> - <menuitem action="peafoff medium" /> - <menuitem action="peafoff fast" /> - <menuitem action="peafoff fastest" /> - </menu> - </menu> - <menu action="help"> - <menuitem action="about audacious" /> - </menu> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/equalizer.ui b/src/audacious/ui/equalizer.ui deleted file mode 100644 index 3d70c1b..0000000 --- a/src/audacious/ui/equalizer.ui +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="equalizer-menus"> - <menu action="dummy" name="preset-menu"> - <menu action="equ preset load menu"> - <menuitem action="equ load preset" /> - <menuitem action="equ load auto preset" /> - <menuitem action="equ load default preset" /> - <separator /> - <menuitem action="equ zero preset" /> - <separator /> - <menuitem action="equ load preset file" /> - <menuitem action="equ load preset eqf" /> - </menu> - - <menu action="equ preset import menu"> - <menuitem action="equ import winamp presets" /> - </menu> - - <menu action="equ preset save menu"> - <menuitem action="equ save preset" /> - <menuitem action="equ save auto preset" /> - <menuitem action="equ save default preset" /> - <separator /> - <menuitem action="equ save preset file" /> - <menuitem action="equ save preset eqf" /> - </menu> - - <menu action="equ preset delete menu"> - <menuitem action="equ delete preset" /> - <menuitem action="equ delete auto preset" /> - </menu> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/mainwin.ui b/src/audacious/ui/mainwin.ui deleted file mode 100644 index 2d078ad..0000000 --- a/src/audacious/ui/mainwin.ui +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="mainwin-menus"> - <menu action="dummy" name="songname-menu"> - <menuitem action="current track info" /> - <separator /> - <menuitem action="autoscroll songname" /> - <menuitem action="stop after current song" /> - </menu> - - <menu action="dummy" name="main-menu"> - <menuitem action="about audacious" /> - <separator /> - <menuitem action="play file" /> - <menuitem action="play location" /> - <separator /> - <menu action="visualization"> - <menu action="vismode"> - <menuitem action="vismode analyzer" /> - <menuitem action="vismode scope" /> - <menuitem action="vismode voiceprint" /> - <menuitem action="vismode off" /> - </menu> - <menu action="anamode"> - <menuitem action="anamode normal" /> - <menuitem action="anamode fire" /> - <menuitem action="anamode vertical lines" /> - <separator /> - <menuitem action="anatype lines" /> - <menuitem action="anatype bars" /> - <separator /> - <menuitem action="anamode peaks" /> - </menu> - <menu action="scomode"> - <menuitem action="scomode dot" /> - <menuitem action="scomode line" /> - <menuitem action="scomode solid" /> - </menu> - <menu action="vprmode"> - <menuitem action="vprmode normal" /> - <menuitem action="vprmode fire" /> - <menuitem action="vprmode ice" /> - </menu> - <menu action="wshmode"> - <menuitem action="wshmode normal" /> - <menuitem action="wshmode smooth" /> - </menu> - <menu action="anafoff"> - <menuitem action="anafoff slowest" /> - <menuitem action="anafoff slow" /> - <menuitem action="anafoff medium" /> - <menuitem action="anafoff fast" /> - <menuitem action="anafoff fastest" /> - </menu> - <menu action="peafoff"> - <menuitem action="peafoff slowest" /> - <menuitem action="peafoff slow" /> - <menuitem action="peafoff medium" /> - <menuitem action="peafoff fast" /> - <menuitem action="peafoff fastest" /> - </menu> - </menu> - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="view"> - <menuitem action="show player" /> - <menuitem action="show playlist editor" /> - <menuitem action="show equalizer" /> - <separator /> - <menuitem action="view time elapsed" /> - <menuitem action="view time remaining" /> - <separator /> - <menuitem action="view always on top" /> - <menuitem action="view put on all workspaces" /> - <menuitem action="autoscroll songname" /> - <separator /> - <menuitem action="roll up player" /> - <menuitem action="roll up playlist editor" /> - <menuitem action="roll up equalizer" /> - <separator /> - <menuitem action="view scaled" /> - <menuitem action="view easy move" /> - </menu> - <separator /> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/player.ui b/src/audacious/ui/player.ui deleted file mode 100644 index de6800f..0000000 --- a/src/audacious/ui/player.ui +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="mainwin-menus"> - <menu action="file"> - <menuitem action="play file" /> - <menuitem action="play location" /> - <menuitem action="playlist add files" /> - <menuitem action="playlist add url" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="plugins-menu" /> - - <menu action="help"> - <menuitem action="about audacious" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/playlist.ui b/src/audacious/ui/playlist.ui deleted file mode 100644 index 93b87b9..0000000 --- a/src/audacious/ui/playlist.ui +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="playlist-menus"> - <menu action="dummy" name="playlist-rightclick-menu"> - <menuitem action="playlist track info" /> - <separator /> - <menuitem action="playlist remove selected" /> - <menuitem action="playlist remove unselected" /> - <menuitem action="playlist remove all" /> - <separator /> - <menuitem action="queue toggle" /> - <separator /> - <menuitem action="plugins-menu" /> - </menu> - - <menu action="dummy" name="add-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist add url" /> - <menuitem action="playlist add files" /> - </menu> - - <menu action="dummy" name="del-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist remove all" /> - <menuitem action="playlist clear queue" /> - <separator /> - <menuitem action="playlist remove unavailable" /> - <menu action="playlist remove dups menu"> - <menuitem action="playlist remove dups by title" /> - <menuitem action="playlist remove dups by filename" /> - <menuitem action="playlist remove dups by full path" /> - </menu> - <separator /> - <menuitem action="playlist remove unselected" /> - <menuitem action="playlist remove selected" /> - </menu> - - <menu action="dummy" name="select-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist search and select" /> - <separator /> - <menuitem action="playlist invert selection" /> - <separator /> - <menuitem action="playlist select none" /> - <menuitem action="playlist select all" /> - </menu> - - <menu action="dummy" name="misc-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist randomize list" /> - <menuitem action="playlist reverse list" /> - <separator /> - <menu action="playlist sort menu"> - <menuitem action="playlist sort by title" /> - <menuitem action="playlist sort by album" /> - <menuitem action="playlist sort by artist" /> - <menuitem action="playlist sort by filename" /> - <menuitem action="playlist sort by full path" /> - <menuitem action="playlist sort by date" /> - <menuitem action="playlist sort by track number" /> - </menu> - <menu action="playlist sort selected menu"> - <menuitem action="playlist sort selected by title" /> - <menuitem action="playlist sort selected by album" /> - <menuitem action="playlist sort selected by artist" /> - <menuitem action="playlist sort selected by filename" /> - <menuitem action="playlist sort selected by full path" /> - <menuitem action="playlist sort selected by date" /> - <menuitem action="playlist sort selected by track number" /> - </menu> - </menu> - - <menu action="dummy" name="playlist-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui_albumart.c b/src/audacious/ui_albumart.c index 940ceed..8bb6c75 100644 --- a/src/audacious/ui_albumart.c +++ b/src/audacious/ui_albumart.c @@ -29,6 +29,7 @@ #include <string.h> #include "audconfig.h" +#include <libaudcore/audstrings.h> static gboolean has_front_cover_extension(const gchar *name) @@ -123,6 +124,9 @@ static gchar * fileinfo_recursive_get_image (const gchar * path, const gchar * if (cfg.recurse_for_cover && depth > cfg.recurse_for_cover_depth) return NULL; + if (str_has_prefix_nocase(path, "file://")) + path += 7; + d = g_dir_open(path, 0, NULL); if (d) { diff --git a/src/audacious/vis_runner.c b/src/audacious/vis_runner.c index 57cb592..3a4403d 100644 --- a/src/audacious/vis_runner.c +++ b/src/audacious/vis_runner.c @@ -111,6 +111,8 @@ static void flush_locked (void) } vis_tail = NULL; + + clear_source = g_timeout_add (0, send_clear, NULL); } void vis_runner_init (void) @@ -147,14 +149,9 @@ void vis_runner_start_stop (gboolean new_playing, gboolean new_paused) } if (! active) - { flush_locked (); - clear_source = g_timeout_add (0, send_clear, NULL); - } else if (! paused) - { send_source = g_timeout_add (INTERVAL, send_audio, NULL); - } g_mutex_unlock (mutex); } @@ -236,7 +233,6 @@ void vis_runner_time_offset (gint offset) void vis_runner_flush (void) { - g_mutex_lock (mutex); flush_locked (); g_mutex_unlock (mutex); |