summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-08-18 10:43:33 +0000
committeryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-08-18 10:43:33 +0000
commita6854187b0e2fcc8a89874090eeacdb938bc285a (patch)
tree1fee81148452d593d149131705e7618d41ff8cf8 /lib
parenta528cb22d0459b0b76ac163c40cbe28a2ef27b70 (diff)
Stored relgraph image maps in the DB, instead of using plain text files in /data/rg/
git-svn-id: svn://vndb.org/vndb@93 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib')
-rw-r--r--lib/ChangeLog1
-rw-r--r--lib/Multi/RG.pm21
-rw-r--r--lib/VNDB/Releases.pm4
-rw-r--r--lib/VNDB/Util/DB.pm16
-rw-r--r--lib/VNDB/VN.pm15
-rw-r--r--lib/global.pl1
6 files changed, 23 insertions, 35 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 594f128b..7bd2becc 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -8,6 +8,7 @@ TODO:
1.22 - ?
- Inverted vote graph
+ - Relation graph image maps are now stored in the DB
1.21 - 2008-08-16 (r90)
- Added !vn and !uptime commands to Multi::IRC
diff --git a/lib/Multi/RG.pm b/lib/Multi/RG.pm
index d94eb484..141aca34 100644
--- a/lib/Multi/RG.pm
+++ b/lib/Multi/RG.pm
@@ -113,7 +113,7 @@ sub getrel { # vid
if(!grep !$_->[4], values %{$_[HEAP]{nodes}}) {
if(!keys %{$_[HEAP]{nodes}}) {
$_[KERNEL]->call(core => log => 3, 'No relation graph for v%d', $_[HEAP]{vid});
- $Multi::SQL->do('UPDATE vn SET rgraph = 0 WHERE id = ?', undef, $_[HEAP]{vid});
+ $Multi::SQL->do('UPDATE vn SET rgraph = NULL WHERE id = ?', undef, $_[HEAP]{vid});
$_[HEAP]{nodes}{$_[HEAP]{vid}} = [];
$_[KERNEL]->yield('completegraph');
return;
@@ -126,7 +126,7 @@ sub getrel { # vid
sub builddot {
my $gv =
- qq|graph {\n|.
+ qq|graph rgraph {\n|.
qq|\tratio = "compress"\n|.
qq|\tnode [ fontname = "$_[HEAP]{font}", shape = "plaintext",|.
qq| fontsize = $_[HEAP]{fsize}[0], style = "setlinewidth(0.5)" ]\n|.
@@ -188,20 +188,19 @@ sub builddot {
sub buildgraph {
# get a new ID
- my $gid = $Multi::SQL->prepare("SELECT nextval('relgraph_seq')");
+ my $gid = $Multi::SQL->prepare("INSERT INTO relgraph (cmap) VALUES ('') RETURNING id");
$gid->execute;
$gid = $gid->fetchrow_arrayref->[0];
$_[HEAP]{gid} = [
$gid,
sprintf('%s/%02d/%d.gif', $_[HEAP]{imgdir}, $gid % 100, $gid),
- sprintf('%s/%02d/%d.cmap', $_[HEAP]{datdir}, $gid % 100, $gid)
];
# roughly equivalent to:
- # cat layout.txt | dot -Tgif -o graph.gif -Tcmap > graph.cmap
+ # cat layout.txt | dot -Tgif -o graph.gif -Tcmapx
$_[HEAP]{proc} = POE::Wheel::Run->new(
Program => $_[HEAP]{dot},
- ProgramArgs => [ '-Tgif', '-o', $_[HEAP]{gid}[1], '-Tcmap' ],
+ ProgramArgs => [ '-Tgif', '-o', $_[HEAP]{gid}[1], '-Tcmapx' ],
StdioFilter => POE::Filter::Stream->new(),
StdinEvent => 'proc_stdin',
StdoutEvent => 'proc_stdout',
@@ -215,16 +214,10 @@ sub buildgraph {
sub savegraph {
# save the image map
- $_[HEAP]{cmap} =~ s{>\n}{ />\n}g; # make XML parsers happy
- open my $F, '>', $_[HEAP]{gid}[2] or die $!;
- print $F '<!-- V:'.join(',',keys %{$_[HEAP]{nodes}})." -->\n";
- print $F '<map id="rgraph" name="rgraph">'."\n";
- print $F $_[HEAP]{cmap};
- print $F '</map>';
- close $F;
+ $Multi::SQL->do('UPDATE relgraph SET cmap = ? WHERE id = ?', undef,
+ '<!-- V:'.join(',',keys %{$_[HEAP]{nodes}})." -->\n$_[HEAP]{cmap}", $_[HEAP]{gid}[0]);
# proper chmod
- chmod 0666, $_[HEAP]{gid}[2];
chmod 0666, $_[HEAP]{gid}[1];
# update the VN table
diff --git a/lib/VNDB/Releases.pm b/lib/VNDB/Releases.pm
index 947ed770..0f36c4fe 100644
--- a/lib/VNDB/Releases.pm
+++ b/lib/VNDB/Releases.pm
@@ -172,11 +172,11 @@ sub RHide {
sub RVNCache { # @vids - calls update_vncache and regenerates relation graphs if needed
my($self, @vns) = @_;
- my $before = $self->DBGetVN(id => \@vns, order => 'v.id');
+ my $before = $self->DBGetVN(id => \@vns, order => 'v.id', what => 'relations');
$self->DBVNCache(@vns);
my $after = $self->DBGetVN(id => \@vns, order => 'v.id');
my @upd = map {
- $before->[$_]{rgraph} && (
+ @{$before->[$_]{relations}} && (
$before->[$_]{c_released} != $after->[$_]{c_released}
|| $before->[$_]{c_languages} ne $after->[$_]{c_languages}
) ? $before->[$_]{id} : ();
diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm
index 4063eb2a..d25a1e5b 100644
--- a/lib/VNDB/Util/DB.pm
+++ b/lib/VNDB/Util/DB.pm
@@ -18,7 +18,7 @@ $VERSION = $VNDB::VERSION;
DBGetVNList DBDelVNList
DBGetWishList DBEditWishList DBDelWishList
DBGetRList DBGetRLists DBEditRList DBDelRList
- DBGetVN DBAddVN DBEditVN DBHideVN DBUndefRG DBVNCache
+ DBGetVN DBAddVN DBEditVN DBHideVN DBVNCache
DBGetRelease DBAddRelease DBEditRelease DBHideRelease
DBGetProducer DBGetProducerVN DBAddProducer DBEditProducer DBHideProducer
DBGetThreads DBGetPosts DBAddPost DBEditPost DBEditThread DBAddThread
@@ -773,11 +773,14 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate
$o{what} =~ /changes/ || $o{rev} ? (
'JOIN changes c ON c.id = vr.id',
'JOIN users u ON u.id = c.requester' ) : (),
+ $o{what} =~ /relgraph/ ? (
+ 'LEFT JOIN relgraph rg ON rg.id = v.rgraph' ) : (),
);
- my $sel = 'v.id, v.locked, v.hidden, v.c_released, v.c_languages, v.c_platforms, vr.title, vr.id AS cid, v.rgraph';
+ my $sel = 'v.id, v.locked, v.hidden, v.c_released, v.c_languages, v.c_platforms, vr.title, vr.id AS cid';
$sel .= ', vr.alias, vr.image AS image, vr.img_nsfw, vr.length, vr.desc, vr.l_wp, vr.l_encubed, vr.l_renai, vr.l_vnn' if $o{what} =~ /extended/;
$sel .= ', c.added, c.requester, c.comments, v.latest, u.username, c.rev, c.causedby' if $o{what} =~ /changes/;
+ $sel .= ', v.rgraph, rg.cmap' if $o{what} =~ /relgraph/;
my $r = $s->DBAll(qq|
SELECT $sel
@@ -970,14 +973,7 @@ sub DBVNCache { # @vids
}
-sub DBUndefRG { # ids
- my($s, @id) = @_;
- $s->DBExec(q|
- UPDATE vn
- SET rgraph = 0
- WHERE id IN(!l)|,
- \@id);
-}
+
#-----------------------------------------------------------------------------#
diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm
index 666349f7..9c872619 100644
--- a/lib/VNDB/VN.pm
+++ b/lib/VNDB/VN.pm
@@ -20,14 +20,18 @@ sub VNPage {
return $self->ResNotFound if $self->ReqParam('rev');
+ my $what = 'extended relations categories anime screenshots';
+ $what .= ' changes' if $rev;
+ $what .= ' relgraph' if $page eq 'rg';
+
my $v = $self->DBGetVN(
id => $id,
- what => 'extended relations categories anime screenshots'.($rev ? ' changes' : ''),
+ what => $what,
$rev ? ( rev => $rev ) : ()
)->[0];
return $self->ResNotFound if !$v->{id};
- my $c = $rev && $rev > 1 && $self->DBGetVN(id => $id, rev => $rev-1, what => 'extended changes relations categories anime screenshots')->[0];
+ my $c = $rev && $rev > 1 && $self->DBGetVN(id => $id, rev => $rev-1, what => $what)->[0];
$v->{next} = $rev && $v->{latest} > $v->{cid} ? $rev+1 : 0;
my $rel = $self->DBGetRelease(vid => $id, what => 'producers platforms');
@@ -41,12 +45,7 @@ sub VNPage {
my $r = (grep $i->{rid} == $_->{id}, @$rel)[0];
$r->{rlist} = $i;
}
-
- } elsif($page eq 'rg' && $v->{rgraph}) {
- open(my $F, '<:utf8', sprintf '%s/%02d/%d.cmap', $self->{mappath}, $v->{rgraph}%100, $v->{rgraph}) || die $!;
- $v->{rmap} = join('', (<$F>));
- close($F);
- }
+ }
$self->ResAddTpl(vnpage => {
vote => $self->AuthInfo->{id} ? $self->DBGetVotes(uid => $self->AuthInfo->{id}, vid => $id)->[0] : {},
diff --git a/lib/global.pl b/lib/global.pl
index ba5607d2..3e437704 100644
--- a/lib/global.pl
+++ b/lib/global.pl
@@ -41,7 +41,6 @@ our %VNDBopts = (
imgpath => '/www/vndb/static/cv', # cover images
sfpath => '/www/vndb/static/sf', # full-size screenshots
stpath => '/www/vndb/static/st', # screenshot thumbnails
- mappath => '/www/vndb/data/rg', # image maps for the relation graphs
docpath => '/www/vndb/data/docs',
);
$VNDBopts{ranks}[0][1] = { (map{$_,1} map { keys %{$VNDBopts{ranks}[$_]} } 1..5) };