Potrable nanoboard
username1565 opened this issue · comments
Есть несколько вопросов.
- Можете ли вы сделать Portable nanoboard в виде exe или jar-файла,
как эта: nanoboard-restore.zip - Можете ли вы сделать список ссылок на контейнеры, как downloaded.txt, который там есть, чтобы можно было выгрузить бекап - каким-нибудь wget.
- Сохраняются ли у вас PNG-картинки? Если да, то в какую папку?
- Могу
- Можно достать из базы SQL-запросом, но в этом нет особого смысла т.к. посты и так сохранены там, а в ПНГ в лучшем случае 1/8 полезных данных
- Не сохраняются, они обрабатываются однократно в памяти
-
Благодарю. Портаблик только на x64-й винде работает.
Выгрузился файл каптчи, и всё нормально запустилось на windows 8.1, по bat-файлу. -
Да, я вижу там ссылки на PNG: "Настройки" - "Принятые контейнеры",
но там не весь список, он урезан, и надо его листать.
Можно было бы, этот список и обработать,
каким-нибудь JavaScript'ом с регулярным выражением,
но лучше было бы-таки, из базы их вытащить, и в файл сохранить, прописав это - в коде.
И да, вот сами нанопосты, можно ли их тоже высунуть из этой базы,
и насовать в другие PNG-шки?
Просто они, эти посты, недоступны к выбору, когда создаёшь PNG-контейнер.
Сделать бы кнопку что-ли, чтоб на выбор их совать и распространять...
Например, отвечаешь в тред - в PNG-шку пхается весь тред, или первый пост, и цепочка постов, к которым цепляешься.
P.S.: Вопрос выше - отпадает. Нашёл кнопку "В очередь" под каждым нанопостом. =)
- Ну в клиенте 3.0 я тоже не вижу никакой папки с картинками...
Она как занимала 200 мегабайт, так примерно и занимает, после прогрузки борды.
Но там есть файл downloaded.txt, со ссылками на картинки,
и я выгрузил эти картинки, при помощи aria2 и wget,
запустив их с параметром пропуска повторяющихся файлов.
Ещё бы сделать комментарии в настройках, там где список тредов,
ну, чтобы строки, начинающиеся с символа #
- пропускались...
Тогда можно будет просто, со старой наноборды
скопипастить настройки и сохранить, их, без редактирования. Ну, и... Наоборот.
А то у вас поле красное становится, и надо искать во всём списке, где там пробел закрался или ещё чё...
Поле краснеет, если есть символы #
, \n
, :
(в случае если в URL указан PORT),
и ещё если тред с GET-запросом и есть символ -
,
после доменного имени и имени файла страницы.
Например, вот этот огрызок кода, из настроек старой наноборды:
#My OWN thread
#https://myboard.onion:4249/index.php?search-posts=true&last=50
содержит аж 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.
В общем, вроде-как, порешал я эту фигню с файлами. nanoboard/nanoboard#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,
Вот такая, примерно фигня - в портабельной версии:
#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.
...
Ну и дальше там ещё...
Следующие три поста содержат ошибки, стопорящие наноборду
в портабельном клиенте карасика:
946d50e33c413a93d7c963424e0846d9
// $('#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]
c19a06c128f78e5946014883bc018dd9
'[file name="filename.extension" type="mime-type"]BASE64-CONTENT[/file]'
- throw-error функции atob:
[file]не_base64[/file]
4dcf53a58e839e8fddce6959222ed675
В предыдущем посте, был код с тегом [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
(или просто вывести предупреждение).