[AutoIt] Работа с Яндекс.Диск и плагином WebDAV

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

[AutoIt] Работа с Яндекс.Диск и плагином WebDAV

Сообщение Skif_off »

Преамбула. Плагин WebDAV имеет одну неудобную особенность: операция удаления файлов/папок не может работать в фоне, блокируя окно ТС, что неудобно, если процесс затянулся. В поисках возможности прикрутить для этого стороннее средство в голову пришла мысль избавиться от необходимости логиниться в браузере и родилось это.

Скрипт умеет:
- удалять файлы/папки;
- публиковать файлы/папки (если объект уже был опубликован, то будет показана предыдущая ссылка);
- закрывать файлы/папки;
- проверять, опубликованы ли выделенные файлы/папки;
- получать хэши выделенных файлов (MD5);
- показать доступное и занятое место.
В первом и третьем случае будет показан диалог, подобный ТС (подтверждение и список имён, не более 5 штук). Во втором, четвёртом и пятом - окно с результирующей таблицей с возможностью скопировать все или только выделенные (просто ссылки или оформленные, как ссылка в HTML или в BBcode), при этом копируются только пункты со ссылкой или с хэшем.

Если это не быстрое соединение ("Quick connection"), то скрипт попытается прочитать адрес сервера, имя пользователя и пароль из файла конфигурации tcwebdav.ini:
- если удалось прочитать имя пользователя и пароль, то они будут использоваться без запроса ввода;
- если удалось прочитать только имя пользователя, то в окно ввода имени пользователя/пароля будет автоматически вставлено имя пользователя, а фокус ввода (курсор) будет поставлен на поле ввода пароля;
Если пароль защищён главным паролем, то скрипт предложит ввести пароль аккуанта!

Задуман и реализован для работы с Total Commander и Double Commander (учтены особенности получения списка файлов/папок и адресов): скрипт проверяет имя родительского процесса и если в его имени не содержится "doublec" или "totalcmd", то скрипт будет завершён с предупреждением.

Ссылка (0.0.4.0 / 2018.09.17).
Писалось и проверялось на AutoIt 3.3.8.1, версии выше пока не проверялись, могут быть проблемы (что-то там менялось в работе с COM-объектами), т.к. используется COM-объект WinHttp.WinHttpRequest.5.1.
Скрипт использует WebDAV API, для доступа используется Basic-аутентификация (как и в плагине WebDAV).

Параметры запуска:

Код: Выделить всё

удаляем файлы/папки
  "%WL" --del
публикуем файлы/папки (если файл/папка уже опубликованы, будет просто показан адрес)
  "%WL" --public
закрываем файлы/папки
  "%WL" --public-del
проверяем, опубликованы ли файлы/папки
  "%WL" --public-check
получить контрольные суммы (MD5) выделенных файлов
   "%WL" --md5
  или
   "%WL" --md5 "path"
  где path - каталог для сохранения MD5-файла ***
свободное и занятое место
  "%WL" --size
Где %WL - список в UTF-16LE. Для Double Commander список для единообразия необходимо задавать как "%/1%LW" (без кавычек).
***
[cut]При использовании параметра "--md5" с путём файл не будет сохранён автоматически, необходимо будет нажать кнопку "Сохранить".
Путь должен существовать.
Файл будет сохранён в кодировке UTF-8 с BOM с именем последней папки в пути или буквы диска (если в корне).
Если файл с таким именем уже существует, то к имени будет добавлен счётчик: "name(N).md5".[/cut]

Пример кнопки:

Код: Выделить всё

TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\AutoIt3.exe" "%COMMANDER_PATH%\Utils\YandexDiskWebDAV.au3"
"%WL" --public-check
%COMMANDER_PATH%\AutoIt3.exe
проверить, опубликованы ли файлы/папки
%COMMANDER_PATH%\Utils\

-1
AutoIt3.exe брать на офсайте, либо попробовать вариант с /AutoIt3ExecuteScript (пример запуска нескомпилированного скрипта здесь, если используется скомпилированная версия TabsList, то вполне можно использовать её).

User Agent, не мудрствуя лукаво, соответствует IE11 на Win7x86, без излишеств

