NAME

Metadata::DB::File::Indexer

DESCRIPTION

The indexer object is a main interface to creating and managing metadata tables about many files. This object does not manage child instances of Metadata::DB::File, code that elsewhere.

SYNOPSIS

# start a database handle 
my $dbh;

my $i = Metadata::DB::File::Indexer->new({ DBH => $dbh });

$i->table_all_reset; # clear everything

# You are left to figure out on your own what files to index 
my @files;   
$i->files_to_index(\@files);

# you should determine what metadata will be stored for each
# by overriding Metadata::DB::File::Indexer::_abs_path_to_metadata()

no warnings 'redefine';
*Metadata::DB::File::Indexer::_abs_path_to_metadata = \&mysub;

sub mysub {
   my $abs_path = shift;

   my $meta = {}; #whatever you want
   return $meta;      
}

$i->run;

REINDEXING ALL

If you want to reindex an entire archive you should

1) reset/clear the tables

   $i->table_all_reset;

2) determine the files you want to index, abs paths

   my @files;
   $i->files_to_index_set(\@files);

3) define a method to turn one of the paths to metadata

   &Metadata::DB::File::Indexer::_abs_path_to_metadata = 
      sub { my $abs_path = shift; my hash = {} ; return $hash; }

REINDEXING A PORTION

What if you only want to reindex a section? Maybe you indexed /home/myself/mp3s but you just want to reindex a subpath...

 1) reset that portion
    $i->tree_clear('/home/myself/mp3s');

 2) determine the files you will index, used File::Find::Rule etc
    my @files
 
 3) determine how to convert into a metadata hash
     &Metadata::DB::File::Indexer::_abs_path_to_metadata = 
       sub { my $abs_path = shift; my hash = {} ; return $hash; }


    
 3) set and run
    $i->files_to_index_set(\@files);
    $i->run;   
 
 

METHODS

new()

required arg is hashref with key DBH to open database handle

my $i = Metadata::DB::File::Indexer({ DBH => $dbh });

table_all_reset()

you'll have to call for the first time

files_indexed_count()

returns number

files_to_index()

files_to_index_set()

arg is array ref with abs paths to files on disk

files_to_index_count()

returns count of files indexed

run()

takes no args runs the indexing procedure

WHAT IF I WANT TO CHANGE THE NAME OF THE TABLE

What if you want to store in another table?

Data is stored in two tables, the metadata table, and the files table. to rename these..

(To read more: Metadata::DB::Base and Metadat::DB::File::Base )

table_metadata_name_set()

arg is string

table_files_name_set()

arg is string

CAVEAT

Before you index, make sure the entries are cleared.. you can do this:

$i->tree_clear('/lowest/common/denominator/base');
$i->run;

If you know will reindex the entire achive tree(everything you want to be in the db), then you can simple reset the metadata and files table:

$i->table_all_reset;
$i->run;

SEE ALSO

Metadata::DB Metadata::DB::Base Metadata::DB::Search Metadata::DB::Analizer Metadata::DB::File Metadata::DB::File::Base

AUTHOR

Leo Charre leocharre at cpan dot org