Mercurial > audlegacy
diff src/audacious/playlist.c @ 2548:68d1e9761cc5 trunk
[svn] - highly experimental code to speed up loading huge playlist. let me know if it breaks something.
author | yaz |
---|---|
date | Sun, 18 Feb 2007 20:42:53 -0800 |
parents | 610d85b8a22b |
children | ef59b072a5d2 |
line wrap: on
line diff
--- a/src/audacious/playlist.c Sun Feb 18 20:40:14 2007 -0800 +++ b/src/audacious/playlist.c Sun Feb 18 20:42:53 2007 -0800 @@ -615,22 +615,37 @@ TitleInput *tuple, InputPlugin * dec) { - GList *node; PlaylistEntry *entry; g_return_if_fail(playlist != NULL); g_return_if_fail(filename != NULL); + entry = playlist_entry_new(filename, tuple->track_name, tuple->length, dec); + if(!playlist->tail) + playlist->tail = g_list_last(playlist->entries); + PLAYLIST_LOCK(playlist->mutex); - playlist->entries = g_list_insert(playlist->entries, - playlist_entry_new(filename, tuple->track_name, tuple->length, dec), - pos); - - if (pos < 0) - pos = g_list_length(playlist->entries) - 1; /* last element. */ - - node = g_list_nth(playlist->entries, pos); - entry = PLAYLIST_ENTRY(node->data); + + if(pos == -1) { // the common case + GList *element; + element = g_list_alloc(); + element->data = entry; + element->prev = playlist->tail; // NULL is allowed here. + element->next = NULL; + + if(!playlist->entries) { // this is the first element + playlist->entries = element; + playlist->tail = element; + } + else { // the rests + g_return_if_fail(playlist->tail != NULL); + playlist->tail->next = element; + playlist->tail = element; + } + } + else { + playlist->entries = g_list_insert(playlist->entries, entry, pos); + } if (tuple != NULL) { entry->title = xmms_get_titlestring(tuple->formatter != NULL ? tuple->formatter : xmms_get_gentitle_format(), tuple);