use LWP::UserAgent;
use JSON;
+use Digest::MD5 qw(md5_hex);
+use Data::Dump qw(dump);
sub new {
my ($class, $host, $port, $options) = @_;
$self->request(POST => $url, $json);
}
+sub update {
+ my ($self, $url, $json) = @_;
+
+ warn "# update_doc $url";
+
+ my $json_md5 = md5_hex encode_json $json;
+ $json->{x_sync}->{json_md5} = $json_md5;
+
+ if ( my $old = eval { $self->get( $url ) } ) {
+ warn "# old ", $old->{_rev}; #dump($old);
+
+ if ( $json_md5 ne $old->{x_sync}->{json_md5} ) {
+ $json->{_rev} = $old->{_rev};
+ warn :"# update $url";
+ $self->put( $url => $json );
+ } else {
+ warn "# unchanged $url";
+ }
+ } else {
+ warn "# insert $url ", dump($json);
+ $self->put( $url => $json );
+ }
+
+}
+
1;
$db->put("zotero_$UserID/_design/zotero" => decode_json $view)
};
+eval { $db->put("rt") }; # create RT database
+
my @urls = map { "https://api.zotero.org/users/$UserID/$_?format=atom&content=json&order=dateModified&sort=desc" } qw( collections items );
# we don't need to fetch tags since we can generate using CouchDB views
$items->{$id} = $item;
- my $json_md5 = md5_hex encode_json $item;
- $item->{zapi}->{json_md5} = $json_md5;
-
- if ( my $old_item = eval { $db->get( "zotero_$UserID/$id" ) } ) {
- warn "# old_item ", $old_item->{_rev}; #dump($old_item);
+ $db->update( "zotero_$UserID/$id" => $item );
- if ( $old_item->{zapi}->{etag} ne $item->{zapi}->{etag} || $json_md5 ne $old_item->{zapi}->{json_md5} ) {
- $item->{_rev} = $old_item->{_rev};
- warn :"# update $id";
- $db->put( "zotero_$UserID/$id" => $item );
- } else {
- warn "# unchanged";
- }
- } else {
- $db->put( "zotero_$UserID/$id" => $item );
- warn "# insert $id ", dump($item);
- }
}
delete $feed->{entry};
my $ticket = $rt->show(type => 'ticket', id => $nr);
warn "# ticket $nr ",dump($ticket);
+ $db->update( "rt/$nr" => $ticket );
+
if ( $ticket->{Queue} !~ m/ILL/i ) {
warn "SKIP $ticket not in ILL queue!";
next;