diff --git a/Changelog b/Changelog index 055343f..7aa24ea 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,10 @@ +1.3.21: + Changed note id generation in NOTEDB::pwsafe3::_uuid(), again. + Instead of crc checksums and the loop to avoid duplicates, I just + use a counter and sort the entries by ctime, so that older entries + keep their note id. Also this should fix a rare bug, where the + code hangs because of said loop. +================================================================================ 1.3.20: fixed bug in NOTEDB::pwsafe3::_retrieve(), it iterated over the records unsorted which resulted in different note ids each time diff --git a/NOTEDB.pm b/NOTEDB.pm index a1f4d44..434d38a 100644 --- a/NOTEDB.pm +++ b/NOTEDB.pm @@ -10,7 +10,7 @@ package NOTEDB; use Exporter (); use vars qw(@ISA @EXPORT $crypt_supported); -$NOTEDB::VERSION = "1.41"; +$NOTEDB::VERSION = "1.42"; BEGIN { # make sure, it works, otherwise encryption diff --git a/NOTEDB/pwsafe3.pm b/NOTEDB/pwsafe3.pm index a8281f1..c299e39 100644 --- a/NOTEDB/pwsafe3.pm +++ b/NOTEDB/pwsafe3.pm @@ -3,8 +3,7 @@ package NOTEDB::pwsafe3; -$NOTEDB::pwsafe3::VERSION = "1.06"; -use lib qw(/home/scip/D/github/Crypt--PWSafe3/blib/lib); +$NOTEDB::pwsafe3::VERSION = "1.07"; use strict; use Data::Dumper; use Time::Local; @@ -324,7 +323,7 @@ sub _retrieve { my @records = $vault->getrecords(); - foreach my $record (sort { $a->uuid cmp $b->uuid } @records) { + foreach my $record (sort { $a->ctime <=> $b->ctime } @records) { my $num = $this->_uuid( $record->uuid ); my %entry = ( uuid => $record->uuid, @@ -450,34 +449,23 @@ sub _notetopwsafe3 { } sub _uuid { - # - # Convert a given pwsafe3 uuid to a number - # and store them for recursive access my ($this, $uuid) = @_; if (exists $this->{uuidnum}->{$uuid}) { return $this->{uuidnum}->{$uuid}; } - my $intuuid = $uuid; - $intuuid =~ s/[\-]//g; - $intuuid = unpack('h32', $intuuid); - my $cuid = $intuuid; - my $checksum; - while () { - $checksum = unpack("%16C*", $cuid) - 1600; - while ($checksum < 0) { - $checksum++; # avoid negative numbers - } - if (! exists $this->{numuuid}->{$checksum}) { - $this->{uuidnum}->{$uuid} = $checksum; - $this->{numuuid}->{$checksum} = $uuid; - last; - } - else { - $cuid .= $.; - } + my $max = 0; + + if (exists $this->{numuuid}) { + $max = (sort { $b <=> $a } keys %{$this->{numuuid}})[0]; } - return $checksum; + + my $num = $max + 1; + + $this->{uuidnum}->{$uuid} = $num; + $this->{numuuid}->{$num} = $uuid; + + return $num; } sub _getuuid { diff --git a/VERSION b/VERSION index 3c59b40..89bdc09 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.20 +1.3.21 diff --git a/bin/note b/bin/note index a02400c..7c27315 100755 --- a/bin/note +++ b/bin/note @@ -144,7 +144,7 @@ $CONF = File::Spec->catfile($ENV{HOME}, ".noterc"); $USER = getlogin || getpwuid($<); chomp $USER; $TOPIC = 1; -$version = "1.3.20"; +$version = "1.3.21"; $CurDepth = 1; # the current depth inside the topic "directory" structure... $maxlen = "auto"; $timelen = 22;