]> Dogcows Code - chaz/p5-File-KDBX/blobdiff - lib/File/KDBX/Loader/KDB.pm
Prereq Time::Piece 1.33 to fix KDBX4 datetimes
[chaz/p5-File-KDBX] / lib / File / KDBX / Loader / KDB.pm
index 1b18f7b27fc81a036fd4797c7c23c7c40fe9e01e..685e0a9fcef83242e25d1c8ef39e548a70bfe637 100644 (file)
@@ -11,7 +11,7 @@ use File::KDBX::Util qw(:class :empty :io :uuid load_optional);
 use File::KDBX;
 use Ref::Util qw(is_arrayref is_hashref);
 use Scalar::Util qw(looks_like_number);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
@@ -19,7 +19,7 @@ extends 'File::KDBX::Loader';
 
 our $VERSION = '999.999'; # VERSION
 
-my $DEFAULT_EXPIRATION = Time::Piece->new(32503677839); # 2999-12-31 23:59:59
+my $DEFAULT_EXPIRATION = Time::Piece->strptime('2999-12-31 23:59:59', '%Y-%m-%d %H:%M:%S');
 
 sub _read_headers { '' }
 
@@ -90,16 +90,18 @@ sub convert_keepass_to_kdbx {
         }
     }
 
-    for my $entry ($kdbx->find_entries({
+    $kdbx->entries
+    ->grep({
         title       => 'Meta-Info',
         username    => 'SYSTEM',
         url         => '$',
         icon_id     => 0,
         -nonempty   => 'notes',
-    })) {
-        _read_meta_stream($kdbx, $entry);
-        $entry->remove;
-    }
+    })
+    ->each(sub {
+        _read_meta_stream($kdbx, $_);
+        $_->remove(signal => 0);
+    });
 
     return $kdbx;
 }
@@ -120,7 +122,7 @@ sub _read_meta_stream {
             read_all $fh, $buf, 5 or goto PARSE_ERROR;
             my ($group_id, $expanded) = unpack('L< C', $buf);
             my $uuid = _decode_uuid($group_id) // next;
-            my ($group) = $kdbx->find_groups({uuid => $uuid});
+            my $group = $kdbx->groups->grep({uuid => $uuid})->next;
             $group->is_expanded($expanded) if $group;
         }
     }
@@ -139,7 +141,7 @@ sub _read_meta_stream {
             read_all $fh, $buf, 20 or goto PARSE_ERROR;
             my ($uuid, $icon_index) = unpack('a16 L<', $buf);
             next if !$icons[$icon_index];
-            my ($entry) = $kdbx->find_entries({uuid => $uuid});
+            my $entry = $kdbx->entries->grep({uuid => $uuid})->next;
             $entry->custom_icon_uuid($icons[$icon_index]) if $entry;
         }
         for (my $i = 0; $i < $num_groups; ++$i) {
@@ -147,7 +149,7 @@ sub _read_meta_stream {
             my ($group_id, $icon_index) = unpack('L<2', $buf);
             next if !$icons[$icon_index];
             my $uuid = _decode_uuid($group_id) // next;
-            my ($group) = $kdbx->find_groups({uuid => $uuid});
+            my $group = $kdbx->groups->grep({uuid => $uuid})->next;
             $group->custom_icon_uuid($icons[$icon_index]) if $group;
         }
     }
This page took 0.024116 seconds and 4 git commands to generate.