man => 0,
only_print => 0,
search_by_pmid => 0,
+ search_by_file => 0,
+ use_git => 1,
'bibtex_cache' => File::Spec->catfile(User->Home,'.bibtex_to_paper_cache'),
);
'bibtex|b=s@',
'bibtex_cache|bibtex-cache|c=s',
'pdfviewer|p=s',
+ 'use_git|use-git!',
'only_print|only-print!',
'search_by_pmid|search-by-pmid!',
+ 'search_by_file|search-by-file!',
'clear_cache|clear-cache!',
'papers_directory|papers-directory=s@',
'debug|d+','help|h|?','man|m');
if (exists $options{papers_directory} and
defined $dbh
) {
+ $dbh->begin_work;
load_papers_into_database($dbh,$sth,$options{papers_directory});
+ $dbh->commit;
}
p %entries if $DEBUG;
if (keys %entries and
defined $dbh) {
+ $dbh->begin_work;
load_bibtex_entries_into_database($dbh,$sth,\%entries);
+ $dbh->commit;
}
p @ARGV if $DEBUG;
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") {
- $xoj = 1;
+ if ($options{use_git}) {
+ my @files = grep /\.pdf\"?$/, split /\n/, qx(git ls-tree HEAD -r --full-name --name-only);
+ for my $file (@files) {
+ $file =~ s/^\"(.+)\"$/"qq($1)"/gee;
+ insert_or_replace_papers($dbh,$sth,basename($file),File::Spec->rel2abs($file), -e "${file}.xoj");
}
- insert_or_replace_papers($dbh,$sth,basename($File::Find::name),File::Spec->rel2abs($_),$xoj);
- };
-
- my @pdfs;
- find($actually_load_it,@dirs);
+ } else {
+ my $actually_load_it = sub {
+ if (/\.git/) {
+ $File::Find::prune = 1;
+ return;
+ }
+ return unless /\.pdf$/;
+ my $xoj = 0;
+ if (-e "${_}.xoj") {
+ $xoj = 1;
+ }
+ insert_or_replace_papers($dbh,$sth,basename($File::Find::name),File::Spec->rel2abs($_),$xoj);
+ };
+ find($actually_load_it,@dirs);
+ }
}
sub insert_or_replace_papers {
my $entry;
if ($options->{search_by_pmid}) {
$entry = select_entry_from_pmid($dbh,$sth,$bibtex_key);
+ } elsif ($options->{search_by_file}) {
+ $entry = select_entry_from_file($dbh,$sth,$bibtex_key);
} else {
$entry = select_entry_from_bibtex_key($dbh,$sth,$bibtex_key);
}
sub open_pdf {
my ($file_name,$options,$has_xoj) = @_;
print STDERR "opening $file_name\n" if $DEBUG;
- if ($has_xoj) {
- fork_exec('xournal',$file_name);
- } else {
- fork_exec('xournal',$file_name)
+ my $pdf_viewer = 'xournal';
+ if (exists $options->{pdfviewer} and defined $options->{pdfviewer}) {
+ $pdf_viewer = $options->{pdfviewer};
}
+ fork_exec($pdf_viewer,$file_name);
}
sub open_browser{
return select_one($dbh,$sth->{select_bibtex_by_pmid},$pmid);
}
+sub select_entry_from_file{
+ my ($dbh,$sth,$filename) = @_;
+
+ return select_one($dbh,$sth->{select_bibtex_by_file_name_like},'%'.$filename.'%');
+}
+
sub select_entry_from_bibtex_key{
my ($dbh,$sth,$bibtex_key) = @_;
SELECT * FROM papers WHERE file_name = ?;
EOF
select_papers_by_pmid => <<'EOF',
+SELECT * FROM papers JOIN bibtex ON papers.file_name = bibtex.file_name WHERE bibtex.pmid = ?;
+EOF
+ select_papers_by_name_like => <<'EOF',
SELECT * FROM papers WHERE file_name LIKE ?;
EOF
select_papers_by_path => <<'EOF',
EOF
select_bibtex_by_file_name => <<'EOF',
SELECT * FROM bibtex WHERE file_name = ?;
+EOF
+ select_bibtex_by_file_name_like => <<'EOF',
+SELECT * FROM bibtex WHERE file_name LIKE ?;
EOF
select_bibtex_by_pmid => <<'EOF',
SELECT * FROM bibtex WHERE pmid = ?;