summaryrefslogtreecommitdiff
path: root/lib/Multi
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Multi')
-rw-r--r--lib/Multi/Feed.pm5
-rw-r--r--lib/Multi/Image.pm40
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');