pozitronik / CloudMailRu

Total Commander plugin for cloud.mail.ru service
GNU General Public License v3.0
357 stars 50 forks source link
cloud cloud-drive cloud-mail-ru dll mailru total-commander wfx

Плагин Total Commander для работы с cloud.mail.ru

GitHub releases Issues open Issues closed License

Plugin screenshot

Описание

Данная программа является плагином виртуальной файловой системы (WFX) для файлового менеджера Total Commander, реализующим взаимодействие с сервисом cloud.mail.ru (Облако Mail.ru) через WEB API. В текущей версии плагином поддерживаются:

Реализован только Unicode-набор функций, на не NT-версиях Windows плагин работать не будет. TCx64 поддерживается полностью.

Перед использованием ознакомьтесь с лицензионным соглашением по использованию Сервиса Облако@mail.ru

Разработчику

Плагин реализует веб-версию API Облака Mail.ru, полученную в результате реверс-инжиниринга сайта Облака. Код написан и тестировался в Embarcadero® Delphi 10 с использованием комплектной библиотеки Indy и библиотеки компонентов DCPcrypt Cryptographic Component Library v2 by David Barton (включены в репозиторий).

Проект может быть собран из Embarcadero® Delphi 10 любой версии стандартным способом (MailRuCloud.dproj => Shift+F9).

Для ознакомления с разработкой файлсистемных плагинов Total Commander ознакомьтесь с документацией и примерами от разработчика.

Установка и использование

Скачайте текущий стабильный релиз, распакуйте его, и подключите плагин MailRuCloud.wfx/MailRuCloud.wfx64 (при правильном подключении плагин появится в панели "Сетевое окружение"). Вызовите настройки плагина (Alt+Enter), и добавьте все необходимые аккаунты.
При возникновении вопросов по установке и использованию плагинов в Total Commander обратитесь к его справке.

Хранение паролей

Сохранённые пароли аккаунтов по умолчанию будут сохранены в открытом виде.
Пароли аккаунтов можно не указывать, в этом случае они будут запрашиваться при каждом подключении.
Также возможно использование встроенного в TC менеджера паролей (опции "Store password in TC password manager" в настройках и в диалоге запроса пароля).

Стандартные и публичные аккаунты

Плагин поддерживает два варианта работы с Облаком. Стандартный - когда у вас есть логин и пароль от аккаунта, и публичный - когда у вас есть публичная ссылка вида https://cloud.mail.ru/public/ABCD/NhEYwQELx. В первом случае будут доступны все возможности Облака, во втором - будет доступно только чтение каталогов и скачивание файлов.

Получение прямых ссылок на файлы

Плагин поддерживает получение прямых ссылок для файлов, к которым предоставлен публичный доступ. Эта возможность доступна при вызове свойств файла/каталога в Облаке, при этом в публичных аккаунтах прямые ссылки могут быть получены сразу, в стандартных - после предоставления к ним публичного доступа. При этом для каталогов рекурсивно запрашиваются прямые ссылки на все объекты внутри каталога.
Полученные списки можно использовать в сторонних программах, например - в качестве онлайн-плейлистов для медиаплеера.

Получение хеш-ссылок на файлы

Плагин поддерживает работу с файлами в Облаке через их хеши: уникальная ссылка на каждый файл может быть представлена в виде комбинации его хеша и размера. Такие ссылки можно получить на вкладке "Hashes list" при вызове свойств файла/каталога, там же можно создать файлы по ссылкам (в т.ч. и пакетно).

См. также описание опции "Try to find files by hash before uploading" и описание команды hash.

Настройки плагина

Global settings

Load SSL libraries only from plugin directory

При включении опции плагин будет пытаться загрузить SSL-библиотеки из собственного каталога, в случае существования подкаталогов /x32 и /x64 - загрузка будет производиться из каталога по соответствию разрядности используемой версии плагина. Если опция отключена, то плагин попытается загрузить библиотеки, найденные в системе.

Enable space info logging

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

Preserve file creation time

При включении опции плагин будет пытаться устанавливать для всех скачиваемых файлов время создания, время изменения и время последнего доступа равными тому, что установлены в Облаке (время загрузки файла в Облако). В противном случае будет установлено текущее время.
Важно: установка времени файлов в Облаке не поддерживается API, эта опция работает только при скачивании.

Show accounts trash folders

Опция включает отображение Корзины для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.trash). Подробнее о функционале Корзины см. ниже.

Show accounts shared links folders

Опция включает отображение списка общих ссылок для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.shared). Подробнее об этом функционале см. ниже.

Show accounts invites folders

