Example #1
0
 internal NetworkClient()
 {
     TransferEvent = new TransferEvents();
     DefaultAction = TransferAction.Replace;
     _encoding     = Encoding.ASCII;
     BufferSize    = BUFFER_SIZE;
     IsDisposed    = false;
     DisplayEvents = true;
     IsConnected   = false;
 }
        private static void downloadEnded(SmartItem item, string localFolder)
        {
            transferHistoryLog(item, localFolder);

            SmartItem eitem = GetServerItem(item.ItemName, item.ItemFolder);

            if (eitem == null)
            {
                return;
            }

            eitem.Status             = item.Status;
            eitem.HasError           = item.HasError;
            eitem.ProgressBarEnabled = false;

            if (eitem.Status != ItemStatus.Ignored)
            {
                eitem.Status = (eitem.HasError) ? ItemStatus.DownloadError : ItemStatus.Downloaded;
            }
            TransferEvents.ItemStatusChanged(eitem);
        }
        private static void uploadEnded(SmartItem item, string localFolder)
        {
            transferHistoryLog(item, localFolder);

            SmartItem eitem = GetServerItem(item.ItemName, item.ItemFolder);

            if (eitem == null)
            {
                return;
            }

            eitem.Status             = item.Status;
            eitem.Length             = eitem.Transferred;
            eitem.FileSize           = null;
            eitem.HasError           = item.HasError;
            eitem.ProgressBarEnabled = false;

            switch (eitem.Status)
            {
            case ItemStatus.Ignored:
                break;

            case ItemStatus.Uploading:
                eitem.Status = (eitem.HasError) ? ItemStatus.UploadError : ItemStatus.Uploaded;
                break;

            case ItemStatus.Replacing:
                eitem.Status = (eitem.HasError) ? ItemStatus.ReplaceError : ItemStatus.Replaced;
                break;

            case ItemStatus.Resuming:
                eitem.Status = (eitem.HasError) ? ItemStatus.ResumeError : ItemStatus.Resumed;
                break;
            }
            TransferEvents.ItemStatusChanged(eitem);
        }
        internal async Task TransferItemsAsync(object items, string destination, bool IsUpload)
        {
            TransferEvent.IsUpload = IsUpload;
            TransferEvent.Starting();
            TransferEvent.Items = IsUpload ? await _prepareForUpload(items as string[], destination.TrimEnd('/') + '/') :
                                  await _prepareForDownload(items as SmartItem[], destination.TrimEnd('\\') + '\\');

            items = null;
            if (TransferEvent.Items.Length > 0)
            {
                SmartItem[] IIDP = new SmartItem[] { }; // Items In Destination Path
                TransferEvent.Action        = TransferAction.Unknown;
                TransferEvent.SessionAction = TransferAction.Unknown;
                string dstination = string.Empty; // Last Destination Path
                int    j          = -1;
                bool   hasParent  = false;
                bool   mayExist   = false;
                bool   samePath   = false;

                if (DefaultAction != TransferAction.Unknown)
                {
                    TransferEvents.TillCloseAction = DefaultAction;
                }

                TransferEvent.Started();
                for (int i = 0; i < TransferEvent.Items.Length; i++)
                {
                    if (IsCanceled)
                    {
                        break;
                    }
                    TransferEvent.Item          = TransferEvent.Items[i];
                    TransferEvent.Item.HasError = false;
                    //TransferEvent.Item.Status = ItemStatus.Unknown;
                    if (dstination != TransferEvent.Item.Destination)
                    {
                        dstination = TransferEvent.Item.Destination;
                        TransferEvent.PathChanged(TransferEvent.Item.ItemFolder, dstination);

                        hasParent = (TransferEvent.Item.ParentId != -1);
                        mayExist  = (!hasParent || TransferEvent.Items[TransferEvent.Item.ParentId].Exist);

                        if (mayExist)
                        {
                            if (IsUpload)
                            {
                                IIDP = await getServerItemsAsync(TransferEvent.Item.Destination);

                                if (IIDP == null)
                                {
                                    IIDP = new SmartItem[] { }
                                }
                                ;
                            }
                            else
                            {
                                IIDP = await _getLocalItemsAsync(TransferEvent.Item.Destination);
                            }

                            mayExist = (IIDP.Length != 0);
                        }
                    }

                    samePath = ((IsUpload ? TransferEvent.Item.Destination : TransferEvent.Item.ItemFolder) == BrowsedPath);

                    if (hasParent && TransferEvent.Items[TransferEvent.Item.ParentId].HasError)
                    {
                        TransferEvent.Item.HasError = true;
                        if (TransferEvent.Item.IsFile)
                        {
                            TransferEvent.TotalTransferredFiles++;
                        }
                        else
                        {
                            TransferEvent.TotalTransferredFolders++;
                        }
                        TransferEvent.Item.Status = ItemStatus.Ignored;
                        transferHistoryLog(TransferEvent.Item, TransferEvent.Item.ItemFolder);
                        if (samePath)
                        {
                            TransferEvents.ItemStatusChanged(TransferEvent.Item);
                        }
                        continue;
                    }

                    j = -1;
                    if (mayExist)
                    {
                        j = ListExtensions.GetItemID(IIDP, TransferEvent.Item.Destination + TransferEvent.Item.ItemName);
                        TransferEvent.Item.Exist = (j > -1);
                    }

                    if (TransferEvent.Item.IsFile)
                    {
                        await setTransferAction(IsUpload, IIDP, j);

                        if (samePath)
                        {
                            TransferEvents.ItemStatusChanged(TransferEvent.Item);
                        }

                        if (IsUpload)
                        {
                            string localFolder = TransferEvent.Item.ItemFolder;
                            await _uploadFileAsync();

                            uploadEnded(TransferEvent.Item, localFolder);
                        }
                        else
                        {
                            await _downloadFileAsync();

                            downloadEnded(TransferEvent.Item, TransferEvent.Item.ItemFolder);
                        }
                        TransferEvent.TotalTransferredFiles++;
                    }
                    else
                    {
                        if (IsUpload)
                        {
                            TransferEvent.Item.HasError = !(TransferEvent.Item.Exist || await CreateFolderAsync(TransferEvent.Item.ItemName, TransferEvent.Item.Destination, false));
                        }
                        else
                        {
                            TransferEvent.Item.HasError = !(TransferEvent.Item.Exist || (_createLocalFolder(TransferEvent.Item.Destination + TransferEvent.Item.ItemName)));
                            //TransferEvent.Item.Status = (!TransferEvent.Item.HasError) ? ItemStatus.Downloaded : ItemStatus.DownloadError;
                            //TransferEvents.ItemStatusChanged(TransferEvent.Item.FullName);
                        }

                        TransferEvent.TotalTransferredFolders++;
                    }
                }
            }
            TransferEvent.Ended();
        }