Браузер в качестве View в десктопных проектах (WebUI)

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 10.06.2023 01:01:10

Вдохновленный рабочим проектом врапера библиотеки WebView, нашел новый аналогичный проект WebUI (использование любого веб-браузера в качестве графического интерфейса, используя предпочитаемый язык в бэкенде и HTML5 во внешнем интерфейсе в легкой переносимой кроссплатформенной библиотеке), сам сделал к нему врапер и пару примеров, все работает, буду использовать в разработке, как замену обычным формам в десктопных приложениях LCL, реализация форм и RIA в целом с помощью Qooxdoo (аналог и ровесник Ext JS).

Если у кого-то есть наработки в этом направлении или желание и время покопать, то велком :mrgreen:
Последний раз редактировалось delphius 11.06.2023 01:57:13, всего редактировалось 1 раз.
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Снег Север » 10.06.2023 22:14:32

Веб-интерфейс в онлайн проектах - это замечательно. А зачем такой интерфейс в замену формам в обычных проектах - не могу себе представить даже.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 10.06.2023 23:07:58

Снег Север писал(а):А зачем такой интерфейс в замену формам в обычных проектах - не могу себе представить даже

Для унификации разработки. Когда используется, например, паттерн mvvm и модель и представление модели находится на стороне паскаля (на десктопе или на сервере) а само представление - в браузере. При этом, при запуске на десктопе, используется имеющийся браузер в ОС и связь осуществляется, например, с помощью websocets (например с помощью WebUI или WebView); при запуске на сервере, клиенты точно также получают доступ с помощью того же websocets, но уже удаленно.
Поскольку во всех ОСях есть браузеры, то представление будет также работать кроссплатформенно.
Тот же SPAR использует Qooxdoo уже много лет именно в RIA, а это не маленькая контора.
Пример интерфейса
Пока pas2js и webassembly доведут до ума и будет полноценная разработка веб приложений в Лазарусе, как это указано в дорожной карте, пройдет время.
Всё рано или поздно уйдет в облака и браузер, это пока модная фишка и новый тренд, но, пройдет время и это станет обыденностью, а пока паскаль в догоняющих.
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Снег Север » 11.06.2023 07:57:25

Ага, в дельфяк как-то использовал такое - там есть вариант веб-приложения, которое можно запускать автономно, на временном встроенном сервере. Да, даёт полную унификацию интерфейса. если кому-то это очень важно, то полезно.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2997
Зарегистрирован: 27.11.2007 16:14:47

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 11.06.2023 10:23:41

Снег Север писал(а):даёт полную унификацию интерфейса

К тому же, в предлагаемом варианте очень солидный набор виджетов, вполне сопоставимый по объему с lcl.
Платное конечно круто, что ExtJS, что TMS, но идет в разрез со смыслом opensource разработки
А "desktop look&feel" (особенно в теме classic) + сама темизация и l18n из коробки тоже не могут не радовать.

Но, никто не мешает прикрутить на вебморду, например, React :mrgreen: или вообще использовать ванильный js :twisted:
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 11.06.2023 10:34:04

Интересно, а плеер "на HTML5" ваш WebUI потянет ? :roll:
( Честно говоря сам сделать что-то похожее с помощью CEF4 но уперся в динамическую загрузку "DLL с формой" с браузером потому что нужен подгружаемый плагин viewtopic.php?f=1&t=43503 )
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 11.06.2023 11:37:02

Alex2013 писал(а):а плеер "на HTML5" ваш WebUI потянет?

А что там тянуть то?
Если поток будет с паскалевской стороны через websocets тянуться, то тогда конечно можно рассуждать о каких-то "потянет"
Хотя, и передачу потока можно реализовать, но скорее всего уже прямой связью паскаля с браузером, минуя webui и не с помощью сокетов
А если задача паскалевской стороны будет только в организации вывода:

1. Загрузка формы (читай запуск браузера) с плеером
2. Двухсторонее связывание элементов управления на стороне браузера с моделью представления в паскале (контроль нажатия кнопок, вроде "OnButton1Click")
3. Запуск потока из внешнего источника минуя webui напрямую на html5 плеер в браузер
4. Контроль процесса (элементы управления плеером), контроль потока с помощью javascript событий из п.2

то это именно та задача, для которой все это хозяйство предназначено.

А в целом, эта конструкция в разрезе применения в связке с паскалем нужна только для двух вещей:

1. Отображение "плоской" формы (с минимальной - начальная валидация вводимых значений или, что более желательно, вообще нулевой бизнес-логикой)
2. Реализация (посредством связывания с представлением модели) ввода и вывода данных в/из модели

