SyncDriver
Компания
17,90
рейтинг
24 октября 2014 в 17:28

Разное → Простой клиент OneDrive — всё не так просто

Всем давно уже известен сервис OneDrive от Microsoft, который представляет собой облачное хранилище данных с неплохим Web UI.

Для аналогичных сервисов, в частности, Dropbox, выпущено огромное количество дополнений и расширений, например, MacDropAny и многие другие. Для OneDrive не так много расширений, поэтому он стал площадкой для нас — и мы выпустили альтернативный клиент для OneDrive — syncDriver.



У него есть вся функциональность стандартного клиента от Microsoft, а кроме того ряд особенностей, ради которых его имеет смысл использовать. Установить его можно здесь. Сразу после установки он предложит вам осуществить подключение к сервису OneDrive.

Настройка


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

Всё, он работает...


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

Что умеет


Если есть необходимость добавить в OneDrive произвольную папку с вашего компьютера, syncDriver позволяет использовать симлинки — это реализовано командой Link a folder (или кнопка Add на основной форме).

В syncDriver возможна выборочная синхронизация.
Команда Selective Sync… в окне настроек позволит добавить/исключить папку из синхронизации: все изменения, производимые в ней после этого, не будут отправлены в OneDrive.

Опция направления синхронизации позволяет проводить синхронизацию как в одном, так и в двух направлениях, при этом можно выбрать только отображать изменения в OneDrive на файловую систему без заливки обратно в облако OneDrive.

Простой способ доступа к OneDrive — это назначить букву устройства для папки синхронизации.

В настройках сети прокси серверу можно задать имя пользователя и пароль, что не умеет стандартный клиент. Это очень удобно если использовать syncDriver в организации где интернет раздаётся только через прокси.

Работает на всех известных нам версиях Windows начиная от XP до 8.1, на Windows 10 ещё будем тестировать.

Как сделан


Чтобы поддерживать клиент под разные ОС было принято решение использовать .NET. Специфичные для разных систем фрагменты (в основном UI и работа с сервисами/демонами) выделены в отдельные сборки. Текущая версия содержит UI на Windows forms, для версий для других платформ используется Gtk# — но эта версия ещё не выпущена в production.
Для логгирования в системе мы выбрали NLog — работает быстро и конфигурируется крайне просто.
Для модульной SOA мы реализовали свой Framework Context.NET, который доступен на github.

Как работает


syncDriver состоит из двух частей: сервиса и клиента (UI). Общаются они посредством json-пакетов, пересылаемых через сетевое соединение.
Кроме того, все настройки сервиса описаны в .config файле, который настраивается из UI клиента.
Синхронизация в клиенте устроена таким образом, чтобы обеспечить изоляцию локальной файловой системы от файловой системы в облаке. Каждая из файловых систем реализована как некоторая абстракция, которая решает задачи мониторинга, индексации и применения изменений независимо. Это означает что уровень OneDrive ничего не знает про локальную файловую систему и наоборот.

Весь процесс синхронизации проходит по следующему сценарию:
— каждая файловая система проводит полную индексацию ресурса и сохраняет в локальную базу
— файловая система отвечает за обнаружение изменений и направление сообщения в очередь
— сообщения в очереди обрабатываются в строгом порядке, за исключением особых случаев, которые мы рассмотрим позже
— в случае ошибки мы дожидаемся завершения всех параллельно выполняющихся операций и выполняем её повторно. Если ошибка возникает снова, она записывается и выдаётся на UI.

Локальная файловая система мониторит изменения через FileSystemWatcher. Кроме того, происходит полный обход дерева с некоторым интервалом, это гарантирует нам подхват изменений, сделанных когда клиент не был запущен.

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

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

