ored95 / cmddev

Command Development 2018

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Синхронизатор файлов

Описание

Приложение для синхронизации групп файлов и папок с облачным хранилищем.

Принцип работы

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

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

Алгоритм

При запуске программа выполняет следующие действия.

Запуск

При запуске программы происходят следующие действия.

  1. Поиск локльного файла настроек.
  2. Если файл найден и содержит корректные данные для авторизации на облачном сервисе - происходит автоматическая авторизация и создание списка синхронизации.
  3. Если файл не найден или не содержит корректных данных для авторизации - пользователю предлагается вручную ввести данные авторизации. При успешном входе - данные сохраняются.
  4. Поиск глобального файла настроек.
  5. Если файл не найден - он создается.

Создание списка синхронизации

Из локального и глобального файлов настроек создается общий список групп синхронизации (путем объединения и сопоставления групп из обоих файлов по признаку и последней дате/времени синхронизации). Здесь возможны 4 ситуации.

  1. Локальный и глобальный файлы настроек пусты. Тогда список пуст и пользователю предлагается создать новые группы синхронизации.
  2. Локальный файл пуст, а глобальный содержит группы синхронизации. Тогда пользователю предлагается выбрать локальные соответствия для любой из этих групп. Они будут добавлены в локальный файл настроек.
  3. Локальный файл содержит группы синхронизации, а глобальный - пуст. Тогда пользователю предлагается синхронизировать локальные файлы с облачным хранилищем.
  4. Оба файла содержат группы синхронизации - из них создается общий список, приоритет в котором отдается группам, содержащимся в локальном списке.

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

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

Внесение изменений в группу синхронизации осуществляется посредством удаления с последующим созданием новой группы синхронизации.

Создание новой группы синхронизации

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

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

Далее пользователь может синхронизировать эту группу с облачным хранилищем.

Выбор локальных соответствий

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

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

Синхронизация

Синхронизация может происходить по двум сценариям:

  1. Экспорт - сохранение локальных данных в облачном хранилище. Дата/время синхронизации и в глобальном и в локальном файлах настроек изменяются на текущее время.
  2. Импорт - замена локальных данных данными из облачного хранилища. Дата/время синхронизации в локальном файле настроек при этом меняется на Дату/время из глобального файла настроек.
  • В случае существования группы и в глобальном и в локальном списках настроек - возможно оба сценария.
  • В случае, если группы нет в глобальном списке - возможен только экспорт локальной версии.
  • В обратном случае, прежде чем импортировать файлы из облачного хранилища, им следует выбрать локальные соответствия.
  • В обоих случаях старые данные удаляются.

Удаление

Группу синхронизации можно удалить как из глобального, так и из локального список.

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

Экспорт

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

Если указанного корневного элемента группы не существует - пользователь оказывается оповещен об этом и может как продолжить, так и прервать операцию.

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

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

Временные локальные файлы удаляются.

Импорт

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

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

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

Временные локальные файлы удаляются.

About

Command Development 2018

License:MIT License


Languages

Language:C# 100.0%