Miranda NG Official Community Forum
Miranda NG русскоязычный форум => Общие разговоры о Miranda NG => Topic started by: Dm1 on 09 02 2021, 13:25:33
-
Не смотря на 2021й год и огромное количество разного рода мессенджеров вокру пользоваться Miranda NG в некоторых случая по прежнему удобно. Но вот сильно достает работа с отправленными и принятыми файлами.
На сколько я понял из документации IEView, возможности узнать куда был сохранен принятый файл и откуда был взят отправленный у нас нет? Если эту информацию в IEView можно как-то надёжно получать (я встречал "костыли", пытающиеся это делать в некоторых скинах, все они были нерабочими), то реализовать открытие файлов из окна чата и предпросмотр изображений будет не сложно в скине IEView, в противном же случае у нас имеется некоторый фатальный недостаток в плане удобства.
Как обстоят дела на самом деле?
-
На счет отправленного файла я неверно написал, его полный путь есть в самом сообщении. Вот с принятым проблема.
-
В большинстве костылей в попытках угадать путь сохранения файла пытаются использовать чтение конфигурации из БД при помощи external.db_get. Но, вот что характерно, всегда неудачно. Данная функция в IEView не работает и всегда возвращает undefined, хотя при помощи неё можно было бы получить путь сохранения файлов из настроек и подставив данные контакта точно найти входящий файл. В общем имеем классическое "хотели как лучше, а получилось как всегда" :D
-
А нет, сама функция работает, просто в "костылях" читают несуществующие настройки, так работает: external.db_get(0, 'SRFile', 'RecvFilesDirAdv'). Уже кое-как жить можно.
-
реализовать открытие файлов из окна чата
Я пробовал вот так (https://forum.miranda-ng.org/index.php?topic=5613.msg26906#msg26906) в шаблонах ковырятся но уперся либо в необработку цикла скриптом либо не понимание ссылок file:// (ну и сам то я не очень разбираюсь в скриптописательстве :( )
архив с шаблонами там же в сообщении. Может все-таки получится решить, утомляет по папкам файлы искать принятые, даже если они в папках по никам контактов ( настроил так %miranda_path%\Files\%nick%\)
-
но уперся либо в необработку цикла скриптом либо не понимание ссылок 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 сделано как попало и полагается просто на фиксированный путь в самой сборке, при изменении настроек всё сразу ломается. Вот над этим еще придется поработать.
-
Придумал я несколько более универсальный костыль для открытия принятых файлов и реализовал его в своей новой теме 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.
- Победа!
-
Если значение не задано, то используем значение по-умолчанию
А можно для танкистов не знакомых со скриптами немного помощи? К примеру: у меня хранятся файлы в папке "F:\Miranda\Files\%nick%"
я правлю в fltbubble.js - DEFAULT_FILES_LOCATION: '%mydocuments%\\%nick%',в shellopen.cmd - SET "MYDOCUMENTS=F:\Miranda\Files\"
Верно?
При открытии журнала сообщений (при наличии сообщения с файлом) получаю:
-
Смысл в том, что править ни в каком в скрипте ничего не нужно. Если хотите менять путь, то просто указывайте его в настройках Миранды. Данная тема оформления IEView должна работать сразу как есть, от пользователя ничего не требуется. Если же она не работает у вас, то значит я еще что-то не учёл и мне нужно больше информации для исправления такого специфического случая.
-
править ни в каком в скрипте ничего не нужно.
Вернул всё в дефолтное состояния, путь в Miranda к файлам указывал и явно "F:\Miranda\Files\%nick%" и через переменные "%miranda_path%\Files\%nick%" (файлы лежат по этому пути, всё как положено и открываются подпапки по никам через кнопку "принятые файлы" в окне журнала сообщений...
При открытии журнала сообщений получаю ту же ошибку - строка 206 символ 21 ( как на скрине выше)
Какую информацию могу ещё дать чтобы помочь понять где и в чем ньюанс?
Могу в ЛС
-
Для начала перекачайте исходные файлы темы без изменений, удалив старые и перезапустите Миранду. Потому как сейчас нет уверенности в том, что номера строк сходятся и ошибку можно неверно интерпретировать.
-
перекачайте исходные файлы темы без изменений, удалив старые и перезапустите Миранду.
Именно так и сделал (и ещё раз перекачал сейчас - Вы там пустую строку убрали, ошибка сместилась на 205 -ую)вот на эту сроку ссылается..
-
Вы не используете отдельные папки для пользователей, все файлы складываются в один каталог. Проверка такой конфигурации была неполноценной, попробуйте теперь.
-
Вы не используете отдельные папки для пользователей
Нет, все папки по пользователям согласно %nick% я же писал выше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
Хотя папка по нику контакта есть и файл там лежит..
-
Атрибут "data-name" читается в двух местах, если исправить только в одном, то будет такой эффект. Поправил.
-
Атрибут "data-name" читается в двух местах, если исправить только в одном, то будет такой эффект. Поправил.
Да, тоже исправил и все заработало!Спасибо Вам большое, это просто счастье избавится от лишних телодвижений с просмотром файлов. :DRINK:
Есть только один момент - когда контакт шлет файл с одинаковым именем "image.png", miranda переименовывает их "image(1).png" "image(2).png"
А для скрипта это все "image.png" :) и открывается один и то же файл.
-
Это проблема со стороны Miranda NG, она никак не сообщает о том что файл был переименован и передаёт всегда его исходное имя. В текущей ситуации у нас нет инструментов чтобы с этим бороться, кроме патчей непосредственно для IEView и Miranda NG.
-
Придумал я несколько более универсальный костыль для открытия принятых файлов и реализовал его в своей новой теме 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)
Естественно такой файл не находится, возможно как-то пофиксить костыль?