# HG changeset patch # User nenolod # Date 1178900282 25200 # Node ID af586df84c9bc5f6400c16f67bd8914e2bc24131 # Parent 177d47add6ddbd205b6f23ec5fad665ff26088c7 [svn] - lets avoid spawning >1 threads for metadata diff -r 177d47add6dd -r af586df84c9b ChangeLog --- a/ChangeLog Fri May 11 06:08:46 2007 -0700 +++ b/ChangeLog Fri May 11 09:18:02 2007 -0700 @@ -1,3 +1,12 @@ +2007-05-11 13:08:46 +0000 Cristi Magherusan + revision [2190] + lastfn's metadata seems to wotk, but still it has some glitches + enjoy! + + trunk/src/lastfm/lastfm.c | 179 +++++++++++++++++++++++++--------------------- + 1 file changed, 101 insertions(+), 78 deletions(-) + + 2007-05-11 08:15:39 +0000 Yoshiki Yazawa revision [2188] import major update by Aleksander Djuric (the original author). diff -r 177d47add6dd -r af586df84c9b src/lastfm/lastfm.c --- a/src/lastfm/lastfm.c Fri May 11 06:08:46 2007 -0700 +++ b/src/lastfm/lastfm.c Fri May 11 09:18:02 2007 -0700 @@ -24,7 +24,7 @@ #include #include "lastfm.h" - +GThread *metadata_thread = NULL; LastFM *LastFMGlobalData; /*this keeps the login data in a global place since * we cannot login on every fopen call* if anyone @@ -142,7 +142,7 @@ return ret; } -static void * lastfm_get_metadata(LastFM * handle) +static void *lastfm_get_metadata(LastFM * handle) { gint status, i; @@ -153,7 +153,7 @@ return NULL; snprintf(tmp, sizeof(tmp), LASTFM_METADATA_URL, handle->lastfm_session_id); - gboolean opened_file=TRUE; + gboolean opened_file = TRUE; while (opened_file) { handle->lastfm_duration = 0; @@ -223,21 +223,20 @@ #endif sleep(sleep_time); - if(handle->proxy_fd==NULL) - opened_file=FALSE; + if (handle->proxy_fd == NULL) + opened_file = FALSE; } #ifdef DEBUG - g_print("Exiting a thread\n"); + g_print("Exiting a thread\n"); #endif - return NULL; + return NULL; } VFSFile *lastfm_vfs_fopen_impl(const gchar * path, const gchar * mode) { - static GThread * th; VFSFile *file; LastFM *handle; file = g_new0(VFSFile, 1); @@ -258,9 +257,9 @@ handle->lastfm_session_id = g_strdup(LastFMGlobalData->lastfm_session_id); handle->lastfm_station_name = g_strdup(LastFMGlobalData->lastfm_station_name); - if (lastfm_adjust(path)) + if (lastfm_adjust(path) && metadata_thread == NULL) { - if((th= g_thread_create(lastfm_get_metadata, handle, FALSE, NULL))==NULL) + if ((metadata_thread = g_thread_create(lastfm_get_metadata, handle, FALSE, NULL)) == NULL) { #ifdef DEBUG g_print("Error creating metadata thread!!!\n"); @@ -273,94 +272,94 @@ #endif } #ifdef DEBUG - else - g_print("Cannot tune to given channel\n"); + else + g_print("Cannot tune to given channel\n"); #endif - handle->proxy_fd = vfs_fopen(handle->lastfm_mp3_stream_url, mode); - file->handle = handle; + handle->proxy_fd = vfs_fopen(handle->lastfm_mp3_stream_url, mode); + file->handle = handle; - return file; - } + return file; +} - gint lastfm_vfs_fclose_impl(VFSFile * file) - { - gint ret = 0; +gint lastfm_vfs_fclose_impl(VFSFile * file) +{ + gint ret = 0; - if (file == NULL) - return -1; + if (file == NULL) + return -1; - LastFM *handle = file->handle; - ret = vfs_fclose(handle->proxy_fd); - if(!ret) - handle->proxy_fd=NULL; + LastFM *handle = file->handle; + ret = vfs_fclose(handle->proxy_fd); + if (!ret) + handle->proxy_fd = NULL; - return ret; - } + return ret; +} - size_t lastfm_vfs_fread_impl(gpointer ptr, size_t size, size_t nmemb, VFSFile * file) - { +size_t lastfm_vfs_fread_impl(gpointer ptr, size_t size, size_t nmemb, VFSFile * file) +{ - LastFM *handle = file->handle; - size_t ret = vfs_fread(ptr, size, nmemb, handle->proxy_fd); - return ret; - } + LastFM *handle = file->handle; + size_t ret = vfs_fread(ptr, size, nmemb, handle->proxy_fd); + return ret; +} - size_t lastfm_vfs_fwrite_impl(gconstpointer ptr, size_t size, size_t nmemb, VFSFile * file) - { - return -1; - } +size_t lastfm_vfs_fwrite_impl(gconstpointer ptr, size_t size, size_t nmemb, VFSFile * file) +{ + return -1; +} - gint lastfm_vfs_getc_impl(VFSFile * stream) - { - LastFM *handle = stream->handle; - return vfs_getc(handle->proxy_fd); - } +gint lastfm_vfs_getc_impl(VFSFile * stream) +{ + LastFM *handle = stream->handle; + return vfs_getc(handle->proxy_fd); +} - gint lastfm_vfs_ungetc_impl(gint c, VFSFile * stream) - { - LastFM *handle = stream->handle; +gint lastfm_vfs_ungetc_impl(gint c, VFSFile * stream) +{ + LastFM *handle = stream->handle; - return vfs_ungetc(c, handle->proxy_fd); - } + return vfs_ungetc(c, handle->proxy_fd); +} - gint lastfm_vfs_fseek_impl(VFSFile * file, glong offset, gint whence) - { - return -1; - } +gint lastfm_vfs_fseek_impl(VFSFile * file, glong offset, gint whence) +{ + return -1; +} - void lastfm_vfs_rewind_impl(VFSFile * file) - { - return; - } +void lastfm_vfs_rewind_impl(VFSFile * file) +{ + return; +} - glong lastfm_vfs_ftell_impl(VFSFile * file) - { - LastFM *handle = file->handle; +glong lastfm_vfs_ftell_impl(VFSFile * file) +{ + LastFM *handle = file->handle; - return vfs_ftell(handle->proxy_fd); - } + return vfs_ftell(handle->proxy_fd); +} - gboolean lastfm_vfs_feof_impl(VFSFile * file) - { - LastFM *handle = file->handle; +gboolean lastfm_vfs_feof_impl(VFSFile * file) +{ + LastFM *handle = file->handle; - return vfs_feof(handle->proxy_fd); - } + return vfs_feof(handle->proxy_fd); +} - gint lastfm_vfs_truncate_impl(VFSFile * file, glong size) - { - return -1; - } +gint lastfm_vfs_truncate_impl(VFSFile * file, glong size) +{ + return -1; +} - off_t lastfm_vfs_fsize_impl(VFSFile * file) - { - return -1; - } +off_t lastfm_vfs_fsize_impl(VFSFile * file) +{ + return -1; +} - gchar *lastfm_vfs_metadata_impl(VFSFile * file, const gchar * field) - { +gchar *lastfm_vfs_metadata_impl(VFSFile * file, const gchar * field) +{ LastFM *handle = file->handle; #ifdef DEBUG @@ -382,7 +381,7 @@ return g_strdup(handle->lastfm_station_name); if (!g_ascii_strncasecmp(field, "track-name", 10) && (handle->lastfm_title != NULL) && (handle->lastfm_artist != NULL)) return g_strdup_printf("%s - %s", handle->lastfm_artist, handle->lastfm_title); - if (!g_ascii_strncasecmp(field, "content-length",14)) + if (!g_ascii_strncasecmp(field, "content-length", 14)) return g_strdup_printf("%d", handle->lastfm_duration);