Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Общие разговоры о Miranda NG => Topic started by: Dm1 on 09 02 2021, 13:25:33

Title: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 09 02 2021, 13:25:33
Не смотря на 2021й год и огромное количество разного рода мессенджеров вокру пользоваться Miranda NG в некоторых случая по прежнему удобно. Но вот сильно достает работа с отправленными и принятыми файлами.

На сколько я понял из документации IEView, возможности узнать куда был сохранен принятый файл и откуда был взят отправленный у нас нет? Если эту информацию в IEView можно как-то надёжно получать (я встречал "костыли", пытающиеся это делать в некоторых скинах, все они были нерабочими), то реализовать открытие файлов из окна чата и предпросмотр изображений будет не сложно в скине IEView, в противном же случае у нас имеется некоторый фатальный недостаток в плане удобства.

Как обстоят дела на самом деле?
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 09 02 2021, 15:55:46
На счет отправленного файла я неверно написал, его полный путь есть в самом сообщении. Вот с принятым проблема.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 09 02 2021, 19:35:04
В большинстве костылей в попытках угадать путь сохранения файла пытаются использовать чтение конфигурации из БД при помощи external.db_get. Но, вот что характерно, всегда неудачно. Данная функция в IEView не работает и всегда возвращает undefined, хотя при помощи неё можно было бы получить путь сохранения файлов из настроек и подставив данные контакта точно найти входящий файл. В общем имеем классическое "хотели как лучше, а получилось как всегда" :D
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 09 02 2021, 20:25:05
А нет, сама функция работает, просто в "костылях" читают несуществующие настройки, так работает: external.db_get(0, 'SRFile', 'RecvFilesDirAdv'). Уже кое-как жить можно.
Title: Odp: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 10 02 2021, 07:54:40
реализовать открытие файлов из окна чата
Я пробовал вот так (https://forum.miranda-ng.org/index.php?topic=5613.msg26906#msg26906) в шаблонах ковырятся  но уперся либо в необработку цикла скриптом либо не понимание ссылок file:// (ну и сам то я не очень разбираюсь в скриптописательстве :( )
архив с шаблонами там же в сообщении. Может все-таки получится решить, утомляет по папкам файлы искать принятые, даже если они  в папках по никам контактов ( настроил так %miranda_path%\Files\%nick%\)
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 10 02 2021, 13:04:59
но уперся либо в необработку цикла скриптом либо не понимание ссылок file:/
Ну с этим просто, IEView предоставляет функцию external.win32_ShellExecute, при помощи которой можно запустить что угодно в Windows. Вам необходимо избавиться от схемы протокола "file://" в пути и передать его данной функции. Пример реализации такого открытия файлов можете увидеть в скинах IEView в сборке HotCoffee:

external.win32_ShellExecute('open', 'explorer.exe', path, 0, 1) - запуск файла через передачу пути в параметре explorer.exe (explorer.exe нужен только чтобы при отсутствии файла открывался каталог по умолчанию, без этого открывать файл можно и напрямую).
external.win32_ShellExecute('open', 'explorer.exe', '/select,"' + path + '"', 0, 1) - открытие каталога с выделением файла через передачу пути в параметре "/select,путь" explorer.exe

Но определение пути к файлу в HotCoffee сделано как попало и полагается просто на фиксированный путь в самой сборке, при изменении настроек всё сразу ломается. Вот над этим еще придется поработать.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 08:53:55
Придумал я несколько более универсальный костыль для открытия принятых файлов и реализовал его в своей новой теме FltBubble https://github.com/iDm1/Miranda-NG/tree/main/IEView/FltBubble (https://github.com/iDm1/Miranda-NG/tree/main/IEView/FltBubble)
Править в файлах темы ничего не нужно, она берёт расположение файлов из самой базы данных Miranda NG.

(https://raw.githubusercontent.com/iDm1/Miranda-NG/main/IEView/FltBubble.png)

Детали внутренней технической реализации:
Spoiler
  • Читаем RecvFilesDirAdv из модуля SRFile.
  • Если значение не задано, то используем значение по-умолчанию %mydocuments%\Принятые файлы\%userid%.
  • Смотрим из каких уникальных для контакта переменных состоит этот путь, нас интересую в первую очередь %userid% и во-вторую %nick%, как потенциально не уникальный.
  • Определяем по какому из них будем искать подходящий путь.
  • Перебираем недавние пути сохранения файлов в MruDir0 - MruDir4 и находим содержащий %userid% или %nick% текущего контакта собеседника.
  • Для недавно полученных файлов этого достаточно, если же путь уже ушел из истории, то передаем путь с подставленными значениями %userid% и %nick% простому вспомогательному внешнему скрипту shellopen.cmd на Batch, который в состоянии обработать переменные %mydocuments% и %desktop%, т.к. сам IEView это делать этого почему-то не умеет при том, что они встроены в ядро Miranda NG.
  • Победа!
[close]

Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 16 02 2021, 10:43:42
Если значение не задано, то используем значение по-умолчанию
А можно для танкистов не знакомых со скриптами немного помощи? К примеру: у меня хранятся файлы в папке "F:\Miranda\Files\%nick%"
я правлю в fltbubble.js   -  DEFAULT_FILES_LOCATION: '%mydocuments%\\%nick%',в shellopen.cmd - SET "MYDOCUMENTS=F:\Miranda\Files\"
Верно?
При открытии журнала сообщений (при наличии сообщения с файлом) получаю:
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 11:18:27
Смысл в том, что править ни в каком в скрипте ничего не нужно. Если хотите менять путь, то просто указывайте его в настройках Миранды. Данная тема оформления IEView должна работать сразу как есть, от пользователя ничего не требуется. Если же она не работает у вас, то значит я еще что-то не учёл и мне нужно больше информации для исправления такого специфического случая.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 16 02 2021, 11:40:23
править ни в каком в скрипте ничего не нужно.
Вернул всё в дефолтное состояния, путь в Miranda к файлам указывал и явно "F:\Miranda\Files\%nick%" и через переменные "%miranda_path%\Files\%nick%"  (файлы лежат по этому пути, всё как положено и открываются  подпапки по никам через кнопку "принятые файлы" в окне журнала сообщений...
При открытии журнала сообщений получаю ту же ошибку - строка 206 символ 21 ( как на скрине выше)
Какую информацию могу ещё дать чтобы помочь понять где и в чем ньюанс?
Могу в ЛС
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 11:46:50
Для начала перекачайте исходные файлы темы без изменений, удалив старые и перезапустите Миранду. Потому как сейчас нет уверенности в том, что номера строк сходятся и ошибку можно неверно интерпретировать.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 16 02 2021, 12:02:50
перекачайте исходные файлы темы без изменений, удалив старые и перезапустите Миранду.
Именно так и сделал (и ещё раз перекачал сейчас - Вы там пустую строку убрали, ошибка сместилась на 205 -ую)вот на эту сроку ссылается..
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 12:08:54
Вы не используете отдельные папки для пользователей, все файлы складываются в один каталог. Проверка такой конфигурации была неполноценной, попробуйте теперь.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 16 02 2021, 12:17:50
Вы не используете отдельные папки для пользователей
Нет, все папки по пользователям согласно %nick% я же писал выше
Quote
Files\%nick%"  (файлы лежат по этому пути, всё как положено и открываются  подпапки по никам через кнопку "принятые файлы" в окне журнала сообщений...
в общем нашел в чеми дело :

} else if (/%nick%/i.test(file_save_path)) {
                        search_for = message.getAttribute('data-nick');

но в fltbubble.ivt нет "data-nick", есть "data-name"

поменял} else if (/%nick%/i.test(file_save_path)) {
                        search_for = message.getAttribute('data-name');

Всё заработало! ошибки нет, файлы окрываюся!  :THUMBS UP:

Но есть момент - в журналах некторых контактов вместо ника подставляеться "null" в ссылку на файл
file:///F:/Miranda/Files/null/P10210-104209.jpg
Хотя папка  по нику контакта есть и файл там лежит..
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 12:23:15
Атрибут "data-name" читается в двух местах, если исправить только в одном, то будет такой эффект. Поправил.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 16 02 2021, 12:28:17
Атрибут "data-name" читается в двух местах, если исправить только в одном, то будет такой эффект. Поправил.
Да, тоже исправил и все заработало!Спасибо Вам большое, это просто счастье избавится от лишних телодвижений с просмотром файлов. :DRINK:

Есть только один момент - когда контакт шлет файл с одинаковым  именем "image.png", miranda переименовывает их "image(1).png" "image(2).png"
А для скрипта это все "image.png" :) и открывается один и то же файл.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Dm1 on 16 02 2021, 12:45:28
Это проблема со стороны Miranda NG, она никак не сообщает о том что файл был переименован и передаёт всегда его исходное имя. В текущей ситуации у нас нет инструментов чтобы с этим бороться, кроме патчей непосредственно для IEView и Miranda NG.
Title: Re: Открытие принятых фалов из окна чата и эскизы изображений
Post by: Boris_M on 11 02 2022, 16:04:55
Придумал я несколько более универсальный костыль для открытия принятых файлов и реализовал его в своей новой теме FltBubble
Доброго  времени!В связи с решением вопроса отображения подписей к входящим файлам (https://github.com/miranda-ng/miranda-ng/issues/3023) костыль перестал работать, так как теперь к имени файла прибавляется в скобках или текст (если он есть в описание

присланного файла) или дублируется само имя файла и выглядит теперь ссылка так

file:///С:/Miranda/Files/NICKNAME/IMG-fb04e5c855d1f70aa5c9e12591903469-V.jpg%20(IMG-fb04e5c855d1f70aa5c9e12591903469-V.jpg)
или
file:///С:/Miranda/Files/NICKNAME/IMG-fb04e5c855d1f70aa5c9e12591903469-V.jpg%20(посмотри и проверь цифры)

(https://forum.miranda-ng.org/proxy.php?request=http%3A%2F%2Fi116.fastpic.org%2Fthumb%2F2022%2F0211%2F48%2F6f1fd117ef712643e275f04de6f6cc48.jpeg&hash=09d8a7b65c04b5004e89c1d3f856949eb07ccde0) (http://i116.fastpic.org/big/2022/0211/48/6f1fd117ef712643e275f04de6f6cc48.jpg) 

Естественно такой файл не находится, возможно как-то пофиксить костыль?