libsaria: Choose the next song based on the random setting

If random is enabled, I choose a random song from the list.  If random
is disabled I choose the next song sequentially.
This commit is contained in:
Bryan Schumaker 2011-11-07 18:33:15 -05:00
parent e409c2317f
commit 258ebbc081
2 changed files with 25 additions and 3 deletions

View File

@ -1,8 +1,11 @@
#include <stdlib.h>
#include <time.h>
#include <list> #include <list>
using namespace std; using namespace std;
#include <libsaria/audio.h> #include <libsaria/audio.h>
#include <libsaria/prefs.h>
#include <libsaria/print.h> #include <libsaria/print.h>
#include "library.h" #include "library.h"
@ -76,6 +79,21 @@ static void insert_list(list<TrackTag> *tag_list)
play_list.push_back(&(*it)); play_list.push_back(&(*it));
} }
static void random_next()
{
unsigned int index = rand() % play_list.size();
cur_track = play_list.begin();
for (unsigned int i = 0; i < index; i++)
cur_track++;
}
static void sequential_next()
{
cur_track++;
if (cur_track == play_list.end())
cur_track = play_list.begin();
}
namespace libsaria namespace libsaria
{ {
@ -121,9 +139,10 @@ namespace libsaria
void library::next() void library::next()
{ {
cur_track++; if (libsaria::prefs::get_bool("random") == true)
if (cur_track == play_list.end()) random_next();
cur_track = play_list.begin(); else
sequential_next();
libsaria::audio::load((*cur_track)->get_filepath()); libsaria::audio::load((*cur_track)->get_filepath());
} }

View File

@ -1,4 +1,6 @@
#include <stdlib.h>
#include <libsaria/libsaria.h> #include <libsaria/libsaria.h>
#include <libsaria/audio.h> #include <libsaria/audio.h>
#include <libsaria/path.h> #include <libsaria/path.h>
@ -11,6 +13,7 @@ namespace libsaria
void init(int argc, char **argv) void init(int argc, char **argv)
{ {
srand( time(NULL) );
println("Initializing libsaria"); println("Initializing libsaria");
audio::init(argc, argv); audio::init(argc, argv);
print("saria dir: "); print("saria dir: ");