X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FQSL.pm;h=ec5512216f563ffe9929bad57253d9d87851799f;hb=cc49b8f8c2ec3a975c7ace3f5bd8679580288406;hp=0df7570ba24f615ac1fccce38cde2d59955588ca;hpb=c3c40fa3708eb08ec5e81dbbff35deec6e2c44e4;p=spider.git diff --git a/perl/QSL.pm b/perl/QSL.pm index 0df7570b..ec551221 100644 --- a/perl/QSL.pm +++ b/perl/QSL.pm @@ -8,39 +8,35 @@ package QSL; use strict; -use DXVars; +use SysVar; use DXUtil; use DB_File; use DXDebug; use Prefix; +use DXJSON; +use Data::Structure::Util qw(unbless); use vars qw($qslfn $dbm $maxentries); -$qslfn = 'qsl'; +$qslfn = 'dxqsl'; $dbm = undef; $maxentries = 50; -localdata_mv("$qslfn.v1"); +my %u; +my $json; + +localdata_mv("$qslfn.v1j"); sub init { my $mode = shift; - my $ufn = localdata("$qslfn.v1"); + my $ufn = localdata("$qslfn.v1j"); - Prefix::load() unless Prefix::loaded(); + $json = DXJSON->new; - eval { - require Storable; - }; + Prefix::load() unless Prefix::loaded(); + + finish() if $dbm; - if ($@) { - dbg("Storable appears to be missing"); - dbg("In order to use the QSL feature you must"); - dbg("load Storable from CPAN"); - return undef; - } - import Storable qw(nfreeze freeze thaw); - my %u; - undef $dbm; if ($mode) { $dbm = tie (%u, 'DB_File', $ufn, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open qsl file: $qslfn ($!)"; } else { @@ -51,7 +47,10 @@ sub init sub finish { + dbg("DXQSL finished"); + $dbm->sync; undef $dbm; + untie %u; } sub new @@ -119,16 +118,43 @@ sub get my $r = $dbm->get($key, $value); return undef if $r; - return thaw($value); + return decode($value); } + sub put { return unless $dbm; my $self = shift; my $key = $self->[0]; - my $value = nfreeze($self); + my $value = encode($self); $dbm->put($key, $value); } +sub remove_files +{ + unlink "$main::data/$qslfn.v1j"; + unlink "$main::local_data/$qslfn.v1j"; +} + +# thaw the user +sub decode +{ + return $json->decode($_[0], __PACKAGE__); +} + +# freeze the user +sub encode +{ + return $json->encode($_[0]); +} + +sub END +{ + if ($dbm) { + dbg "DXQSL ENDing"; + finish(); + } +} + 1;