diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-04-26 09:25:45 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-04-26 09:25:45 +0000 |
commit | 88853c1168a333c7c7b7951b2931852e6df7da55 (patch) | |
tree | fbad6f17f0820c89ce5dd8da748cf37b56549d14 /lib/VNDB | |
parent | d2efb163c11a11e02abd7251fdfde3cb54c710ef (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.pm | 27 | ||||
-rw-r--r-- | lib/VNDB/Util/DB.pm | 31 | ||||
-rw-r--r-- | lib/VNDB/VN.pm | 73 |
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)); } |