summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README2
-rw-r--r--data/global.pl1
-rw-r--r--lib/Multi/Image.pm92
-rw-r--r--lib/VNDB/DB/VN.pm4
-rw-r--r--lib/VNDB/Handler/VNEdit.pm18
-rw-r--r--util/sql/all.sql2
-rw-r--r--util/sql/func.sql7
-rw-r--r--util/updates/update_2.23.sql3
8 files changed, 21 insertions, 108 deletions
diff --git a/README b/README
index 41f68c2f..88b4a6aa 100644
--- a/README
+++ b/README
@@ -45,8 +45,6 @@ Requirements
POE::Component::Pg (get it from http://g.blicky.net/poco-pg.git/)
IRC:
POE::Component::IRC
- Image:
- Image::Magick
Maintenance:
PerlIO::gzip
RG:
diff --git a/data/global.pl b/data/global.pl
index 5ac491d0..90f1c448 100644
--- a/data/global.pl
+++ b/data/global.pl
@@ -119,7 +119,6 @@ our %M = (
#APIDump => {},
Feed => {},
RG => {},
- Image => {},
#Anime => {}, # disabled by default, requires AniDB username/pass
Maintenance => {},
#IRC => {}, # disabled by default, no need to run an IRC bot when debugging
diff --git a/lib/Multi/Image.pm b/lib/Multi/Image.pm
deleted file mode 100644
index 1e56bbe6..00000000
--- a/lib/Multi/Image.pm
+++ /dev/null
@@ -1,92 +0,0 @@
-
-#
-# Multi::Image - Image compressing and resizing
-#
-
-package Multi::Image;
-
-use strict;
-use warnings;
-use POE;
-use Image::Magick;
-use Time::HiRes 'time';
-use VNDBUtil 'imgsize';
-
-
-sub spawn {
- my $p = shift;
- POE::Session->create(
- package_states => [
- $p => [qw| _start
- _start shutdown scr_check scr_process
- |],
- ],
- heap => {
- sfpath => $VNDB::ROOT.'/static/sf',
- stpath => $VNDB::ROOT.'/static/st',
- check_delay => 3600,
- @_,
- },
- );
-}
-
-
-sub _start {
- $_[KERNEL]->alias_set('image');
- $_[KERNEL]->sig(shutdown => 'shutdown');
- $_[KERNEL]->post(pg => listen => screenshot => 'scr_check');
- $_[KERNEL]->yield('scr_check');
-}
-
-
-sub shutdown {
- $_[KERNEL]->post(pg => unlisten => 'charimage', 'screenshot');
- $_[KERNEL]->delay('scr_check');
- $_[KERNEL]->alias_remove('image');
-}
-
-
-sub scr_check {
- $_[KERNEL]->delay('scr_check');
- $_[KERNEL]->post(pg => query => 'SELECT id FROM screenshots WHERE processed = false LIMIT 1', undef, 'scr_process');
-}
-
-
-sub scr_process { # num, res
- return $_[KERNEL]->delay(scr_check => $_[HEAP]{check_delay}) if $_[ARG0] == 0;
-
- my $id = $_[ARG1][0]{id};
- my $start = time;
- my $sf = sprintf '%s/%02d/%d.jpg', $_[HEAP]{sfpath}, $id%100, $id;
- my $st = sprintf '%s/%02d/%d.jpg', $_[HEAP]{stpath}, $id%100, $id;
- my $os = -s $sf;
-
- # convert/compress full-size image
- my $im = Image::Magick->new;
- $im->Read($sf);
- $im->Set(magick => 'JPEG');
- $im->Set(quality => 90);
- $im->Write($sf);
-
- # create thumbnail
- my($ow, $oh) = ($im->Get('width'), $im->Get('height'));
- my($nw, $nh) = imgsize($ow, $oh, @{$VNDB::S{scr_size}});
- $im->Thumbnail(width => $nw, height => $nh);
- $im->Set(quality => 90);
- $im->Write($st);
-
- $_[KERNEL]->post(pg => do =>
- 'UPDATE screenshots SET processed = true, width = ?, height = ? WHERE id = ?',
- [ $ow, $oh, $id ]
- );
- $_[KERNEL]->call(core => log =>
- 'Processed screenshot #%d in %.2fs: %.1fkB -> %.1fkB (%dx%d), thumb: %.1fkB (%dx%d)',
- $id, time-$start, $os/1024, (-s $sf)/1024, $ow, $oh, (-s $st)/1024, $nw, $nh
- );
-
- $_[KERNEL]->yield('scr_check');
-}
-
-
-1;
-
diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm
index 0d14b5f4..d0015d27 100644
--- a/lib/VNDB/DB/VN.pm
+++ b/lib/VNDB/DB/VN.pm
@@ -235,9 +235,9 @@ sub dbVNImageId {
# insert a new screenshot and return it's ID
-# (no arguments required, as Multi is responsible for filling the entry with information)
sub dbScreenshotAdd {
- return shift->dbRow(q|INSERT INTO screenshots (processed) VALUES(false) RETURNING id|)->{id};
+ my($s, $width, $height) = @_;
+ return $s->dbRow(q|INSERT INTO screenshots (processed, width, height) VALUES (true, ?, ?) RETURNING id|, $width, $height)->{id};
}
diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm
index 6be06ef2..537b71f6 100644
--- a/lib/VNDB/Handler/VNEdit.pm
+++ b/lib/VNDB/Handler/VNEdit.pm
@@ -407,9 +407,23 @@ sub scrxml {
# no error? save and let Multi process it
if(!$id) {
- $id = $self->dbScreenshotAdd;
+ my $im = Image::Magick->new;
+ $im->BlobToImage($imgdata);
+ $im->Set(magick => 'JPEG');
+ $im->Set(quality => 90);
+ my($ow, $oh) = ($im->Get('width'), $im->Get('height'));
+
+ $id = $self->dbScreenshotAdd($ow, $oh);
my $fn = imgpath(sf => $id);
- $self->reqSaveUpload($param, $fn);
+ $im->Write($fn);
+ chmod 0666, $fn;
+
+ # thumbnail
+ my($nw, $nh) = imgsize($ow, $oh, @{$self->{scr_size}});
+ $im->Thumbnail(width => $nw, height => $nh);
+ $im->Set(quality => 90);
+ $fn = imgpath(st => $id);
+ $im->Write($fn);
chmod 0666, $fn;
}
diff --git a/util/sql/all.sql b/util/sql/all.sql
index bb5359d6..d012a492 100644
--- a/util/sql/all.sql
+++ b/util/sql/all.sql
@@ -64,8 +64,6 @@ CREATE TRIGGER vn_anime_aid_edit BEFORE UPDATE ON vn_anime
CREATE TRIGGER anime_fetch_notify AFTER INSERT OR UPDATE ON anime FOR EACH ROW WHEN (NEW.lastfetch IS NULL) EXECUTE PROCEDURE anime_fetch_notify();
-CREATE TRIGGER screenshot_process_notify AFTER INSERT OR UPDATE ON screenshots FOR EACH ROW WHEN (NEW.processed = FALSE) EXECUTE PROCEDURE screenshot_process_notify();
-
CREATE TRIGGER vn_relgraph_notify AFTER UPDATE ON vn FOR EACH ROW
WHEN (OLD.rgraph IS DISTINCT FROM NEW.rgraph
OR OLD.latest IS DISTINCT FROM NEW.latest
diff --git a/util/sql/func.sql b/util/sql/func.sql
index 3f52475e..6f51a6b2 100644
--- a/util/sql/func.sql
+++ b/util/sql/func.sql
@@ -603,13 +603,6 @@ $$ LANGUAGE plpgsql;
--- Send a notify when a screenshot needs to be processed
-CREATE OR REPLACE FUNCTION screenshot_process_notify() RETURNS trigger AS $$
- BEGIN NOTIFY screenshot; RETURN NULL; END;
-$$ LANGUAGE plpgsql;
-
-
-
-- Update vn.rgraph column and send notify when a relation graph needs to be regenerated
-- 1. NOTIFY is sent on VN edit or insert or change in vn.rgraph, when rgraph = NULL and entries in vn_relations
-- vn.rgraph is set to NULL when:
diff --git a/util/updates/update_2.23.sql b/util/updates/update_2.23.sql
index 305781b6..46a2dd68 100644
--- a/util/updates/update_2.23.sql
+++ b/util/updates/update_2.23.sql
@@ -61,3 +61,6 @@ DROP FUNCTION vn_rev_image_notify();
DROP TRIGGER chars_rev_image_notify ON chars_rev;
DROP FUNCTION chars_rev_image_notify();
+
+DROP TRIGGER screenshot_process_notify ON screenshots;
+DROP FUNCTION screenshot_process_notify();