private void ClientCreate() { if (Util.SqliteHelper.Select(e.LocalPath) != null) { return; } if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath)) { return; } Models.Metadata createResult; if (!File.Exists(e.LocalPath)) { createResult = NetworkManager.CreateFolder(e.CloudPath); } else { while ((createResult = NetworkManager.Upload(e.CloudPath)) == null) { Thread.Sleep(5000); } } Models.SQLDataType sdt = new Models.SQLDataType(e.LocalPath, createResult.ModifiedTime, createResult.Rev, createResult.Modifier.Email, createResult.isShared ? "true" : "false"); Util.SqliteHelper.Insert(sdt); }
private void ClientChange() { if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath)) { return; } Models.SQLDataType sdt = Util.SqliteHelper.Select(e.LocalPath); if (sdt != null && sdt.getModifiedTime() == File.GetLastWriteTimeUtc(e.LocalPath)) { return; } if (sdt == null) { ClientCreate(); } else { if (Directory.Exists(e.LocalPath)) { return; } Models.Metadata uploadResult; while ((uploadResult = NetworkManager.Upload(e.CloudPath)) == null) { Thread.Sleep(5000); } Models.SQLDataType sdt2 = new Models.SQLDataType(e.LocalPath, uploadResult.ModifiedTime, uploadResult.Rev, uploadResult.Modifier.Email, uploadResult.isShared ? "true" : "false"); Util.SqliteHelper.Update(sdt2); } }
private void ClientRename() { if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath)) { return; } Models.SQLDataType sdt = Util.SqliteHelper.Select(e.OldLocalPath); sdt.Path = e.LocalPath; Util.SqliteHelper.Delete(e.OldLocalPath); Util.SqliteHelper.Insert(sdt); Models.Metadata renameResult = NetworkManager.Rename(e.CloudPath, e.OldCloudPath); }
public static void Update(Models.SQLDataType sdt) { lock (conn) { string sql = "update files set ModifiedTime = \'" + sdt.ModifiedTime + "\', Version = \'" + sdt.Version + "\', Modifier = \'" + sdt.Modifier + "\', IsShared = \'" + sdt.IsShared + "\' where Path = \'" + sdt.Path + "\'"; SQLiteCommand cmd = new SQLiteCommand(sql, conn); cmd.ExecuteNonQuery(); } }
private void ServerChange() { Models.Metadata metadata = NetworkManager.GetMetadata(e.CloudPath); if (metadata.Tag.Equals("File")) { while (!NetworkManager.Download(e.CloudPath)) { Thread.Sleep(5000); } metadata = NetworkManager.GetMetadata(e.CloudPath); File.SetLastWriteTimeUtc(e.LocalPath, metadata.ModifiedTime); Models.SQLDataType sdt = new Models.SQLDataType(e.LocalPath, metadata.ModifiedTime, metadata.Rev, metadata.Modifier.Email, metadata.isShared ? "true" : "false"); Util.SqliteHelper.Update(sdt); } }
public static void Insert(Models.SQLDataType sdt) { lock (conn) { if (Select(sdt.Path) != null) { Update(sdt); } else { string sql = "insert into files (Path, ModifiedTime, Version, Modifier, IsShared) values + (\'" + sdt.Path + "\', \'" + sdt.ModifiedTime + "\', \'" + sdt.Version + "\', \'" + sdt.Modifier + "\', \'" + sdt.IsShared + "\')"; SQLiteCommand cmd = new SQLiteCommand(sql, conn); cmd.ExecuteNonQuery(); } } }
private void ServerRename() { Models.Metadata metadata = NetworkManager.GetMetadata(e.CloudPath); if (metadata.Tag.Equals("File")) { bool retry = true; while (retry) { try { new FileInfo(e.OldLocalPath).MoveTo(e.LocalPath); retry = false; } catch (IOException) { Thread.Sleep(5000); } } } else { bool retry = true; while (retry) { try { new DirectoryInfo(e.OldLocalPath).MoveTo(e.LocalPath); retry = false; } catch (IOException) { Thread.Sleep(5000); } } } Models.SQLDataType sdt = Util.SqliteHelper.Select(e.OldLocalPath); sdt.Path = e.LocalPath; Util.SqliteHelper.Delete(e.OldLocalPath); Util.SqliteHelper.Insert(sdt); }
public static Models.SQLDataType Select(string path) { lock (conn) { string sql = "select * from files where Path = \'" + path + "\'"; SQLiteCommand cmd = new SQLiteCommand(sql, conn); SQLiteDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { Models.SQLDataType result = new Models.SQLDataType( reader["Path"].ToString(), reader["ModifiedTime"].ToString(), reader["Version"].ToString(), reader["Modifier"].ToString(), reader["IsShared"].ToString()); return(result); } else { return(null); } } }
public static void CheckConsistency(string folder) { string[] dirs = Directory.GetDirectories(folder); string[] files = Directory.GetFiles(folder); List <Models.Metadata> cloudEntries = BackgroundWorks.NetworkManager.ListFolder(LocalPathtoCloudPath(folder)); List <Models.Metadata> cloudDirs = new List <Models.Metadata>(); List <Models.Metadata> cloudFiles = new List <Models.Metadata>(); foreach (Models.Metadata metadata in cloudEntries) { if (metadata.Tag.Equals("Folder")) { cloudDirs.Add(metadata); } else { cloudFiles.Add(metadata); } } foreach (Models.Metadata metadata in cloudDirs) { string LocalPath = CloudPathtoLocalPath(metadata.FullPath); if (!dirs.Contains(LocalPath)) { if (metadata.Modifier.Equal(Util.Global.user)) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientDelete, LocalPath); Util.Global.FileUpdateQueue.Add(fce); } else { DownloadFolder(LocalPath); } } } foreach (string dir in dirs) { if (cloudDirs.Find((d) => { return(LocalPathtoCloudPath(dir).Equals(d.FullPath)); }) == null) { if (SqliteHelper.Select(dir) == null) { UploadFolder(dir); } else { DeleteFolder(dir); } } else { CheckConsistency(dir); } } foreach (Models.Metadata metadata in cloudFiles) { string LocalPath = CloudPathtoLocalPath(metadata.FullPath); if (!files.Contains(LocalPath)) { if (metadata.Modifier.Equal(Util.Global.user)) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientDelete, LocalPath); Util.Global.FileUpdateQueue.Add(fce); } else { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerCreate, LocalPath); Util.Global.FileUpdateQueue.Add(fce); } } } foreach (string file in files) { Models.Metadata metadata; if ((metadata = cloudFiles.Find((d) => { return(LocalPathtoCloudPath(file).Equals(d.FullPath)); })) == null) { if (SqliteHelper.Select(file) == null) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientCreate, file); Util.Global.FileUpdateQueue.Add(fce); } else { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerDelete, file); Util.Global.FileUpdateQueue.Add(fce); } } else { DateTime LocalTime = new FileInfo(file).LastWriteTimeUtc; DateTime CloudTime = metadata.ModifiedTime; Models.SQLDataType sqlData = SqliteHelper.Select(file); if (sqlData == null) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientCreate, file); Util.Global.FileUpdateQueue.Add(fce); } else { DateTime LastCloudTime = sqlData.getModifiedTime(); if (LocalTime > LastCloudTime) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientChange, file); Util.Global.FileUpdateQueue.Add(fce); } else { if (CloudTime > LastCloudTime) { Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerChange, file); Util.Global.FileUpdateQueue.Add(fce); } } } } } }