X-Git-Url: http://git.rot13.org/?p=ILL-Zotero-RT;a=blobdiff_plain;f=CouchDB.pm;fp=CouchDB.pm;h=9512174979460605e00c94041a1ed62ed356b417;hp=8b13b36002974f8bf299271e256b6b40e20ef888;hb=03812fc940bc2c03db3f82b620967e20087e8160;hpb=c66001cf81a861e875ef6bb5f8f5dfe1a27bff1b diff --git a/CouchDB.pm b/CouchDB.pm index 8b13b36..9512174 100644 --- a/CouchDB.pm +++ b/CouchDB.pm @@ -5,6 +5,8 @@ use warnings; use LWP::UserAgent; use JSON; +use Digest::MD5 qw(md5_hex); +use Data::Dump qw(dump); sub new { my ($class, $host, $port, $options) = @_; @@ -74,4 +76,29 @@ sub post { $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;