use DB_File;
use DXDebug;
use Prefix;
-use JSON;
+use DXJSON;
use Data::Structure::Util qw(unbless);
use vars qw($qslfn $dbm $maxentries);
$dbm = undef;
$maxentries = 50;
+my %u;
my $json;
localdata_mv("$qslfn.v1j");
my $mode = shift;
my $ufn = localdata("$qslfn.v1j");
- $json = JSON->new->canonical(1);
+ $json = DXJSON->new;
Prefix::load() unless Prefix::loaded();
-
- my %u;
- undef $dbm;
+ finish() if $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 {
sub finish
{
+ $dbm->sync;
undef $dbm;
+ untie %u;
}
sub new
return decode($value);
}
+
sub put
{
return unless $dbm;
sub remove_files
{
- unlink "$main::data/qsl.v1j";
- unlink "$main::local_data/qsl.v1j";
+ unlink "$main::data/$qslfn.v1j";
+ unlink "$main::local_data/$qslfn.v1j";
}
# thaw the user
sub decode
{
- my $s = shift;
- my $ref;
- eval { $ref = $json->decode($s) };
- if ($ref && !$@) {
- return bless $ref, 'QSL';
- }
- return undef;
+ return $json->decode($_[0], __PACKAGE__);
}
# freeze the user
sub encode
{
- my $ref = shift;
- unbless($ref);
- my $s;
-
- eval {$s = $json->encode($ref) };
- if ($s && !$@) {
- bless $ref, 'QSL';
- return $s;
- }
+ return $json->encode($_[0]);
}
1;