Notes |
|
|
А можно чуток подробностей для тех кто совсем не в теме? В каком формате с каким расширением хранятся фотографии в формате 360 градусов? Какие десктопные приложения поддерживают просмотр таких фоток? |
|
|
(0018601)
|
zed
|
03-04-2019 11:30
|
|
Надо чтобы при клике по метке на карте открывалась фотография или чтобы вначале открывалось описание (как сейчас) и там была возможность открыть снимок во внешней программе? |
|
|
|
Подробнее:
Фото 360 гр. - это тот же jpeg. Наиболее простое, удобное и бесплатное ПО для просмотра фото/видео 360 гр. - это, на мой взгляд, GoPro VR Player.
http://www.kolor.com/gopro-vr-player/download/
Или VLC media player, но он пока годится только для видео.
Касаемо принципа открытия, то, думаю, лучше подойдет второй вариант как более универсальный. Т.е. сначала открывается миниатюра (600х300, например), а дальше пользователь уже принимает решение об использовании внешнего приложения, т.к. для многих фотографий (обычных, не_360) бывает вполне достаточно и миниатюры.
Пример фото 360 (сюда не прикрепляю, т.к. рамер фото 10-13 Мб):
https://yadi.sk/d/XSXm7qDeh7chhQ |
|
|
(0018603)
|
zed
|
04-04-2019 06:52
|
|
Сложность данной хотелки заключается в том, что описание метки является html страничкой, которая открывается во встроенном браузере (InternetExplorer), а из браузера не так-то просто взять и открыть что-то по ссылке во внешнем приложении. Тем более, что открыть надо не в дефолтном приложении (т.е. не в том, которое открывается при двойном клике по файлу в windows-проводнике), а в заданном.
На сколько я понимаю, это можно реализовать модификацией реестра с регистрацией своего протокола (см. пример здесь: https://stackoverflow.com/a/55139489/), но мне видится, что в этом случае может всплыть множество граблей. Например, как быть если запущено 2 копии SAS из разных папок с разными настройками. Для каждой копии регистрировать свой протокол? Но ведь описание метки и ссылка будут генерироваться в момент импорта фото, а значит протокол должен быть заранее задан. |
|
|
|
Может проще в компоненте воспользоваться событием OnBeforeNavigate2 и для своего протокола, если это конкретный файл, то просто его открывать? |
|
|
(0018605)
|
zed
|
04-04-2019 12:52
|
|
Да, действительно, так можно сделать. |
|
|
|
Заодно решится проблема открытия ссылок на всякие pdf, ppt, xls из меток.
Почему-то я до этого раньше не догадался. Видимо, из-за того, что все время прикидывал как бы заменить этот компонент на открытие в обычном браузере. |
|
|
(0018612)
|
zed
|
04-04-2019 14:42
|
|
Сделал частично - вновь-импортированные фото теперь можно будет открывать во внешней дефолтной программе, просто кликнув по нему. |
|
|
|
В принципе, можно ограничиться (насколько это реализуемо) открытием папки хранения файла. Далее пользователь сам разберется что и чем открывать. |
|
|
(0018614)
|
vdemidov
|
05-04-2019 12:22
(edited on: 05-04-2019 13:42) |
|
Переношу обсуждение с bitbucket, что бы оно сохранилось, да и обсуждать здесь мне больше нравится:
|
|
|
|
Viktor Demidov
Мне сильно не нравится. А еще я за то, что бы действие задавать не доменом, а параметром. Например, так sas://MediaData/img.jpg?OpenPhoto
Просто добавить к любому пути. Как просто пути к файлу, так и к нашему протоколу. Зато если заменить встроенный браузер на веб сервер и обычный браузер, то все продолжит работать нормально. Максимум потеряется возможность задавать конкретные программы, но ссылки работать будут.
А еще можно будет дать возможность пользователю задавать свои команды и программы их обрабатывающие.
Плюс я бы добавил список безопасных расширений в настройки, которые будут просто открываться без всяких команд по системным ассоциациям. |
|
|
|
zed
А не возникнет ли коллизий с параметром в будущем? По домену мы чётко можем опознать, что это наше, а параметр может быть и не наш.
В общем, определись, как делать, переделаю. |
|
|
|
Viktor Demidov
Хороший вопрос. Таки придется проверять протокол и открывать только локальные ссылки. Хотя проверка наличия файла, которая уже есть вполне должна спасти. |
|
|
|
zed
Давай так:
sas://App/ - открыть в программе по дефолту
sas://Explorer/ - открыть папку/файл в проводнике
sas://Browser/ - открыть ссылку во внешнем браузере
sas://UserXXX/ - зарезервированные домены, для действий определяемых юзером. В конфиге будет секция [UserDomain], где ключ будет любая строка, а значение - путь к программе, например Photo=c:\MyApp.exe и тогда домен будет sas://UserPhoto/
Если в пути нужно задать поддомен, то делать это так: sas://App/MediaData/ |
|
|
|
Viktor Demidov
Ну не знаю. Вариант UserXXX хорош, но мне все равно больше нравится вариант с суффиксом “?UserXXX” или даже “#UserXXX“
Ну не место для операции в домене. |
|
|
|
Viktor Demidov
Чуть освежил свои знания об url и теперь точно убежден, что лучше всего задействовать именно фрагменты, то есть “#UserXXX“
Эта часть урла адресована именно браузеру. А что бы не схлопотать случайного совпадения, можно добавить “sas.” перед конкретной константой. Как мы в ContentType договорились делать. Тогда будут такие команды:
“#sas.App“ - открыть файл в программе по-умолчанию. (На всякий случай нужно проверять наличие файла и, скорее всего, его расширение по белому списку в конфигу, что бы было тяжелее запустить какой-нибудь вирус или вредоносное действие вместе с zmp)
“#sas.explorer“ - Открыть папку в проводнике
“#sas.browser“ - Открыть в дефолтном браузере
“#sas.user.XXX“ - Команда пользователя.
Еще не ясно что делать с той затычкой, которая сейчас открывает локальные картинки прямо в форме встроенного браузера, но не в нем самом :) |
|
|
|
zed
# - допустимый символ для имени файла, так что вообще не вариант.
Ещё учти, что для ручной правки удобнее и понятнее делать как я описал, а не дописывать в конец через ? |
|
|
|
Viktor Demidov
Насчет # может быть.
Ну, не знаю, чем твой вариант для локальных файлов удобнее и понятнее? Чем “sas://App/C:\Temp\aaa.jpg” лучше чем “C:\Temp\aaa.jpg?sas.App” |
|
|
|
zed
Во-первых, нагляднее - префикс sas:// - даёт понять, что это что-то специфическое. Во-вторых, прослеживается некое единообразие c sas://MediaData/ к которому мы уже приучили пользователей. Если бы речь шла исключительно о машинном представлении, я бы согласился и с `#`, но коль скоро это видит и должен руками писать пользователь, мне это кажется не очень удачным решением. |
|
|
|
zed
Вот смотри, я хочу в описании метки вставить ссылку http://www.sasgis.org/mantis/view.php?id=3430 и чтобы она открылась во внешнем браузере. По моей схеме, я должен написать sas://Browser/http://www.sasgis.org/mantis/view.php?id=3430, а по твоей http://www.sasgis.org/mantis/view.php?id=3430?sas.browser Ну и что это получается? Ни одна запись не является валидным урлом, но вторую запись сложнее распарсить программно (без коллизий) и глазами труднее воспринимать. |
|
|
|
Viktor Demidov
Твой пример очень хороший. И дает аргумент почему # достаточно хороший разделитель - в обычном браузере, если пользователь скопирует туда урл, ни твой вариант, ни мой с знаком вопроса, нормально не откроется, а вот мой вариант с решеткой - на ура. |
|
|
(0018626)
|
zed
|
05-04-2019 12:57
|
|
Пример урла с решёткой: https://habr.com/en/post/446822/#comment_19986240#sas.browser - если скопировать урл в браузер, то страница хоть и откроется, но на указанный комментарий страница не перейдёт. Т.е. считай, так же сломано.
И что ты ответишь про наглядность и удобство ручного редактирования?
В качестве крайней меры могу предложить ввести поддержку обоих вариантов, и с доменом, и с решёткой. Я буду рекомендовать всем использовать свой вариант, а ты свой. |
|
|
(0018627)
|
vdemidov
|
05-04-2019 13:14
(edited on: 05-04-2019 13:15) |
|
Сломано, но в гораздо меньшей степени.
А удобство редактирования ИМХО одинаковое.
Два варианта это стопудово избыточно. С ними будет важнее, какой из вариантов будет вставляться автоматически, например, в импорте или окне редактирования меток.
Давай на форуме или где-то еще спросим - пусть пользователи рассудят или может что-то свое предложат.
|
|
|
(0018628)
|
zed
|
05-04-2019 13:27
(edited on: 05-04-2019 13:41) |
|
Если сломано, то уже не важно, в какой степени. Представь, что в теме тысяча комментариев и я хочу сослаться на 801-й.
И появляется два варианта описаний и с sas://MediaData/ и с #sas.app, что не есть хорошо. Мне также не понятно, почему ты обращаешь внимание на валидность урла, если это наш внутренний протокол и наружу он в ближайшие сотню лет не выйдет. Но даже если и выйдет (но повторяю - этого не случится), то чем sas://MediaData/ лучше sas://Browser/? Ведь придётся таки поддерживать протокол sas://.
Спрашивать пользователей тут, по-моему, последнее дело - мало кто поймёт нюансы вариантов. Но если вдруг решишь спросить и результат окажется в мою пользу, то Ок, доверимся опросу :)
|
|
|
(0018629)
|
zed
|
06-04-2019 20:22
|
|
Пример валидного урла: http://anonym.to/?https://google.com/
т.е. если следовать феншую, нам нужно писать вот так:
sas://App/?sas://MediaData/image.jpg
sas://Browser/?https://google.com/ |
|
|
|
Извини за перерыв - очень занят был на выходных.
Основная причина, почему я не хочу действие запихивать в домен - относительные пути. Представь ты хочешь положить в zmp doc-файлик, или еще что-то такое и сослаться на него в информации о карте. Что бы по клику он открывался в ворде. Сейчас такое делать бессмысленно, так как оно не открывется нормально, но с сабжем это уже реально и вполне обыденный юзкейс. Если делать как предлагаю я, то достаточно написать href="./xxxxxx.doc#sas.app" и все, ссылка будет работать. О разворачивании в полный путь позаботится браузер. А вот при твоем подходе такую ссылку сделать уже целая морока. Нужно знать структуру пити к инофрмации о Zmp, нужно брать GUID карты. И при малейшем изменении его править.
С этим еще связан запланированный рефакторинг: 0002620 |
|
|
(0018631)
|
zed
|
08-04-2019 08:28
|
|
> О разворачивании в полный путь позаботится браузер.
Как он это сделает? |
|
|
|
Так и сделает. Информация о карте отображается по адресу примерно такому:
sas://ZmpInfo/{36cfd00c-ad02-4d3a-bd3e-acf4075115fe}/info.html
Когда браузер видит относительную ссылку ./xxxxxx.doc#sas.app
он от текущего пути откусывает sas://ZmpInfo/{36cfd00c-ad02-4d3a-bd3e-acf4075115fe}/ и добавляет xxxxxx.doc#sas.app
И уже полный путь sas://ZmpInfo/{36cfd00c-ad02-4d3a-bd3e-acf4075115fe}/xxxxxx.doc#sas.app
придет в событие BeforeNavigate |
|
|
|
Даже без ./ можно. Сейчас так в информацию о карте вставляют картинки с легендой.
Например
sas.plus.maps\_osm_ito\Schools.zmp\info.txt
<img src=017.png>
А представь ты хочешь дать возможность открывать картинку в своем просмотрщике. Как ты будешь ссылку здесь писать с твоим подходом?
А с моим просто дописать href="017.png#sas.app" |
|
|
(0018634)
|
zed
|
08-04-2019 10:15
|
|
Я бы написал sas://App/?017.png. Затем, в браузере сохранял бы текущий урл %url% и при получении такого линка, заменял бы его на sas://App/?%url%017.png - т.е. этот момент решается руками очень легко и полный путь восстанавливается на раз.
Гораздо труднее, будет вот из этого sas://ZmpInfo/{36cfd00c-ad02-4d3a-bd3e-acf4075115fe}/xxxxxx.doc получить полный путь к файлу (с учётом, что файл ещё может быть в zip архиве) и запустить его на выполнение. |
|
|
(0018635)
|
zed
|
08-04-2019 10:20
|
|
Даже по-моему sas://App/?sas://MediaData/image.jpg можно будет сократить до sas://App/?image.jpg и пустой url трактовать как sas://MediaData/. |
|
|
|
> Я бы написал sas://App/?017.png. Затем, в браузере сохранял бы текущий урл %url% и при получении такого линка, заменял бы его на sas://App/?%url%017.png - т.е. этот момент решается руками очень легко и полный путь восстанавливается на раз.
То есть тебе придется самому разворачивать все относительные пути. Та ну нафиг.
> Гораздо труднее, будет вот из этого sas://ZmpInfo/{36cfd00c-ad02-4d3a-bd3e-acf4075115fe}/xxxxxx.doc получить полный путь к файлу (с учётом, что файл ещё может быть в zip архиве) и запустить его на выполнение.
Для случая с архивом, всегда можно сохранить во временный файл в temp перед запуском.
> Даже по-моему sas://App/?sas://MediaData/image.jpg можно будет сократить до sas://App/?image.jpg и пустой url трактовать как sas://MediaData/
Я против трактовать все относительные пути как пути к MediaData
ИМХО ты уперся в свою идея совсем не по делу и сейчас придумываешь костыли |
|
|
(0018637)
|
zed
|
08-04-2019 10:46
|
|
Относительный путь разворачивается максимум в 10 строчек кода. В чём проблема?
>Я против трактовать все относительные пути как пути к MediaData
Не все относительные пути, а только те, у которых пустой родительский урл. Но это как вариант, я не настаиваю.
По-моему, ты не можешь нормально аргументировать, почему мой вариант плохой. Он просто тебе не нравится и точка. |
|
|
|
Он мне не нравится, потому что ломает все относительные пути. Точка. Категорически не нравится. |
|
|
|
>Относительный путь разворачивается максимум в 10 строчек кода. В чём проблема?
Ты уверен? Вот куча примеров, которые бы нужно поддерживать.
Within a representation with a well defined base URI of
http://a/b/c/d;p?q
a relative reference is resolved to its target URI as follows:[22]
"g:h" -> "g:h"
"g" -> "http://a/b/c/g"
"./g" -> "http://a/b/c/g"
"g/" -> "http://a/b/c/g/"
"/g" -> "http://a/g"
"//g" -> "http://g"
"?y" -> "http://a/b/c/d;p?y"
"g?y" -> "http://a/b/c/g?y"
"#s" -> "http://a/b/c/d;p?q#s"
"g#s" -> "http://a/b/c/g#s"
"g?y#s" -> "http://a/b/c/g?y#s"
";x" -> "http://a/b/c/;x"
"g;x" -> "http://a/b/c/g;x"
"g;x?y#s" -> "http://a/b/c/g;x?y#s"
"" -> "http://a/b/c/d;p?q"
"." -> "http://a/b/c/"
"./" -> "http://a/b/c/"
".." -> "http://a/b/"
"../" -> "http://a/b/"
"../g" -> "http://a/b/g"
"../.." -> "http://a/"
"../../" -> "http://a/"
"../../g" -> "http://a/g" |
|
|
(0018646)
|
zed
|
08-04-2019 11:42
|
|
Это на первый взгляд список длинный, но там есть много не актуального для нас (вроде ?y и #s) да и специфических случаев не так много. Т.е. это не критическое препятствие.
Ладно, раз ты так категорически настроен совать мне палки в колёса, переделаю на вариант с решёткой. |
|
|
|
>Т.е. это не критическое препятствие.
Конечно. Я даже подозреваю, что в предоставляемых ИЕ функциях есть готовая, но зачем писать, отлаживать и поддерживать код, без которого можно обойтись практически безболезненно.
> Ладно, раз ты так категорически настроен совать мне палки в колёса, переделаю на вариант с решёткой.
Спасибо большое. |
|
|
(0018650)
|
zed
|
08-04-2019 12:54
|
|
Мда, переделал. Да вот только браузер понимает, что ссылка href=c:/image.jpg это не ссылка, а файл! И событие OnBeforeNavigate2 для него попросту не срабатывает.
И что дальше? |
|
|
|
Потому что правильно писать file://c:/image.jpg
Ну, или если мы разрешаем открывать любой файл то можно sas://c:/image.jpg |
|
|
(0018652)
|
zed
|
08-04-2019 13:08
|
|
> Потому что правильно писать file://c:/image.jpg
Нет, это абсолютно не влияет. |
|
|
|
Можно попробовать //c:/image.jpg или ///c:/image.jpg
Вообще со ссылками на локальные файлы и доступом к ним из нелокальной странички там куча ограничений даже в ИЕ. Иначе это была бы дыра в безопасности и любой сайт мог твои файлы воровать. |
|
|
|
Осталась проблема: вот такая ссылка не открывается //MediaData/123.avi#sas.app
Нужно менять слеши на правильные. |
|
|
|
А, нет. Там просто слеш после пути не добавляется. Пофикшу сейчас. |
|
|
(0018658)
|
zed
|
08-04-2019 20:28
|
|
centron
Начиная с сегодняшней ночной версии при импорте фото с GPS будет добавляться ссылка для открытиях их в приложении по умолчанию. Назначение своей программы пока невозможно, но вы можете сделать чтобы открывалась папка с фото в проводнике. Для этого вам надо заменить строку #sas.app на #sas.explorer в описании метки.
Открытие происходит при клике по фото. |
|
|
|
Спасибо, с открытием по клику на иконке из превью все прекрасно работает.
Единственное - если выбрать пункт контекстного меню "Информация о метке", оттуда уже не работает.
Не удается открыть эту страницу
Убедитесь, что веб-адрес sas://E:\СЕТЕВАЯ\EZK-260\Пересечения\227+873.73 р. Ока\IMG_20190128_152640_1188242125.JPG правильный |
|
|
|
Таки да. Забыли про еще один браузер в программе. |
|
|
(0018661)
|
zed
|
10-04-2019 09:33
|
|
Там ещё и InvisibleBrowser есть и хорошо бы их как-то объединить, чтобы по сто раз одно и то же не писать. Может сделать базовый класс TInternalEmbeddedWB с реализацией OnBeforeNavigate2 и OnAuthenticate? |
|
|
|
Ну, совсем объединить не выйдет. В основном браузере же есть режим открытия картинок прямо в нем, хотя не понятно работает ли оно или сломано :)
А вообще, как хочешь. |
|
|
(0018663)
|
zed
|
10-04-2019 14:50
|
|
Функцию с картинками я скорее всего удалю, т.к. она по-видимому осталась после выпиливания тобой фичи аттачментов (0000152) и более никак не используется. |
|
|
(0018664)
|
zed
|
12-04-2019 12:21
(edited on: 12-04-2019 12:29) |
|
Сделал возможность определять произвольное приложение в конфиге и запускать через него. Для этого в SASPlanet.ini надо написать такое:
[UrlHandler_UserApps]
MyApp=c:\notepad.exe
MyOtherApp=c:\word.exe
и т.д.
и оформить ссылку
<a href="sas://c:\doc\text.txt#sas.user.myapp">Открыть в Блокноте</a>
Так же, можно разрешить открывать во внешних приложения только файлы с определённым расширением:
[UrlHandler]
AllowedExt=png;gif
Чтобы разрешить все расширения, достаточно оставить этот параметр пустым.
|
|
|
|
>Так же, можно разрешить открывать во внешних приложения только файлы с определённым расширением
Это очень полезная для безопасности, а то лично мне слегка страшно оставлять возможность выполнить любой файл программой по-умолчанию. Нужно сделать что бы по-умолчанию там был списочек из картиночных, видео и офисных форматов.
>Чтобы разрешить все расширения, достаточно оставить этот параметр пустым.
Главное, что бы отсутствие записи в конфиге воспринималось как набор дефолтных значений, а не как пустой список и разрешение делать что хочешь. |
|
|
(0018666)
|
zed
|
12-04-2019 17:17
|
|
Для безопасности оно весьма сомнительно. Можно сделать pdf или jpeg запуск которого приведёт к заражению системы. |
|
|
|
> Для безопасности оно весьма сомнительно. Можно сделать pdf или jpeg запуск которого приведёт к заражению системы.
Не скажи. pdf или jpeg приведет к заражению, только если программа просмотрщик имеет уязвимость и на нее конкретно рассчитывают. Даже офисные форматы в последние годы довели до некоторой безопасности, вроде открытия по-умолчанию в режиме безопасного просмотра. |
|