diff options
Diffstat (limited to 'lib/Multi')
-rw-r--r-- | lib/Multi/Feed.pm | 5 | ||||
-rw-r--r-- | lib/Multi/Image.pm | 40 |
2 files changed, 40 insertions, 5 deletions
diff --git a/lib/Multi/Feed.pm b/lib/Multi/Feed.pm index 12631497..483089bd 100644 --- a/lib/Multi/Feed.pm +++ b/lib/Multi/Feed.pm @@ -64,13 +64,14 @@ sub generate { # changes $_[KERNEL]->post(pg => query => q{ - SELECT '/'||c.type||COALESCE(vr.vid, rr.rid, pr.pid)||'.'||c.rev AS id, - COALESCE(vr.title, rr.title, pr.name) AS title, extract('epoch' from c.added) AS updated, + SELECT '/'||c.type||COALESCE(vr.vid, rr.rid, pr.pid, cr.cid)||'.'||c.rev AS id, + COALESCE(vr.title, rr.title, pr.name, cr.name) AS title, extract('epoch' from c.added) AS updated, u.username, u.id AS uid, c.comments AS summary FROM changes c LEFT JOIN vn_rev vr ON c.type = 'v' AND c.id = vr.id LEFT JOIN releases_rev rr ON c.type = 'r' AND c.id = rr.id LEFT JOIN producers_rev pr ON c.type = 'p' AND c.id = pr.id + LEFT JOIN chars_rev cr ON c.type = 'c' AND c.id = cr.id JOIN users u ON u.id = c.requester WHERE c.requester <> 1 ORDER BY c.id DESC diff --git a/lib/Multi/Image.pm b/lib/Multi/Image.pm index ad1d436c..3f8bb1a9 100644 --- a/lib/Multi/Image.pm +++ b/lib/Multi/Image.pm @@ -18,10 +18,11 @@ sub spawn { POE::Session->create( package_states => [ $p => [qw| _start - _start shutdown cv_check cv_process scr_check scr_process + _start shutdown ch_check ch_process cv_check cv_process scr_check scr_process |], ], heap => { + chpath => $VNDB::ROOT.'/static/ch', cvpath => $VNDB::ROOT.'/static/cv', sfpath => $VNDB::ROOT.'/static/sf', stpath => $VNDB::ROOT.'/static/st', @@ -35,20 +36,53 @@ sub spawn { sub _start { $_[KERNEL]->alias_set('image'); $_[KERNEL]->sig(shutdown => 'shutdown'); - $_[KERNEL]->post(pg => listen => coverimage => 'cv_check', screenshot => 'scr_check'); + $_[KERNEL]->post(pg => listen => charimage => 'ch_check', coverimage => 'cv_check', screenshot => 'scr_check'); + $_[KERNEL]->yield('ch_check'); $_[KERNEL]->yield('cv_check'); $_[KERNEL]->yield('scr_check'); } sub shutdown { - $_[KERNEL]->post(pg => unlisten => 'coverimage', 'screenshot'); + $_[KERNEL]->post(pg => unlisten => 'charimage', 'coverimage', 'screenshot'); + $_[KERNEL]->delay('ch_check'); $_[KERNEL]->delay('cv_check'); $_[KERNEL]->delay('scr_check'); $_[KERNEL]->alias_remove('image'); } +sub ch_check { + $_[KERNEL]->delay('ch_check'); + $_[KERNEL]->post(pg => query => 'SELECT image FROM chars_rev WHERE image < 0 LIMIT 1', undef, 'ch_process'); +} + + +sub ch_process { # num, res + return $_[KERNEL]->delay(ch_check => $_[HEAP]{check_delay}) if $_[ARG0] == 0; + + my $id = -1*$_[ARG1][0]{image}; + my $start = time; + my $img = sprintf '%s/%02d/%d.jpg', $_[HEAP]{chpath}, $id%100, $id; + my $os = -s $img; + + my $im = Image::Magick->new; + $im->Read($img); + $im->Set(magick => 'JPEG'); + my($ow, $oh) = ($im->Get('width'), $im->Get('height')); + my($nw, $nh) = imgsize($ow, $oh, @{$VNDB::S{ch_size}}); + $im->Thumbnail(width => $nw, height => $nh); + $im->Set(quality => 80); + $im->Write($img); + + $_[KERNEL]->post(pg => do => 'UPDATE chars_rev SET image = image*-1 WHERE image = ?', [ -1*$id ]); + $_[KERNEL]->call(core => log => 'Processed character image %d in %.2fs: %.2fkB (%dx%d) -> %.2fkB (%dx%d)', + $id, time-$start, $os/1024, $ow, $oh, (-s $img)/1024, $nw, $nh); + + $_[KERNEL]->yield('ch_check'); +} + + sub cv_check { $_[KERNEL]->delay('cv_check'); $_[KERNEL]->post(pg => query => 'SELECT image FROM vn_rev WHERE image < 0 LIMIT 1', undef, 'cv_process'); |