Open username1565 opened 5 years ago
Благодарю. Портаблик только на x64-й винде работает. Выгрузился файл каптчи, и всё нормально запустилось на windows 8.1, по bat-файлу.
Да, я вижу там ссылки на PNG: "Настройки" - "Принятые контейнеры", но там не весь список, он урезан, и надо его листать. Можно было бы, этот список и обработать, каким-нибудь JavaScript'ом с регулярным выражением, но лучше было бы-таки, из базы их вытащить, и в файл сохранить, прописав это - в коде.
И да, вот сами нанопосты, можно ли их тоже высунуть из этой базы, и насовать в другие PNG-шки? Просто они, эти посты, недоступны к выбору, когда создаёшь PNG-контейнер. Сделать бы кнопку что-ли, чтоб на выбор их совать и распространять... Например, отвечаешь в тред - в PNG-шку пхается весь тред, или первый пост, и цепочка постов, к которым цепляешься. P.S.: Вопрос выше - отпадает. Нашёл кнопку "В очередь" под каждым нанопостом. =)
Ещё бы сделать комментарии в настройках, там где список тредов,
ну, чтобы строки, начинающиеся с символа #
- пропускались...
Тогда можно будет просто, со старой наноборды
скопипастить настройки и сохранить, их, без редактирования. Ну, и... Наоборот.
А то у вас поле красное становится, и надо искать во всём списке, где там пробел закрался или ещё чё...
Поле краснеет, если есть символы #
, \n
, :
(в случае если в URL указан PORT),
и ещё если тред с GET-запросом и есть символ -
,
после доменного имени и имени файла страницы.
Например, вот этот огрызок кода, из настроек старой наноборды:
#My OWN thread
содержит аж 5 ошибок, и попробуй найти их.
Ну и...
Кнопки, вроде "Collect PNG" я не вижу, борда как была пустой,
без всяких разделов, так и осталась пустой, после запуска.
В портаблике - не прописаны дефолтные треды.
И так - аж пока не додумаешься засунуть треды в настройки,
и только потом происходит автоматическая загрузка, на фоне, по-тихому.
Управлять процессом, и приостановить его (если мало памяти в системе) - нельзя,
приходится закрывать софтину.
Надо бы добавить кнопку, и если настройки пусты, или хосты тредов не отвечают,
чтобы всплыло сообщение о том, что делать дальше.
А то, поставил такой, смотришь не работает... И снёс софтину нафиг.
___
И ещё... Сделать бы отображение постов, в виде дерева, как в клиенте 3.0.
Ну, чтоб не кликать под сообщением, для просмотра каждого ответа.
@Karasiq, посты с вашей борды не видно в третьем клиенте. Можете подгрузить тестовые контейнеры - отсюда: http://dobrochan.com/mad/res/75979.xhtml
UPD: Достаточно было подобавлять все посты ветки в очередь, обнулить случайные посты, и добавить все посты из очереди - в контейнер. После этого он нормально парсится в клиенте 3.0, и посты видно.
И да, несмотря на то, что посты с третьего клиента - у вас успешно грузятся, файлы старого xmg-формата - плохо отображаются... В общем, смотрите какая фигня:
Сообщение было написано в клиенте 3.0, и прогружено в вашей portable-наноборде.
Не отображающаяся картинка, в сообщении, на вашей борде:
Исходный текст: Видно только тег xmg, и base64. Если голый base64 скопировать, и сунуть сюда: https://username1565.github.io/brainwallet.github.io/#converter а затем - выбрать base и жмакнуть "download as binary", то на выходе, после закачки - получаем бинарник того же zip'a (но с другим расширением, txt). После переименования его в zip - открывается zip.
А вот сам закачивающийся файл и ссылка на него, внизу окна, в клиенте 3.0: Имя файла - file.zip (by default), а внутри ссылки, by default, "data:application/zip;base64,и_сам_бейс_бинарника".
Очевидно наличие атрибута download в этой "ссылке на закачку": UPD: (об этом - в коде ниже).
Исходя из всего вышеописанного, для обратной совместимости с клиентом 3.0 просьба сделать у вас - интерпретирование bb-кода xmg не как картинки, а как zip-файла. UPD: (Смотрите код ниже.)
Ну и, конечно же, имя файла, и его расширение,
можно было бы засунуть и после тега xmg, до знака =
,
через какую-нибудь запятую, точку с запятой, или другой разделитель,
если имя файла и расширение - указаны.
Как-то так:
[xmg,pdf=бейс-бинарника]
,
[xmg,image/svg+xml=бейс-бинарника]
,
[xmg;My_archive.rar;application/octet-stream=бейс-бинарника]
.
UPD: (Сделав это так, чтобы сохранить обратную совместимость со старым xmg-форматом в клиенте 3.0.)
Если же имя файла не указано, но указано расширение (или mime-тип файла),
то имя файла можно было бы сгенерировать и рандомно.
Но лучше брать его из $('input[type=file]').files[0].name, при выборе файла для loading
'a.
Для генерации файла, кстати, вот вам одна строчка на Javascript, которая генерирует рандомную строку любой длины, с одним лишь вызовом функции Math.random():
var len = 20;/*<--String Length ...*/for(var s = "", rem = 100000000, n = Math.random()*10*rem; s.length < len;){rem=10*rem%n; s+= (rem%10!==0)?rem.toString(36).replace(".", "").substr(0, len-s.length):"";}//document.write("<br>", 's.length: ', s.length, 's: ', s);
Можете вставить её в консоль браузера и пошатать параметр len
,
ну и на JAVA-байткод в jar-файлах перекрутить потом.
Также, можно сделать третий клиент совместимым с вашим форматом нанопостов, чтобы они грузились... Поскольку ни один контейнер, сгенерированный на вашей наноборде - не парсится клиентом 3.0, и посты внутри него - не отображаются... Исходный код третьего клиента - я перезалил сюда: https://github.com/username1565/nanoboard/ Но что надо бы подправить там, пока что - понятия не имею...
P.S.: Я вижу, что вставка bb-кода, при выборе файла, в клиенте 3.0, происходит на JavaScript, в файле nanoboard-restore\scripts\img2base64.js
//строка 75:
$('#result').text('[xmg='+res.substring(res.indexOf(',')+1)+']');
//строка 121:
$('#result').text('[xmg='+dataURL.substring(dataURL.indexOf(',')+1)+']');
//('[xmg='+(подстрока из dataURL с позиции следующей после позиции найденной запятой)+']');
К тому же и интерпретация BB-кода с тегом xmg - c выводом, в виде download-ссылки, тоже осуществляется через JavaScript, но уже в другом скрипте: nanoboard-restore\scripts\nanoclient.js
//строка 111:
if (img.src.startsWith('data:image/jpeg;base64,UEsDB')) {//if PK at first - then zip //saving backward compatibility with old zipJPEGs
$(img).replaceWith($('<a download=file'+(i+1)+'.zip href='+img.src.replace('image/jpeg','application/zip')+'>[file'+(i+1)+'.zip]</a>'));
}
Вот так как-то надо обрабатывать этот bb-код [xmg] и у вас - для обратной совместимости.
Я также вижу xmg, у вас уже есть - вот здесь:
https://raw.githubusercontent.com/Karasiq/nanoboard/master/frontend/src/main/scala/com/karasiq/nanoboard/frontend/components/post/PostRenderer.scala
но я не понимаю что оно, это xmg - вообще там делает.
Ведь у вас, при вставке файла - вообще совсем по-другому всё происходит,
без xmg: [file name="filename.ext" type="mime-type"]base64[/file]
так что я не уверен, что код из вышеуказанного файла - вообще задействован, при вставке...
Ну и конечно же, в скриптах клиента 3.0 - можно было бы прописать и bb-код [file]
,
как и у вас, но как именно это сделать, чтобы и xmg работало - я не очень врубаюсь...
В функции function updateImage(loader) есть переменная
var file = _loader.files[0];
Оттуда, как и с любого объекта "new File()", можно вытащить file.name (_loader.files[0].name) и file.type (_loader.files[0].type)... Ну, а дальше - уже думайте сами...
Чтобы через [file], как и у вас - можно было бы сделать это, как-то вот так вот:
//строка 76 в файле img2base64.js:
$('#result').text('[file name="'+file.name+'" type="'+file.type+'"]'+res.substring(res.indexOf(',')+1)+'[/file]');
и в nanoclient.js ещё, где download к ссылке цепляется - имя файла занести, и mime-type в dataURL... Но это всё имело бы смысл, для корректного отображения файлов с вашей наноборды, при условии, если бы посты с вашей наноборды хотя-бы отображались в клиенте 3.0. А они - так и вовсе не отображаются там!
И да, если делать там, в клиенте 3.0, [file]
вместо [xmg]
,
то подчеркну, что надо бы cделать это, обратно совместимым и со старым [xmg]
...
Поясню, почему я зациклился именно на stable версии клиента 3.0? Да потому что клиент 3.1, на наноборде который, он на XP не запустится, он требует .NET Framework v4.5.2, а 4.5 Framework - несовместима с Windows XP и более ранними версиями Windows.
Но при этом, 32-битная версия client 3.0 успешно запускается и на XP и на любой 64-битной системе, с любым фреймворком, выше 4.0.
В общем, вроде-как, порешал я эту фигню с файлами. https://github.com/nanoboard/nanoboard/issues/6 Вам остаётся поддержать кодом на скале - zip-файлы у старичка [xmg], как тут:
//строка 111:
if (img.src.startsWith('data:image/jpeg;base64,UEsDB')) {//if PK at first - then zip //saving backward compatibility with old zipJPEGs
$(img).replaceWith($('<a download=file'+(i+1)+'.zip href='+img.src.replace('image/jpeg','application/zip')+'>[file'+(i+1)+'.zip]</a>'));
}
Просто проверив начальные байты бейса. Конвертировать base64 в bin - можно здесь: https://username1565.github.io/brainwallet.github.io/#converter Base64 -> bin (download as binary) Base64 -> text (исходный текст файла) Bin -> base64 (Just loading file) Можно добавить ещё пару форматов, интерпретируя первые байты бейса. Пример, код на JavaScript:
//first bytes of base64 contains signatures for different file types
if(str.substring(0, 4)==='/9j/') // "яШя" check JPEG signature in first bytes of file
{
str = 'data:image/jpeg;base64,'+str; //set jpeg
}else if(str.substring(0, 4)==='R0lG'){ //gif
str = 'data:image/gif;base64,'+str;
}else if(
str.substring(0, 8)==='PD94bWwg' // "<xml" beginning from xml-tag
|| str.substring(0, 8)==='PHN2Zwog' // or "<svg" beginninb from svg-tag
){
str = 'data:image/svg+xml;base64,'+str; //set svg+xml
}else{ //or
str = 'data:image/png;base64,'+str; //by default set PNG
}
Ну и, надо бы, нам, как-нибудь, совместными усилиями - сделать так, чтоб посты с вашей борды грузились в клиенте 3.0, и наоборот ещё - всё надо перетестить и поисправлять или вообще переписать, а то, порой у вас в консоли - ошибки лезут, когда грузишь контейнеры, сгенерированные в клиенте 3.0.
И да, что за фрактальная музыка, у вас там, такая? ))
@Karasiq, Вот такая, примерно фигня - в портабельной версии: https://github.com/Karasiq/nanoboard/issues/3
Консоль - тут: https://pastebin.com/farvg4Xv Лезут ошибки, последние сообщения прогружаются не все.
UPD: достаточно было разблокировать nanoboard.bat в фаерволе (Comodo firewall), и всё зработало. Ошибки по прежнему иногда лезут, при попытке распарсить некоторые контейнеры, но вся борда прогружена и все разделы работают, кроме категории test.
В категорию "test" зайти нельзя. Наверняка, потому что в одном из постов есть код:
//строка 75 в файле nanoboard-restore\scripts\img2base64.js:
// $('#result').text('[xmg='+res.substring(res.indexOf(',')+1)+']');
//заменена на
$('#result').text('[file name="'+file.name+'" type="'+file.type+'"]'+res.substring(res.indexOf(',')+1)+'[/file]');
и в нём какие-то спецсимволы, либо [xmg-тег без бейса...
А также, возможно всё глючит нафиг - из-за конструкции [file]BLAH-BLAH[/file]
без бейса внутри, или из-за строки '[file name="filename.extension" type="mime-type"]BASE64-CONTENT[/file]'
,
либо из-за файлов с bb-кодом file,
как в вышеуказанной строке, но только - без одинарных кавычек.
Всё это надо бы исправить...
Ещё, хотелось бы удалить все контейнеры и прогрузить их по новой, но я не пойму куда сохраняются результаты о прогрузке контейнеров. Удалил всё из папки portable nanoboard и деинсталлировал nanoboard 1.3.2. Снова распаковал nanoboard portable v1.3.2, запустил, и вижу что настройки сохранены, и сообщения старые тоже на борде есть.
Также, хотелось бы задать папку для настроек в портабельной версии, при запуске её, например, параметром -data-dir="data", чтобы всё сохранялось в папку "data", рядом с bat-файлом или исполняемым файлом.
В категорию "test" зайти нельзя. Наверняка, потому что в одном из постов [xmg-тег без бейса [file]BLAH-BLAH[/file] без бейса
Да, где-то тут вот и надо пофиксить... В клиенте 3.0 такие посты грузятся нормально.
В консоли браузера (клавиша F12), при клике на категорию test, я вижу следующее:
0dd95fa0-a4f8-4117-bdf9-6fba998771b3.js:1821 scala.scalajs.js.JavaScriptException:
InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
...
Ну и дальше там ещё...
Следующие три поста содержат ошибки, стопорящие наноборду в портабельном клиенте карасика:
// $('#result').text('[xmg='+res.substring(res.indexOf(',')+1)+']');
- throw-error функции atob :
[xmg=не_base64]
$('#result').text('[file name="'+file.name+'" type="'+file.type+'"]'+res.substring(res.indexOf(',')+1)+'[/file]');
- throw-error функции atob:
[file]не_base64[/file]
'[file name="filename.extension" type="mime-type"]BASE64-CONTENT[/file]'
- throw-error функции atob:
[file]не_base64[/file]
В предыдущем посте, был код с тегом [file]BLAH-BLAH[/file].
- throw-error функции atob:
[file]не_base64[/file]
И ещё, помимо [xmg=НЕ_БЕЙС64]
, у тега [img=НЕ_БЕЙС64]
- тоже throw error'ом
стопорит весь скрипт, если его вводить руками, этот НЕ_БЕЙС64.
Превью искажается, в консоли браузера - видно throw exception.
После throw Error, выполнение скрипта - стопорится... Поэтому, вот вам функция на JavaScript, для проверки строки, без throw error:
//check is base64 without throw error
function isBase64(str) {//return true, or false
if(str==='' || str.trim()===''){return false;}//if string is empty or not contains base64 characters
try {
return btoa(atob(str)) == str; //true if base64
} catch (err) {
return false;
}
}
А дальше уже, если true, то можно продолжить - декодинг бейса, функцией atob. Можете пришпандорить эту функцию, в js-скрипты, причём везде, где используется бейс, с условием:
if(isBase64(str)){
//код
}else{
console.log('str is not base64-encoded. str = ', str);
}
//and continue script...
bb-код file - я протестил отдельно, в категории Test2. Всё работает. Не работают разве что посты, запощенные из-под nanoboard-portable-1.3.2, а именно - посты с большими и недожатыми JPEG'ами, они просто не парсятся в клиенте 3.0 из контейнера, и какая-то ошибка длины массива там, в консоли вылазит. Но это уже не ваша трабла, и надо править где-то - код клиента 3.0. Ну, или, ограничить длину бейса для совместимости с 3.0 (или просто вывести предупреждение).
Есть несколько вопросов.