void sync() { while (paused || tempSyncItems_locked) { ; } if (tempSyncItems.Count > 0) { tempSyncItems_locked = true; lockedSynchronizingItems.Clear(); lockedSynchronizingItems.AddRange(tempSyncItems); tempSyncItems.Clear(); tempSyncItems_locked = false; } foreach (var syncItem in lockedSynchronizingItems) { while (paused) { ; } var item = syncItem.GetItem(); var isDir = item.IsFolder(); string finalPath = PathNormalizer.Normalize( Path.Combine(folder, item.GetFullName()) ); if (isDir) { if (!Directory.Exists(finalPath)) { Log("DOWNLOAD", item.GetFullName(), true); Directory.CreateDirectory(finalPath); } // Else does nothing, directory already exists syncItem.State = SynchronizingItem.SyncState.Downloading; syncItem.Task = SynchronizingItem.TaskState.Done; } else { FileInterface file = new FileInterface(item); DownloadOrUpload downOrUp; if (syncItem.State == SynchronizingItem.SyncState.Uploading) { downOrUp = DownloadOrUpload.Upload; } else if (syncItem.State == SynchronizingItem.SyncState.Downloading) { downOrUp = DownloadOrUpload.Download; } else { downOrUp = CheckDownloadOrUpload(folder, item); } if (downOrUp == DownloadOrUpload.Nothing) { syncItem.State = SynchronizingItem.SyncState.None; } else if (downOrUp == DownloadOrUpload.Download) { Log("DOWNLOAD", finalPath, false); syncItem.State = SynchronizingItem.SyncState.Downloading; syncItem.Task = SynchronizingItem.TaskState.Executing; localStack.UpdateState(syncItem); file.DownloadTo(finalPath); } else if (downOrUp == DownloadOrUpload.Update) { Log("UPLOAD", finalPath, false); syncItem.State = SynchronizingItem.SyncState.Uploading; syncItem.Task = SynchronizingItem.TaskState.Executing; localStack.UpdateState(syncItem); file.UpdateFrom(finalPath); } } syncItem.Task = SynchronizingItem.TaskState.Done; localStack.UpdateState(syncItem); } }