summaryrefslogtreecommitdiff
path: root/lib/VNDB
diff options
context:
space:
mode:
authoryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-04-26 09:25:45 +0000
committeryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-04-26 09:25:45 +0000
commit88853c1168a333c7c7b7951b2931852e6df7da55 (patch)
treefbad6f17f0820c89ce5dd8da748cf37b56549d14 /lib/VNDB
parentd2efb163c11a11e02abd7251fdfde3cb54c710ef (diff)
Stupid comments - like I can keep track of everything I change...
git-svn-id: svn://vndb.org/vndb@5 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/VNDB')
-rw-r--r--lib/VNDB/Releases.pm27
-rw-r--r--lib/VNDB/Util/DB.pm31
-rw-r--r--lib/VNDB/VN.pm73
3 files changed, 48 insertions, 83 deletions
diff --git a/lib/VNDB/Releases.pm b/lib/VNDB/Releases.pm
index 0012d324..6f642cba 100644
--- a/lib/VNDB/Releases.pm
+++ b/lib/VNDB/Releases.pm
@@ -8,7 +8,7 @@ use Digest::MD5;
use vars ('$VERSION', '@EXPORT');
$VERSION = $VNDB::VERSION;
-@EXPORT = qw| RPage REdit RLock RDel RHide |;
+@EXPORT = qw| RPage REdit RLock RDel RHide RVNCache |;
sub RPage {
@@ -111,9 +111,12 @@ sub REdit {
media => $media,
producers => $producers,
);
- my $cid;
+ my $cid;
$cid = $self->DBEditRelease($rid, %opts) if $rid; # edit
($rid, $cid) = $self->DBAddRelease(%opts) if !$rid; # add
+
+ $self->RVNCache(@$new_vn, (map { $_->{vid} } @$vn));
+
return $self->ResRedirect('/r'.$rid.'?rev='.$cid, 'post');
}
}
@@ -157,7 +160,8 @@ sub RDel {
return $self->ResDenied if !$self->AuthCan('del');
my $r = $self->DBGetRelease(id => $id, what => 'vn')->[0];
return $self->ResNotFound if !$r;
- $self->DBDelRelease([ map { $_->{vid} } @{$r->{vn}} ], $id);
+ $self->DBDelRelease($id);
+ $self->RVNCache(map { $_->{vid} } @{$r->{vn}});
return $self->ResRedirect('/v'.$r->{vn}[0]{id}, 'perm');
}
@@ -169,10 +173,25 @@ sub RHide {
return $self->ResDenied if !$self->AuthCan('del');
my $r = $self->DBGetRelease(id => $id, what => 'vn')->[0];
return $self->ResNotFound if !$r;
- $self->DBHideRelease($id, $r->{hidden}?0:1, [ map { $_->{vid} } @{$r->{vn}} ]);
+ $self->DBHideRelease($id, $r->{hidden}?0:1);
+ $self->RVNCache(map { $_->{vid} } @{$r->{vn}});
return $self->ResRedirect('/r'.$id, 'perm');
}
+sub RVNCache { # @vids - calls update_vncache and regenerates relation graphs if needed
+ my($self, @vns) = @_;
+ my $before = $self->DBGetVN(id => \@vns, order => 'v.id');
+ $self->DBVNCache(@vns);
+ my $after = $self->DBGetVN(id => \@vns, order => 'v.id');
+ my @upd = map {
+ $before->[$_]{rgraph} && (
+ $before->[$_]{c_released} != $after->[$_]{c_released}
+ || $before->[$_]{c_languages} ne $after->[$_]{c_languages}
+ ) ? $before->[$_]{id} : ();
+ } 0..$#$before;
+ $self->RunCmd('relgraph '.join(' ', @upd)) if @upd;
+}
+
1;
diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm
index c93e0997..408a1b86 100644
--- a/lib/VNDB/Util/DB.pm
+++ b/lib/VNDB/Util/DB.pm
@@ -16,7 +16,7 @@ $VERSION = $VNDB::VERSION;
DBGetUser DBAddUser DBUpdateUser
DBGetVotes DBVoteStats DBAddVote DBDelVote
DBGetVNList DBVNListStats DBAddVNList DBEditVNList DBDelVNList
- DBGetVN DBAddVN DBEditVN DBDelVN DBHideVN DBUndefRG
+ DBGetVN DBAddVN DBEditVN DBDelVN DBHideVN DBUndefRG DBVNCache
DBGetRelease DBAddRelease DBEditRelease DBDelRelease DBHideRelease
DBGetProducer DBGetProducerVN DBAddProducer DBEditProducer DBDelProducer DBHideProducer
DBExec DBRow DBAll DBLastId
@@ -560,8 +560,10 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate
my %where = (
!$o{id} && !$o{rev} ? ( # don't fetch hidden items unless we ask for an ID
'v.hidden = 0' => 1 ) : (),
- $o{id} ? (
+ $o{id} && !ref($o{id}) ? (
'v.id = %d' => $o{id} ) : (),
+ $o{id} && ref($o{id}) ? (
+ 'v.id IN(!l)' => $o{id} ) : (),
$o{rev} ? (
'vr.id = %d' => $o{rev} ) : (),
$o{char} ? (
@@ -796,6 +798,12 @@ sub DBHideVN { # id, hidden
}
+sub DBVNCache { # @vids
+ my($s,@vn) = @_;
+ $s->DBExec('SELECT update_vncache(%d)', $_) for (@vn);
+}
+
+
sub DBUndefRG { # ids
my($s, @id) = @_;
$s->DBExec(q|
@@ -920,8 +928,6 @@ sub DBAddRelease { # options -> { columns in releases_rev table + comm + vn + pr
my $rid = $s->DBLastId('releases');
_insert_release_rev($s, $id, $rid, \%o);
-
- $s->DBExec('SELECT update_vncache(%d)', $_) for (@{$o{vn}});
return ($rid, $id);
}
@@ -946,8 +952,6 @@ sub DBEditRelease { # id, %opts->{ columns in releases_rev table + comm + vn + p
_insert_release_rev($s, $id, $rid, \%o);
$s->DBExec(q|UPDATE releases SET latest = %d WHERE id = %d|, $id, $rid);
-
- $s->DBExec('SELECT update_vncache(%d)', $_) for (@{$o{vn}});
return $id;
}
@@ -986,8 +990,8 @@ sub _insert_release_rev {
}
-sub DBDelRelease { # $vns, @ids
- my($s, $vn, @rid) = @_;
+sub DBDelRelease { # $vns
+ my($s, @rid) = @_;
return if !@rid;
$s->DBExec($_, \@rid) for(
q|DELETE FROM changes WHERE id IN(SELECT rr.id FROM releases_rev rr WHERE rr.rid IN(!l))|,
@@ -998,23 +1002,16 @@ sub DBDelRelease { # $vns, @ids
q|DELETE FROM releases_vn WHERE rid IN(!l)|,
q|DELETE FROM releases WHERE id IN(!l)|,
);
-
- if($vn) {
- $s->DBExec('SELECT update_vncache(%d)', $_) for (@$vn);
- }
}
-sub DBHideRelease { # id, hidden, vns
- my($s, $id, $h, $vn) = @_;
+sub DBHideRelease { # id, hidden
+ my($s, $id, $h) = @_;
$s->DBExec(q|
UPDATE releases
SET hidden = %d
WHERE id = %d|,
$h, $id);
- if(@$vn) {
- $s->DBExec('SELECT update_vncache(%d)', $_) for (@$vn);
- }
}
diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm
index ec1de95d..69d4e490 100644
--- a/lib/VNDB/VN.pm
+++ b/lib/VNDB/VN.pm
@@ -9,7 +9,7 @@ require bytes;
use vars ('$VERSION', '@EXPORT');
$VERSION = $VNDB::VERSION;
-@EXPORT = qw| VNPage VNEdit VNLock VNDel VNHide VNBrowse VNXML VNUpdReverse VNRecreateRel |;
+@EXPORT = qw| VNPage VNEdit VNLock VNDel VNHide VNBrowse VNXML VNUpdReverse |;
sub VNPage {
@@ -110,18 +110,12 @@ sub VNEdit {
my $l;
open(my $T, '<:raw:bytes', $tmp) || die $1;
read $T, $l, 2;
- seek $T, 0, 0;
- my($x, $y) = jpegsize($T);
close($T);
$frm->{_err} = $frm->{_err} ? [ @{$frm->{_err}}, 'nojpeg' ] : [ 'nojpeg' ]
- if $l ne pack('H*', 'ffd8');
- if(!$frm->{_err}) {
- $frm->{_err} = $frm->{_err} ? [ @{$frm->{_err}}, 'toolarge' ] : [ 'toolarge' ]
- if -s $tmp > 51200; # 50 KB max.
- $frm->{_err} = $frm->{_err} ? [ @{$frm->{_err}}, 'imgsize' ] : [ 'imgsize' ]
- if $x > 256 || $y > 400; # 256x400 max
- }
+ if $l ne pack('H*', 'ffd8') && $l ne pack('H*', '8950');
+ $frm->{_err} = $frm->{_err} ? [ @{$frm->{_err}}, 'toolarge' ] : [ 'toolarge' ]
+ if !$frm->{_err} && -s $tmp > 512*1024; # 500 KB max.
if($frm->{_err}) {
unlink $tmp;
@@ -130,6 +124,8 @@ sub VNEdit {
my $new = sprintf '%s/%02d/%d.jpg', $self->{imgpath}, $imgid%50, $imgid;
rename $tmp, $new or die $!;
chmod 0666, $new;
+ $self->RunCmd(sprintf 'coverimage %d', $imgid);
+ $imgid = -1*$imgid;
}
} elsif($id) {
$imgid = $v->{image};
@@ -151,7 +147,7 @@ sub VNEdit {
if((!$oid && $#$relations >= 0) || ($oid && $frm->{relations} ne $b4{relations})) {
my %old = $oid ? (map { $_->{id} => $_->{relation} } @{$v->{relations}}) : ();
my %new = map { $_->[1] => $_->[0] } @$relations;
- $self->VNRecreateRel($id, $self->VNUpdReverse(\%old, \%new, $id, $cid));
+ $self->VNUpdReverse(\%old, \%new, $id, $cid);
}
return $self->ResRedirect('/v'.$id.'?rev='.$cid, 'post');
@@ -161,9 +157,7 @@ sub VNEdit {
if($id) {
$frm->{$_} ||= $b4{$_} for (keys %b4);
$frm->{comm} = sprintf 'Reverted to revision %d by %s.', $v->{cid}, $v->{username} if $v->{cid} != $v->{latest};
- } else {
- $frm->{categories} = 0;
- }
+ }
$self->AddHid($frm);
$frm->{_hid} = {map{$_=>1} qw| info cat img |}
@@ -210,8 +204,8 @@ sub VNHide {
return $self->ResNotFound() if !$v;
return $self->ResDenied if !$self->AuthCan('del');
$self->DBHideVN($id, $v->{hidden}?0:1);
- $self->VNRecreateRel($id, $self->VNUpdReverse({ map { $_->{id} => $_->{relation} } @{$v->{relations}} }, {}, $id, 0))
- if @{$v->{relations}};
+ #$self->VNUpdReverse({ map { $_->{id} => $_->{relation} } @{$v->{relations}} }, {}, $id, 0)
+ # if @{$v->{relations}};
return $self->ResRedirect('/v'.$id, 'perm');
}
@@ -293,44 +287,6 @@ sub VNXML {
}
-
-sub jpegsize {
- my $stream = shift;
-
- my $MARKER = "\xFF"; # Section marker.
-
- my $SIZE_FIRST = 0xC0; # Range of segment identifier codes
- my $SIZE_LAST = 0xC3; # that hold size info.
-
- my ($x, $y, $id) = (undef, undef, "could not determine JPEG size");
-
- my ($marker, $code, $length, $data);
- my $segheader;
-
- seek $stream, 2, 0;
- while (1) {
- $length = 4;
- read $stream, $segheader, $length;
-
- ($marker, $code, $length) = unpack("a a n", $segheader);
-
- if ($marker ne $MARKER) {
- $id = "JPEG marker not found";
- last;
- } elsif((ord($code) >= $SIZE_FIRST) && (ord($code) <= $SIZE_LAST)) {
- $length = 5;
- read $stream, $data, $length;
- ($y, $x) = unpack("xnn", $data);
- $id = 'JPG';
- last;
- } else {
- seek $stream, ($length - 2), 1;
- }
- }
- return ($x, $y, $id);
-}
-
-
# Update reverse relations
sub VNUpdReverse { # old, new, id, cid
my($self, $old, $new, $id, $cid) = @_;
@@ -360,14 +316,7 @@ sub VNUpdReverse { # old, new, id, cid
);
}
- return keys %upd;
-}
-
-
-sub VNRecreateRel { # @ids
- my($s, @id) = @_;
- $s->DBUndefRG(@id);
- $s->RunCmd('relgraph '.join(' ',@id));
+ $self->RunCmd('relgraph '.join(' ', $id, keys %upd));
}