# HG changeset patch # User Jonathan Schleifer # Date 1190768564 -7200 # Node ID e9852ec75c5cfaf49f6d4a5223d089ef7ca22a45 # Parent 12500701b6dd2eae055fca02c52fe5a8f20f1a6f# Parent d5309028af21a441ff2c6a6a49ae0f136f02eaa6 Automated merge with ssh://sidhe.atheme.org//hg/audacious diff -r 12500701b6dd -r e9852ec75c5c src/audacious/playlist.c --- a/src/audacious/playlist.c Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/playlist.c Wed Sep 26 03:02:44 2007 +0200 @@ -205,16 +205,15 @@ g_thread_self() != playlist_get_info_thread) return FALSE; - if (entry->decoder == NULL) - { + if (entry->decoder == NULL) { pr = input_check_file(entry->filename, FALSE); if (pr) - entry->decoder = pr->ip; + entry->decoder = pr->ip; } /* renew tuple if file mtime is newer than tuple mtime. */ - if(entry->tuple){ - if(tuple_get_int(entry->tuple, FIELD_MTIME, NULL) == modtime) + if (entry->tuple){ + if (tuple_get_int(entry->tuple, FIELD_MTIME, NULL) == modtime) return TRUE; else { mowgli_object_unref(entry->tuple); @@ -371,18 +370,17 @@ gboolean playlist_set_current_name(Playlist *playlist, const gchar * title) { - gchar *oldtitle; - oldtitle = playlist->title; + gchar *oldtitle = playlist->title; if (!title) { playlist->title = NULL; - if(oldtitle) g_free(oldtitle); + g_free(oldtitle); playlist_manager_update(); return FALSE; } playlist->title = str_to_utf8(title); - if(oldtitle) g_free(oldtitle); + g_free(oldtitle); playlist_manager_update(); return TRUE; } @@ -394,21 +392,21 @@ gchar *old; old = playlist->filename; - if(!filename) { + if (!filename) { playlist->filename = NULL; - if(old) g_free(old); + g_free(old); return FALSE; } playlist->filename = filename_to_utf8(filename); - if(old) g_free(old); + g_free(old); return TRUE; } gchar * playlist_filename_get(Playlist *playlist) { - if(!playlist->filename) return NULL; + if (!playlist->filename) return NULL; return g_filename_from_utf8(playlist->filename, -1, NULL, NULL, NULL); } @@ -435,7 +433,7 @@ { GList *tmp = playlist->queue; - REQUIRE_LOCK( playlist->mutex ); + REQUIRE_LOCK(playlist->mutex); playlist->position = playlist->queue->data; playlist->queue = g_list_remove_link(playlist->queue, playlist->queue); @@ -556,9 +554,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlist_manager_update(); @@ -594,9 +591,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlist_manager_update(); @@ -634,9 +630,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlistwin_update_list(playlist); @@ -673,33 +668,34 @@ InputPlugin * dec) { PlaylistEntry *entry; - gint subtunes_num = 0, i = 0; + Tuple *main_tuple = NULL; + gint nsubtunes = 0, i = 0; + gboolean add_flag = TRUE; g_return_if_fail(playlist != NULL); g_return_if_fail(filename != NULL); - if (tuple != NULL) - { - subtunes_num = tuple_get_int(tuple, FIELD_SUBSONG_NUM, NULL); - if (subtunes_num > 0) - { + if (tuple != NULL) { + nsubtunes = tuple->nsubtunes; + if (nsubtunes > 0) { + main_tuple = tuple; i = 1; - tuple_free(tuple); /* will be replaced by subtune tuples */ } } - for (; i <= subtunes_num; i++) - { + for (; add_flag && i <= nsubtunes; i++) { gchar *filename_entry; - if (subtunes_num > 0) - { - filename_entry = g_strdup_printf("%s?%d", filename, i); - /* we're dealing with subtune, let's ask again tuple information - to plugin, by passing the ?subsong suffix; this way we may get - specific subtune information in the tuple, if available */ + + if (nsubtunes > 0) { + filename_entry = g_strdup_printf("%s?%d", filename, + main_tuple->subtunes ? main_tuple->subtunes[i] : i); + + /* We're dealing with subtune, let's ask again tuple information + * to plugin, by passing the ?subtune suffix; this way we get + * specific subtune information in the tuple, if available. + */ tuple = dec->get_song_tuple(filename_entry); - } - else + } else filename_entry = g_strdup(filename); @@ -708,7 +704,7 @@ tuple ? tuple_get_int(tuple, FIELD_LENGTH, NULL) : -1, dec); g_free(filename_entry); - if(!playlist->tail) + if (!playlist->tail) playlist->tail = g_list_last(playlist->entries); PLAYLIST_LOCK(playlist); @@ -723,14 +719,14 @@ if(!playlist->entries) { // this is the first element playlist->entries = element; playlist->tail = element; + } else { // the rests + if (playlist->tail != NULL) { + playlist->tail->next = element; + playlist->tail = element; + } else + add_flag = FALSE; } - else { // the rests - g_return_if_fail(playlist->tail != NULL); - playlist->tail->next = element; - playlist->tail = element; - } - } - else { + } else { playlist->entries = g_list_insert(playlist->entries, entry, pos); } @@ -738,14 +734,18 @@ if (tuple != NULL) { const gchar *formatter = tuple_get_string(tuple, FIELD_FORMATTER, NULL); - entry->title = tuple_formatter_make_title_string(tuple, formatter ? - formatter : get_gentitle_format()); + entry->title = tuple_formatter_make_title_string(tuple, + formatter ? formatter : get_gentitle_format()); entry->length = tuple_get_int(tuple, FIELD_LENGTH, NULL); entry->tuple = tuple; } } - - if(tuple != NULL && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1) { // kick the scanner thread only if mtime = -1 (uninitialized). + + if (main_tuple) + tuple_free(main_tuple); + + if (tuple != NULL && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1) { + // kick the scanner thread only if mtime = -1 (uninitialized) g_mutex_lock(mutex_scan); playlist_get_info_scan_active = TRUE; g_mutex_unlock(mutex_scan); @@ -776,21 +776,20 @@ if (playlist->loading_playlist == TRUE || cfg.playlist_detect == TRUE) dec = NULL; else if (!str_has_prefix_nocase(filename, "http://") && - !str_has_prefix_nocase(filename, "https://")) - { + !str_has_prefix_nocase(filename, "https://")) { pr = input_check_file(filename, TRUE); - if (pr) - { + if (pr) { dec = pr->ip; tuple = pr->tuple; } - g_free(pr); } - if (cfg.playlist_detect == TRUE || playlist->loading_playlist == TRUE || (playlist->loading_playlist == FALSE && dec != NULL) || (playlist->loading_playlist == FALSE && !is_playlist_name(filename) && str_has_prefix_nocase(filename, "http"))) - { + if (cfg.playlist_detect == TRUE || playlist->loading_playlist == TRUE || + (playlist->loading_playlist == FALSE && dec != NULL) || + (playlist->loading_playlist == FALSE && !is_playlist_name(filename) && + str_has_prefix_nocase(filename, "http"))) { __playlist_ins_with_info_tuple(playlist, filename, pos, tuple, dec); playlist_generate_shuffle_list(playlist); playlistwin_update_list(playlist); @@ -812,7 +811,7 @@ if (!vfs_file_test(filename, G_FILE_TEST_IS_REGULAR)) return FALSE; - if (!(file = vfs_fopen(filename, "rb"))) + if ((file = vfs_fopen(filename, "rb")) == NULL) return FALSE; r = vfs_fread(buf, 1, sizeof(buf), file); @@ -848,8 +847,7 @@ { DeviceInode *devino = g_new0(DeviceInode, 1); - if (devino) - { + if (devino) { devino->dev = device; devino->ino = inode; } @@ -1112,7 +1110,7 @@ playlist->position->length = length; // overwrite tuple::title, mainly for streaming. it may incur side effects. --yaz - if(playlist->position->tuple && tuple_get_int(playlist->position->tuple, FIELD_LENGTH, NULL) == -1){ + if (playlist->position->tuple && tuple_get_int(playlist->position->tuple, FIELD_LENGTH, NULL) == -1){ tuple_disassociate(playlist->position->tuple, FIELD_TITLE, NULL); tuple_associate_string(playlist->position->tuple, FIELD_TITLE, NULL, title); } @@ -1151,7 +1149,7 @@ mainwin_set_song_info(rate, freq, nch); - if ( playlist->position ) + if (playlist->position) hook_call( "playlist set info" , playlist->position ); } @@ -1189,13 +1187,13 @@ { GList *plist_pos_list; gboolean restart_playing = FALSE; + if (!playlist_get_length(playlist)) return; PLAYLIST_LOCK(playlist); - if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) - { + if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) { playlist->position = playlist_position_before_jump; playlist_position_before_jump = NULL; } @@ -1230,7 +1228,9 @@ else playlist->position = playlist->entries->data; } + PLAYLIST_UNLOCK(playlist); + playlist_check_pos_current(playlist); if (restart_playing) @@ -1251,8 +1251,7 @@ PLAYLIST_LOCK(playlist); - if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) - { + if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) { playlist->position = playlist_position_before_jump; playlist_position_before_jump = NULL; } @@ -1310,8 +1309,7 @@ PLAYLIST_LOCK(playlist); - if ((cfg.shuffle) && (playlist_position_before_jump == NULL)) - { + if ((cfg.shuffle) && (playlist_position_before_jump == NULL)) { /* Shuffling and this is our first manual jump. */ playlist_position_before_jump = playlist->position; } @@ -1586,13 +1584,11 @@ title = str_to_utf8(playlist->position->title); } else { - gchar *realfn = NULL; - gchar *basename = NULL; - realfn = g_filename_from_uri(playlist->position->filename, NULL, NULL); - basename = g_path_get_basename(realfn ? realfn : playlist->position->filename); + gchar *realfn = g_filename_from_uri(playlist->position->filename, NULL, NULL); + gchar *basename = g_path_get_basename(realfn ? realfn : playlist->position->filename); title = filename_to_utf8(basename); - g_free(realfn); realfn = NULL; - g_free(basename); basename = NULL; + g_free(realfn); + g_free(basename); } /* @@ -1702,7 +1698,7 @@ filename = g_strchug(g_strdup(filename_p)); - if(cfg.convert_slash) + if (cfg.convert_slash) while ((tmp = strchr(filename, '\\')) != NULL) *tmp = '/'; @@ -1770,7 +1766,7 @@ filename = g_strchug(g_strdup(filename_p)); - if(cfg.convert_slash) + if (cfg.convert_slash) while ((tmp = strchr(filename, '\\')) != NULL) *tmp = '/'; @@ -2005,9 +2001,8 @@ if (!playlist) return -1; - if (!(node = g_list_nth(playlist->entries, pos))) { + if (!(node = g_list_nth(playlist->entries, pos))) return -1; - } entry = node->data; @@ -2021,10 +2016,8 @@ if (playlist_entry_get_info(entry)) song_time = entry->length; - } - else { + } else song_time = entry->length; - } return song_time; } @@ -2056,6 +2049,19 @@ tracknumber_a - tracknumber_b : 0); } +static void +playlist_get_entry_title(PlaylistEntry * e, const gchar ** title) +{ + if (e->title) + *title = e->title; + else { + if (strrchr(e->filename, '/')) + *title = strrchr(e->filename, '/') + 1; + else + *title = e->filename; + } +} + static gint playlist_compare_playlist(PlaylistEntry * a, PlaylistEntry * b) @@ -2064,24 +2070,9 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - - if (a->title != NULL) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title != NULL) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcasecmp(a_title, b_title); } @@ -2095,9 +2086,9 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - if(!a->tuple) + if (a->tuple == NULL) playlist_entry_get_info(a); - if(!b->tuple) + if (b->tuple == NULL) playlist_entry_get_info(b); if (a->tuple != NULL) @@ -2108,23 +2099,8 @@ if (a_title != NULL && b_title != NULL) return strcasecmp(a_title, b_title); - if (a->title != NULL) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title != NULL) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcasecmp(a_title, b_title); } @@ -2827,23 +2803,8 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - if (a->title) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcmp(a_title, b_title); } diff -r 12500701b6dd -r e9852ec75c5c src/audacious/playlist_container.c --- a/src/audacious/playlist_container.c Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/playlist_container.c Wed Sep 26 03:02:44 2007 +0200 @@ -40,7 +40,7 @@ registered_plcs = g_list_remove(registered_plcs, plc); } -PlaylistContainer *playlist_container_find(char *ext) +PlaylistContainer *playlist_container_find(gchar *ext) { GList *node; PlaylistContainer *plc; @@ -58,9 +58,9 @@ return NULL; } -void playlist_container_read(char *filename, gint pos) +void playlist_container_read(gchar *filename, gint pos) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc->plc_read == NULL) @@ -69,9 +69,9 @@ plc->plc_read(filename, pos); } -void playlist_container_write(char *filename, gint pos) +void playlist_container_write(gchar *filename, gint pos) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc->plc_write == NULL) @@ -80,9 +80,9 @@ plc->plc_write(filename, pos); } -gboolean is_playlist_name(char *filename) +gboolean is_playlist_name(gchar *filename) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc != NULL) diff -r 12500701b6dd -r e9852ec75c5c src/audacious/playlist_container.h --- a/src/audacious/playlist_container.h Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/playlist_container.h Wed Sep 26 03:02:44 2007 +0200 @@ -25,8 +25,8 @@ G_BEGIN_DECLS struct _PlaylistContainer { - char *name; /* human-readable name */ - char *ext; /* extension */ + gchar *name; /* human-readable name */ + gchar *ext; /* extension */ void (*plc_read)(const gchar *filename, gint pos); /* plc_load */ void (*plc_write)(const gchar *filename, gint pos); /* plc_write */ }; @@ -37,9 +37,9 @@ extern void playlist_container_register(PlaylistContainer *plc); extern void playlist_container_unregister(PlaylistContainer *plc); -extern void playlist_container_read(char *filename, gint pos); -extern void playlist_container_write(char *filename, gint pos); -extern PlaylistContainer *playlist_container_find(char *ext); +extern void playlist_container_read(gchar *filename, gint pos); +extern void playlist_container_write(gchar *filename, gint pos); +extern PlaylistContainer *playlist_container_find(gchar *ext); G_END_DECLS diff -r 12500701b6dd -r e9852ec75c5c src/audacious/tuple.c --- a/src/audacious/tuple.c Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/tuple.c Wed Sep 26 03:02:44 2007 +0200 @@ -112,6 +112,8 @@ mowgli_heap_free(tuple_value_heap, value); } + g_free(tuple->subtunes); + mowgli_heap_free(tuple_heap, tuple); TUPLE_UNLOCK_WRITE(); } diff -r 12500701b6dd -r e9852ec75c5c src/audacious/tuple.h --- a/src/audacious/tuple.h Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/tuple.h Wed Sep 26 03:02:44 2007 +0200 @@ -82,6 +82,8 @@ mowgli_object_t parent; mowgli_dictionary_t *dict; TupleValue *values[FIELD_LAST]; + gint nsubtunes; + gint *subtunes; } Tuple; diff -r 12500701b6dd -r e9852ec75c5c src/audacious/util.c --- a/src/audacious/util.c Wed Sep 26 03:02:23 2007 +0200 +++ b/src/audacious/util.c Wed Sep 26 03:02:44 2007 +0200 @@ -308,7 +308,7 @@ return NULL; } #else - tmpdir = g_strdup_printf("%s/audacious.%ld", g_get_tmp_dir(), rand()); + tmpdir = g_strdup_printf("%s/audacious.%ld", g_get_tmp_dir(), (long) rand()); make_directory(tmpdir, mode755); #endif