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:
parent
f5462da461
commit
230a31a5a7
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue