summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/lang.txt46
-rw-r--r--data/script.js132
-rw-r--r--lib/VNDB/DB/VN.pm2
-rw-r--r--lib/VNDB/Handler/VNEdit.pm26
-rw-r--r--util/sql/schema.sql1
-rw-r--r--util/updates/update_2.23.sql2
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;