Опция включает отображение списка входящих ссылок для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.invites). Подробнее об этом функционале см. ниже.

Override split file size to

Облако ограничивает максимальный размер файла для бесплатных аккаунтов. Официально это ограничение указано как 2GiB, но по факту оно всегда чуть меньше (по всей видимости, в этот размер включена длина имени файла). Поэтому плагин считает таким ограничением величину 2147483392 байт (2GiB - 256). Если включить опцию "Split large files to 2Gb parts", плагин будет разбивать закачиваемый файл на части именно этого размера.
При необходимости существует возможность переопределить эту величину. Для этого задайте этому параметру необходимое значение в байтах, например 200000000.

On downloads/uploads error

Определяет поведение плагина при ошибках операций скачивания/закачивания файлов и копировании/перемещении файлов между аккаунтами. Доступны следующие режимы:

Retry attempts

Количество повторов операций при ошибках, в случае выбора режима "Retry with this file". Отрицательные значения принимаются за бесконечное число попыток.
Режим разбиения: данный параметр аналогичным образом определяет поведение при ошибках загрузки частей разбитых файлов (для каждой отдельной части).

Wait

Время в миллисекундах между повторами операций в случае выбора режима "Retry with this file".
Режим разбиения: данный параметр аналогичным образом задаёт таймаут ожидания между повторми операций при загрузке частей разбитых файлов (для каждой отдельной части).

Copying/moving between accounts mode:

По умолчанию в плагине отключены файловые операции между аккаунтами (см обсуждение). Это ограничение можно обойти, совершая операции с файлами через их хеш (опция "Via hash"), или через публичные ссылки (опция "Via public link").

При выборе опции "Via public link" плагин будет пытаться выполнить операции с файлами, создавая для каждого из них публичную ссылку (если она отсутствует у файла). После завершения операции ссылка удаляется (если до этого она не существовала).

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

Overwrite splitted chunk mode:

При включении опции "Split large files to 2Gb parts" возможна ситуация, когда части разбитого файла уже существуют в Облаке. Поскольку невозможно выдать запрос на перезапись файла в этом случае (Total Commander ничего не знает о разбиении файла, для него вся операция происходит атомарно), поведение плагина будет определяться этой настройкой. По умолчанию все существующие части файла будут перезаписаны.

Delete file after upload mode:

Эта опция определяет поведение плагина в случае, когда перемещаемый из локальной файловой системы файл невозможно удалить (например, при наличии у него атрибута Read Only). По умолчанию плагин запросит выбор действия у пользователя.

Overwrite local files mode:

Эта опция позволяет переопределить стандартное поведение плагина при попытке перезаписи существующего локального файла (это может быть полезно при синхронизации и других длительных операциях). По умолчанию поведение не переопределяется (плагин будет запрашивать выбор действия у пользователя).

Plugin icons mode:

Эта опция переключает режимы отображения иконок для специальных каталогов (в скобках дано название внешнего файла иконки): каталог аккаунта (cloud.ico), каталог публичного аккаунта (cloud_public.ico), каталоги с публичным доступом (shared.ico), каталоги с общедоступной публичной ссылкой (shared_public.ico).

Доступны следующие режимы:

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

Для применения этой настройки требуется перезапуск TC.

Disable background operations support

Эта опция отключает поддержку фоновых операций в плагине (для применения требуется перезапуск TC).

URL encode direct download links

Эта опция включает представление прямых ссылок в формате URL-encoded. Кодированные ссылки корректно работают в большинстве программ, в отличие от некодированных (которые более человекочитаемы).

Update direct download links immediately

При включении этой опции плагин начнёт запрашивать список прямых ссылок немедленно после открытия свойств публичного объекта, либо после того, как публичная ссылка будет создана. Если опция выключена, для получения ссылок потребуется нажать кнопку обновления.

Try to find files by hash before uploading

Каждый файл в Облаке может быть идентифицирован по уникальному хеш-ключу, причём одинаковые файлы имеют одинаковые хеши. Таким образом, глобально Облако хранит фактически только одну копию каждого файла, даже если сам файл есть у многих пользователей.
При включении этой опции плагин вычисляет хеш для каждого закачиваемого файла и пытается найти этот файл в Облаке. В случае, если такой файл уже есть, то он добавляется без фактической передачи данных, в противном случае происходит обычная процедура заливки файла в Облако.
Режим разбиения: при включении данного параметра плагин будет пытаться найти соответствующие хеши как для целого файла, так и для каждой отдельно загружаемой части (если целый файл не найден).
Режим шифрования: при включённом шифровании данный параметр игнорируется.

Check uploads/downloads CRC

