]> git.donarmstrong.com Git - bin.git/blobdiff - bibtex_to_paper
add add to blacklist and remove from whitelist to learn_from_spam
[bin.git] / bibtex_to_paper
index 66fdf09324fe6f2b868b13fb9e43025ddbabc13c..23e0085b9478d527f8da39beec3ceffd08b6404d 100755 (executable)
@@ -18,6 +18,7 @@ use File::Spec qw(rel2abs);
 use Text::BibTeX;
 use User;
 use Data::Printer;
+use POSIX;
 
 use DBI;
 
@@ -90,6 +91,7 @@ GetOptions(\%options,
            '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');
 
@@ -123,6 +125,9 @@ sub main{
         }
     }
 
+    if (exists $options{clear_cache}) {
+        clear_cache($dbh,$sth);
+    }
     my %entries;
     if (exists $options{build_cache}) {
         $options{bibtex} //= [];
@@ -157,12 +162,22 @@ sub main{
 
 }
 
+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") {
@@ -209,6 +224,11 @@ sub fork_exec {
         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;
@@ -237,6 +257,12 @@ sub open_entry{
     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) {
@@ -381,6 +407,9 @@ INSERT OR REPLACE INTO bibtex (bibtex_key,file_name,doi,html) VALUES (?,?,?,?);
 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 = ?;
@@ -393,6 +422,12 @@ SELECT * FROM bibtex WHERE bibtex_key LIKE ?;
 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;