Данная программа является плагином виртуальной файловой системы (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.
При включении опции плагин будет пытаться загрузить SSL-библиотеки из собственного каталога, в случае существования подкаталогов /x32 и /x64 - загрузка будет производиться из каталога по соответствию разрядности используемой версии плагина. Если опция отключена, то плагин попытается загрузить библиотеки, найденные в системе.
При включении опции плагин будет запрашивать информацию о занятом месте, и выводить её в протокол после завершения любых файловых операций.
При включении опции плагин будет пытаться устанавливать для всех скачиваемых файлов время создания, время изменения и время последнего доступа равными тому, что установлены в Облаке (время загрузки файла в Облако). В противном случае будет установлено текущее время.
Важно: установка времени файлов в Облаке не поддерживается API, эта опция работает только при скачивании.
Опция включает отображение Корзины для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.trash). Подробнее о функционале Корзины см. ниже.
Опция включает отображение списка общих ссылок для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.shared). Подробнее об этом функционале см. ниже.
Опция включает отображение списка входящих ссылок для всех стандартных аккаунтов (в список соединений добавляются папки вида %connection_name%.invites). Подробнее об этом функционале см. ниже.
Облако ограничивает максимальный размер файла для бесплатных аккаунтов. Официально это ограничение указано как 2GiB, но по факту оно всегда чуть меньше (по всей видимости, в этот размер включена длина имени файла). Поэтому плагин считает таким ограничением величину 2147483392 байт (2GiB - 256). Если включить опцию "Split large files to 2Gb parts", плагин будет разбивать закачиваемый файл на части именно этого размера.
При необходимости существует возможность переопределить эту величину. Для этого задайте этому параметру необходимое значение в байтах, например 200000000.
Определяет поведение плагина при ошибках операций скачивания/закачивания файлов и копировании/перемещении файлов между аккаунтами. Доступны следующие режимы:
Количество повторов операций при ошибках, в случае выбора режима "Retry with this file". Отрицательные значения принимаются за бесконечное число попыток.
Режим разбиения: данный параметр аналогичным образом определяет поведение при ошибках загрузки частей разбитых файлов (для каждой отдельной части).
Время в миллисекундах между повторами операций в случае выбора режима "Retry with this file".
Режим разбиения: данный параметр аналогичным образом задаёт таймаут ожидания между повторми операций при загрузке частей разбитых файлов (для каждой отдельной части).
По умолчанию в плагине отключены файловые операции между аккаунтами (см обсуждение). Это ограничение можно обойти, совершая операции с файлами через их хеш (опция "Via hash"), или через публичные ссылки (опция "Via public link").
При выборе опции "Via public link" плагин будет пытаться выполнить операции с файлами, создавая для каждого из них публичную ссылку (если она отсутствует у файла). После завершения операции ссылка удаляется (если до этого она не существовала).
Поскольку операции над большим массивом файлов могут быть продолжительными, рекомендуется выполнять перенос файлов между аккаунтами через команду clone.
При включении опции "Split large files to 2Gb parts" возможна ситуация, когда части разбитого файла уже существуют в Облаке. Поскольку невозможно выдать запрос на перезапись файла в этом случае (Total Commander ничего не знает о разбиении файла, для него вся операция происходит атомарно), поведение плагина будет определяться этой настройкой. По умолчанию все существующие части файла будут перезаписаны.
Эта опция определяет поведение плагина в случае, когда перемещаемый из локальной файловой системы файл невозможно удалить (например, при наличии у него атрибута Read Only). По умолчанию плагин запросит выбор действия у пользователя.
Эта опция позволяет переопределить стандартное поведение плагина при попытке перезаписи существующего локального файла (это может быть полезно при синхронизации и других длительных операциях). По умолчанию поведение не переопределяется (плагин будет запрашивать выбор действия у пользователя).
Эта опция переключает режимы отображения иконок для специальных каталогов (в скобках дано название внешнего файла иконки): каталог аккаунта (cloud.ico), каталог публичного аккаунта (cloud_public.ico), каталоги с публичным доступом (shared.ico), каталоги с общедоступной публичной ссылкой (shared_public.ico).
Доступны следующие режимы:
Размер иконок считывается из конфигурационного файла Total Commander. TC позволяет установить нестандартные размеры иконок, в таких случаях плагин попытается получить наиболее близкие по размеру системные иконки. Однако, в режимах с наложением результирующие иконки могут выглядеть размыто.
Для применения этой настройки требуется перезапуск TC.
Эта опция отключает поддержку фоновых операций в плагине (для применения требуется перезапуск TC).
Эта опция включает представление прямых ссылок в формате URL-encoded. Кодированные ссылки корректно работают в большинстве программ, в отличие от некодированных (которые более человекочитаемы).
При включении этой опции плагин начнёт запрашивать список прямых ссылок немедленно после открытия свойств публичного объекта, либо после того, как публичная ссылка будет создана. Если опция выключена, для получения ссылок потребуется нажать кнопку обновления.
Каждый файл в Облаке может быть идентифицирован по уникальному хеш-ключу, причём одинаковые файлы имеют одинаковые хеши. Таким образом, глобально Облако хранит фактически только одну копию каждого файла, даже если сам файл есть у многих пользователей.
При включении этой опции плагин вычисляет хеш для каждого закачиваемого файла и пытается найти этот файл в Облаке. В случае, если такой файл уже есть, то он добавляется без фактической передачи данных, в противном случае происходит обычная процедура заливки файла в Облако.
Режим разбиения: при включении данного параметра плагин будет пытаться найти соответствующие хеши как для целого файла, так и для каждой отдельно загружаемой части (если целый файл не найден).
Режим шифрования: при включённом шифровании данный параметр игнорируется.
Эта опция включает проверку хеш-ключа файла при передаче файла, таким образом гарантируя корректность передачи.
Позволяет переопределить таймауты сетевого подключения. Большое значение таймаута может предотвратить обрыв связи при плохом соединении, малое - остановить операцию при перегруженном канале. В случае, если указано любое значение меньше 0, используются стандартные системные настройки параметра.
Набор параметров (тип прокси, адрес, порт, логин и пароль) для соединения с сетью через прокси-сервер. Поддерживаются http/https/socks4/socks5-прокси.
При необходимости пароль прокси-сервера также может быть сохранён в менеджере паролей Total Commander (опция "Store proxy password in TC password manager").
Набор параметров, позволяющих задать ограничение использования канала при загрузках на сервер и скачивании с сервера.
Позволяет изменить строку идентификации плагина, по умолчанию определяемую в коде (например, чтобы замаскироваться под какой-либо браузер).
Важно: Total Commander не поддерживает работу с файловыми комментариями в FS-плагинах, поэтому плагин CloudMailRu реализует этот функционал самостоятельно. Поскольку открытого описания формата файловых комментариев не существует, эта реализация может содержать ошибки, ведущие к порче или потере комментариев.
При включении опции плагин будет пытаться получить комментарии из файла descript.ion (если он существует в текущем каталоге Облака) и вывести содержимое комментария в контентное поле description/вкладку Description в диалоге свойств.
Опция включает редактирование комментариев для файлов в Облаке на вкладке Description в диалоге свойств файла. Если опция отключена, комментарий доступен только для просмотра.
При включении этой опции при копировании файлов в Облако, плагин будет копировать также и имеющиеся локальные файловые комментарии. Комментарии для каталогов переноситься не будут из-за ограничений API WFX.
При включении этой опции при копировании файлов из Облака, плагин будет копировать также и имеющиеся в Облаке файловые комментарии. Комментарии для каталогов переноситься не будут из-за ограничений API WFX.
Эта опция заставляет плагин отслеживать изменения файловой системы в Облаке, и вносить соответствующие изменения в файловые комментарии (аналогично тому, как Total Commander делает это в локальной файловой системе). Например, если переименовать или переместить файл в Облаке, то плагин перенесёт файловый комментарий с учётом нового имени.
Этот параметр позволяет переопределить имя файла, в котором плагин будет сохранять файловые комментарии (например, в случае обнаружения конфликтов с поддержкой комментариев в Total Commander). Это имя переопределяется как для Облака, так и для локальной файловой системы.
Стандартное поведение Total Commander при открытии файла внутри файлсистемного плагина - скачивание этого файла и последующее открытие локальной копии ассоциированным приложением. Однако существует возможность передать нужному приложению не скачиваемую копию файла а ссылку на поток данных файла. На этой вкладке можно настроить желаемое поведение для тех или иных типов файлов.
Расширение файлов (указывается без точки, например txt), для которых настраивается поведение.
Команда (программа или скрипт), запускаемая для обработки передаваемой ссылки. Поддерживаются только абсолютные пути без переменных окружения.
Параметры, передаваемые запускаемой команде. По умолчанию (если параметр не задан) передаётся сгенерированная ссылка. Для подстановки ссылки в наборе параметров, используйте значение %url%, например
-u %url%
Путь, который будет установлен перед запуском программы. Если никакой путь не задан, программа запускается в собственном каталоге.
Настройка типа генерируемой ссылки. Доступны следующие варианты:
При необходимости можно настроить количество собщений, выводимых в протокол соединения. Данный параметр не конфигурируется через настройки и должен быть изменён пользователем самостоятельно через ручное редактирование файла 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, либо должны вводиться по требованию.
Дополнительно: для проверки корректности используемого пароля его хеш сохранится в настройках после первого использования. Плагин будет отслеживать попытки входа в аккаунт с неверным паролем и предлагать пользователю выбрать действие из следующих фариантов:
При включении этого режима имена передаваемых файлов будут шифроваться также, как и их содержимое.
Плагин позволяет регистрировать учётную запись к сервисам mail.ru. Диалог создания новой учётной записи вызывается нажатием кнопки Register new в окне управления аккаунтами, либо при попытке создания нового каталога в списке аккаунтов (сначала будет вызван стандартный диалог создания каталога, указанное в нём имя будет передано в диалог создания новой учётной записи).
Для регистрации новой учётной записи требуется заполнить все активные поля диалога (это минимальный набор полей, требуемый при регистрации) и нажать кнопку Sign up. Если введённые данные будут приняты сервером, диалог отобразит графическую капчу, решение которой нужно ввести в соответствующее поле, и подтвердить регистрацию нажатием кнопки Confirm.
В случае успеха зарегистрированный аккаунт появится в настройках/списке аккаунтов, и будет доступен для работы.
В случае ошибки на любом этапе (проверка регистрационных данных, проверка капчи, иное взаимодействие с сервисом регистрации) сырой текст ошибки будет выведен в диалоге as is.
Перед тем, как сообщать о проблеме, соберите следующую информацию:
Жаловаться можно в issues или в тему на форуме. Пожалуйста, убедитесь, что похожая проблема не зарегистрирована.
В issues или в тему на форуме. Пожалуйста, убедитесь, что похожих запросов не зарегистрировано (в т.ч. в закрытых issues).
В случае, если в системе уже присутствуют (и загружены в память) библиотеки 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 соответственно.
Используемая сборка SSL-библиотек собрана с зависимостью от библиотек Microsoft C++ run-time. Если они отсутствуют в системе, вам понадобится установить в систему соответствующий распространяемый пакет Microsoft Visual C++, либо заменить SSL-библиотеки на собранные без этой зависимости.
Вы подключили его к старой версии Total Commander, не поддерживающей Unicode. Минимальная требуемая версия Total Commander - 7.5, однако некоторые возможности не будут работать (или будут работать некорректно) на версиях ниже 8.5.
Некоторые файловые менеджеры поддерживают файлсистемные плагины от 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.
GNU GPL v3.0