Эта опция включает проверку хеш-ключа файла при передаче файла, таким образом гарантируя корректность передачи.

Network settings

Network operations timeout (ms)

Позволяет переопределить таймауты сетевого подключения. Большое значение таймаута может предотвратить обрыв связи при плохом соединении, малое - остановить операцию при перегруженном канале. В случае, если указано любое значение меньше 0, используются стандартные системные настройки параметра.

Proxy settings

Набор параметров (тип прокси, адрес, порт, логин и пароль) для соединения с сетью через прокси-сервер. Поддерживаются http/https/socks4/socks5-прокси.

При необходимости пароль прокси-сервера также может быть сохранён в менеджере паролей Total Commander (опция "Store proxy password in TC password manager").

Speed limits

Набор параметров, позволяющих задать ограничение использования канала при загрузках на сервер и скачивании с сервера.

Change plugin UserAgent

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

File comments support

Важно: Total Commander не поддерживает работу с файловыми комментариями в FS-плагинах, поэтому плагин CloudMailRu реализует этот функционал самостоятельно. Поскольку открытого описания формата файловых комментариев не существует, эта реализация может содержать ошибки, ведущие к порче или потере комментариев.

Read descript.ion comments from cloud filesystem

При включении опции плагин будет пытаться получить комментарии из файла descript.ion (если он существует в текущем каталоге Облака) и вывести содержимое комментария в контентное поле description/вкладку Description в диалоге свойств.

Enable descript.ion editor

Опция включает редактирование комментариев для файлов в Облаке на вкладке Description в диалоге свойств файла. Если опция отключена, комментарий доступен только для просмотра.

Copy file comments from local filesystem

При включении этой опции при копировании файлов в Облако, плагин будет копировать также и имеющиеся локальные файловые комментарии. Комментарии для каталогов переноситься не будут из-за ограничений API WFX.

Copy file comments from cloud filesystem

При включении этой опции при копировании файлов из Облака, плагин будет копировать также и имеющиеся в Облаке файловые комментарии. Комментарии для каталогов переноситься не будут из-за ограничений API WFX.

Track cloud filesystem changes (file rename, delete, etc)

Эта опция заставляет плагин отслеживать изменения файловой системы в Облаке, и вносить соответствующие изменения в файловые комментарии (аналогично тому, как Total Commander делает это в локальной файловой системе). Например, если переименовать или переместить файл в Облаке, то плагин перенесёт файловый комментарий с учётом нового имени.

Override default comment file name

Этот параметр позволяет переопределить имя файла, в котором плагин будет сохранять файловые комментарии (например, в случае обнаружения конфликтов с поддержкой комментариев в Total Commander). Это имя переопределяется как для Облака, так и для локальной файловой системы.

Streaming settings

Стандартное поведение Total Commander при открытии файла внутри файлсистемного плагина - скачивание этого файла и последующее открытие локальной копии ассоциированным приложением. Однако существует возможность передать нужному приложению не скачиваемую копию файла а ссылку на поток данных файла. На этой вкладке можно настроить желаемое поведение для тех или иных типов файлов.

File extension

Расширение файлов (указывается без точки, например txt), для которых настраивается поведение.

Command

Команда (программа или скрипт), запускаемая для обработки передаваемой ссылки. Поддерживаются только абсолютные пути без переменных окружения.

Parameters

Параметры, передаваемые запускаемой команде. По умолчанию (если параметр не задан) передаётся сгенерированная ссылка. Для подстановки ссылки в наборе параметров, используйте значение %url%, например

-u %url%

Start path

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

Streaming type

Настройка типа генерируемой ссылки. Доступны следующие варианты:

Уровни протоколирования

При необходимости можно настроить количество собщений, выводимых в протокол соединения. Данный параметр не конфигурируется через настройки и должен быть изменён пользователем самостоятельно через ручное редактирование файла MailRuCloud.global.ini (параметр LogLevel).
В плагине существуют следующие уровни протоколирования:
1 (Connect): Включение панели соединения и вывода в протокол. Отключение этого уровня приведёт к полному отсутствию любого протоколирования (TC не включит соответствующую функцию).
2 (FileOperation): Протоколирование стандартных файловых операций + вывод сообщения о свободном месте (при включённой опции Enable space info logging).
4 (Detail): Детальное протоколирование некоторых операций (например, процесса авторизации) и нестандартных файловых операций (например, загрузка с авторазбиением).
8 (Warning): Протоколирование ошибок, не препятствующих дальнейшей работе (ошибки разбиения файла, очистки временных файлов и т.п.).
16 (Error): Протоколирование сбоев и неудачных операций.
32 (Debug): Дополнительное отладочное протоколирование.

