Пример #1
0
        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);
            }
        }