revbank/plugins/market
2019-12-12 23:16:10 +01:00

65 lines
1.6 KiB
Perl

#!perl
HELP "market" => "Edit market list";
my $filename = 'revbank.market';
sub _read_market {
open my $fh, '<', $filename or die "$filename: $!";
my %market;
while (readline $fh) {
/^\s*#/ and next;
/\S/ or next;
chomp;
my ($user, $id, $seller, $space, $description) = split " ", $_, 5;
$market{$id} = {
user => $user,
seller => $seller,
space => $space,
description => $description,
};
}
return \%market;
}
sub command :Tab(market,&tab) {
my ($self, $cart, $command) = @_;
if ($command eq 'market') {
system $ENV{EDITOR} || 'vi', $filename;
return ACCEPT;
}
my $product = _read_market->{ $command } or return NEXT;
my $username = parse_user( $product->{ user }) or return NEXT;
my $seller = parse_amount($product->{ seller }) or return NEXT;
my $space = parse_amount($product->{ space }) or return NEXT;
my $description = $product->{description};
my @existing = grep {
$_->attribute('plugin') eq $self->id and
$_->attribute('product_id') eq $command
} $cart->entries('plugin');
if (@existing) {
$existing[0]->quantity($existing[0]->quantity + 1);
return ACCEPT;
}
$cart->add(
-($seller + $space),
"$description (sold by $username)",
{ product_id => $command, plugin => $self->id }
)->add_contra(
$username,
$seller,
"\$you bought $description"
);
return ACCEPT;
}
sub tab {
return grep /\D/, keys %{ _read_market() };
}