Итоговое значение ключа настройки должно равняться сумме значений нужных уровней протоколирования, например для вывода ТОЛЬКО сообщений о файловых операциях (FileOperation) и различных ошибках (Warning + Error), значение LogLevel нужно установить равным 27 (1 + 2 + 8 + 16).
По умолчанию LogLevel принимается как 31 (все сообщения, кроме отладочных).

Переопределение рабочего шарда

При соединении с Облаком, плагин каждый раз запрашивает адрес шарда - сервера, с которого будет производиться скачивание файла. При необходимости можно переопределить это значение, вручную отредактировав файл MailRuCloud.ini, вписав в секцию нужного соединения ключ shard_override с нужным адресом, например

shard_override=https://cloclo44.datacloudmail.ru/get/

Это переопределение не требуется при нормальной работе плагина.

Команды плагина

Многопользовательские настройки

Плагин поддерживает хранение настроек в каталоге пользователя (%APPDATA%\MailRuCloud). Этот каталог выбирается по умолчанию в том случае, если файл настроек MailRuCloud.global.ini отсутствует в каталоге плагина, а сам каталог плагина недоступен для записи. В противном случае проверяется значение параметра IniPath:
0: Будут использоваться только настройки из каталога плагина (значение по умолчанию).
1: Будут использоваться только настройки из каталога %APPDATA%\MailRuCloud.
2: В случае, если каталог плагина доступен для записи, будут использоваться настройки из него, в противном случае - из каталога %APPDATA%\MailRuCloud.
Важно: права доступа к самим файлам настроек не проверяются. Настройка IniPath может изменяться только прямым редактированием MailRuCloud.global.ini (предполагается, что её будет использовать только администратор системы).

Ограничение максимально поддерживаемых путей.

Максимально поддерживаемая длина путей в Облаке составляет 1024 байта. API FWX также поддерживает пути до 1024 байт длиной, однако из-за того, что часть этого объёма используется под хранение имён соединений, фактический максимум пути в каждом аккаунте будет уменьшен на длину его имени. Таким образом файлы, путь к которым превышает этот максимум, могут быть недоступны через плагин.

Копирование между аккаунтами.

Копирование/перемещение из аккаунта в аккаунт не поддерживается плагином, несмотря на то, что Total Commander поддерживает такие операции в виртуальных файловых системах посредством использования файлового буфера в локальной файловой системе. Причина в том, что список аккаунтов представлен каталогом первого уровня в файловой системе плагина, и нет способа уведомить Total Commander об этом.
При необходимости, можно обойти это ограничение: нужно установить вторую копию плагина, и осуществлять копирование между разными копиями. В этом случае TC сможет задействовать локальный буфер.
Однако, в любом случае рекомендуется использовать файловые операции посредством ссылок (Copying/moving between accounts via public link).

Поддержка Корзины.

Удалённые файлы и каталоги хранятся в Облаке ещё некоторое время. Они недоступны для полноценной работы, но их можно восстановить. Для доступа к списку удалённых объектов используется Корзина - виртуальный каталог, доступный у каждого аккаунта по имени %account_name%.trash. Основные свойства Корзины:

Поддержка каталога общих ссылок.

Любому файлу или каталогу в Облаке может быть предоставлен доступ одним из невзаимоисключающих способов:

Для просмотра всех объектов, к которым предоставлены такие доступы, используется виртуальный каталог, доступный у каждого аккаунта по имени %account_name%.shared. Каждый объект в этом каталоге представляет ссылку на сответствующий источник в Облаке: для каталогов это сам каталог, для файлов - каталог, в котором файл располагается. Просмотр свойств такой ссылки работает также, как на источнике, удаление ссылки приводит как к удалению доступов всех пользователей к источнику, так и к удалению публичной ссылки (убрать только один тип доступа можно в диалоге свойств объекта).
Внимание: одинаково именованные ссылки в списке не различаются, независимо от того, на какой исходный объект они указывают.

Быстрый доступ к каталогу общих ссылок доступен по команде shared, выполненной в любом каталоге внутри аккаунта. Это работает даже если его отображение выключено в настройках.

Поддержка каталога входящих ссылок.

Каталоги, к которым вам предоставлен доступ другими пользователями, можно посмотреть в виртуальном каталоге, доступном по имени %account_name%.invites. Просмотр и управление объектами в этом каталоге производится через диалог свойств (Alt+Enter или Enter).

Внимание: одинаково именованные объекты в списке не различаются, независимо от того, на какой исходный каталог они указывают.

Быстрый доступ к каталогу входящих ссылок доступен по команде invites, выполненной в любом каталоге внутри аккаунта. Это работает даже если его отображение выключено в настройках.

