Mercurial > audlegacy
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; |