use Text::BibTeX;
use User;
use Data::Printer;
+use POSIX;
use DBI;
'bibtex|b=s@',
'bibtex_cache|bibtex-cache|c=s',
'pdfviewer|p=s',
+ 'clear_cache|clear-cache!',
'papers_directory|papers-directory=s@',
'debug|d+','help|h|?','man|m');
}
}
+ if (exists $options{clear_cache}) {
+ clear_cache($dbh,$sth);
+ }
my %entries;
if (exists $options{build_cache}) {
$options{bibtex} //= [];
}
+sub clear_cache {
+ my ($dbh,$sth) = @_;
+ $sth->{clear_papers_cache}->execute();
+ $sth->{clear_bibtex_cache}->execute();
+}
+
sub load_papers_into_database {
my ($dbh,$sth,$dir) = @_;
my @dirs = ref($dir)?@{$dir}:$dir;
my $actually_load_it = sub {
+ if (/\.git/) {
+ $File::Find::prune = 1;
+ return;
+ }
return unless /\.pdf$/;
my $xoj = 0;
if (-e "${_}.xoj") {
die "Unable to fork for some reason: $!";
}
if ($child == 0) {
+ foreach (0 .. (POSIX::sysconf (&POSIX::_SC_OPEN_MAX) || 1024))
+ { POSIX::close $_ }
+ open (STDIN, "</dev/null");
+ open (STDOUT, ">/dev/null");
+ open (STDERR, ">&STDOUT");
exec(@cmd);
} else {
return $child;
return unless defined $entry and ref $entry and keys %{$entry};
if (defined $entry->{file_name} and length $entry->{file_name}) {
my $paper = select_one($dbh,$sth->{select_papers_by_name},$entry->{file_name});
+ if (not defined $paper) {
+ my ($pmid) = $entry->{file_name} =~ /pmid_(\d+)/;
+ if (defined $pmid and length $pmid) {
+ $paper = select_one($dbh,$sth->{select_papers_by_pmid},'%pmid_'.$pmid.'.%');
+ }
+ }
p $paper if $DEBUG;
print STDERR $entry->{file_name} if $DEBUG;
if (defined $paper) {
EOF
select_papers_by_name => <<'EOF',
SELECT * FROM papers WHERE file_name = ?;
+EOF
+ select_papers_by_pmid => <<'EOF',
+SELECT * FROM papers WHERE file_name LIKE ?;
EOF
select_papers_by_path => <<'EOF',
SELECT * FROM papers WHERE path = ?;
EOF
select_bibtex_by_file_name => <<'EOF',
SELECT * FROM bibtex WHERE file_name = ?;
+EOF
+ clear_papers_cache => <<'EOF',
+DELETE FROM papers;
+EOF
+ clear_bibtex_cache => <<'EOF',
+DELETE FROM bibtex;
EOF
);
my $st;