summaryrefslogtreecommitdiff
path: root/src/audacious/art.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/audacious/art.c')
-rw-r--r--src/audacious/art.c66
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);