/
EditBarcodes.pm
118 lines (105 loc) · 2.98 KB
/
EditBarcodes.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package MusicBrainz::Server::Edit::Release::EditBarcodes;
use Moose;
use namespace::autoclean;
use MusicBrainz::Server::Constants qw( :expire_action :quality );
use MusicBrainz::Server::Constants qw( $EDIT_RELEASE_EDIT_BARCODES );
use MusicBrainz::Server::Edit::Types qw( Nullable );
use MusicBrainz::Server::Translation qw( l ln );
use MooseX::Types::Moose qw( ArrayRef Int Str );
use MooseX::Types::Structured qw( Dict );
extends 'MusicBrainz::Server::Edit';
with 'MusicBrainz::Server::Edit::Release';
with 'MusicBrainz::Server::Edit::Release::RelatedEntities';
use aliased 'MusicBrainz::Server::Entity::Barcode';
use aliased 'MusicBrainz::Server::Entity::Release';
sub edit_name { l('Edit barcodes') }
sub edit_type { $EDIT_RELEASE_EDIT_BARCODES }
has '+data' => (
isa => Dict[
submissions => ArrayRef[Dict[
release => Dict[
id => Int,
name => Str
],
barcode => Str,
old_barcode => Nullable[Str]
]]
]
);
sub edit_conditions
{
return {
$QUALITY_LOW => {
duration => 4,
votes => 1,
expire_action => $EXPIRE_ACCEPT,
auto_edit => 0,
},
$QUALITY_NORMAL => {
duration => 14,
votes => 3,
expire_action => $EXPIRE_ACCEPT,
auto_edit => 0,
},
$QUALITY_HIGH => {
duration => 14,
votes => 4,
expire_action => $EXPIRE_REJECT,
auto_edit => 0,
},
};
}
sub release_ids { map { $_->{release}{id} } @{ shift->data->{submissions} } }
sub alter_edit_pending
{
my $self = shift;
return {
Release => [ $self->release_ids ],
}
}
sub foreign_keys
{
my ($self) = @_;
return {
Release => { map { $_ => [ 'ArtistCredit' ] } $self->release_ids },
};
}
sub build_display_data
{
my ($self, $loaded) = @_;
return {
submissions => [
map +{
release => $loaded->{Release}->{ $_->{release}{id} }
|| Release->new( name => $_->{release}{name} ),
new_barcode => Barcode->new($_->{barcode}),
exists $_->{old_barcode} ?
(old_barcode => Barcode->new($_->{old_barcode})) : ()
}, @{ $self->data->{submissions} }
]
}
}
sub accept {
my ($self) = @_;
for my $submission (@{ $self->data->{submissions} }) {
$self->c->model('Release')->update(
$submission->{release}{id},
{ barcode => $submission->{barcode} }
)
}
}
sub initialize {
my ($self, %opts) = @_;
$opts{submissions} = [
map +{
release => {
id => $_->{release}->id,
name => $_->{release}->name,
},
barcode => $_->{barcode},
old_barcode => $_->{release}->barcode->code
}, @{ $opts{submissions} }
];
$self->data(\%opts);
}
1;