/// <summary> /// Полностью клонирует сервер в локальную папку /// </summary> public static void CloneServer() { Dictionary<string, dynamic> json; Model.Dir dir, current_dir; Stack<Model.Dir> stack = new Stack<Model.Dir>(); //просматриваем корневую папку сервера и помещаем папки, содержащиеся в ней, в стек json = Controller.ApiTwoSafe.listDir(""); foreach(var one in json["response"]["list_dirs"]) { if (one["name"] != "Shared" && one["name"] != "Trash") { dir = new Model.Dir(one["id"], Properties.Settings.Default.RootId, one["name"]); dir.Download(); stack.Push(dir); } } foreach (var one in json["response"]["list_files"]) { new Model.File(one["id"], Properties.Settings.Default.RootId, one["name"]).Download(); } //просматриваем все остальные папки с сервера и помещаем папки, содержащиеся в ней, в стек while (stack.Count != 0) { current_dir = stack.Pop(); json = Controller.ApiTwoSafe.listDir(current_dir.Id.ToString()); foreach (var one in json["response"]["list_dirs"]) { dir = new Model.Dir(one["id"], current_dir.Id, one["name"]); dir.Download(); stack.Push(dir); } foreach (var one in json["response"]["list_files"]) { new Model.File(one["id"], current_dir.Id, one["name"]).Download(); } } Helpers.ApplicationHelper.SetCurrentTimeToSettings(); Start(); }
/// <summary> /// Создает папку на сервере и сохраняет ее в БД /// </summary> /// <param name="parent_id">ID родительской папки</param> /// <param name="fullPath">Полный путь данной папки (включая саму папку)</param> /// <returns></returns> public static Dir Upload(long parent_id, string fullPath) { fullPath = System.IO.Path.GetFileName(fullPath); Dictionary<string, dynamic> json = Controller.ApiTwoSafe.makeDir(parent_id, fullPath, null)["response"]; Dir dir = new Model.Dir(json["dir_id"], parent_id, fullPath); dir.Save(); return dir; }
/// <summary> /// Находит папку в базе данных по ID /// </summary> /// <param name="id">ID папки на сайте 2safe</param> /// <returns>Возвращает объект папки</returns> public static Dir FindById(long id) { Model.Dir dir = null; if (id != Properties.Settings.Default.RootId) { SQLiteConnection connection = new SQLiteConnection(dbName); connection.Open(); SQLiteCommand command = new SQLiteCommand("SELECT * FROM dirs WHERE id='" + id.ToString() + "'", connection); SQLiteDataReader reader = command.ExecuteReader(); reader.Read(); dir = new Model.Dir(reader.GetInt64(0), reader.GetInt64(1), reader.GetString(2)); //dir.SetPath(); reader.Close(); connection.Close(); } else { dir = new Dir(Properties.Settings.Default.RootId, 0, "root"); } return dir; }