File src/action.cpp changed (mode: 100644) (index 4fef9d6..6bf1816) |
... |
... |
long Interface::crop(int crop_mode) |
980 |
980 |
long |
long |
981 |
981 |
Interface::remove(Songlist * list) |
Interface::remove(Songlist * list) |
982 |
982 |
{ |
{ |
983 |
|
Song * song; |
|
984 |
|
vector<Song *> songs; |
|
985 |
|
vector<Song *>::iterator i; |
|
|
983 |
|
Song * song; |
|
984 |
|
vector<Song *> songs; |
|
985 |
|
vector<Song *>::reverse_iterator i; |
986 |
986 |
|
|
987 |
987 |
/* FIXME: this check should, perhaps, be done earlier? */ |
/* FIXME: this check should, perhaps, be done earlier? */ |
988 |
988 |
if (!list) { |
if (!list) { |
|
... |
... |
Interface::remove(Songlist * list) |
1000 |
1000 |
songs.push_back(song); |
songs.push_back(song); |
1001 |
1001 |
} |
} |
1002 |
1002 |
|
|
1003 |
|
i = songs.begin(); |
|
1004 |
|
while (i != songs.end()) { |
|
|
1003 |
|
i = songs.rbegin(); |
|
1004 |
|
while (i != songs.rend()) { |
1005 |
1005 |
if (!pms->comm->remove(list, *i)) { |
if (!pms->comm->remove(list, *i)) { |
1006 |
1006 |
return STERR; |
return STERR; |
1007 |
1007 |
} |
} |
File src/list.cpp changed (mode: 100644) (index 1095527..887f695) |
1 |
|
/* vi:set ts=8 sts=8 sw=8: |
|
|
1 |
|
/* vi:set ts=8 sts=8 sw=8 noet: |
2 |
2 |
* |
* |
3 |
3 |
* PMS <<Practical Music Search>> |
* PMS <<Practical Music Search>> |
4 |
4 |
* Copyright (C) 2006-2010 Kim Tore Jensen |
* Copyright (C) 2006-2010 Kim Tore Jensen |
|
... |
... |
void Songlist::filter_remove(Filter * f) |
373 |
373 |
/* |
/* |
374 |
374 |
* Clear out the filter list |
* Clear out the filter list |
375 |
375 |
*/ |
*/ |
376 |
|
void Songlist::filter_clear() |
|
|
376 |
|
void |
|
377 |
|
Songlist::filter_clear() |
377 |
378 |
{ |
{ |
378 |
379 |
vector<Filter *>::iterator it; |
vector<Filter *>::iterator it; |
379 |
380 |
unsigned int i; |
unsigned int i; |
380 |
381 |
|
|
|
382 |
|
if (!filters.size() && filtersongs.size() == songs.size()) { |
|
383 |
|
return; |
|
384 |
|
} |
|
385 |
|
|
381 |
386 |
pms->log(MSG_DEBUG, STOK, "Deleting all filters...\n"); |
pms->log(MSG_DEBUG, STOK, "Deleting all filters...\n"); |
382 |
387 |
|
|
383 |
388 |
it = filters.begin(); |
it = filters.begin(); |
384 |
|
while (it != filters.end()) |
|
385 |
|
{ |
|
|
389 |
|
while (it != filters.end()) { |
386 |
390 |
delete *it; |
delete *it; |
387 |
391 |
++it; |
++it; |
388 |
392 |
} |
} |
389 |
393 |
|
|
390 |
394 |
filters.clear(); |
filters.clear(); |
391 |
|
filtersongs.clear(); |
|
392 |
|
|
|
393 |
|
for (i = 0; i < songs.size(); i++) |
|
394 |
|
{ |
|
395 |
|
// songs[i]->pos = i; |
|
396 |
|
filtersongs.push_back(songs[i]); |
|
397 |
|
} |
|
|
395 |
|
filtersongs = songs; |
398 |
396 |
} |
} |
399 |
397 |
|
|
400 |
398 |
/* |
/* |
|
... |
... |
song_t Songlist::add(Songlist * list) |
489 |
487 |
song_t |
song_t |
490 |
488 |
Songlist::add(Song * song) |
Songlist::add(Song * song) |
491 |
489 |
{ |
{ |
492 |
|
vector<Song *>::iterator i; |
|
|
490 |
|
assert(song != NULL); |
493 |
491 |
|
|
494 |
|
assert(song != NULL); |
|
495 |
|
|
|
496 |
492 |
if (song->pos == MPD_SONG_NO_NUM || song->pos == static_cast<song_t>(songs.size())) |
if (song->pos == MPD_SONG_NO_NUM || song->pos == static_cast<song_t>(songs.size())) |
497 |
493 |
{ |
{ |
498 |
494 |
songs.push_back(song); |
songs.push_back(song); |
|
... |
... |
Songlist::add(Song * song) |
502 |
498 |
} |
} |
503 |
499 |
else |
else |
504 |
500 |
{ |
{ |
505 |
|
/* FIXME: random crash here? */ |
|
|
501 |
|
/* FIXME: fast way of updating filters instead of disabling |
|
502 |
|
* them - maybe some kind of lazy evaluation? */ |
|
503 |
|
filter_clear(); |
|
504 |
|
|
|
505 |
|
/* FIXME: random crash here? */ |
506 |
506 |
if (songs[song->pos]->pos == song->pos) { |
if (songs[song->pos]->pos == song->pos) { |
507 |
|
assert(remove(song) == true); |
|
|
507 |
|
if(!remove(songs[song->pos])) { |
|
508 |
|
return -1; |
|
509 |
|
} |
508 |
510 |
} |
} |
509 |
511 |
|
|
510 |
|
i = songs.begin() + song->pos; |
|
511 |
|
songs.insert(i, song); |
|
|
512 |
|
songs.insert(songs.begin() + song->pos, song); |
|
513 |
|
filtersongs.insert(filtersongs.begin() + song->pos, song); |
512 |
514 |
|
|
513 |
515 |
/* FIXME: filtersongs does not get updated because of ->pos mismatch, but do we need it anyway? */ |
/* FIXME: filtersongs does not get updated because of ->pos mismatch, but do we need it anyway? */ |
514 |
516 |
} |
} |
515 |
517 |
|
|
516 |
|
/* FIXME: new function */ |
|
|
518 |
|
/* FIXME: new function */ |
517 |
519 |
if (song->time != MPD_SONG_NO_TIME) { |
if (song->time != MPD_SONG_NO_TIME) { |
518 |
520 |
length += song->time; |
length += song->time; |
519 |
521 |
} |
} |
520 |
522 |
|
|
521 |
|
/* FIXME */ |
|
|
523 |
|
/* FIXME */ |
522 |
524 |
seliter = filtersongs.begin(); |
seliter = filtersongs.begin(); |
523 |
525 |
rseliter = filtersongs.rbegin(); |
rseliter = filtersongs.rbegin(); |
524 |
526 |
|
|
|
... |
... |
Songlist::add(Song * song) |
533 |
535 |
bool |
bool |
534 |
536 |
Songlist::remove(Song * song) |
Songlist::remove(Song * song) |
535 |
537 |
{ |
{ |
536 |
|
assert(song != NULL); |
|
|
538 |
|
assert(song != NULL); |
537 |
539 |
|
|
538 |
540 |
selectsong(song, false); |
selectsong(song, false); |
539 |
541 |
|
|
540 |
542 |
if (song->pos == MPD_SONG_NO_NUM) { |
if (song->pos == MPD_SONG_NO_NUM) { |
541 |
543 |
return remove(match(song->file, 0, filtersongs.size() - 1, MATCH_FILE)); |
return remove(match(song->file, 0, filtersongs.size() - 1, MATCH_FILE)); |
542 |
|
} |
|
|
544 |
|
} |
543 |
545 |
|
|
544 |
|
return remove(song->pos); |
|
|
546 |
|
return remove(song->pos); |
545 |
547 |
} |
} |
546 |
548 |
|
|
547 |
549 |
/* |
/* |
|
... |
... |
Songlist::remove(int songpos) |
569 |
571 |
|
|
570 |
572 |
it = songs.begin() + realsongpos; |
it = songs.begin() + realsongpos; |
571 |
573 |
it = songs.erase(it); |
it = songs.erase(it); |
572 |
|
while (it != songs.end()) |
|
573 |
|
{ |
|
574 |
|
--(*it)->pos; |
|
575 |
|
++it; |
|
|
574 |
|
|
|
575 |
|
if (role != LIST_ROLE_MAIN) { |
|
576 |
|
while (it != songs.end()) |
|
577 |
|
{ |
|
578 |
|
--(*it)->pos; |
|
579 |
|
++it; |
|
580 |
|
} |
576 |
581 |
} |
} |
577 |
582 |
|
|
578 |
583 |
it = filtersongs.begin() + songpos; |
it = filtersongs.begin() + songpos; |