comparison 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
comparison
equal deleted inserted replaced
2547:8ac0dcad22e3 2548:68d1e9761cc5
613 const gchar * filename, 613 const gchar * filename,
614 gint pos, 614 gint pos,
615 TitleInput *tuple, 615 TitleInput *tuple,
616 InputPlugin * dec) 616 InputPlugin * dec)
617 { 617 {
618 GList *node;
619 PlaylistEntry *entry; 618 PlaylistEntry *entry;
620 619
621 g_return_if_fail(playlist != NULL); 620 g_return_if_fail(playlist != NULL);
622 g_return_if_fail(filename != NULL); 621 g_return_if_fail(filename != NULL);
623 622
624 PLAYLIST_LOCK(playlist->mutex); 623 entry = playlist_entry_new(filename, tuple->track_name, tuple->length, dec);
625 playlist->entries = g_list_insert(playlist->entries, 624 if(!playlist->tail)
626 playlist_entry_new(filename, tuple->track_name, tuple->length, dec), 625 playlist->tail = g_list_last(playlist->entries);
627 pos); 626
628 627 PLAYLIST_LOCK(playlist->mutex);
629 if (pos < 0) 628
630 pos = g_list_length(playlist->entries) - 1; /* last element. */ 629 if(pos == -1) { // the common case
631 630 GList *element;
632 node = g_list_nth(playlist->entries, pos); 631 element = g_list_alloc();
633 entry = PLAYLIST_ENTRY(node->data); 632 element->data = entry;
633 element->prev = playlist->tail; // NULL is allowed here.
634 element->next = NULL;
635
636 if(!playlist->entries) { // this is the first element
637 playlist->entries = element;
638 playlist->tail = element;
639 }
640 else { // the rests
641 g_return_if_fail(playlist->tail != NULL);
642 playlist->tail->next = element;
643 playlist->tail = element;
644 }
645 }
646 else {
647 playlist->entries = g_list_insert(playlist->entries, entry, pos);
648 }
634 649
635 if (tuple != NULL) { 650 if (tuple != NULL) {
636 entry->title = xmms_get_titlestring(tuple->formatter != NULL ? tuple->formatter : xmms_get_gentitle_format(), tuple); 651 entry->title = xmms_get_titlestring(tuple->formatter != NULL ? tuple->formatter : xmms_get_gentitle_format(), tuple);
637 entry->length = tuple->length; 652 entry->length = tuple->length;
638 entry->tuple = tuple; 653 entry->tuple = tuple;