Или, если по простому, паскаль только контролирует (слушает) связанные через webui события на форме (в браузере) и управляет (посредством передачи строковых данных обратно в javascript события) содержимым формы (браузера).

Но проще всего, "пощупать" вживую, с помощью простого примера

Alex2013 писал(а):с помощью CEF4

Еще одно преимущество - не надо ничего "встраивать" (любой embeded web engine это объемное хозяйство, которое нужно тянуть с собой и обновлять), а тут используется любой! браузер, присутствующий в системе (в современных ОС всегда есть хотя бы один браузер)
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 11.06.2023 13:07:38

Очень интересно буду разбираться ...
Зы
По поводу " не надо ничего встраивать" ренее в виндовс вполне успешно работал LazActiveX
См тему "Про интеграцию браузера."
Он и сейчас работает но в один "прекрасный" день или очедное обновление урезало функциональность этого интерфейса или порезали поддержку "древнего IE" на "целевом сайте" . Однако вместо чего-то вроде этого
Изображение
...начал получать тонны ошибок в скриптах .
Изображение
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 11.06.2023 15:01:56

Alex2013 писал(а):или порезали поддержку "древнего IE" на "целевом сайте"

Скорее всего именно вот это...

Alex2013 писал(а):Очень интересно буду разбираться ...

Я почитал ветку, но так и не понял конечный сценарий использования, который предполагается? Можно пояснить в двух трех предложениях?

Alex2013 писал(а):затолкать CEF4 браузер в DLL

Это просто механизм, а конечная цель, насколько понимаю, какое-то управление (сайтом, содержимым и т.п.)?
Понятно, что нужен браузер на форме (или, как сейчас, с WebUI или WebView, имитация формы в браузере), но паскаль сам зачем?
Какая логика будет реализовываться?

На последних скринах вижу какую-то базу данных по фильмам, типа Кинопоиска, но нужно понять именно, что должно происходить? Или это что-то десктопное с sqlite базой, или кушает по api какой-то сайт и выводит его базу или вообще какая-то комбинация с парсингом сайта и локальной/удаленной своей базой?
Или просто приложуха, как вебморда к пиратским сайтам с фильмами, типа lostfilm?
Всё, поиск рулит) онлайн кинотеатр))))
Вот бы его еще и на гитхабе увидеть :twisted: :mrgreen:
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 11.06.2023 17:19:35

delphius писал(а):Я почитал ветку, но так и не понял конечный сценарий использования, который предполагается? Можно пояснить в двух трех предложениях?

Идей много но что-бы не "растекаться мыслью по дереву" пока что в основном волнует все тот-же запуск плеера с сайтов разнообразных онлайн кинотеатров.
Краткая история развития идеи:
Вначале была отличная программ Просмотра/Записи/Создания коллекций/Комментирования фильмов, сериалов , аниме, телепередач
FS Клиент
Изображение
(Очень качественный продукт который радовал его пользователей в течение нескольких лет )

Однако примерно в 2020-м году разработчик полностью прекратил поддержку этого проекта.
( Что для программы постоянно работающей со множеством постоянно обновляемых онлайн ресурсов мгновенно привело к его медленной но верной деградации )

Через год мытарства я решил что так продолжатся не может и запустил свой собственный до сих пор сильно "экспериментальный " проект под кодовым названием "Лесхоз ".

(Честно говоря я вообще был не уверен, что моего уровня знаний хватит на сколько нибудь даже отдаленное подобие FS Клиента но дело написания аналога несмотря все мое грандиозное невежество лень и разнообразные внешние "обстоятельства непреодолимой силлы " понемногу продвигается )
Изображение
Изображение
Для чего конкретно нужен "браузер в форме"? В первую очередь для возможности запуска плеера "в режиме предпросмотра". Для чего это надо понятно : далеко не все "сайты онлайн просмотра" удается проанализировать вплоть до получения "прямой ссылки на медиа контент" + "режим превью" должен быть простым универсальным и удобным, а что либо проще и надежнее запуска "штатного плеера" с сайта придумать довольно сложно .

Добавлено спустя 30 минут 45 секунд:
Alex2013 писал(а):Вот бы его еще и на гитхабе увидеть

