int ResumableDownloader::loadRecord()

in sdk/src/resumable/ResumableDownloader.cc [333:380]


int ResumableDownloader::loadRecord() 
{
    auto recordStream = GetFstreamByPath(recordPath_, recordPathW_, std::ios::in);
    if (recordStream->is_open()) {
        Json::Value root;
        Json::CharReaderBuilder rbuilder;
        std::string errMsg;
        if (!Json::parseFromStream(rbuilder, *recordStream, &root, &errMsg))
        {
            return ARG_ERROR_PARSE_DOWNLOAD_RECORD_FILE;
        }

        record_.opType = root["opType"].asString();
        record_.bucket = root["bucket"].asString();
        record_.key = root["key"].asString();
        record_.filePath = root["filePath"].asString();
        record_.mtime = root["mtime"].asString();
        record_.size = root["size"].asUInt64();
        record_.partSize = root["partSize"].asUInt64();
		
        PartRecord part;
        for (uint32_t i = 0; i < root["parts"].size(); i++) {
            Json::Value partValue = root["parts"][i];
            part.partNumber = partValue["partNumber"].asInt();
            part.size = partValue["size"].asInt64();
            part.crc64 = partValue["crc64"].asUInt64();
            record_.parts.push_back(part);
        }
        record_.md5Sum = root["md5Sum"].asString();
		
        if (root["rangeStart"] != Json::nullValue && root["rangeEnd"] != Json::nullValue) {
            record_.rangeStart = root["rangeStart"].asInt64();
            record_.rangeEnd = root["rangeEnd"].asInt64();
        }
        else if(root["rangeStart"] == Json::nullValue && root["rangeEnd"] == Json::nullValue){
            record_.rangeStart = 0;
            record_.rangeEnd = -1;
        }else {
            return ARG_ERROR_INVALID_RANGE_IN_DWONLOAD_RECORD;
        }

        partSize_ = record_.partSize;
        hasRecord_ = true;
        recordStream->close();
    }

    return 0;
}