libsaria: Divide scan file list into smaller chunks

Each chunk is given to a new ScanTask to process.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-03-17 13:59:48 -04:00
parent f5462da461
commit 230a31a5a7
2 changed files with 55 additions and 6 deletions

View File

@ -10,7 +10,7 @@
using namespace std;
#define MAX_SCAN 25
/*
class ScanTask : public IdleTask
{
private:
@ -32,7 +32,7 @@ class ScanTask : public IdleTask
void run_task();
};
/*
class ReaddirTask : public IdleTask
{
private:
@ -46,7 +46,7 @@ class ReaddirTask : public IdleTask
};
~ReaddirTask() {};
void run_task();
};*/
};
static ScanTask *scandir(string dir, libsaria::LibraryPath *lib_path, ScanTask *scan);
@ -66,7 +66,7 @@ void ScanTask::run_task()
}
if (dirty) {
/* Save the library */
*//* Save the library */
/*save = new IOTask(libsaria::library::save);
save->queue_front();*/
@ -74,7 +74,7 @@ void ScanTask::run_task()
/*libsaria::library::sort_list();
libsaria::index::refresh();
libsaria::library::refresh();*/
}
/*}
}
static inline ScanTask *scan_entry(struct dirent *dirp,
@ -123,7 +123,7 @@ static ScanTask *scandir(string dir, libsaria::LibraryPath *lib_path, ScanTask *
return scan;
}
/*
void ReaddirTask::run_task()
{
class ScanTask *scan = new ScanTask(lib_path);

View File

@ -3,6 +3,20 @@
#include <libsaria/print.h>
#include <libsaria/idle.h>
static unsigned int MAX_SCAN = 20;
class ScanTask : public IdleTask
{
private:
struct libsaria::library::Path *path;
list<string> file_list;
public:
ScanTask(struct libsaria::library::Path *, list<string> &);
~ScanTask();
void run_task();
};
class ReaddirTask : public IdleTask
{
private:
@ -14,6 +28,33 @@ class ReaddirTask : public IdleTask
void run_task();
};
ScanTask::ScanTask(struct libsaria::library::Path *p, list<string> &files)
{
list<string>::iterator it;
path = p;
if (files.size() <= MAX_SCAN)
it = files.end();
else {
it = files.begin();
for (unsigned int i = 0; i < MAX_SCAN; i++)
it++;
}
file_list.splice(file_list.begin(), files, files.begin(), it);
}
ScanTask::~ScanTask()
{
}
unsigned int count;
void ScanTask::run_task()
{
count += file_list.size();
println("ScanTask scanned %u files so far", count);
}
ReaddirTask::ReaddirTask(struct libsaria::library::Path *p)
{
path = p;
@ -26,8 +67,16 @@ ReaddirTask::~ReaddirTask()
void ReaddirTask::run_task()
{
list<string> file_list;
list<string>::iterator it;
ScanTask *task;
libsaria::list_dir(path->path, file_list);
println("Found: %d files to scan", file_list.size());
while (file_list.size() > 0) {
task = new ScanTask(path, file_list);
task->queue();
}
}
void update_path(struct libsaria::library::Path &path)