Author Topic: Открытие принятых фалов из окна чата и эскизы изображений  (Read 7867 times)

0 Members and 4 Guests are viewing this topic.

Offline Dm1

Не смотря на 2021й год и огромное количество разного рода мессенджеров вокру пользоваться Miranda NG в некоторых случая по прежнему удобно. Но вот сильно достает работа с отправленными и принятыми файлами.

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

Как обстоят дела на самом деле?
 

Offline Dm1

На счет отправленного файла я неверно написал, его полный путь есть в самом сообщении. Вот с принятым проблема.
 

Offline Dm1

В большинстве костылей в попытках угадать путь сохранения файла пытаются использовать чтение конфигурации из БД при помощи external.db_get. Но, вот что характерно, всегда неудачно. Данная функция в IEView не работает и всегда возвращает undefined, хотя при помощи неё можно было бы получить путь сохранения файлов из настроек и подставив данные контакта точно найти входящий файл. В общем имеем классическое "хотели как лучше, а получилось как всегда" :D
 

Offline Dm1

А нет, сама функция работает, просто в "костылях" читают несуществующие настройки, так работает: external.db_get(0, 'SRFile', 'RecvFilesDirAdv'). Уже кое-как жить можно.
 

Offline Boris_M

реализовать открытие файлов из окна чата
Я пробовал вот так в шаблонах ковырятся  но уперся либо в необработку цикла скриптом либо не понимание ссылок file:// (ну и сам то я не очень разбираюсь в скриптописательстве :( )
архив с шаблонами там же в сообщении. Может все-таки получится решить, утомляет по папкам файлы искать принятые, даже если они  в папках по никам контактов ( настроил так %miranda_path%\Files\%nick%\)
 

Offline Dm1

но уперся либо в необработку цикла скриптом либо не понимание ссылок 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 сделано как попало и полагается просто на фиксированный путь в самой сборке, при изменении настроек всё сразу ломается. Вот над этим еще придется поработать.
« Last Edit: 10 02 2021, 16:54:58 by Dm1 »
 

Offline Dm1

Придумал я несколько более универсальный костыль для открытия принятых файлов и реализовал его в своей новой теме FltBubble https://github.com/iDm1/Miranda-NG/tree/main/IEView/FltBubble
Править в файлах темы ничего не нужно, она берёт расположение файлов из самой базы данных Miranda NG.



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

« Last Edit: 16 02 2021, 11:38:37 by Dm1 »
 
The following users thanked this post: Boris_M

Offline Boris_M

Если значение не задано, то используем значение по-умолчанию
А можно для танкистов не знакомых со скриптами немного помощи? К примеру: у меня хранятся файлы в папке "F:\Miranda\Files\%nick%"
я правлю в fltbubble.js   -  DEFAULT_FILES_LOCATION: '%mydocuments%\\%nick%',в shellopen.cmd - SET "MYDOCUMENTS=F:\Miranda\Files\"
Верно?
При открытии журнала сообщений (при наличии сообщения с файлом) получаю:
« Last Edit: 16 02 2021, 11:02:30 by Boris_M »
 

Offline Dm1

Смысл в том, что править ни в каком в скрипте ничего не нужно. Если хотите менять путь, то просто указывайте его в настройках Миранды. Данная тема оформления IEView должна работать сразу как есть, от пользователя ничего не требуется. Если же она не работает у вас, то значит я еще что-то не учёл и мне нужно больше информации для исправления такого специфического случая.
« Last Edit: 16 02 2021, 11:23:29 by Dm1 »
 
The following users thanked this post: Boris_M

Offline Boris_M

править ни в каком в скрипте ничего не нужно.
Вернул всё в дефолтное состояния, путь в Miranda к файлам указывал и явно "F:\Miranda\Files\%nick%" и через переменные "%miranda_path%\Files\%nick%"  (файлы лежат по этому пути, всё как положено и открываются  подпапки по никам через кнопку "принятые файлы" в окне журнала сообщений...
При открытии журнала сообщений получаю ту же ошибку - строка 206 символ 21 ( как на скрине выше)
Какую информацию могу ещё дать чтобы помочь понять где и в чем ньюанс?
Могу в ЛС
« Last Edit: 16 02 2021, 11:42:57 by Boris_M »
 

Offline Dm1

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

Offline Boris_M

перекачайте исходные файлы темы без изменений, удалив старые и перезапустите Миранду.
Именно так и сделал (и ещё раз перекачал сейчас - Вы там пустую строку убрали, ошибка сместилась на 205 -ую)вот на эту сроку ссылается..
 

Offline Dm1

Вы не используете отдельные папки для пользователей, все файлы складываются в один каталог. Проверка такой конфигурации была неполноценной, попробуйте теперь.
 

Offline Boris_M

Вы не используете отдельные папки для пользователей
Нет, все папки по пользователям согласно %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
Хотя папка  по нику контакта есть и файл там лежит..
« Last Edit: 16 02 2021, 12:42:37 by Boris_M »
 

Offline Dm1

Атрибут "data-name" читается в двух местах, если исправить только в одном, то будет такой эффект. Поправил.
 
The following users thanked this post: Boris_M