#!/usr/bin/perl -s
use File::Find;
use mp;
$mpdir = shift || $ENV{MP_ROOT} || '/home/jj/MuseuPessoa/MP';
$MFI="MP_file_index";
mkMeta($mpdir);
sub mkMeta{
my $f=shift ; # || $ENV{MP_ROOT};
print("$f");
%mpindex = index_import_init("$f/$MFI");
die("this is not a valid directory\n") unless (-d $f);
find(sub{
my $path=$File::Find::name;
my $a=typeof($path, $File::Find::dir);
return if ($path =~ m{/_});
print(".");
if (not defined $mpindex{$path}) {
$mpindex{__LAST__}{$a}++;
print("\n $path -- $a");
$mpindex{$path}{perm} = 1;
$mpindex{$path}{tipo} = $a;
$mpindex{$path}{id} = $mpindex{__LAST__}{$a};
}
if (-d $path and not -e "$path/META" and not -e "$path/_META") {
open(F,">$path/_META") or die ("cant create open _META");
print F "\n $a\n\n";
close(F);
}
},
$f);
print("\n");
index_save("$f/$MFI", %mpindex);
}
sub typeof{
my $f=shift;
my $dir = shift;
my $tipo="UNDEF";
my $raz="";
if (-d $f) {
my @hv = ((<$f/[Ee]ntrevista*>) , (<$f/[Dd]epoim*>));
my @pro = ((<$f/Projec*>),(<$f/*/entrevista*>));
my @xmls = (<$f/*.xml>);
if (-e "$f/META" or -e "$f/_META") {
$tipo = `grep 'tipo' '$f'/*META`;
if ($tipo =~ m{(.*?)} ) {
$tipo=$1; $raz="meta";
} else {
$tipo="META WITH NO TYPE??";
}
} elsif (@hv) {
$tipo = 'HV'; $raz=join(":",@hv);
} elsif (@pro) {
$tipo = "PROJ"; $raz=join(":",@pro);
} elsif ($f =~ /[Pp]roject\w*$/ ) {
$tipo = 'PROJ';$raz="pelo nome";
} elsif ($f =~ /\/[fF]oto\w*$/ ) {
$tipo = 'ALBUM';$raz="pelo nome";
} elsif ($f =~ /\/contact\w*$/ ) {
$tipo = 'GESTAO';$raz="pelo nome";
} elsif ($f =~ /CVS/ ) {
$tipo = 'CVS';$raz="pelo nome";
} elsif (@xmls and
grep { typeof($_) eq 'mp'} @xmls ) {
$tipo = 'HV'; $raz="euristica";
} else {
$tipo = 'DIR??';
}
# print("\n$f\n $tipo (porque... $raz)\n");
} else {
if ($dir =~ /CVS/) {
$tipo="CVS FILE";
} elsif ($f =~ /\.jpg$/i) {
$tipo="JPG";
} elsif ($f =~ /\.gif$/i) {
$tipo="GIF";
} elsif ($f =~ /\.html?$/) {
$tipo="HTML";
} elsif ($f =~ /\.doc$/) {
$tipo="WORD";
} elsif ($f =~ /\.mp3$/) {
$tipo="SOM";
} elsif ($f =~ /$MFI$/) {
$tipo="MPFileIndex";
} elsif ($f =~ /\.xml$/) {
$tipo=`grep '<[a-zA-Z]' '$f' | head -1 `;
if ($tipo =~m{^.*?<(\w+)} ) {
$tipo = $1;
} else {
$tipo="????";
}
} elsif ($f =~ /META$/) {
$tipo="META";
} else {
$tipo="FILE??";
}
}
$tipo;
}
sub index_save{ my $path=shift; my %ind = @_;
open(F, ">$path");
print F join("", (map {((/__LAST__/)?():("$ind{$_}{id}:$_:$ind{$_}{tipo}:$ind{$_}{perm}\n")) } sort keys %ind));
for (keys %{$mpindex{__LAST__}}) {
print F "$mpindex{__LAST__}{$_}:__LAST__:$_\n";
}
close F;
}
sub index_import_init{
my $path=shift;
my %ind=();
if (-f $path) {
open(F, $path );
while () {
if (/(.+):(.+):(.*):(.*)/) {
$ind{$2}{id} = $1;
$ind{$2}{tipo} = $3;
$ind{$2}{perm} = $4;
} elsif (/(.+):(.+):(.+)/) {
$ind{$2}{$3} = $1;
}
}
close F;
} else {
$ind{__LAST__}={};
}
%ind;
}
__END__