![](https://habrastorage.org/files/e2b/2b2/fa9/e2b2b2fa99524fa8951f144edf6f2cf8.png)
А ещё TC научился показывать иконки во вкладках!
Будем откровенны: безальтернативный механизм работы с облаком Mail.ru через синхронизацию очень неудобен. По сути, у пользователя нет полноценного контроля над единичными файлами; всё, что предлагает ему стандартный клиент — двустороннее зеркалирование указанных им данных. Если же нужно отойти от этого сценария, скажем, скачать из облачного архива единственный файл на несинхронизированном устройстве — приходится запускать браузер и пытаться сделать что-то через веб-интерфейс, в котором даже поиска нет. Учитывая, что содержимое облачных каталогов подгружается по мере прокрутки, поиск в браузере может и не помочь.
Есть и другие кейсы, при которых работа с облаком становится затруднительна. Доступ к облаку по webdav, который решил бы все проблемы, отключён (хотя работал какое-то время после запуска сервиса).
При этом сервис бесплатно предоставляет довольно значительный объём хранилища (раздачу террабайтов все помнят?), лимитирования скорости я ни разу не замечал, и за всё время работы с сервисом нареканий к нему не возникло. Для резервирования и пересылки не слишком приватных данных облако Mail.ru подходит очень хорошо. Ограниченность клиента — единственная проблема.
Раз она есть — надо её решать.
Сначала была идея отреверсить протокол работы стандартного клиента. Не знаю, сколько времени и сил у меня бы это заняло; к счастью на глаза попалась вот эта статья, содержащая разбор внутреннего API облака. Когда стало понятно, в какую сторону копать, нашлась частичная реализация API на PHP. Остальное оказалось делом времени: ориентируясь на эти данные я склепал плагин для Total Commander.
Принцип работы его простой: плагин прикидывается браузером, выполняющим AJAX-запросы к облаку, в общем-то техническая часть достаточно хорошо описана в вышеупомянутой статье. Забавно было, разве что, реализовывать этот принцип на Delphi (ну на чём умею): это было всё равно, что вернуться на 16 лет назад; несмотря на всю современную юникодность и мультиплатформенность, для разработчика со времён Delphi 7 мало что изменилось.
Сейчас плагин вполне обкатан, и имеет всю нужную функциональность, включая генерацию публичных ссылок «на лету» (Alt+Enter), разве что руки никак не дойдут до поддержки двухфакторной авторизации (принимаются pull-реквесты).
Код написан, как выше сказано, на Delphi, и под Total Commander, но исходники открыты под GNU GPL v3.0, и желающие могут создать расширение под предпочитаемый файловый менеджер сами.
Ссылочка на исходники и бинарники (x32/x64): GitHub.
Да, в пользовательском соглашении сервиса я не нашёл никаких ограничений на создание/использование сторонних клиентов. Технически плагин эквивалентен браузеру (хотя и не особенно маскируется), и поэтому ограничить его использование можно только административно. В любом случае мне интересно было бы услышать мнение представителей Mail.ru по этому поводу (UPD: оно вполне положительное).
Комментарии (127)
AlexanderS
01.08.2016 13:11Это просто замечательно!
Ещё бы такие плагины для гугла и яндекса )Antikiller
01.08.2016 13:17+1Яндекс умеет webdav, а для webdav в TC уже есть плагин.
Для google drive тоже есть плагин.AlexanderS
01.08.2016 13:20Спасибо за наводку.
Я просто об это не задумывался и не искал, пока ваш пост не прочитал )
dartraiden
01.08.2016 14:25Cloud plugin (Box, Dropbox, Google Drive, Windows Live SkyDrive, Yandex Drive)
(выше уже, впрочем, дали ссылку). Вот бы в него встроить и поддержку Mail.ru
dmitry_ch
01.08.2016 13:19Ох, еще бы с «просто Проводником» подружиться, да с Far-ом… Спасибо вам!
Главное, чтобы уважаемый mail.ru не надумал помешать работе стороннего ПО!Antikiller
01.08.2016 13:25С проводником всё не очень хорошо, а с FAR, думаю, проблем быть не должно. Если мне память не изменяет, у FAR есть врапперы, позволяющие использовать wfx-плагины от TC, да и комьюнити у этого менеджера было неплохое, может кто-то возьмётся переделать исходники (благо, там только интерфейсную обёртку переписать).
vmchaz
01.08.2016 15:55Я уже как-то думал насчёт проводника и вообще встраивания в Windows. Пришёл к выводу, что один из оптимальных вариантов, пока не появится что-то лучшее — это имитировать NetBIOS-подключение, как это делает драйвер в VirtualBox Client для доступа к ресурсам хоста. Решение получается совместимо со всем стандартным софтом, не надо вешать никаких хуков на функции работы с ФС и не надо создавать временные файлы для доступа к ним других программ.
Antikiller
01.08.2016 16:03Есть и другое решение. Проводник, кажется, умеет webdav, соответственно надо написать что-то вроде прокси, который с одной стороны будет предоставлять webdav-интерфейс, с другой стороны — работать с облаком. А если сделать ещё и FTP-интерфейс, то количество совместимого ПО будет ещё больше.
darkdaskin
02.08.2016 15:24Можно попробовать Dokan и написать свою файловую систему (поддерживаются C, .NET, Java и Ruby). В целом нетрудно, хотя некоторое представление о работе файловых API в Windows всё же нужно. Я такую ФС для доступа к HTTP-директориям на C# за пару вечеров сделал.
С WebDAV ещё проще, можно напрямую возвращать URL со сторонних серверов в списке файлов и не заморачиваться с загрузкой их содержимого. Уже не помню, почему я от него отказался в пользу Dokan.
MAXXL
01.08.2016 14:04Забил данные учетки, захожу, ошибок не пишет, но и данных не отображает. Это из за ОС (WinXP) или что-то еще?
Antikiller
01.08.2016 14:17+1ошибок не пишет,
В протоколе соединения всегда что-то написано, посмотрите внимательнее. Если действительно ничего — нужно больше информации, как минимум — версия и разрядность TC, ну и скриншоты не помешали бы. Это всё лучше на форум.
scronheim
01.08.2016 14:05Просто потрясающе, спасибо Вам огромное за Ваш труд. Очень нуждался в похожем решении
grims
01.08.2016 14:27Total Commander Версия 7.57rc1 32 bit (10.2.2012)
Работает, автору большое спасибо!grims
01.08.2016 14:33Скорость закачки в облако mail.ru всего 100 Mbps, но этого вполне достаточно:
upszn1449
01.08.2016 14:36Спасибо за труд. Вот только проблема. У меня на работе выход в инет через прокси. И ваш плагин не работает Хотелось бы подержку прокси.
Visphord
01.08.2016 14:45как временное решение можно использовать Proxifier — он может любую активность завернуть через прокси.
Antikiller
05.08.2016 16:12Добавил поддержку socks4/5 proxy, проверьте (бинарники надо брать из master)
miravingin
10.08.2016 12:06Не могли бы вы добавить так же поддержку HTTPS-прокси?
У меня, например, только он разрешен, а Socks'ы не доступны.
GriSII
01.08.2016 14:52Total Commander Версия 8.51a
А как открыть настройки плагина, нажимаю alt+enter, открываются свойства каталога/файла, на котором стоит курсор. В меню добавление плагина никаких реакций на нажатие комбинации
we1
01.08.2016 14:52Спасибо большое. А то мучений с папками было очень много, а стандартная утилита сразу все удалила, что было в облаке.
Вот только плагин никак не сигнализирует, что библиотеки ssl не подходят. И, кажется, ничего не говорит про неправильный пароль.Antikiller
01.08.2016 14:57Вот только плагин никак не сигнализирует, что библиотеки ssl не подходят.
В протоколе будет что-то вроде «Could not load SSL library», если библиотеки не получается подгрузить. Проблемы с совместимостью отследить фактически невозможно, на этот случай есть режим прямой загрузки указанных библиотек, смотрите readme.
И, кажется, ничего не говорит про неправильный пароль.
В протоколе, опять же, будет «Error getting auth token».rusfatman
03.08.2016 09:38У меня стоит двойная аутенфикация и выдаёт «Error getting auth token». Как-то лечится?
8.51а
64bit
wOvAN
01.08.2016 14:59-2А почему на коммерческом Дельфи, а не на свободном Lazarus? Может перепишите?
И ещё вопрос на счет совместимости с Double Commander не проверяли?Antikiller
01.08.2016 15:12+2А почему на коммерческом Дельфи, а не на свободном Lazarus?
Основной задачей (кроме получения фана от работы с давно забытым инструментом) было получение готового продукта как можно быстрее. На Delphi, в своё время, я писал плагины пачками, у меня остались шаблоны кода и общее понимание процесса разработки. Lazarus, при всех его плюсах, мог подкинуть собственных задачек, решение которых потребовало бы отдельного времени.
Может перепишите?
Я вряд ли этим займусь, но попробовать собрать код под Lazarus может кто угодно.
И ещё вопрос на счет совместимости с Double Commander не проверяли?
Нет.phidel
01.08.2016 21:54Чего именно вам не хватило в современном delphi для написания данного проекта? что проще было бы сделать на другом языке (каком)? интересно сравнить как развиваются разные языки
Antikiller
01.08.2016 22:22+1К языку претензий нет, вот совсем. Всё, что я хотел, написалось как-то сразу, с минимальным гуглежом. Разве что с парсингом JSON возникли непонятки, сначала я использовал стороннюю библиотеку, потом разобрался, как сделать проще стандартными средствами. Всё легко собралось и заработало под x32/x64, даже маленькая тестовая сборка под Android внезапно собралась и заработала с минимумом приседаний (вот тут я был очень удивлён). Наверное, сказался многолетний опыт, пусть и столь же многолетней давности, видимо это как ездить на велосипеде.
Основные претензии — к среде разработки. Последнее время я пишу в PHPStorm, и дико радуюсь инструментарию этой IDE. Удобнейшая навигация, анализатор кода, подсветка, и прочие логичные вещи, ускоряющие разработку в разы. В IDE Delphi самой распоследней версии ничего этого нет. Через какое-то время я нашёл CnPack — набор расширений IDE, в какой-то мере устраняющий эти недостатки. Он крутой, но всё-таки до удобства PHPStorm и ему далеко, не говоря уж о том, что такие вещи должны быть в среде разработки изначально.phidel
01.08.2016 22:40Спасибо за ответ. Я-то думал, речь пойдет об отсутствии async Task и на что их заменить… :) Что же касается подсветки и навигации, все на месте — если вдруг будет нужна консультация, обращайтесь в личку, тут видимо неуместно. Вообще, надо признать, код вашего плагина получился лаконичным — 70 КБ против аналогичного на C# 120 КБ. Кто ясно мыслит — ясно излагает :)
LazyCrazy
01.08.2016 15:18-1И создаётся MailRuCloud.ini в котором прямым текстом пароль…
Мо-лод-цы!Antikiller
01.08.2016 15:21Прочтите readme. Пароль можно хранить в менеджере паролей TC, там он шифруется.
edd_k
01.08.2016 15:57+1Но по умолчанию и без предупреждения сохранять пароль в открытом виде тоже как бы не хорошо. Либо уведомление должно быть об этом. Либо спрашивать пароль каждый раз, если пользователь не настроил иначе.
Antikiller
01.08.2016 16:06+1Но по умолчанию и без предупреждения сохранять пароль в открытом виде тоже как бы не хорошо.
Да, вы правы. Я сам привык читать readme, где о хранении пароля в открытом виде написано, но это не оправдание. Добавлю уведомление.
Либо спрашивать пароль каждый раз, если пользователь не настроил иначе.
Так и работает, если пароль не указывать, он будет запрашиваться при каждом подключении.edd_k
01.08.2016 16:13+1Ну так тогда просто предупреждение о том, что пароль сохранится в открытом виде и что за подробностями дуйте в readme
rvt
01.08.2016 17:14А что за менеджер паролей в TC?
Antikiller
01.08.2016 17:25У TC начиная с версии 7.5 есть своё хранилище паролей, защищённых мастер-ключом. Плагины могут использовать это хранилище для собственных целей, и этот плагин такое умеет.
LazyCrazy
01.08.2016 18:23-1При двухфакторной авторизации не работает.
Автоинсталлятора, который в TC больше десяти лет, нет.
Так ещё и «мелкие строчки в договоре»… ;)
Eidzo
01.08.2016 15:19+1Еще немного не в тему, но скажу, на андроиде с облаком mail.ru умеет работать файловый менеджер xplore(тот который еще на симбиане был)
Но, по крайней мере раньше, не умеет работать с двухфакторной авторизацией.
mihavxc
01.08.2016 16:21Огромное спасибо, все работает.
Только с основным аккаунтом не завелось. На нем подключена двуфакторная аутентификация, так что было бы очень круто, если бы Вы ее поддержку добавили.
UPD, вижу, что у же есть реквест на этот функционал на гитхабе. Это радует.
rvt
01.08.2016 17:14Павел, на wincmd.ru не выкладываете?
Antikiller
01.08.2016 17:23На форуме в курсе про плагин, а на сайте обновлять дистрибутив плагина на каждый коммит мне будет лениво.
C-A-T
01.08.2016 17:43-1Как по мне то данный плагин не решает одну важную задачу, это бэкап. Ну и просто функционала мало.
Я его тестил пару месяцев назад, работал с глюками, может уже конечно допилен раз статью написали :)
Но как альтернатива оф клиенту вполне годно.
А вообще хочу сказать что поиск по гитхабу «облако mail.ru», «cloud mail.ru» дает интересные результаты.
Мне особенно понравилась реализация на питоне, я ее немного переделал под бэкап с 7z и проверкой хешей файлов, еще чего то там вроде делал, не помню, все хочу сделать графическую оболочку на pyqt и попробовать работу с zpaq, никак не займусь :(. Если у кого есть желание можем поработать в этом направлении. Телеграм c_a_t9life
PS Есть еще одна интересная прога с исходниками ее тоже можно под облако мэйла запилить думаю + там прописаны еще пару облаков.Antikiller
01.08.2016 17:46Как по мне то данный плагин не решает одну важную задачу, это бэкап. Ну и просто функционала мало.
Плагин предоставляет файловому менеджеру доступ к облаку, больше он ничего не должен делать. Всё остальное зависит от вашего умения пользоваться файловым менеджером.
simki
02.08.2016 12:19+1Для бэкапа мне кажется лучше подойдет Syncthing, так как нет ограничений по объему, хоть терабайты заливай. Вот для него тоже плагин бы не помешал. Открытое решение с развитым сообществом, думаю его нужно тоже упомянуть тут.
evil_random
01.08.2016 18:55Хорошая попытка, mail.ru, но нет. Спасибо.
serafims
02.08.2016 00:51+1я ждал этого комментария, после разбора полетов с их лицензионным соглашением, но почему-то тут сегодня иная атмосфера…
barsuksergey
01.08.2016 19:38+2Большое, большое человеческое спасибо. Очень актуально, потому что очень хотелось использовать майл в качестве одностороннего носителя без локальной копии файлов. И вдвойне оказалось актуально именно сегодня, когда надо сделать бэкап, а майл почему-то быстрее всех забирает файлы.
helaku
01.08.2016 21:30Спасибо за плагин.
Подключать подключается, и список с файлами/папками виден, но почему-то ничего не загружает из «облака», т.е. вроде как копируется файл на диск, но по факту с нулевым размером. TC 7.50 32-bit.Antikiller
01.08.2016 21:37Я бы проверил всё-таки на более свежей версии TC, хотя бы на 8.5. Ещё я взглянул бы в протокол, возможно там что-то интересное есть.Если ничего из этого не поможет — милости прошу на форум, будем разбираться.
helaku
02.08.2016 08:22Проверил на 8.52 64-битном. То же самое. При этом спокойно получается загружать в «облако», но из него — никак. Строка протокола говорит стандартное, никаких ошибок не показывает.
Antikiller
02.08.2016 09:19Прогресс копирования отображается? Какая ОС? Что будет, если TC запущен с привилегиями администратора? Что будет, если нажать F3 на каком-нибудь небольшом файле в облаке?
helaku
02.08.2016 09:30Да как бы отображается — просто показывается окошко копирования. Но никакого прогресса копирования или чего-то подобного.
Привилегии админа не влияют на что-либо. Аналогично и нажатие F3 отображает пустое окно.
ОС Win 8.1 Pro 64-bitAntikiller
02.08.2016 09:55Пришлите, плз, в личку содержание протокола после воспроизведения такой ситуации.
Psyered
01.08.2016 23:12Спасибо за ваш труд!
Скачал последний TC и поставил плагин как сказано. Но он так и не работает но и не кидает ошибок… Просто создается пустая папка с именем аккаунта. Не возможно туда копировать и не видно файлов что в облаке.
Вин 10. TC 8.52aAntikiller
01.08.2016 23:15Смотрите пожалуйста в протокол, это панелька сверху, появляющаяся при попытке соединения. Там обязательно будет что-то указывающее на ту или иную ошибку.
B767
02.08.2016 08:17С файлами больше 2 гб не работает. Хотя мой аккаунт позволяет и в броузере работает прекрасно.
Bulldozavr
02.08.2016 16:30+8Павел!
Мы рады, что вы уделили свое время на разработку плагина к Total Commander.
Приглашаем вас в гости в офис Mail.Ru и будем рады вручить сувенир на память =)
Мы не ограничиваем создание сторонних клиентов. При этом стоит заметить, что API, которое вы используете, не является публичным и может изменяться без обратной совместимости при дальнейшем развитии Облака.
С уважением, команда Облака.Antikiller
02.08.2016 16:51Спасибо за ответ!
При этом стоит заметить, что API, которое вы используете, не является публичным и может изменяться без обратной совместимости при дальнейшем развитии Облака.
Это вполне очевидно =)
С радостью зайду к вам как-нибудь на интересную беседу.
dmitry_ch
05.08.2016 00:25+1Так вы бы сделали публичное API, тогда бы и говорили, что не против развития сторонних клиентов.
А то обещания про «скоро будет webdav» слышим уже сколько, подскажите, лет? В иных местностях так долго тянущих с обещаниями людей порой и обидными словами могут назвать, сами понимаете.
Почему не сказать правду: "мы, как компания, забили на развитие облака, нам, как сотрудникам, не жалко, но ресурсов нам, как разработчикам, на развитие что webdav, что api мы, как компания, просто не даем" — всем было бы лучше же?inoyakaigor
05.08.2016 10:18Три года ждём
dmitry_ch
05.08.2016 10:42Ну да, у меня в почте до сих пор где-то лежит радушный ответ ТП по поводу того, куда пропал вдруг webdav — мол, скоро снова заработает, мы его улучшаем )
gvinpin
02.08.2016 16:34Как быть, если в учетной записи mail.ru настроена двухфакторная авторизация?
Antikiller
02.08.2016 16:40Пока никак. Есть тикет, но я никак не доберусь. Судя по всему, есть таймаут на отправку СМС, это затрудняет отладку.
DjOnline
02.08.2016 17:09Вот бы ещё mtp плагин…
niisan
03.08.2016 10:56О да, всеми руками за плагин, который мог бы читать устройства, подключенные по USB и предоставляющие доступ только по протоколу MTP. Например, начиная с Android версии 4.0 заменили доступ к памяти с Mass storage на MTP. И если простые флешки или даже HDD можно использовать на андроиде, подключив их к USB OTG, то скачать файлы с другого телефона на андроиде не получится. Раньше, говорят, Галерея или приложение Google+ могли импортировать только картинки, но сейчас они этого не умеют, по крайней мере на моих планшетах и телефоне с Android Lollipop 5.0.1 и 5.1.1.
undefined7
02.08.2016 22:10установил вчера данный плагин, спасибо автору, работал безупречно, и начал заливать. сегодня видимо что-то изменилось и уже не работает. Win 8.1, ТС 8,51.
Выдаёт couldn't load ssl library.
error login to m***@mail.ru.
Перезагрузил ПК, переустановил плагин, попробовал через другй акк зайти — не получается. Через веб-интерфейс повзоляет и дальше загружать.Antikiller
02.08.2016 22:13Вчера, видимо, подхватывались ssl-библиотеки, загруженные какой-то другой программой. Компьютер могли перезагрузить, или библиотека выгрузилась из памяти после некоторого времени.
Решается это достаточно просто, как — прямо описано в readme.
keml
03.08.2016 15:49Если кто допилит плагин до функционала {if (uploading file > 2Gb) then split it to zip/rar with 2Gb per part} то просто цены не будет такому человеку.
bypsix
03.08.2016 23:16не пойму как его установить… Можно фаг для чайников или видео по установке запилить?
Мои действия:
1. Качаю /pozitronik/CloudMailRu/releases/tag/07072016
2. Распаковываю в \Plugins\wfx\CloudMailRu-07072016
3. В ТС 7.02 samlab иду в Конфигурация-Настройка-Плагины и жму Настройка WFX-Добавить-MailRuCloud.wfx
4. Нажимаю Alt+Enter и выскакивает сообщение «Нет выбранных файлов» или если выбрать файл то свойства этого файла т.е. аналогично если нажать Alt+Enter в проводникке WindowsAntikiller
03.08.2016 23:16TC 7.02 вышел девять лет назад, и не поддерживает unicode. В нём плагин работать не будет.
SuperZveruga
04.08.2016 00:28Браво автор! Это то что мне нужно.
Стоит ли надеяться на появление варианта в виде файла исполняющего команды с параметрами в консольном режиме?Antikiller
04.08.2016 00:37Стоит ли надеяться на появление варианта в виде файла исполняющего команды с параметрами в консольном режиме?
Я подобного функционала не планирую.
vangelfeld
04.08.2016 17:43-1аффтор видимо не знает, что бесплатные аккаунты не могут скачивать/закачивать папки/группы файлов больше 4 гигабайт.
DeeZ
04.08.2016 21:02Автору огромное спасибо.
Плагин иногда падает, если качаю в облако с хранилища (samba)
Total Commander 8.52a
Exception in MailRuCloud.wfx:FsPutFileW!
External exception EEDFADE
Windows 7 SP1 6.1 (Build 7601)Antikiller
04.08.2016 21:08+1DeeZ
04.08.2016 21:31На сколько сложно сделать не ввиде плагина, а ввиде отдельной утилиты, которая слушала бы входящие как FTP и транслировала в облако? (примерно так сейчас и сделано вроде? раз появляется панель FTP).
Спрашиваю, тк вы свой код знаете и, возможно, для вас это задача 5 минут. Сам в делфи не очень шарю, но завтра посмотрю исходнки, вдруг смогу сам.
Тогда можно было бы использовать любой любимый менеджер, в тч Проводник, FAR или MC.Antikiller
04.08.2016 21:50+1Не пять минут, и даже не полчаса, но задача несложная. Код взаимодействия с облаком оформлен классом в CloudMailRu.pas, привязки к TC там нет. Будут вопросы — пишите, отвечу.
(примерно так сейчас и сделано вроде? раз появляется панель FTP).
Нет, но это и не важно.
Antikiller
05.08.2016 16:15Кстати, если шарите в PHP больше, чем в delphi, есть имплементация работы с Облаком на пыхе (не такая полная, но для понимания годится)
Ruckus
А можно как-то по этому принципу драйвер ФС для Linux сделать? Очень хотел это облачко замаунтить на сервер и раздавать себе на все устройства по webdav, раз они сами не могут.
Antikiller
Если вопрос в том, можно ли — да, fuse-модуль написать можно. Если в том, смогу ли его сделать я — не, не смогу.
pdragon
А под линукс к DC плагин аналогичный?
Antikiller
Не знаю.
Pulse
Webdav был раньше доступен в бета-версии. Но потом что-то пошло не так…
AlexVPetrov
В Linux есть Double Commander, который работает с тотал-коммандеровскими планинами.
Я так понял, что их просто нужно собрать под Linux.
pdragon
Да но к Double commander плагины от ТС подходят нативно, но сам плагин должен быть скомпилирован под линуксом той самой разрядности что сама система где будет использоваться.
Но тут есть грабля: как я понял плагин написан на «не православном» делфи (столь мной нелюбимом) а его анаологов над линуксом нет (точнее есть, но платный и урезанный и там много «и»)
Думаю автору лень переписывать код будет под С++ или даже C# (MONO)
AlexVPetrov
В Linuxe есть Lazarus и FreePascal, на которых собственно и написан Double commander.
pdragon
Всё правильно! по этому я и написал про урезанность ибо в лазарусе этом присутствует только базовый функционал из коробки, а для делфей есть куча десплатностей написанных. Про фрипаскаль ничего сказать не могу, но не думаю что там шире возможности. Так что скорее всего думаю проще будет с нуля написать.