hopefully improving sizes.

This commit is contained in:
Sergiotarxz 2024-05-23 15:58:39 +02:00
parent bb0b48dc2f
commit 30ed9e61df

View File

@ -40,46 +40,46 @@ sub _build__db_all_printings ($self) {
sub from_text ( $self, $text ) {
my $promise = Mojo::Promise->new;
{
my @lines = split /\n+/, $text;
@lines = grep { $self->_filter_lines($_); } @lines;
if ( scalar @lines > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
next;
}
my @cards = map { s/^\s*(.*?)\s*$/$1/; $self->_parse_card($_) } @lines;
my $n_cards = 0;
for my $card (@cards) {
$n_cards += $card->{quantity};
}
if ( $n_cards > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
next;
}
eval {
@cards = map { $self->_fill_scryfall_id($_) } @cards;
};
if ($@) {
$promise->reject($@);
next;
}
$self->_get_cards_images( \@cards )->then(
sub ($images) {
my $real_number_of_cards = 0;
for my $card (@cards) {
$real_number_of_cards += $card->{quantity} * scalar
keys $images->{ $card->{scryfallId} }->%*;
}
if ( $real_number_of_cards > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
}
my $pdf = $self->_generate_pdf( \@cards, $images );
$promise->resolve($pdf);
my @lines = split /\n+/, $text;
@lines = grep { $self->_filter_lines($_); } @lines;
if ( scalar @lines > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
next;
}
)->catch(
sub ($err) {
$promise->reject($err);
my @cards = map { s/^\s*(.*?)\s*$/$1/; $self->_parse_card($_) } @lines;
my $n_cards = 0;
for my $card (@cards) {
$n_cards += $card->{quantity};
}
);
if ( $n_cards > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
next;
}
eval {
@cards = map { $self->_fill_scryfall_id($_) } @cards;
};
if ($@) {
$promise->reject($@);
next;
}
$self->_get_cards_images( \@cards )->then(
sub ($images) {
my $real_number_of_cards = 0;
for my $card (@cards) {
$real_number_of_cards += $card->{quantity} * scalar
keys $images->{ $card->{scryfallId} }->%*;
}
if ( $real_number_of_cards > $MAX_CARDS ) {
$promise->reject($ERR_TOO_MANY_CARDS);
}
my $pdf = $self->_generate_pdf( \@cards, $images );
$promise->resolve($pdf);
}
)->catch(
sub ($err) {
$promise->reject($err);
}
);
}
return $promise;
}
@ -90,7 +90,7 @@ sub _generate_pdf ( $self, $cards, $images ) {
my $page = $pdf->page;
$page->size('A4');
my @rectangle = $page->size;
my $width_paper = $rectangle[2];
my $width_paper = $rectangle[2];
my $n_pixels_per_cm = $width_paper / 21.0;
for my $card (@$cards) {
my $images_card = $images->{ $card->{scryfallId} };
@ -101,28 +101,28 @@ sub _generate_pdf ( $self, $cards, $images ) {
$page = $pdf->page;
$page->size('A4');
}
my $margin_bottom = 25;
my $mtg_card_width = 6.35;
my $mtg_card_height = 8.89;
my $margin_bottom = 25;
my $mtg_card_width = 6.35;
my $mtg_card_height = 8.89;
my $small_line_to_cut_better_size = 0.5;
my $margin_left = (
$width_paper
- ($mtg_card_width * 3)
- ($small_line_to_cut_better_size * 2)
) / 2;
open my $fh, '<', \$images_card->{$image_kind};
my $image = $pdf->image( $fh, format => 'jpeg' );
my $image = $pdf->image( $fh, format => 'jpeg' );
my $margin_left =
( $width_paper -
( $n_pixels_per_cm * $mtg_card_width * 3 ) -
( $small_line_to_cut_better_size * 2 ) ) / 2;
my $page_position_x = $number_image % 3;
my $page_position_y = abs( int( $number_image / 3 ) - 2 );
$page->object(
$image,
$margin_bottom +
$margin_left +
$page_position_x * $mtg_card_width * $n_pixels_per_cm +
$small_line_to_cut_better_size * $page_position_x,
$margin_bottom +
$page_position_y * $mtg_card_height * $n_pixels_per_cm +
$small_line_to_cut_better_size * $page_position_x,
$small_line_to_cut_better_size * $page_position_y,
$n_pixels_per_cm * $mtg_card_width,
$n_pixels_per_cm * $mtg_card_height,
);
$number_image++;
}