Отдельным образом в очереди синхронизации обрабатываются переименования и перемещения. Если, например, мы создали папку с большим количеством файлов, а затем её переименовали, то переименование происходит в первую очередь, и все сообщения в очереди переименовываются соответственно, то есть мы загружаем файлы уже в переименованную или перемещенную папку.
В случае конфликтного изменения файла с двух сторон формируется дополнительная копия файла с суффиксом (1), (2) и т.д., автоматическое разрешение конфликтов может быть опцией для будущих версий.

Проблемы


Больше всего проблем было связано с обработкой событий от файловой системы:
— при копировании большого файла мы получаем большое количество событий, каждое из которых нужно перепроверить — закончился ли процесс копирования или нет.
— при сохранении файла ряд приложений создают временный файл, а затем переименовывают его в файл назначения.
— при попытке повернуть изображение непосредственно в Windows Explorer происходит ряд событий: создание нового временного файла, замещение предыдущего, удаление временного (от предыдущего пункта отличается тем, что временный файл не переименовывается, а копируется).

К настоящему моменту большинство проблем решено, и версия довольно стабильна с момента перехода на OneDrive со SkyDrive.

Зачем


Нашей целью было предложить вам лёгкую, стабильную версию клиента для известного сервиса от MS. Более того, мы планируем выпустить portable версию своего продукта.
Паралельно мы разрабатываем версию для Linux.
И всё-таки зачем?
Сейчас пользователи приходят при к нам для решения следующих задач (в порядке приоритета):
— Работа под Windows 8.1 с локальным accountом
— Работа под Windows XP
— Использование симлинков
— Использование сетевых дисков
— Работа через прокси с авторизацией
и ряд других возможностей.

A больше всего нам хотелось бы услышать в комментариях, какие фичи более всего интересны для вас.
Автор: @Bendsen
SyncDriver
рейтинг 17,90
Компания прекратила активность на сайте
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Похожие публикации

