summaryrefslogtreecommitdiff
path: root/src/audacious
diff options
context:
space:
mode:
authorBenjamin Drung <bdrung@ubuntu.com>2010-06-29 10:01:17 +0200
committerBenjamin Drung <bdrung@ubuntu.com>2010-06-29 10:01:17 +0200
commite8b98d4a2a505405b6380e206cc1e0f553753794 (patch)
tree4f7745e028b087f2d770b39ad20d90adac1af063 /src/audacious
parent42318926e1c1585ccc266c4607cb1d6e855bd0b9 (diff)
Imported Upstream version 2.4~alpha2
Diffstat (limited to 'src/audacious')
-rw-r--r--src/audacious/Makefile21
-rw-r--r--src/audacious/auddrct.c12
-rw-r--r--src/audacious/auddrct.h1
-rw-r--r--src/audacious/chardet.c25
-rw-r--r--src/audacious/credits.c3
-rw-r--r--src/audacious/dbus-service.h3
-rw-r--r--src/audacious/dbus.c21
-rw-r--r--src/audacious/input.c35
-rw-r--r--src/audacious/input.h15
-rw-r--r--src/audacious/objects.xml3
-rw-r--r--src/audacious/playback.c350
-rw-r--r--src/audacious/playback.h8
-rw-r--r--src/audacious/playlist-new.c38
-rw-r--r--src/audacious/plugin.h2
-rw-r--r--src/audacious/pluginenum.c16
-rw-r--r--src/audacious/probe.c8
-rw-r--r--src/audacious/ui/carbon-menubar.ui122
-rw-r--r--src/audacious/ui/equalizer.ui36
-rw-r--r--src/audacious/ui/mainwin.ui129
-rw-r--r--src/audacious/ui/player.ui60
-rw-r--r--src/audacious/ui/playlist.ui96
-rw-r--r--src/audacious/ui_albumart.c4
-rw-r--r--src/audacious/vis_runner.c8
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);