mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
sorry android
This commit is contained in:
parent
ab09927e7b
commit
c06d928bb5
|
@ -411,7 +411,6 @@ function U2pvis(act, btns) {
|
||||||
|
|
||||||
function up2k_init(have_crypto) {
|
function up2k_init(have_crypto) {
|
||||||
//have_crypto = false;
|
//have_crypto = false;
|
||||||
var need_filereader_cache = undefined;
|
|
||||||
|
|
||||||
// show modal message
|
// show modal message
|
||||||
function showmodal(msg) {
|
function showmodal(msg) {
|
||||||
|
@ -907,31 +906,6 @@ function up2k_init(have_crypto) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_filereader_speed(segm_err) {
|
|
||||||
var f = st.todo.hash[0].fobj,
|
|
||||||
sz = Math.min(2, f.size),
|
|
||||||
reader = new FileReader(),
|
|
||||||
t0, ctr = 0;
|
|
||||||
|
|
||||||
var segm_next = function () {
|
|
||||||
var t = new Date().getTime(),
|
|
||||||
td = t - t0;
|
|
||||||
|
|
||||||
if (++ctr > 2) {
|
|
||||||
need_filereader_cache = td > 50;
|
|
||||||
st.busy.hash.pop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
t0 = t;
|
|
||||||
reader.onload = segm_next;
|
|
||||||
reader.onerror = segm_err;
|
|
||||||
reader.readAsArrayBuffer(
|
|
||||||
bobslice.call(f, 0, sz));
|
|
||||||
};
|
|
||||||
|
|
||||||
segm_next();
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensure_rendered(func) {
|
function ensure_rendered(func) {
|
||||||
var hidden = false;
|
var hidden = false;
|
||||||
var keys = ['hidden', 'msHidden', 'webkitHidden'];
|
var keys = ['hidden', 'msHidden', 'webkitHidden'];
|
||||||
|
@ -946,111 +920,84 @@ function up2k_init(have_crypto) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function exec_hash() {
|
function exec_hash() {
|
||||||
if (need_filereader_cache === undefined) {
|
|
||||||
st.busy.hash.push(1);
|
|
||||||
return test_filereader_speed(segm_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
var t = st.todo.hash.shift();
|
var t = st.todo.hash.shift();
|
||||||
st.busy.hash.push(t);
|
st.busy.hash.push(t);
|
||||||
st.bytes.hashed += t.size;
|
st.bytes.hashed += t.size;
|
||||||
t.bytes_uploaded = 0;
|
t.bytes_uploaded = 0;
|
||||||
t.t1 = new Date().getTime();
|
t.t1 = new Date().getTime();
|
||||||
|
|
||||||
var nchunk = 0;
|
var bpend = 0,
|
||||||
var chunksize = get_chunksize(t.size);
|
nchunk = 0,
|
||||||
var nchunks = Math.ceil(t.size / chunksize);
|
chunksize = get_chunksize(t.size),
|
||||||
|
nchunks = Math.ceil(t.size / chunksize),
|
||||||
// android-chrome has 180ms latency on FileReader calls,
|
hashtab = {};
|
||||||
// detect this and do 32MB at a time
|
|
||||||
var cache_buf = undefined,
|
|
||||||
cache_ofs = 0,
|
|
||||||
subchunks = 2;
|
|
||||||
|
|
||||||
while (subchunks * chunksize <= 32 * 1024 * 1024)
|
|
||||||
subchunks++;
|
|
||||||
|
|
||||||
subchunks--;
|
|
||||||
if (!need_filereader_cache)
|
|
||||||
subchunks = 1;
|
|
||||||
|
|
||||||
pvis.setab(t.n, nchunks);
|
pvis.setab(t.n, nchunks);
|
||||||
pvis.move(t.n, 'bz');
|
pvis.move(t.n, 'bz');
|
||||||
|
|
||||||
var reader = new FileReader();
|
|
||||||
|
|
||||||
var segm_next = function () {
|
var segm_next = function () {
|
||||||
if (cache_buf) {
|
if (nchunk >= nchunks || (bpend > chunksize && bpend >= 32 * 1024 * 1024))
|
||||||
return hash_calc();
|
return false;
|
||||||
}
|
|
||||||
reader.onload = segm_load;
|
var reader = new FileReader(),
|
||||||
reader.onerror = segm_err;
|
nch = nchunk++,
|
||||||
|
car = nch * chunksize,
|
||||||
|
cdr = car + chunksize;
|
||||||
|
|
||||||
var car = nchunk * chunksize;
|
|
||||||
var cdr = car + chunksize * subchunks;
|
|
||||||
if (cdr >= t.size)
|
if (cdr >= t.size)
|
||||||
cdr = t.size;
|
cdr = t.size;
|
||||||
|
|
||||||
|
bpend += cdr - car;
|
||||||
|
|
||||||
|
reader.onload = function (e) {
|
||||||
|
hash_calc(nch, e.target.result);
|
||||||
|
};
|
||||||
|
reader.onerror = segm_err;
|
||||||
reader.readAsArrayBuffer(
|
reader.readAsArrayBuffer(
|
||||||
bobslice.call(t.fobj, car, cdr));
|
bobslice.call(t.fobj, car, cdr));
|
||||||
|
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
var segm_load = function (e) {
|
var hash_calc = function (nch, buf) {
|
||||||
cache_buf = e.target.result;
|
while (segm_next());
|
||||||
cache_ofs = 0;
|
|
||||||
hash_calc();
|
|
||||||
};
|
|
||||||
|
|
||||||
var hash_calc = function () {
|
var hash_done = function (hashbuf) {
|
||||||
var buf = cache_buf;
|
var hslice = new Uint8Array(hashbuf).subarray(0, 32);
|
||||||
if (chunksize >= buf.byteLength)
|
var b64str = buf2b64(hslice).replace(/=$/, '');
|
||||||
cache_buf = undefined;
|
hashtab[nch] = b64str;
|
||||||
else {
|
t.hash.push(nch);
|
||||||
var ofs = cache_ofs;
|
pvis.hashed(t);
|
||||||
var ofs2 = ofs + Math.min(chunksize, cache_buf.byteLength - cache_ofs);
|
|
||||||
cache_ofs = ofs2;
|
|
||||||
buf = new Uint8Array(cache_buf).subarray(ofs, ofs2);
|
|
||||||
if (ofs2 >= cache_buf.byteLength)
|
|
||||||
cache_buf = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
var func = function () {
|
bpend -= buf.byteLength;
|
||||||
if (have_crypto)
|
if (t.hash.length < nchunks) {
|
||||||
crypto.subtle.digest('SHA-512', buf).then(hash_done);
|
return segm_next();
|
||||||
else {
|
|
||||||
var hasher = new asmCrypto.Sha512();
|
|
||||||
hasher.process(new Uint8Array(buf));
|
|
||||||
hasher.finish();
|
|
||||||
hash_done(hasher.result);
|
|
||||||
}
|
}
|
||||||
|
t.hash = [];
|
||||||
|
for (var a = 0; a < nchunks; a++) {
|
||||||
|
t.hash.push(hashtab[a]);
|
||||||
|
}
|
||||||
|
|
||||||
|
t.t2 = new Date().getTime();
|
||||||
|
if (t.n == 0 && window.location.hash == '#dbg') {
|
||||||
|
var spd = (t.size / ((t.t2 - t.t1) / 1000.)) / (1024 * 1024.);
|
||||||
|
alert('{0} ms, {1} MB/s\n'.format(t.t2 - t.t1, spd.toFixed(3)) + t.hash.join('\n'));
|
||||||
|
}
|
||||||
|
|
||||||
|
pvis.seth(t.n, 2, 'hashing done');
|
||||||
|
pvis.seth(t.n, 1, '📦 wait');
|
||||||
|
st.busy.hash.splice(st.busy.hash.indexOf(t), 1);
|
||||||
|
st.todo.handshake.push(t);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (cache_buf)
|
if (have_crypto)
|
||||||
ensure_rendered(func);
|
crypto.subtle.digest('SHA-512', buf).then(hash_done);
|
||||||
else
|
else {
|
||||||
func();
|
var hasher = new asmCrypto.Sha512();
|
||||||
};
|
hasher.process(new Uint8Array(buf));
|
||||||
|
hasher.finish();
|
||||||
var hash_done = function (hashbuf) {
|
hash_done(hasher.result);
|
||||||
var hslice = new Uint8Array(hashbuf).subarray(0, 32);
|
|
||||||
var b64str = buf2b64(hslice).replace(/=$/, '');
|
|
||||||
t.hash.push(b64str);
|
|
||||||
|
|
||||||
pvis.hashed(t);
|
|
||||||
if (++nchunk < nchunks) {
|
|
||||||
return segm_next();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
t.t2 = new Date().getTime();
|
|
||||||
if (t.n == 0 && window.location.hash == '#dbg') {
|
|
||||||
var spd = (t.size / ((t.t2 - t.t1) / 1000.)) / (1024 * 1024.);
|
|
||||||
alert('{0} ms, {1} MB/s\n'.format(t.t2 - t.t1, spd.toFixed(3)) + t.hash.join('\n'));
|
|
||||||
}
|
|
||||||
|
|
||||||
pvis.seth(t.n, 2, 'hashing done');
|
|
||||||
pvis.seth(t.n, 1, '📦 wait');
|
|
||||||
st.busy.hash.splice(st.busy.hash.indexOf(t), 1);
|
|
||||||
st.todo.handshake.push(t);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var segm_err = function () {
|
var segm_err = function () {
|
||||||
|
|
Loading…
Reference in a new issue