Ну вы слишком много хотите ( хотя кстати исходники FS Клиент-а там есть https://github.com/fsclient/fs-clone )
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 11.06.2023 20:07:55

Alex2013 писал(а):пока что в основном волнует все тот-же запуск плеера с сайтов разнообразных онлайн кинотеатров

Понял, навскидку, даже если вся необходимая метаинформация по медиаконтенту может быть собрана парсингом многочисленных информационных сервисов, то сам "контент", кроме официальных трейлеров, поскольку находится в "серой" правовой зоне, может быть "содран" только у многочисленных адептов рекламы онлайн казино :mrgreen:

Alex2013 писал(а):запустил свой собственный до сих пор сильно "экспериментальный " проект

Отличный способ развиваться в теме, если программирование - хобби, не связанное с работой :!:

Alex2013 писал(а):В первую очередь для возможности запуска плеера "в режиме предпросмотра"

Поскольку вы достаточно глубоко разбирались в этой теме, то я могу только предполагать, а вы меня, если что, поправите.

1. Основная проблема (если предположить, что отсутствуют какие-либо блокировки со стороны сами знаете кого) состоит только в выдергивании точных ссылок на сам медиаконтент (с плеерной оберткой или без) от каждого "провайдера", и способа хранения вариаций (серия/качество/озвучка/субтитры) (если без)

2. Вторичная проблема, это связывание медиаконтента с основной базой, но она, скорее всего больше техническая (навскидку - парсингом id медиаконтента из ссылок на imdb или кинопоиск) или же, если провайдер один, то вообще без связывания, просто "оборачивая" его сайт путем парсинга и вывода в приложении только необходимых элементов. Можно вообще не использовать стороннюю общую базу, а просто будут не связанные провайдеры. Но тогда это чистый парсинг.

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

Alex2013 писал(а):Ну вы слишком много хотите

Ссылки на FS клиент вполне достаточно, хороший проект на c#, жалко, что все кончилось, насколько понял автор устал от правообладателей и не советовал никому продолжать его дело :mrgreen:

И вывод: если сузить проблему до "точки изменений", то если сделать универсальный информационный проект без парсинга + часто изменяемый плагин на каждый "провайдер" для автоматической привязки контента к основной базе. И проблема тут в том, чтобы сделать его мало что универсальным, но и таким, чтобы его могли поддерживать в актуальном состоянии не специалисты (скриптовый метод + регулярные выражения).
З.Ы. Наверное, есть еще куча тонкостей (какие-то прокси и прочие ключи и авторизации), но я пытался оценить в "крупную клетку".
З.Ы.Ы. Про "крупную клетку" хорошо получилась аллюзия на "Небо в клеточку", с учетом спорности рассматриваемого вопроса :lol:
З.Ы.Ы.Ы. С api тоже беда, есть Кинопоиск, есть OMDB, все неофициальное и с маленьким лимитом бесплатных запросов, TMDB API - есть non-commercial purposes использование.

Upd.
Из доступного по парсингу у нас нашёл:
WebDriver4L Selenium Webdriver for Lazarus V 0.2 для Selenium.
Internet Tools библиотека для free pascal + статьи на русском
Все же XPath гораздо удобнее будет, чем ручками :mrgreen:

Ну...или из Javascript на стороне браузера (API), но тогда теряется смысл полного контроля на стороне паскаля.
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 12.06.2023 14:48:02

Начну с конца.
1 "Спорности вопроса" нет . Подобные программы вполне легально существуют в ассортименте.
И вообще они в принципе не предлагают ничего из того что нельзя делать прямо в браузере. ( я в свое время занялся поиском пробных программ даже не из за "навязчивой рекламы" ( ее можно отлично порезать прямо в браузере) просто программная оболочка позволяет пользоваться контентом в более комфортной среде и наиболее умные держатели ресурсов или сами озаботились написанием чего-то похожего или даже выложили в открытый доступ специальный АПИ )

2 Я сильно сомневаюсь, что в закрытии "ФС Клиента" виноваты именно "реальные правообладатели" или даже гипотетические "наезды пиратов" . Просто сложность доступа к медиа контенту на "серых сайтах" постепенно возрастает ( причем совершенно точно не по причине появления любительских "программных оболочек" для личного или обще-халявного использования ) просто одни пираты начали пиратить других "более благородных" ( ну или с "более далеко идущими целям и планам" ) реально держащих контент и оплачивающих место на серверах. ( Ведь сделать зеркало под другим названием и другой оболочкой или вообще "фишинговый сайт" и забить его своей рекламой заметно проще и несравнимо дешевле )
.
Разумеется, это моментально сказалось на усложнении доступа к контенту. Да и просто сайты онлайн кинотеатров растут и программы их поддержки тоже заметно усложняются. ( кроме того "реальные пираты" очень не любят слишком открыто светить сервера где лежит медиаконтент пусть это и довольно бессмысленное занятие ) .

3
. Вторичная проблема, это связывание медиаконтента с основной базой, но она, скорее всего больше техническая (навскидку - парсингом id медиаконтента из ссылок на imdb или кинопоиск) или же, если провайдер один, то вообще без связывания, просто "оборачивая" его сайт путем парсинга и вывода в приложении только необходимых элементов. Можно вообще не использовать стороннюю общую базу, а просто будут не связанные провайдеры. Но тогда это чистый парсинг.

и
И проблема тут в том, чтобы сделать его мало что универсальным, но и таким, чтобы его могли поддерживать в актуальном состоянии не специалисты (скриптовый метод + регулярные выражения).

УЖЕ !
Изображение
Изображение
"Лесхоз" практически изначально "идеологически " заточен на возможность "поддержки без автора" и вообще в будущем совершенно точно может не ограничивается парсингом ТОЛЬКО онлайн кинотеатров ( это просто наиболее "очевидно полезный" тестовый шаблон для привлечения армии добровольных бета-тестеров) Уже сейчас практически весь пирсинг происходит помощью очень простых скриптов и никак непривязан к конкретному сайту ( то что источник пока один виновата моя лень, а так-же желание в первую очередь "доработать функционал" и довести его хотя бы примерно до уровня сравнимого с комфортабельным "ФС Клиентом" )
Зы
Спасибо за ссылки! Посмотрю. :idea:
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Kopa » 12.06.2023 21:03:05

Интересно, что заменив m64 на опцию m32 в makefile библиотека Webui нормально собралась под Linux32 (Puppy Linux Xenial)
а также примеры из Example собираются и запускаются c такой же заменой из каталога C (только с примером редактора есть неувязки с нахождением gtk/gth.h подключаемых файлов для сборки у меня)
Kopa
новенький
 
Сообщения: 41
Зарегистрирован: 29.10.2020 12:24:36

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение delphius » 12.06.2023 21:47:14

Kopa писал(а):библиотека Webui нормально собралась под Linux32 (Puppy Linux Xenial)

Если не сложно отписать об этом в в тему Is it possible to compile webui for 32bit systems?, конечно только в том случае, если контекст совпадает и есть желание :D

Kopa писал(а):примером редактора есть неувязки

Их пример редактора меня не вдохновляет, если честно, начали бы со связывания данных и внедрения концепции "все на стороне ЯП", браузер - просто View

Добавлено спустя 49 минут 50 секунд:
Alex2013 писал(а):программная оболочка позволяет пользоваться контентом в более комфортной среде

В качестве proof of concept, в режиме выходного дня :) накидал в реакте макет компонента для карточки, прикрутил к паскалевской части WebDriver4L, правда его пришлось основательно покурочить под fpc (закомментить все функции работы с изображениями + изменить через функции Windows API запуск chromedriver.exe в скрытом режиме, чтобы не отсвечивал, плюс переключить браузер в headless режим, чтобы тоже не светился в работе :mrgreen: )


