Clarifying this is not free software.
This commit is contained in:
parent
1b997d731b
commit
14c51001a6
|
@ -0,0 +1,7 @@
|
|||
# MTGPrint Telegram Bot
|
||||
|
||||
## IMPORTANT INFORMATION
|
||||
|
||||
You have right to download and study the code, but I do not give you any other right.
|
||||
|
||||
You cannot run or modify this software unless you are given permission by myself.
|
|
@ -1,91 +0,0 @@
|
|||
package TgMagicPdf::Crawler;
|
||||
|
||||
use v5.38.2;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use feature 'signatures';
|
||||
|
||||
use utf8;
|
||||
|
||||
use Moo;
|
||||
use DateTime;
|
||||
|
||||
use TgMagicPdf::Crawler::Task;
|
||||
use Mojo::UserAgent;
|
||||
|
||||
our $COLLECTION = 'COLLECTION_CRAWL';
|
||||
|
||||
has queue => (
|
||||
is => 'ro',
|
||||
default => sub { [] },
|
||||
);
|
||||
|
||||
has is_blocked_queue => (
|
||||
is => 'rw',
|
||||
default => sub { 1 },
|
||||
);
|
||||
|
||||
{
|
||||
|
||||
sub singleton {
|
||||
state $crawler = __PACKAGE__->new;
|
||||
return $crawler;
|
||||
}
|
||||
}
|
||||
|
||||
sub get_collection( $self, $identifiers ) {
|
||||
if ( scalar @$identifiers > 75 ) {
|
||||
die 'Too much identifiers fetching collection.';
|
||||
}
|
||||
my $task = TgMagicPdf::Crawler::Task->new_collection($identifiers);
|
||||
$self->add_to_queue($task);
|
||||
return $task->promise;
|
||||
}
|
||||
|
||||
sub _add_to_queue( $self, $task ) {
|
||||
push $self->queue->@*, $task;
|
||||
if ( !$self->is_blocked_queue ) {
|
||||
$self->_block_queue;
|
||||
}
|
||||
}
|
||||
|
||||
sub _block_queue($self) {
|
||||
$self->is_blocked_queue(1);
|
||||
my $id = Mojo::IOLoop->recurring(
|
||||
0.1 => sub {
|
||||
my $task = shift $self->queue->@*;
|
||||
if ( !defined $task ) {
|
||||
Mojo::IOLoop->remove($id);
|
||||
$self->is_blocked_queue(0);
|
||||
return;
|
||||
}
|
||||
$self->_dispatch_task($task);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
sub _dispatch_task( $self, $task ) {
|
||||
if ( $task->kind eq $COLLECTION ) {
|
||||
$self->_dispatch_task_collection($task);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sub _dispatch_task_collection( $self, $task ) {
|
||||
my $identifiers = $task->extra_data->{identifiers};
|
||||
my $ua = Mojo::UserAgent->new;
|
||||
$ua->post_p(
|
||||
'https://api.scryfall.com/cards/collection',
|
||||
json => { identifiers => $identifiers }
|
||||
)->then(sub($ua, $tx) {
|
||||
if ($tx->result->code != 200) {
|
||||
$task->promise->reject($txt->result->body);
|
||||
return;
|
||||
}
|
||||
$task->promise->resolve($tx->result->body);
|
||||
})->catch(sub ($err) {
|
||||
$task->promise->reject($err);
|
||||
});
|
||||
}
|
||||
1;
|
|
@ -1,36 +0,0 @@
|
|||
package TgMagicPdf::Crawler::Task;
|
||||
|
||||
use v5.38.2;
|
||||
|
||||
use strict;
|
||||
use warnings use feature 'signatures';
|
||||
|
||||
use utf8;
|
||||
|
||||
use Moo;
|
||||
|
||||
use Mojo::Promise;
|
||||
|
||||
has promise => (
|
||||
is => 'ro',
|
||||
default => sub { Mojo::Promise->new },
|
||||
);
|
||||
|
||||
has kind => (
|
||||
is => 'ro',
|
||||
required => 1,
|
||||
);
|
||||
|
||||
has extra_data => (
|
||||
is => 'ro',
|
||||
default => sub { {} },
|
||||
);
|
||||
|
||||
sub new_collection( $class, $identifiers ) {
|
||||
require TgMagicPdf::Crawler;
|
||||
return $class->new(
|
||||
kind => $TgMagicPdf::Crawler::COLLECTION,
|
||||
extra_data => { identifiers => $identifiers }
|
||||
);
|
||||
}
|
||||
1;
|
Loading…
Reference in New Issue