Код: Выделить всё

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Последний раз редактировалось Skif_off Пн сен 17, 2018 21:12, всего редактировалось 15 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off писал(а):Ссылка.
Ну, вот зачем эти сложности, если есть спойлер? Если код открыт, то заливать его на облако по меньшей мере странно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
Сам файл видел? ~9 сотен строк кода копировать устанешь, иначе так бы и сделал.
Не уловил, как связаны облако и открытость кода.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off
Файл весит 39 Кб. У нас тут можно картинки на 100 Кб размещать.
Вот и я не уловил, как они могут быть связаны. Это же не GitHub.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
При чём тут килобайты и ограничения в 100 КБ? Говорю о неудобстве копирования 9 сотен строк кода супротив кнопки Скачать. GitHub тут по очевидным причинам вообще не подойдёт.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off
Ну, так у тебя два варианта есть. А ты выбрал только один. Можно же совместить, чтобы была возможность и код в онлайн-режиме читать.
А что в GitHub не так? Там что портянок мало?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
Файл большой, сливай и смотри в нормальном редакторе - с подсветкой синтаксиса и фолдингом (структуре уделено внимание). Или не сливай.
GitHub не дружит с cp1251.
От дискуссии не по работе скрипта/со скриптом или непонятного в описании устраняюсь.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Действительно, что дискутировать и что-то доказывать, когда проще самому сделать.
Оформленный код. Только текст (ПКМ > Cохранить ссылку как... > YandexDiskWebDAV.au3).
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

0.0.2.3 / 2017.04.27
- добавлено окно прогресса для всех операций (кроме получения размера, конечно), в окне прогресса отображается текущая папка от корня, а под ней имя обрабатываемого файла/папки;
- различные внутренние изменения.
Последний раз редактировалось Skif_off Чт апр 27, 2017 21:01, всего редактировалось 2 раза.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Кто-нибудь пробовал? Что-то засомневался, если копировать ссылки на опубликованные файлы/папки как оформленные, то в буфер обмена выделеные попадают в таком виде (для HTML и BBcode соотв.)

Код: Выделить всё

<a href="link">name</a>
[url=link]name[/url]
где name - то же, что и в первом столбце таблицы (полный путь от корня диска): может быть, стоит оставить только имя файла/папки?
Аватара пользователя
ZZZAlexZZZ
Сообщения: 68
Зарегистрирован: Сб мар 08, 2014 22:25

Сообщение ZZZAlexZZZ »

Прошу поподробнее расписать как его правильно вмонтировать и пользоваться.
У меня кнопка каждый раз запрашивает пароль - в чем смысл и удобство тогда?
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ZZZAlexZZZ писал(а):Прошу поподробнее расписать как его правильно вмонтировать и пользоваться.
Добавляется как и любой другой скрипт в большинстве случаев :) Скачиваете YandexDiskWebDAV.au3 и кладёте в удобное место, скачиваете с офсайта autoit-v3.3.8.1.zip, достаёте из архива AutoIt3.exe и кладёте в удобное место. Теперь добавляете кнопку(и), пример в первом сообщении темы, только поправьте пути на свои. Немного позже выложу скомпилированную версию.
Открываете Яндекс.Диск в плагине WebDAV, выделяете файл(ы)/папку(и) и жмёте кнопку.
ZZZAlexZZZ писал(а):У меня кнопка каждый раз запрашивает пароль - в чем смысл и удобство тогда?
Естественно запрашивает, как без него? Смысл и удобство перечислены в первом сообщении*, плагин этого не умеет. Не думаю, что необходимо уточнять, но на всякий случай: "публикация" - то, что в браузере называется "поделиться ссылкой", "закрытие" - удалить ссылку, соотв..
Не знаю, как безопасно сохранить пароль, и пока не пробовал разобраться, как хранит его плагин WebDAV (это ещё не учитывая возможность плагина защищать пароли главным паролем) - поэтому запрашивает. Ну и чтобы меньше спрашивать, скрипт пытается прочитать и использовать хотя бы логин из tcwebdav.ini.

* ещё была мысль добавить возможность закрыть файлы/папки из окна просмотра после запуска с параметром --public или --public-check и, может быть, запрос подтверждения при запуске с --public-del.

P.S. Добавил в первом сообщении: используемый API и способ аутентификации.
Аватара пользователя
ZZZAlexZZZ
Сообщения: 68
Зарегистрирован: Сб мар 08, 2014 22:25

Сообщение ZZZAlexZZZ »

Тогда мной не верно было прочитано ТЗ и использование данного скрипта для меня не имеет смысла - искать и вводить каждый раз пароль не хватит терпения.
Ну и чтобы меньше спрашивать, скрипт пытается прочитать и использовать хотя бы логин из tcwebdav.ini.
За это спасибо, но без пароля - не думаю.
Спасибо за проделанную работу.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ZZZAlexZZZ
Я не програмист, сходу не разберусь, как Гислер хранит пароль, поэтому пока не совался, вариант держать скрипт в памяти, чтобы водить пароль только при первом вызове мне не нравится. (В крайнем случае есть KeePass.)
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

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