Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Potrable nanoboard #5

Open
username1565 opened this issue Jan 6, 2019 · 7 comments
Open

Potrable nanoboard #5

username1565 opened this issue Jan 6, 2019 · 7 comments

Comments

@username1565
Copy link

username1565 commented Jan 6, 2019

Есть несколько вопросов.

  1. Можете ли вы сделать Portable nanoboard в виде exe или jar-файла,
    как эта: nanoboard-restore.zip
  2. Можете ли вы сделать список ссылок на контейнеры, как downloaded.txt, который там есть, чтобы можно было выгрузить бекап - каким-нибудь wget.
  3. Сохраняются ли у вас PNG-картинки? Если да, то в какую папку?
@Karasiq
Copy link
Owner

Karasiq commented Jan 15, 2019

  1. Могу
  2. Можно достать из базы SQL-запросом, но в этом нет особого смысла т.к. посты и так сохранены там, а в ПНГ в лучшем случае 1/8 полезных данных
  3. Не сохраняются, они обрабатываются однократно в памяти

@Karasiq
Copy link
Owner

Karasiq commented Jan 15, 2019

@username1565
Copy link
Author

username1565 commented Jan 18, 2019

  1. Благодарю. Портаблик только на x64-й винде работает.
    Выгрузился файл каптчи, и всё нормально запустилось на windows 8.1, по bat-файлу.

  2. Да, я вижу там ссылки на PNG: "Настройки" - "Принятые контейнеры",
    но там не весь список, он урезан, и надо его листать.
    Можно было бы, этот список и обработать,
    каким-нибудь JavaScript'ом с регулярным выражением,
    но лучше было бы-таки, из базы их вытащить, и в файл сохранить, прописав это - в коде.

И да, вот сами нанопосты, можно ли их тоже высунуть из этой базы,
и насовать в другие PNG-шки?
Просто они, эти посты, недоступны к выбору, когда создаёшь PNG-контейнер.
Сделать бы кнопку что-ли, чтоб на выбор их совать и распространять...
Например, отвечаешь в тред - в PNG-шку пхается весь тред, или первый пост, и цепочка постов, к которым цепляешься.
P.S.: Вопрос выше - отпадает. Нашёл кнопку "В очередь" под каждым нанопостом. =)

  1. Ну в клиенте 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.
Ну, чтоб не кликать под сообщением, для просмотра каждого ответа.

@username1565
Copy link
Author

username1565 commented Jan 31, 2019

@Karasiq, посты с вашей борды не видно в третьем клиенте.
Можете подгрузить тестовые контейнеры - отсюда: http://dobrochan.com/mad/res/75979.xhtml

UPD: Достаточно было подобавлять все посты ветки в очередь, обнулить случайные посты,
и добавить все посты из очереди - в контейнер.

После этого он нормально парсится в клиенте 3.0, и посты видно.


И да, несмотря на то, что посты с третьего клиента - у вас успешно грузятся,
файлы старого xmg-формата - плохо отображаются...
В общем, смотрите какая фигня:

Сообщение было написано в клиенте 3.0, и прогружено в вашей portable-наноборде.

  1. Не отображающаяся картинка, в сообщении, на вашей борде:
    message

  2. Исходный текст:
    message_as_text
    Видно только тег xmg, и base64.
    Если голый base64 скопировать, и сунуть сюда:
    https://username1565.github.io/brainwallet.github.io/#converter
    а затем - выбрать base и жмакнуть "download as binary",
    то на выходе, после закачки - получаем бинарник того же zip'a (но с другим расширением, txt). После переименования его в zip - открывается zip.

  3. А вот сам закачивающийся файл и ссылка на него, внизу окна, в клиенте 3.0:
    client-3 0
    Имя файла - file.zip (by default), а внутри ссылки, by default, "data:application/zip;base64,и_сам_бейс_бинарника".

  4. Очевидно наличие атрибута download в этой "ссылке на закачку":
    attribute_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.

username1565 added a commit to username1565/nanoboard that referenced this issue Feb 1, 2019
img2base64.js - changed.
1. Replace bb-code "xmg" to bb-code '[file name="filename.extension" type="mime-type"]BASE64-CONTENT[/file]'
Now any file can be uploaded, like on karasiq-nanoboard. Filename and mime-type extracting when file selected.
See lines 63, 76 and 122 in img2base64.js
2. Add some comments.

3. The page /pages/download_as_binary.html was been added - to download any base64 or dataURL, as binary file.

nanoclient.js - changed.
4. At line 1 was been added the function to check without throw error, is content - base64 encoded or not.
5. At line 106 was been added the cycle for extracting base64, filename and filetype
from '[file name="filename.extension" type="mime-type"]BASE64-CONTENT[/file]',
and replace this to link for downloading the file.
6. At line 172 was been added the link to download_as_binary.html with base64 encoded png icon.
This code can be commented if you don't see any sense with this.
7. Old code saved at line 193.
8. Add comment at line 206.

[xmg] - tags still supported and working, but not adding now.
See: Karasiq/nanoboard#5

If anyone cann't download any file, you can using download_as_binary.html
Just download this, put in 'pages', and open http://127.0.0.1:7346/pages/download_as_binary.html
_________________________
Have a nice day.
@username1565
Copy link
Author

username1565 commented Feb 1, 2019

В общем, вроде-как, порешал я эту фигню с файлами. 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.

И да, что за фрактальная музыка, у вас там, такая? ))

@username1565
Copy link
Author

username1565 commented Feb 5, 2019

@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-файлом или исполняемым файлом.

@username1565
Copy link
Author

username1565 commented Feb 10, 2019

В категорию "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
(или просто вывести предупреждение).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants