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); } }
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); } } } } } }