Шифрование на лету

Внимание: это экспериментальная функция, находящаяся в разработке. Пожалуйста не используйте её при работе с важными данными!

Шифрование включается для каждого аккаунта отдельно. При включённом шифровании передаваемые в Облако файлы будут зашифрованы алгоритмом AES (Rijndael), при скачивании - прозрачно расшированы.
Плагин не хранит пароли шифрования. Они могут быть сохранены в менеджере паролей Total Commander, либо должны вводиться по требованию.

Параметры шифрования

Encrypt/decrypt files

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

Also encrypt filenames

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

Регистрация нового аккаунта

Плагин позволяет регистрировать учётную запись к сервисам mail.ru. Диалог создания новой учётной записи вызывается нажатием кнопки Register new в окне управления аккаунтами, либо при попытке создания нового каталога в списке аккаунтов (сначала будет вызван стандартный диалог создания каталога, указанное в нём имя будет передано в диалог создания новой учётной записи).
Для регистрации новой учётной записи требуется заполнить все активные поля диалога (это минимальный набор полей, требуемый при регистрации) и нажать кнопку Sign up. Если введённые данные будут приняты сервером, диалог отобразит графическую капчу, решение которой нужно ввести в соответствующее поле, и подтвердить регистрацию нажатием кнопки Confirm.
В случае успеха зарегистрированный аккаунт появится в настройках/списке аккаунтов, и будет доступен для работы.
В случае ошибки на любом этапе (проверка регистрационных данных, проверка капчи, иное взаимодействие с сервисом регистрации) сырой текст ошибки будет выведен в диалоге as is.

Часто задаваемые вопросы

Как и куда правильно жаловаться на проблемы?

Перед тем, как сообщать о проблеме, соберите следующую информацию:

Жаловаться можно в issues или в тему на форуме. Пожалуйста, убедитесь, что похожая проблема не зарегистрирована.

Как и где сделать запрос на добавление функционала?

В issues или в тему на форуме. Пожалуйста, убедитесь, что похожих запросов не зарегистрировано (в т.ч. в закрытых issues).

Я установил плагин, но возникает ошибка "Could not load SSL library".

В случае, если в системе уже присутствуют (и загружены в память) библиотеки libeay32.dll/ssleay32.dll нужной разрядности, плагин использует их. Это происходит в большинстве случаев, т.к. эти криптографические библиотеки используются во многих программах. В случае, если библиотеки отсутствуют в памяти, произойдёт попытка загрузки их из каталога Total Commander, затем - из каталога плагина. Убедитесь, что файлы libeay32.dll/ssleay32.dll присутствуют в этих каталогах.
Если библиотеки libeay32.dll/ssleay32.dll установлены, но ошибка повторяется, убедитесь, что они имеют нужную разрядность.
Будьте внимательны: цифры 32 в имени файлов libeay32.dll/ssleay32.dll не означают разрядность библиотек, т.е. их x32 и x64 версии называются одинаково.
Также можно принудительно использовать только библиотеки, находящиеся в каталоге плагина (например, во избежание проблем совместимости). Для этого включите в настройках плагина опцию "Load SSL libraries only from plugin directory".
Полезно: для разделения x32 и x64-версий библиотек поместите их в подкаталоги x32 и x64 соответственно.

Плагин требует msvcr110.dll или другую библиотеку.

Используемая сборка SSL-библиотек собрана с зависимостью от библиотек Microsoft C++ run-time. Если они отсутствуют в системе, вам понадобится установить в систему соответствующий распространяемый пакет Microsoft Visual C++, либо заменить SSL-библиотеки на собранные без этой зависимости.

Плагин показывает пустой список каталогов.

Вы подключили его к старой версии Total Commander, не поддерживающей Unicode. Минимальная требуемая версия Total Commander - 7.5, однако некоторые возможности не будут работать (или будут работать некорректно) на версиях ниже 8.5.

Работает ли плагин в программе %software_name%?

Некоторые файловые менеджеры поддерживают файлсистемные плагины от Total Commander, но работоспособность гарантируется только для Total Commander. В случае возникновения проблем при использовании с другими программами обращайтесь к их разработчикам.

Использование сторонних продуктов

В плагине используются некоторые иконки набора Snipicons, доступного под лицензией Creative Commons Attribution-NoDerivatives 4.0 International License.

Поддержка шифрования реализована с помощью библиотеки компонентов DCPcrypt Cryptographic Component Library v2 by David Barton (crypto@cityinthesky.co.uk), доступного под лицензией MIT.

Licence

GNU GPL v3.0