Комментарии (45)

  • +2
    Очень мало сервисов для простого человеческого хранения. Я не хочу синхронизировать, я не хочу создавать отдельную папку. У меня терабайт с лишним в OD. Я хочу взять, положить в OD и при необходимости забрать частично обратно на любом из устройств.
    Пусть будут костыли, например создать для текущей папки из которой будут заливаться файлы папку синхронизации и после заливки — отключить. Желательно, чтобы не было предварительного копирования «куда-то».
    • 0
      Для положить у нас есть one-way синхронизация (upload или download), при этом не нужно копировать всё содержимое в target папку, достаточно создать симлинк, для этого есть кнопка Link a folder (или Add...) на основной форме. Для частично забрать есть выборочная синхронизация, но это наверное не совсем то что вам нужно.
    • 0
      частичную синхронизацию с OneDrive умеет GoodSync. чем ещё он мне нравится — можно синхронизироваться с разными учётками
  • +3
    Хочу Linux-клиент для не-интел систем. Наиболее интересны arm-based, возможно, не только они.
  • –1
    Лично мне для СкайДрайва недостает только нормального полноценного WebDAV клиента под WinXP.
  • +1
    А несколько аккаунтов планируется?
    • +1
      Да, это есть в наших планах.
  • 0
    Для меня более всего актуально как раз вот это: «Работа под Windows 8.1 с локальным accountом». И буду очень ждать portabale-версию.
  • 0
    А есть ли сложность перевода на Русский язык?
    • 0
      Сложности в переводе на Русский нет, есть необходимость реализации мультиязыковой версии. Когда реализуем мультиязыковую версию — Русский будет один из первых — т.к. перевод для нас прост. Интерфейс довольно прост, и я надеюсь всё максимально понятно.
  • 0
    У меня включена двухфакторная авторизация. Пошел к Microsoft, сгенерировал app password, указываю его в окне логина, но приложение показывает диалог с ошибкой «Unable to connect blah-blah-blah». Что делать?
    • 0
      Да, здесь немного сложнее:
      В окне логина нужно нажать «More», и пройти двухфакторную авторизацию, а затем в окне логина ввести app passord.
      Так сделано потому что мы используем несколько API для разных задач.
      • 0
        Ок. Но вы бы тогда это всё обозначили на диалоге-то, а то при нынешнем тексте на нем такой алгоритм совершенно не очевиден.
        • 0
          Сделаем, спасибо.
          • 0
            Сделал как вы сказали, все получилось. Программа начала считывать метаданные и вдруг на мобильный посыпались запросы на подтверждение авторизации от Майкрософт. Я уже и программу вашу выгрузил, а запросы идут каждые полминуты. Горшочек, не вари!
            • 0
              Попробуйте настроить соединение заново. Попробуйте остановить windows service «syncDriver Service».
              • 0
                Нет, ребята, я за вас, но этим заниматься не буду. Пока деинсталлировал вашу программу. Подожду следующих билдов. Надеюсь, вы поправите работу при двухфакторной авторизации.
  • 0
    В стандартном клиенте есть возможность через веб-интерфейс скачать любой файл с компьютера (разумеется, если он включен)
    Есть ли у вас такая же функция?
    • 0
      Нет, у нас нет этой функции, более того её нет в клиенте под Windows 8.1, и не будет в Windows 10. Для нас это означает что поддерживать эту функцию не перспективно.
      • 0
        Наличие этой функции у вас было бы плюсом вашей программе и выгодно отличало от других аналогичных клиентов.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      HTML-based решение может быть хорошо для реализации UI, а не файловой синхронизации.
      QT — вариант, особенно для реализации UI, но врядле он поможет нам в работе с SSL соединением и файловой системой, можно конечно же взять OpenSSL.
      .NET максимально включает в себя разные аспекты нужные для файловой синхронизации (файловая система, работа через SSL), при этом всё просто с точки зрения реализации, а сервисная часть работает под mono на linux практически с коробки.
      Реальной альтернативой был python, но мы сделали выбор в пользу .NET — это наверное повод для отдельной статьи.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Локальная файловая система мониторит изменения через FileSystemWatcher. Кроме того, происходит полный обход дерева файловой системы с некоторым интервалом, это гарантирует нам подхват изменений, сделанных когда клиент не был запущен.
          В mono FileSystemWatcher базируется на Gamin, возможно потрубуется поддержка и Inotify — пока мы не проводили глубокого тестирования на linux.
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Про шифрование думали, и оно есть в нашем длинном списке, но в таком случае мы теряем web UI от OneDrive. Этот кейс больше подходит для шифрованного бэкапа, или если не доверяем OneDrive. Интересно, как предполагается шифровать и делиться ссылкой?
              Сейчас мы делаем акцент на поддержке самого сервиса:
              — поддержка расшареных с тобой папок
              — шаринг из windows explorer
              — несколько аккаунтов
              — linux, portable version
              • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Спасибо за описание.

                  > Какая разница, лежит у меня там file.zip, или file.zip.cyphered?
                  Для .zip нет разницы, имеется ввиду типы файлов которые поддерживаются в OneDrive нативно: .doc, .xls,… или изображения.
                  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    «Чтобы поддерживать клиент под разные ОС было принято решение использовать .NET. »,- тут что-то не так или я чего-то не понимаю.
    • 0
      В первую очередь речь идет о сервисе, который выполняет саму синхронизацию, а не UI. Сервис работает с файловой системой и веб сервисами OneDrive API.
  • 0
    хочется Portable версию. Для dropbox есть решения, а для OneDrive, особенно после его встраивания в Win8, — ничего не нашел :(
  • 0
    А, вот ещё вспомнил — хочется видеть лог конфликтных файлов и возможность решить, «какая сторона победит».
    Поясню. Возможно я такой криворукий, но как-то у меня часто получается, что возникают конфликтные файлы — и по две копии файла (данные как минимум на двух разных машинах, дом/работа + иногда ноутбук разъездной) создаётся. А поскольку папок и файлов много, то обнаруживаешь это обычно случайно и когда уже поздно что-то исправлять :(
    Было бы удобно, если бы можно было по итогам синхронизации (или скажем за заданный период) посмотреть — какие файлы были конфликтны.
    А если ещё и как в утилитах синхронизации — после сканирования показывает окно с конфликтными файлами и предлагает решить, какой конфликтный файл куда (копировать или удалить) — вообще прелесть.
    Правда не знаю, насколько это сложно :-)
  • 0
    Мне показалось что в статье не раскрыто самое главное — _зачем_ нужно было делать собственный альтернативный клиент.
    • 0
      Вполне раскрыто. В Windows 8.1 оригинальный клиент работает только при логине с майкрософтовским эккаунтом, а при использовании локального эккаунта работать отказывается. Уже одного этого достаточно, чтобы сделать клиент, эту проблему решающий. Да и вообще в посте в конце целый подраздел «Зачем» есть.
      • 0
        да, спасибо, технически всё понятно, но для чего это нужно вам?.. :)
        • 0
          Дык, буквально же. :) У меня Windows 8.1, локальный эккаунт и простаивающий без дела 1ТБ на OneDrive. Многогигабайтный архив через браузер не зальешь.
  • 0
    Работает ли вместо Skydrive Pro? Или там что-то другое у него внутри?
    Родной синхронизатор совершенно отвратный, периодические ошибки без подробностей, отказ синхронизировать случайные файлы, «Обработка изменений» навечно и всё такое.
    • 0
      Нет, мы не поддерживаем Skydrive Pro, он базируется на совершенно другом API, и является логическим продолжением Sharepoint.
  • 0
    Подскажите, будет ли работать Ваш клиент в следующей конфигурации:

    У меня аккаунт Live, я под ним работаю, имею OneDrive.
    Хочу в другую локальную папку подключить OneDrive от другого аккаунта с помощью Вашего клиента.
    Получится ли так? Иметь один диск стандартным способом, а второй — через Ваш клиент?
    • 0
      Да, так будет работать — никакого конфликта со стандартным клиентом нет.
      • 0
        Это просто супер!
        Мне кажется, это дополнительный сценарий, который конкретно интересен некоторым пользователям. Раз уж он работает, мне кажется, логично его добавить в описание преимуществ.

        Конкретно мой случай: есть основной аккаунт, где хранятся документы, настройки, всё-всё-всё. Он и на планшете и в телефоне и на нескольких компах. А второй аккаунт — для фоток. Он нужен не на всех устройствах. Похоже, Вы решили мою проблему.
        Спасибо!
  • 0
    Как я понял, программа бесплатная. Тогда почему не OpenSource?
    Вообще в OneDrive вроде OAuth используется. Как вам удалось обойтись только login+password?
    И вам тут уже советовали обратить внимание на шифрование. Но там идея замороченная с ключами и тыды. Есть идея проще — указывать определенным папкам/файлам, которые льются в OneDrive что их нужно архивировать с определенным паролем. То есть локально на компе они лежат несжатые, а сжимаются и запароливаются налету в момент upload. Еще непло бы и имена как то скрывать.
  • 0
    Добрый день!
    Проект будет продолжать развиваться? Появился вопрос — поставил софтину, настроил на синхронизацию каталога с 300+ГБ файлов (Файлов: 125 229; папок: 4 768), в первый заход провисел больше 12 часов в статусе «Loading metadata...», сейчас висит еще уже пару часов в том же статусе. В родном клиенте не было таких больших временнЫх задержек перед переходом непосредственно к заливке в облако. Проц i7-760, памяти достаточно, винт Toshiba 2Tb.
    Что-то пошло не так или первый запуск самый тяжелый и дальше не будет так грустно?
    И второй вопрос — активна ли служба без клиента? Вопрос связан с синхронизацией сетевой шары в ситуации, когда раздающий комп включен, но на нем никто не залогинен.
    • 0
      *i5-760

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное