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