示例#1
0
        void MakeNextChunkUploadInStreamTo(bool CreateNew = false)
        {
            if (item.ChunkUploadSize <= 0)
            {
                throw new Exception("Not upload type");
            }
            long pos_end = item.SizeWasTransfer + item.ChunkUploadSize - 1;

            if (pos_end >= item.From.node.Info.Size)
            {
                pos_end = item.From.node.Info.Size - 1;
            }

            switch (item.To.node.GetRoot.NodeType.Type)
            {
            case CloudType.Dropbox:
                if (!CreateNew)
                {
                    ((DropboxRequestAPIv2)clientTo).GetResponse_upload_session_append();                //get data return from server
                }
                item.To.stream = ((DropboxRequestAPIv2)clientTo).upload_session_append(
                    new Dropbox_Request_UploadSessionAppend(item.UploadID, item.SizeWasTransfer),
                    pos_end - item.SizeWasTransfer + 1);
                break;

            case CloudType.GoogleDrive:
                if (!CreateNew)
                {
                    ((DriveAPIHttprequestv2)clientTo).Files.Insert_Resumable_Response();                //get data return from server
                }
                item.To.stream = ((DriveAPIHttprequestv2)clientTo).Files.Insert_Resumable(item.UploadID, item.SizeWasTransfer, pos_end, item.From.node.Info.Size);
                break;

            case CloudType.Mega:
                if (!CreateNew)
                {
                    completionHandle = mega_up.ReadDataTextResponse();    //get data return from server
                    if (completionHandle.StartsWith("-"))
                    {
                        throw new Exception(completionHandle);
                    }
                }
                item.ChunkUploadSize = chunksSizesToUploadMega[indexPosMega];
                Uri uri = new Uri(item.UploadID + "/" + item.SizeWasTransfer.ToString());
                mega_up = new MegaUpload(uri, item.ChunkUploadSize);
                MegaAesCtrStreamCrypter crypt_stream = item.From.stream as MegaAesCtrStreamCrypter;

                item.dataCryptoMega         = crypt_stream.GetSave();//save
                item.dataCryptoMega.fileKey = crypt_stream.FileKey;
                item.dataCryptoMega.iv      = crypt_stream.Iv;

                item.To.stream = mega_up.MakeStreamUpload();
                break;

            default: throw new Exception("Not support.");
            }
            item.SaveSizeTransferSuccess = item.SizeWasTransfer;
            return;
        }
 void Dispose()
 {
     AppSetting.TransferManager.ItemsTransferWork.Remove(this);
     item     = null;
     clientTo = null;
     chunksSizesToUploadMega = null;
     mega_up          = null;
     completionHandle = null;
 }