В аттаче собранный проект на базе chromedriver, нужно скачать отсюда версию драйвера хрома, соответствующую вашему установленному браузеру и поместить chromedriver.exe в папку проекта. Должно получиться то, что на скриншоте, при условии, что доступен сайт из обсуждения выше в теме (впн в помощь).
Скриншот концепта

Мне работа через WebDriver4L для продакшена не понравилась, оч долго и слишком сложная конструкция получается: паскаль - библиотека WebDriver4L - chromedriver.exe/msedgedriver.exe - сам хром/edge - загрузка страницы - парсинг - закрытие. Проверил два движка, задержка сопоставимая.

Надо будет попробовать Internet Tools.

Но XPath - вещь, вся магия с данными для карточек уложилась в две строки кода:
Код: Выделить всё
films := Robot.FindElementsByXPath('//*[@id="dle-content"]/div[*]/div[1]/a/img');
paths := Robot.FindElementsByXPath('//*[@id="dle-content"]/div[*]/div[1]/a');
У вас нет необходимых прав для просмотра вложений в этом сообщении.
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11

Re: Браузер в качестве View в десктопных проектах (WebUI)

Сообщение Alex2013 » 13.06.2023 09:26:43

Ух ты! "Говорящая рыба"! :D Очень интересно.
( У меня в принципе тоже были идеи сделать все через Web-тех но она завяла после попыток написать чуть более продвинутый функционал с простыми JS-скриптами так что просто немного перекурочил обычный TListView )
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru