diff options
-rw-r--r-- | data/lang.txt | 46 | ||||
-rw-r--r-- | data/script.js | 132 | ||||
-rw-r--r-- | lib/VNDB/DB/VN.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNEdit.pm | 26 | ||||
-rw-r--r-- | util/sql/schema.sql | 1 | ||||
-rw-r--r-- | util/updates/update_2.23.sql | 2 |
6 files changed, 67 insertions, 142 deletions
diff --git a/data/lang.txt b/data/lang.txt index 568a8b31..3bd0e19c 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -13152,18 +13152,6 @@ tr : Lütfen her ekran görüntüsü için uygun yayımı seçin. uk : Будь ласка, оберіть відповідний реліз для кожного скріншоту. it : Seleziona la pubblicazione adatta ad ogni screenshot. -:_vnedit_scr_fetching -en : Fetching thumbnail... -ru : Обработка превью... -cs : Načítám náhled... -hu : Indexképek előkészítése... -nl : Bezig met het opvragen van de thumbnail... -de : Erstelle Miniaturansicht... -es : Buscando thumbnail... -tr : Küçük resim alınıyor... -uk : Обробка мініатюри… -it : Creando l'anteprima... - :_vnedit_scr_uploading en : Uploading screenshot ru : Загрузка скриншота @@ -13394,40 +13382,6 @@ uk : Помилка завантаження! it : Caricamento fallito! Nessun file selezionato, o un file vuoto? -:_vnedit_scr_genthumb -en : Generating thumbnail... -ru : Генерация превью... -cs : Tvořím náhled... -hu : Indexkép készítése -nl : Thumbnail maken... -de : Erstelle Miniaturansicht... -es : Generando thumbnail... -tr : Küçük resim oluşturuluyor... -uk : Створення мініатюри… -it : Creando l'anteprima... - -:_vnedit_scr_genthumb_msg -en : Note: if this takes longer than 30 seconds, there\'s probably something wrong on our side. - Please try again later or report a bug if that is the case. -ru : Замечание: если эта операция длится более 30 секунд, значит, у нас на сервере неполадки. - В таком случае попытайтесь снова или сообщите администрации об ошибках. -cs : Poznámka: Pokud toto zabere více jak 30 sekund, je pravděpodobně chyba někde na naší straně. - Prosíme, zkuste to znovu později nebo nahlaste systémovou chybu, pokud tomu tak je. -hu : Figyelem: ha ez tovább tart mint 30 másodperc, akkor a mivelünk van a gond. - Kérlek próbáld meg később és ha adott az eset, akkor jelentsd a hibát. -nl : Als dit langer duurt dan 30 seconden, dan is er waarschijnlijk iets mis aan onze kant. - Probeer het in dat geval later nog een keer, of breng ons op de hoogte van deze bug. -de : Anmerkung: Wenn dies länger als 30 Sekunden dauert, ist wahrscheinlich etwas schief gelaufen. - Bitte probiere es später noch mal oder melde diesen Fehler, in diesem Fall. -es : Nota: si tarda más de 30 segundos, probablemente hay algo mal en nuestro lado. - Por favor inténtalo después o denúncialo como un bug si es el caso. -tr : Not: Eğer bu işlem 30 saniyeden uzun sürerse, bizde bir sorun var demektir. - Bu durumda lütfen daha sonra tekrar deneyin veya bize haber verin. -uk : Примітка: якщо процес займає більше 30 секунд, на нашій стороні, мабуть, трапилась якась помилка. - Будь ласка, спробуйте пізніше або повідомте нам про цей випадок. -it : Nota: se passano più di 30 secondi allora qualcosa è andato storto dalla nostra parte. - Prova di nuovo o segnalaci il bug. - # VN Relation graph page (/v+/rg) diff --git a/data/script.js b/data/script.js index 1bfeff8d..76457efd 100644 --- a/data/script.js +++ b/data/script.js @@ -1006,11 +1006,11 @@ function scrLoad() { var scr = byId('screenshots').value.split(' '); for(i=0; i<scr.length && scr[i].length>1; i++) { var r = scr[i].split(','); - scrAdd(r[0], r[1], r[2]); + scrSet(scrAdd(r[0], r[1], r[2]), VNEDITSCR[r[0]][0], VNEDITSCR[r[0]][1]); } + ivInit(); scrLast(); - scrCheckStatus(); scrSetSubmit(); } @@ -1046,12 +1046,12 @@ function scrURL(id, t) { } function scrAdd(id, nsfw, rel) { - // tr.scr_status = 0: done, 1: uploading, 2: waiting for thumbnail + // tr.scr_status = 0: done, 1: uploading - var tr = tag('tr', { id:'scr_tr_'+id, scr_id: id, scr_status: id?2:1, scr_rel: rel, scr_nsfw: nsfw}, + var tr = tag('tr', { id:'scr_tr_'+id, scr_id: id, scr_status: 1, scr_rel: rel, scr_nsfw: nsfw}, tag('td', { 'class': 'thumb'}, mt('_js_loading')), tag('td', - tag('b', id ? mt('_vnedit_scr_fetching') : mt('_vnedit_scr_uploading')), + tag('b', mt('_vnedit_scr_uploading')), tag('br', null), id ? null : mt('_vnedit_scr_upl_msg'), tag('br', null), @@ -1062,12 +1062,57 @@ function scrAdd(id, nsfw, rel) { return tr; } +function scrSet(tr, width, height) { + var dim = width+'x'+height; + tr.scr_status = 0; + + // image + setContent(byName(tr, 'td')[0], + tag('a', {href: scrURL(tr.scr_id, 'f'), rel:'iv:'+dim+':edit'}, + tag('img', {src: scrURL(tr.scr_id, 't')}) + ) + ); + + // check full resolution with the list of DB-defined resolutions + var odd = true; + if(dim == '256x384') // special-case NDS resolution (not in the DB) + odd = false; + for(var j=0; j<resolutions.length && odd; j++) { + if(typeof resolutions[j][1] != 'object') { + if(resolutions[j][0] == dim) + odd = false; + } else { + for(var k=1; k<resolutions[j].length; k++) + if(resolutions[j][k][1] == dim) + odd = false; + } + } + + // content + var rel = tag('select', {onchange: scrSerialize, 'class':'scr_relsel'}); + for(var j=0; j<scrRel.length; j++) + rel.appendChild(tag('option', {value: scrRel[j][0], selected: tr.scr_rel == scrRel[j][0]}, scrRel[j][1])); + var nsfwid = 'scr_sfw_'+tr.scr_id; + setContent(byName(tr, 'td')[1], + tag('b', mt('_vnedit_scr_id', tr.scr_id)), + ' (', tag('a', {href: '#', onclick:scrDel}, mt('_js_remove')), ')', + tag('br', null), + mt('_vnedit_scr_fullsize', dim), + odd ? tag('b', {'class':'standout', 'style':'font-weight: bold'}, ' '+mt('_vnedit_scr_nonstandard')) : null, + tag('br', null), + tag('br', null), + tag('input', {type:'checkbox', onclick:scrSerialize, id:nsfwid, name:nsfwid, checked: tr.scr_nsfw>0, 'class':'scr_nsfw'}), + tag('label', {'for':nsfwid}, mt('_vnedit_scr_nsfw')), + tag('br', null), + rel + ); +} + function scrLast() { if(byId('scr_last')) byId('scr_table').removeChild(byId('scr_last')); var full = byName(byId('scr_table'), 'tr').length >= 10; - var rel = tag('select', {onchange: function(){scrDefRel=this.options[this.selectedIndex].value}, 'class':'scr_relsel', 'id':'scradd_relsel'}); for(var j=0; j<scrRel.length; j++) rel.appendChild(tag('option', {value: scrRel[j][0], selected: scrDefRel == scrRel[j][0]}, scrRel[j][1])); @@ -1092,73 +1137,6 @@ function scrLast() { )); } -function scrCheckStatus() { - var ids = []; - var trs = byName(byId('scr_table'), 'tr'); - for(var i=0; i<trs.length-1; i++) - if(trs[i].scr_status == 2) - ids[ids.length] = 'id='+trs[i].scr_id; - if(!ids.length) - return setTimeout(scrCheckStatus, 1000); - - var ti = setTimeout(scrCheckStatus, 10000); - ajax('/xml/screenshots.xml?'+ids.join(';'), function(hr) { - var ls = hr.responseXML.getElementsByTagName('item'); - for(var i=0; i<ls.length; i++) { - var tr = byId('scr_tr_'+ls[i].getAttribute('id')); - if(!tr || ls[i].getAttribute('processed') != '1') - continue; - tr.scr_status = 0; // ready - - // image - var dim = ls[i].getAttribute('width')+'x'+ls[i].getAttribute('height'); - setContent(byName(tr, 'td')[0], - tag('a', {href: scrURL(tr.scr_id, 'f'), rel:'iv:'+dim+':edit'}, - tag('img', {src: scrURL(tr.scr_id, 't')}) - ) - ); - - // check full resolution with the list of DB-defined resolutions - var odd = true; - if(dim == '256x384') // special-case NDS resolution (not in the DB) - odd = false; - for(var j=0; j<resolutions.length && odd; j++) { - if(typeof resolutions[j][1] != 'object') { - if(resolutions[j][0] == dim) - odd = false; - } else { - for(var k=1; k<resolutions[j].length; k++) - if(resolutions[j][k][1] == dim) - odd = false; - } - } - - // content - var rel = tag('select', {onchange: scrSerialize, 'class':'scr_relsel'}); - for(var j=0; j<scrRel.length; j++) - rel.appendChild(tag('option', {value: scrRel[j][0], selected: tr.scr_rel == scrRel[j][0]}, scrRel[j][1])); - var nsfwid = 'scr_sfw_'+tr.scr_id; - setContent(byName(tr, 'td')[1], - tag('b', mt('_vnedit_scr_id', tr.scr_id)), - ' (', tag('a', {href: '#', onclick:scrDel}, mt('_js_remove')), ')', - tag('br', null), - mt('_vnedit_scr_fullsize', dim), - odd ? tag('b', {'class':'standout', 'style':'font-weight: bold'}, ' '+mt('_vnedit_scr_nonstandard')) : null, - tag('br', null), - tag('br', null), - tag('input', {type:'checkbox', onclick:scrSerialize, id:nsfwid, name:nsfwid, checked: tr.scr_nsfw>0, 'class':'scr_nsfw'}), - tag('label', {'for':nsfwid}, mt('_vnedit_scr_nsfw')), - tag('br', null), - rel - ); - } - scrSerialize(); - ivInit(); - clearTimeout(ti); - setTimeout(scrCheckStatus, 1000); - }); -} - function scrDel(what) { var tr = what && what.scr_status != null ? what : this; while(tr.nodeName.toLowerCase() != 'tr') @@ -1213,12 +1191,8 @@ function scrUploadComplete() { scrDel(tr); } else { tr.id = 'scr_tr_'+tr.scr_id; - tr.scr_status = 2; - setContent(byName(tr, 'td')[1], - tag('b', mt('_vnedit_scr_genthumb')), - tag('br', null), - mt('_vnedit_scr_genthumb_msg') - ); + scrSet(tr, fr.window.document.getElementsByTagName('image')[0].getAttribute('width'), fr.window.document.getElementsByTagName('image')[0].getAttribute('height')); + ivInit(); } } diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index d0015d27..83054b0a 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -237,7 +237,7 @@ sub dbVNImageId { # insert a new screenshot and return it's ID sub dbScreenshotAdd { my($s, $width, $height) = @_; - return $s->dbRow(q|INSERT INTO screenshots (processed, width, height) VALUES (true, ?, ?) RETURNING id|, $width, $height)->{id}; + return $s->dbRow(q|INSERT INTO screenshots (width, height) VALUES (?, ?) RETURNING id|, $width, $height)->{id}; } diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm index 537b71f6..d7cba196 100644 --- a/lib/VNDB/Handler/VNEdit.pm +++ b/lib/VNDB/Handler/VNEdit.pm @@ -299,6 +299,13 @@ sub _form { ) : ( [ hidden => short => 'screenshots' ], [ static => nolabel => 1, content => sub { + script type => 'text/javascript'; + # Screenshot resolutions + lit 'VNEDITSCR = {'; + my @scr = map /^(\d+),/?$1:(), split / /, $frm->{screenshots}; + lit join ',', map "$_->{id}:[$_->{width},$_->{height}]", @scr ? @{$self->dbScreenshotGet(\@scr)} : (); + lit '};'; + end; div class => 'warning'; lit mt '_vnedit_scrmsg'; end; @@ -380,19 +387,7 @@ sub scrxml { $self->resHeader('Content-type' => 'text/xml; charset=UTF-8'); # fetch information about screenshots - if($self->reqMethod ne 'POST') { - my $ids = $self->formValidate( - { get => 'id', required => 1, template => 'int', multi => 1 } - ); - return $self->resNotFound if $ids->{_err}; - my $r = $self->dbScreenshotGet($ids->{id}); - - xml; - tag 'screenshots'; - tag 'item', %$_, undef for (@$r); - end; - return; - } + die "This page can only be accessed as POST\n" if $self->reqMethod ne 'POST'; # upload new screenshot my $num = $self->formValidate({get => 'upload', template => 'int'}); @@ -406,12 +401,13 @@ sub scrxml { $id = -1 if !$id && $imgdata !~ /^(\xff\xd8|\x89\x50)/; # JPG or PNG headers # no error? save and let Multi process it + my($ow, $oh); if(!$id) { 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')); + ($ow, $oh) = ($im->Get('width'), $im->Get('height')); $id = $self->dbScreenshotAdd($ow, $oh); my $fn = imgpath(sf => $id); @@ -430,7 +426,7 @@ sub scrxml { xml; # blank stylesheet because some browsers don't allow JS access otherwise lit qq|<?xml-stylesheet href="$self->{url_static}/f/blank.css" type="text/css" ?>|; - tag 'image', id => $id, undef; + tag 'image', id => $id, $id > 0 ? (width => $ow, height => $oh) : (), undef; } diff --git a/util/sql/schema.sql b/util/sql/schema.sql index 324f3f76..8cc4956e 100644 --- a/util/sql/schema.sql +++ b/util/sql/schema.sql @@ -225,7 +225,6 @@ CREATE TABLE rlists ( -- screenshots CREATE TABLE screenshots ( id SERIAL NOT NULL PRIMARY KEY, - processed boolean NOT NULL DEFAULT FALSE, width smallint NOT NULL DEFAULT 0, height smallint NOT NULL DEFAULT 0 ); diff --git a/util/updates/update_2.23.sql b/util/updates/update_2.23.sql index 46a2dd68..f7aaf7f3 100644 --- a/util/updates/update_2.23.sql +++ b/util/updates/update_2.23.sql @@ -64,3 +64,5 @@ DROP FUNCTION chars_rev_image_notify(); DROP TRIGGER screenshot_process_notify ON screenshots; DROP FUNCTION screenshot_process_notify(); + +ALTER TABLE screenshots DROP COLUMN processed; |