void PhysicalFileInfo::init(IDistributedFile * _df) { df.set(_df); totalSize = 0; Owned<IDistributedFilePartIterator> iter = df->getIterator(); ForEach(*iter) { IDistributedFilePart & cur = iter->query(); offset_t partSize = cur.getFileSize(true, false); if (partSize == -1) partSize = getPartSize(cur, 0); if (partSize == -1) partSize = getPartSize(cur, 1); if (partSize == -1) partSize = 0x100000; // force an error when the part is opened. partSizes.append(partSize); totalSize += partSize; } }
bool CWizApi::callDownloadDataPart(const CString& strObjectGUID, const CString& strObjectType, int pos) { m_bDownloadingObject = true; unsigned int size = getPartSize(); m_currentObjectPartData.strObjectGUID = strObjectGUID; m_currentObjectPartData.strObjectType = strObjectType; m_currentObjectPartData.nStartPos = pos; m_currentObjectPartData.nQuerySize = size; CWizApiTokenParam param(*this); param.AddString(_T("obj_guid"), strObjectGUID); param.AddString(_T("obj_type"), strObjectType); param.AddInt64(_T("start_pos"), pos); param.AddInt64(_T("part_size"), size); return callXmlRpc(SyncMethod_DownloadObjectPart, ¶m); }
bool CWizApi::uploadNextPartData() { if (m_currentObjectData.arrayData.isEmpty()) { onUploadObjectDataCompleted(m_currentObjectData); return true; } int allSize = m_nCurrentObjectAllSize; int partSize = getPartSize(); int partCount = allSize / partSize; if (allSize % partSize != 0) { partCount++; } int lastSize = m_currentObjectData.arrayData.size(); int partIndex = (allSize - lastSize) / partSize; QByteArray arrayData; if (lastSize <= partSize) { arrayData = m_currentObjectData.arrayData; m_currentObjectData.arrayData.clear(); } else { arrayData = QByteArray(m_currentObjectData.arrayData.constData(), partSize); m_currentObjectData.arrayData.remove(0, partSize); } return callUploadDataPart(m_currentObjectData.strObjectGUID, WIZOBJECTDATA::ObjectTypeToTypeString(m_currentObjectData.eObjectType), m_strCurrentObjectMD5, allSize, partCount, partIndex, arrayData.size(), arrayData); }