int ResumableDownloader::getPartsToDownload()

in sdk/src/resumable/ResumableDownloader.cc [440:473]


int ResumableDownloader::getPartsToDownload(PdsError &err, PartRecordList &partsToDownload)
{
    UNUSED_PARAM(err);

    std::set<uint64_t> partNumbersDownloaded;
    if (hasRecord_) {
        for (PartRecord &part : record_.parts) {
            partNumbersDownloaded.insert(part.partNumber);
            consumedSize_ += part.size;
        }
    }

    int64_t start = 0;
    int64_t end = fileSize_ - 1;

    int32_t index = 1;
    for (int64_t offset = start; offset < end + 1; offset += partSize_, index++) {
        PartRecord part;
        part.partNumber = index;
        part.offset = offset;
        if (offset + (int64_t)partSize_ > end) {
            part.size = end - offset + 1;
        }
        else {
            part.size = partSize_;
        }

        auto iterNum = partNumbersDownloaded.find(part.partNumber);
        if (iterNum == partNumbersDownloaded.end()) {
            partsToDownload.push_back(part);
        }
    }
    return 0;
}