LINUX.ORG.RU

Помогите встроить сайт в исполняемый файл

 , ,


0

3

Всем привет. Помогите советом.

Хочу писать програму для десктопа, которая запускается в терминале и выводит сообщение «Открой в браузере http://localhost:9876». И чтобы был только один исполняемый файл и всё. А значит нужно запихнуть папку с сайтом внуть экзешника (простите за жаргон)

Первое что пришло в голову, в build.rs пройтись рекурсивно по директории сайта, прочитать все файлы по одному (сразу сжать в brotli) и сохранить их в один бандл со структурой [Путь к ресурсу -> тело ресурса]

Затем в main.rs сделать статическую переменную, в которую include_bytes!(«путь к бандлу»)

Вопрос про формат для бандла. Посоветуйте что-нибудь простое, индесируемое, чтобы положть туда сайт и через API доставать тело файла по ключу (пути)

Ну или более элегантное решение вопроса в целом

ЗОЧЕМ? Какой в этом смысл?

запихнуть папку с сайтом внуть экзешника

Гугли «самораспаковывающийся архив». Зачем тебе при этом нужна отдельная программа?

Aswed ★★★★★
()

Чем тебе zip не нравится?
Можно сделать без сжатия и накладные расходы на чтение будут небольшими. Есть zip-vfs, но я им не пользовался.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от Aswed

И зачем ему самораспаковываться, причём неизвестно куда?

WatchCat ★★★★★
()

В Tcl/Tk такая фишка есть. Я думаю, можно найти/написать веб-сайт на Tcl и положить в бандл (starkit)

А насчёт браузера — лучше проверять запущенные процессы и открывать вкладку в уже запущенном браузере, а если его нет, то в дефолтном, например. Зачем пользователю говорить «открой то-то» если можно сразу самому это открыть?

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)

Не совсем понятно, а что надо то?

Но на всякий случай напишу — TiddlyWiki

kolja ★★
()
Ответ на: комментарий от anonymous

Тебе не переиграть автора в абсурдности

Ну почему сразу абсурд? Я так понял, ТС хочет автономную программу в виде одного бинарника, которая что-то делает и имеет веб-морду. Понятно, реализацию примитивного веб-сервера и его контент надо зашивать в приложение.

pathfinder ★★★★
()
Ответ на: комментарий от WatchCat

Спасибо, добрый человек! Там еще в зависимостях нашел мегаполезный rust-embed

kijllfatncdaplp
() автор топика
Ответ на: комментарий от Xenius

лучше проверять запущенные процессы и открывать вкладку в уже запущенном браузере, а если его нет, то в дефолтном, например

Идея годная. Но хочется по максимуму дистанцироваться от OS. А запуск ссылки в браузере это всякие шеллы, winapi и прочие непотребства

kijllfatncdaplp
() автор топика
Ответ на: комментарий от kijllfatncdaplp

А что мешает тебе на время выполнения распаковаться в /tmp или еще какую-нибудь временную директорию, а после удалить? У тебя там что-ли суперкритичные css, которые никак нельзя показывать пользователю?

Aswed ★★★★★
()
Ответ на: комментарий от kijllfatncdaplp
  1. Этот вопрос я бы задал на этапе, где ты засовываешь ресурсы в бинарник
  2. Что бы не танцевать с бубном вокруг эмуляции ФС для web компоненты
Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Что бы не танцевать с бубном вокруг эмуляции ФС для web компоненты

Это прям так громко звучит… эмуляция ФС, а на деле просто отправка нужных данных по известным url

TDrive ★★★★★
()
Ответ на: комментарий от Aswed

Этот вопрос я бы задал на этапе, где ты засовываешь ресурсы в бинарник

Чтобы создать кроссплатформенное десктопное приложение без осточертевшего всем электрона

Что бы не танцевать с бубном вокруг эмуляции ФС для web компоненты

И танцевать с бубном вокруг временной папки, которая может быть в неконсистентном состоянии, с ресурсами из старой версии програмы итд

kijllfatncdaplp
() автор топика
Ответ на: комментарий от kijllfatncdaplp

Чтобы создать кроссплатформенное десктопное приложение без осточертевшего всем электрона

