Unicode to binary conversion, ghetto style.

This commit is contained in:
Nicolas Stepien 2012-02-01 23:32:25 +01:00
parent 8baea291b3
commit f3d06094fc
2 changed files with 49 additions and 33 deletions

View File

@ -1829,37 +1829,45 @@
}
},
post: function(data) {
var boundary, callbacks, form, name, opts, parts, toUTF8, url, val;
var boundary, callbacks, form, i, name, opts, parts, toBin, url, val;
url = "http://sys.4chan.org/" + data.board + "/post";
delete data.board;
delete data.qr;
if (engine === 'gecko' && data.upfile) {
toUTF8 = function(val) {
var c, n, utf, _ref;
utf = '';
for (n = 0, _ref = val.length - 1; 0 <= _ref ? n <= _ref : n >= _ref; 0 <= _ref ? n++ : n--) {
c = val.charCodeAt(n);
if (c < 128) {
utf += String.fromCharCode(c);
} else if ((127 < c && c < 2048)) {
utf += String.fromCharCode((c >> 6) | 192);
utf += String.fromCharCode((c & 63) | 128);
if (!data.binary) {
toBin = function(data, name, val) {
var bb, r;
bb = new MozBlobBuilder();
bb.append(val);
r = new FileReader();
r.onload = function() {
data[name] = r.result;
if (!--i) return qr.message.post(data);
};
return r.readAsBinaryString(bb.getBlob('text/plain'));
};
i = Object.keys(data).length;
for (name in data) {
val = data[name];
if (typeof val === 'object') {
toBin(data.upfile, 'name', data.upfile.name);
} else {
utf += String.fromCharCode((c >> 12) | 224);
utf += String.fromCharCode(((c >> 6) & 63) | 128);
utf += String.fromCharCode((c & 63) | 128);
toBin(data, name, String(val));
}
}
return utf;
};
data.board = url.split('/')[3];
data.binary = true;
return;
}
delete data.binary;
boundary = '-------------SMCD' + Date.now();
parts = [];
parts.push('Content-Disposition: form-data; name="upfile"; filename="' + toUTF8(data.upfile.name) + '"\r\n' + 'Content-Type: ' + data.upfile.type + '\r\n\r\n' + data.upfile.buffer + '\r\n');
parts.push('Content-Disposition: form-data; name="upfile"; filename="' + data.upfile.name + '"\r\n' + 'Content-Type: ' + data.upfile.type + '\r\n\r\n' + data.upfile.buffer + '\r\n');
delete data.upfile;
for (name in data) {
val = data[name];
if (val) {
parts.push('Content-Disposition: form-data; name="' + name + '"\r\n\r\n' + toUTF8(String(val)) + '\r\n');
parts.push('Content-Disposition: form-data; name="' + name + '"\r\n\r\n' + val + '\r\n');
}
}
form = '--' + boundary + '\r\n' + parts.join('--' + boundary + '\r\n') + '--' + boundary + '--\r\n';

View File

@ -1403,28 +1403,36 @@ qr =
# File with filename upload fix from desuwa
if engine is 'gecko' and data.upfile
toUTF8 = (val) ->
utf = ''
for n in [0..val.length-1]
c = val.charCodeAt n
if c < 128
utf += String.fromCharCode c
else if 127 < c < 2048
utf += String.fromCharCode (c >> 6) | 192
utf += String.fromCharCode (c & 63) | 128
# All of this is fucking retarded.
unless data.binary
toBin = (data, name, val) ->
bb = new MozBlobBuilder()
bb.append val
r = new FileReader()
r.onload = ->
data[name] = r.result
unless --i
qr.message.post data
r.readAsBinaryString bb.getBlob 'text/plain'
i = Object.keys(data).length
for name, val of data
if typeof val is 'object' # File. toBin the filename.
toBin data.upfile, 'name', data.upfile.name
else
utf += String.fromCharCode (c >> 12) | 224
utf += String.fromCharCode ((c >> 6) & 63) | 128
utf += String.fromCharCode (c & 63) | 128
utf
toBin data, name, String(val)
data.board = url.split('/')[3]
data.binary = true
return
delete data.binary
boundary = '-------------SMCD' + Date.now();
parts = []
parts.push 'Content-Disposition: form-data; name="upfile"; filename="' + toUTF8(data.upfile.name) + '"\r\n' + 'Content-Type: ' + data.upfile.type + '\r\n\r\n' + data.upfile.buffer + '\r\n'
parts.push 'Content-Disposition: form-data; name="upfile"; filename="' + data.upfile.name + '"\r\n' + 'Content-Type: ' + data.upfile.type + '\r\n\r\n' + data.upfile.buffer + '\r\n'
delete data.upfile
for name, val of data
parts.push 'Content-Disposition: form-data; name="' + name + '"\r\n\r\n' + toUTF8(String val) + '\r\n' if val
parts.push 'Content-Disposition: form-data; name="' + name + '"\r\n\r\n' + val + '\r\n' if val
form = '--' + boundary + '\r\n' + parts.join('--' + boundary + '\r\n') + '--' + boundary + '--\r\n'
else