libsaria: Replace add_track() and friends

I created simpler functions using the push_front() / push_back() names
that stl uses.  If we're a set-type playlist, then call the
insert_sorted function instead.  I also remove unnecessary bulk-inserts
of a single track.  Packing and unpacking a list each time seems stupid.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-09-14 15:56:21 -04:00
parent a8f18478fa
commit 0600556ca4
11 changed files with 46 additions and 66 deletions

View File

@ -49,6 +49,7 @@ namespace libsaria
unsigned int find_cur_index();
unsigned int find_index(Track *);
void add_track(Track *, unsigned int);
void insert_sorted(Track *);
void do_remove_tracks(list<Track *> &);
unsigned int remove_track_it(list<Track *>::iterator &it, unsigned int);
@ -60,8 +61,6 @@ namespace libsaria
Track *pick_random();
Track *pick_sequential();
void add_sorted(list<Track *> &);
void add_to_end(list<Track *> &);
void add_to_front(list<Track *> &);
public:
Playlist(string, unsigned int, PlaylistType);
@ -69,6 +68,10 @@ namespace libsaria
void set_renderer(PlaylistRenderer *);
PlaylistRenderer *get_renderer();
void push_front(Track *);
void push_back(Track *);
void push_back(list<Track *> &);
void save(ofstream &);
bool is_static();
bool is_disabled();
@ -87,9 +90,6 @@ namespace libsaria
unsigned int get_length();
PlaylistType get_type();
virtual void do_add_tracks(list<Track *> &) = 0;
void add_tracks(list<Track *> &);
void add_track(Track *);
void remove_indices(list<unsigned int> &);
void remove_track(Track *);
void track_updated(Track *);
@ -103,7 +103,6 @@ namespace libsaria
~Set();
Track *next();
void do_add_tracks(list<Track *> &);
};
@ -114,7 +113,6 @@ namespace libsaria
~Queue();
Track *next();
void do_add_tracks(list<Track *> &);
};
@ -125,7 +123,6 @@ namespace libsaria
~Stack();
Track *next();
void do_add_tracks(list<Track *> &);
};

View File

@ -15,26 +15,20 @@ namespace libsaria
void ban::track_banned(Track *track)
{
list<Track *> tracks;
tracks.push_back(track);
/* Remove from library playlist */
library::get_playlist()->remove_track(track);
/* Add to banned list */
banned_plist.add_tracks(tracks);
banned_plist.push_back(track);
}
void ban::track_unbanned(Track *track)
{
list<Track *> tracks;
tracks.push_back(track);
/* Remove from banned list */
banned_plist.remove_track(track);
/* Add to library playlist */
library::get_playlist()->add_tracks(tracks);
library::get_playlist()->push_back(track);
}
}

View File

@ -95,8 +95,8 @@ void read_path(ifstream &stream)
libsaria::notify(PATH_UPDATED, path_ptr);
if (path.visible) {
lib_playlist.add_tracks(tracks);
libsaria::ban::get_banned_plist()->add_tracks(banned);
lib_playlist.push_back(tracks);
libsaria::ban::get_banned_plist()->push_back(banned);
}
}

View File

@ -142,8 +142,8 @@ namespace libsaria
struct sort_data sort;
path->tracks.for_each_item(sort_tracks, &sort);
lib_playlist.add_tracks(sort.tracks);
ban::get_banned_plist()->add_tracks(sort.banned);
lib_playlist.push_back(sort.tracks);
ban::get_banned_plist()->push_back(sort.banned);
path->visible = true;
path->data_state = DIRTY;

View File

@ -111,7 +111,7 @@ void ScanTask::run_task()
try {
li = path->tracks.push_back(libsaria::Track(*it, path));
lib_playlist.add_track(&li->get_value());
lib_playlist.push_back(&li->get_value());
path->data_state = DIRTY;
} catch (string message) {
println(message);

View File

@ -20,6 +20,9 @@ namespace libsaria
notify_ui(PLAYLIST_ADD, track, ins_index);
notify_ui(PLAYLIST_SIZE, NULL, 0);
data_state = DIRTY;
schedule_save();
if (plist.size() == 1)
cur = plist.begin();
}
unsigned int Playlist::remove_track_it(list<Track *>::iterator &it,
@ -108,41 +111,42 @@ namespace libsaria
}
}
void Playlist::add_to_end(list<Track *> &tracks)
void Playlist::push_front(Track *track)
{
list<Track *>::iterator it;
unsigned int index = 0;
plist.push_front(track);
for (it = tracks.begin(); it != tracks.end(); it++) {
plist.push_back(*it);
add_track(*it, plist.size());
};
if (type == PLIST_SET) {
plist.sort();
index = find_index(track);
}
add_track(track, index);
}
void Playlist::add_to_front(list<Track *> &tracks)
void Playlist::push_back(Track *track)
{
unsigned int index = plist.size() + 1;
plist.push_back(track);
if (type == PLIST_SET) {
plist.sort();
index = find_index(track);
}
add_track(track, index);
}
void Playlist::push_back(list<Track *> &tracks)
{
list<Track *>::iterator it;
tracks.reverse();
for (it = tracks.begin(); it != tracks.end(); it++) {
plist.push_front(*it);
add_track(*it, 0);
if (type == PLIST_SET)
add_sorted(tracks);
else {
for (it = tracks.begin(); it != tracks.end(); it++)
push_back(*it);
if (plist.size() == tracks.size())
cur = plist.begin();
}
}
void Playlist::add_tracks(list<Track *> &tracks)
{
do_add_tracks(tracks);
schedule_save();
if (plist.size() == tracks.size())
cur = plist.begin();
}
void Playlist::add_track(Track *track)
{
list<Track *> tracks;
tracks.push_back(track);
do_add_tracks(tracks);
schedule_save();
}
}; /* namespace: libsaria */

View File

@ -130,7 +130,7 @@ namespace libsaria
renumber_playlists();
plist->add_tracks(tracks);
plist->push_back(tracks);
return plist;
}
@ -174,7 +174,7 @@ namespace libsaria
void deck::list_recent(Track *track)
{
recent_plist.remove_track(track);
recent_plist.add_track(track);
recent_plist.push_front(track);
recent_plist.reset_iterator();
}

View File

@ -16,11 +16,6 @@ namespace libsaria
{
}
void Queue::do_add_tracks(list<Track *> &tracks)
{
add_to_end(tracks);
}
Track *Queue::next()
{
return pick_sequential();

View File

@ -16,11 +16,6 @@ namespace libsaria
{
}
void Set::do_add_tracks(list<Track *> &tracks)
{
add_sorted(tracks);
}
Track *Set::next()
{
return pick_random();

View File

@ -16,11 +16,6 @@ namespace libsaria
{
}
void Stack::do_add_tracks(list<Track *> &tracks)
{
add_to_front(tracks);
}
Track *Stack::next()
{
return pick_sequential();

View File

@ -216,7 +216,7 @@ static bool add_to_playlist(GtkTreeView *treeview, int n)
playlist = libsaria::deck::get_playlist(n);
if (playlist)
playlist->add_tracks(tracks);
playlist->push_back(tracks);
return true;
}