Слушай, а чем тебя сайт в браузере не устраивает? Браузеры кросплатформенные на 100%, сделать ярлык на сайт не проблема, так же как и прикрутить возможность работы сайта в оффлайне.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Так точно. Кроме того, без навороченных веб-фреймворков, задача отправить контент из файла на диске будет посложнее чем из памяти

kijllfatncdaplp
() автор топика
Ответ на: комментарий от kijllfatncdaplp

Я не знаю какого уровня тебе требуется сайт. Я говорил про случай когда у тебя пара-тройка html-шаблонов, несколько картинок и пара жабаскриптов. Использовать vfs для такого не вижу смысла.

WatchCat ★★★★★
()
Ответ на: комментарий от kijllfatncdaplp

Если опенсорсность неважна, то есть более лучшие варианты чем открывать в браузере, например очень легковесный аналог электрона https://sciter.com/ (хотя по хронологии появления это электрон аналог). Раньше там было неудобно из-за своего скриптового js подобного языка, но теперь перешли на обычный js. Из плюсов свой движок рендеринга html и css хорошо приспособленный для десктопа. Есть свой упаковщик ресурсов в исполняемые файлы packfolder. И есть биндинг к расту https://github.com/sciter-sdk/rust-sciter

anonymous
()
Ответ на: комментарий от anonymous

Еще и Андрей Федонюк основатель проекта) Запустил недавно rustdesk, смотрю интерфейс красивый и мало весит. Полез смореть на чем, а там sciter

kijllfatncdaplp
() автор топика
Ответ на: комментарий от theNamelessOne

Под вин7 работает только при установленном Edge. Да и зачем если браузер есть на любом ПК

kijllfatncdaplp
() автор топика
Ответ на: комментарий от kijllfatncdaplp

Кроме sciter еще есть разные обертки над компонентами браузера, а онтопике это webview, вариант для раста https://github.com/Boscop/web-view, но по сравнению со скитером все это выглядит очень бледно, и очень неудобно для разработчика, хотя также дает автономное приложение малого веса, но есть зависимость от установленных в системе компонентов браузеров, в оффтопике приходится выбирать между IE и Edge.

anonymous
()
Ответ на: комментарий от kijllfatncdaplp

Чтобы создать кроссплатформенное десктопное приложение без осточертевшего всем электрона

Для этого не обязательно в бинарник ресурсы совать. Можно вполне вместе с приложением ресурсы распростронять. В инсталлер все это запихиваешь, а инсталлер кладет ресурсы рядом с приложением. Собсна так обычно и делают. А при обновлении приложения так же обновлять ресурсы.

А что мешает тебе на время выполнения распаковаться в /tmp или еще какую-нибудь временную директорию, а после удалить?

И танцевать с бубном вокруг временной папки, которая может быть в неконсистентном состоянии, с ресурсами из старой версии програмы итд

Какие неконсистентные данные, если ты ее перезаписываешь заново?

Aswed ★★★★★
()

Это будет смесь скрипта с браузером. Т.е. банальный браузер без элементов управления с ресурсом в качестве страницы. Зачем это нужно, и кому, понять не дано.

anonymous
()
Ответ на: комментарий от Aswed

Для этого не обязательно в бинарник ресурсы совать. Можно вполне вместе с приложением ресурсы распростронять. В инсталлер все это запихиваешь, а инсталлер кладет ресурсы рядом с приложением. Собсна так обычно и делают. А при обновлении приложения так же обновлять ресурсы.

Зачем их класть рядом, если их можно класть в бинарник? Программа, которая представляет из себя один файл, это самое лучшее, что можно придумать.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от pathfinder

Ну почему сразу абсурд? Я так понял, ТС хочет автономную программу в виде одного бинарника, которая что-то делает и имеет веб-морду. Понятно, реализацию примитивного веб-сервера и его контент надо зашивать в приложение.

http://webkit.org в лице http://webkitgtk.org и «игра пятнашки получает собственный броузер» :-)

собственный контент из вкомпилённого архива отдавать по соотв.колбекам api или не боясь трудностей делать vfs и встроить https://www.gnu.org/software/libmicrohttpd/

MKuznetsov ★★★★★
()

понапридумывали же....

XoFfiCEr ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.