diff options
Diffstat (limited to 'src/audacious/art.c')
-rw-r--r-- | src/audacious/art.c | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/src/audacious/art.c b/src/audacious/art.c index f09fcc5..24658a0 100644 --- a/src/audacious/art.c +++ b/src/audacious/art.c @@ -19,13 +19,14 @@ #include <assert.h> #include <errno.h> -#include <glib.h> #include <pthread.h> -#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <glib.h> +#include <glib/gstdio.h> + #include <libaudcore/audstrings.h> #include <libaudcore/hook.h> @@ -47,12 +48,11 @@ typedef struct { int64_t len; /* album art as (possibly a temporary) file */ - char * art_file; + char * art_file; /* pooled */ bool_t is_temp; } ArtItem; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static GHashTable * art_items; /* of ArtItem */ static char * current_ref; /* pooled */ @@ -66,13 +66,13 @@ static void art_item_free (ArtItem * item) char * unixname = uri_to_filename (item->art_file); if (unixname) { - unlink (unixname); - free (unixname); + g_unlink (unixname); + str_unref (unixname); } } - free (item->data); - free (item->art_file); + g_free (item->data); + str_unref (item->art_file); g_slice_free (ArtItem, item); } @@ -140,17 +140,16 @@ static void request_callback (ScanRequest * request) assert (item != NULL && ! item->flag); scan_request_get_image_data (request, & item->data, & item->len); - item->art_file = scan_request_get_image_file (request); + item->art_file = str_get (scan_request_get_image_file (request)); item->flag = FLAG_DONE; if (! send_source) send_source = g_idle_add (send_requests, NULL); - pthread_cond_broadcast (& cond); pthread_mutex_unlock (& mutex); } -static ArtItem * art_item_get (const char * file, bool_t blocking) +static ArtItem * art_item_get (const char * file) { ArtItem * item = g_hash_table_lookup (art_items, file); @@ -169,15 +168,7 @@ static ArtItem * art_item_get (const char * file, bool_t blocking) scan_request (file, SCAN_IMAGE, NULL, request_callback); } - if (! blocking) - return NULL; - - item->refcount ++; - - while (! item->flag) - pthread_cond_wait (& cond, & mutex); - - return item; + return NULL; } static void art_item_unref (const char * file, ArtItem * item) @@ -222,15 +213,14 @@ void art_cleanup (void) art_items = NULL; } -void art_get_data_real (const char * file, const void * * data, int64_t * len, - bool_t blocking) +void art_request_data (const char * file, const void * * data, int64_t * len) { * data = NULL; * len = 0; pthread_mutex_lock (& mutex); - ArtItem * item = art_item_get (file, blocking); + ArtItem * item = art_item_get (file); if (! item) goto UNLOCK; @@ -250,12 +240,12 @@ UNLOCK: pthread_mutex_unlock (& mutex); } -const char * art_get_file_real (const char * file, bool_t blocking) +const char * art_request_file (const char * file) { const char * art_file = NULL; pthread_mutex_lock (& mutex); - ArtItem * item = art_item_get (file, blocking); + ArtItem * item = art_item_get (file); if (! item) goto UNLOCK; @@ -267,7 +257,7 @@ const char * art_get_file_real (const char * file, bool_t blocking) { item->art_file = filename_to_uri (unixname); item->is_temp = TRUE; - free (unixname); + str_unref (unixname); } } @@ -281,30 +271,6 @@ UNLOCK: return art_file; } -void art_request_data (const char * file, const void * * data, int64_t * len) -{ - return art_get_data_real (file, data, len, FALSE); -} - -const char * art_request_file (const char * file) -{ - return art_get_file_real (file, FALSE); -} - -void art_get_data (const char * file, const void * * data, int64_t * len) -{ - fprintf (stderr, "aud_art_get_data() is deprecated. Use " - "aud_art_request_data() instead.\n"); - return art_get_data_real (file, data, len, TRUE); -} - -const char * art_get_file (const char * file) -{ - fprintf (stderr, "aud_art_get_file() is deprecated. Use " - "aud_art_request_file() instead.\n"); - return art_get_file_real (file, TRUE); -} - void art_unref (const char * file) { pthread_mutex_lock (& mutex); |