void TFile::Copy(const TFilePos& SrcFilePos, const TFilePos& DstFilePos) { TFile SrcFile(SrcFilePos); TFile DstFile(DstFilePos); if(SrcFilePos.m_bPlainFile) SrcFile.Open(FOF_BINARYREAD); else SrcFile.Open(FOF_READ); if(DstFilePos.m_bPlainFile) DstFile.Open(FOF_BINARYWRITE); else { if(SrcFilePos.m_szLength > DstFilePos.m_szLength) INITIATE_FAILURE; DstFile.Open(FOF_WRITE); } const size_t szBufferSize = g_CommonConsts.m_szFileCopyBufferSize; TValueArray<BYTE, true> Buf; Buf.Allocate(szBufferSize), Buf.Add(szBufferSize); size_t szNRemaining = SrcFilePos.m_szLength; while(szNRemaining) { size_t szNTransfer = Min(szNRemaining, szBufferSize); SrcFile.Read (Buf.GetDataPtr(), szNTransfer); DstFile.Write (Buf.GetDataPtr(), szNTransfer); szNRemaining -= szNTransfer; } }
void ProcessFile( string FName ) { fstream File(FName.c_str(), ios::in | ios::binary); if( File.good() == false ) { cout << endl << "[ERROR] Unable to open file "<< FName; cout << endl; return; } // - make directory ------------------------------------------------------- string mdcmd = "mkdir "; string pkgdir = ".\\"; pkgdir.append(FName, 0, FName.find('.')); pkgdir.append("\\Classes\\"); mdcmd.append(pkgdir); system(mdcmd.c_str()); // - header --------------------------------------------------------------- PKG_Header PKGHeader; File.read((char*)(&PKGHeader), sizeof(PKGHeader)); // info // cout << endl << "Package Version " << dec << LOWORD(PKGHeader.PackageVersion); // cout << endl << "Licencee Mode " << dec << HIWORD(PKGHeader.PackageVersion); // - get scripttext index ------------------------------------------------- DWORD STIndex = -1; NameItem* NameList = ReadNameTable( File, PKGHeader.NameOffset, PKGHeader.NameCount, STIndex ); if( STIndex == -1 ) { cout << endl << "[ERROR] ScriptText not found in the NameTable"; cout << endl; return; } // - find scripttexts in export table ------------------------------------- ExportItem* ExportList = ReadExportTable( File, PKGHeader.ExportOffset, PKGHeader.ExportCount ); DWORD i; for(i=0; i<PKGHeader.ExportCount; i++) { if( ExportList[i].ObjectName == STIndex ) { //cout << endl << "[" << i << "] " << dec << NameList[ExportList[ExportList[i].Package-1].ObjectName].Name; char *buffer = ReadTextBuffer( File, ExportList[i].SerialOffset ); string fname = pkgdir + "\\" + NameList[ExportList[ExportList[i].Package-1].ObjectName].Name + ".uc"; fstream SrcFile(fname.c_str(), ios_base::out | ios_base::trunc | ios_base::binary); SrcFile << buffer; SrcFile.close(); //cout << endl << buffer; delete[] buffer; } } File.close(); return; }
json::Array ReadiumJSApi::getJSON(shared_ptr<const ePub3::SMILData::Sequence> seqBody) { json::Array ret; //TODO: populateChildren const shared_vector<const ePub3::SMILData::TimeContainer>::size_type k = seqBody->GetChildrenCount(); shared_vector<const SMILData::TimeContainer>::size_type i = 0; for (; i < k; ++i) { shared_ptr<const SMILData::TimeContainer> timeContainer = seqBody->GetChild(i); json::Object obj; if (timeContainer->IsParallel()) { auto para = std::dynamic_pointer_cast<const ePub3::SMILData::Parallel>(timeContainer); auto audio = para->Audio(); auto text = para->Text(); json::Array ret1; if (audio) { json::Object obj1; { std::ostringstream stringStream; stringStream << audio->ClipEndMilliseconds() / 1000.; std::string copyOfStr = stringStream.str(); obj1["clipEnd"] = copyOfStr; } obj1["nodeType"] = std::string("audio"); obj1["src"] = std::string(audio->SrcFile().c_str()); //"audio\/mobydick_001_002_melville.mp4", { std::ostringstream stringStream; stringStream << audio->ClipBeginMilliseconds() / 1000.; std::string copyOfStr = stringStream.str(); obj1["clipBegin"] = copyOfStr; } ret1.push_back(obj1); } if (text) { json::Object obj2; obj2["srcFile"] = std::string(text->SrcFile().c_str()); //"chapter_002.xhtml", obj2["srcFragmentId"] = std::string(text->SrcFragmentId().c_str()); //"c02h01", obj2["nodeType"] = std::string("text"); obj2["src"] = std::string(text->SrcFile().c_str()) + "#" + std::string(text->SrcFragmentId().c_str()); // "chapter_002.xhtml#c02h01" ret1.push_back(obj2); } obj["children"] = ret1; obj["nodeType"] = std::string("par"); } else if (timeContainer->IsSequence()) { auto sequence = std::dynamic_pointer_cast<const ePub3::SMILData::Sequence>(timeContainer); obj["textref"] = std::string(sequence->TextRefFile().c_str()); //obj["textref"] = json::Array children = getJSON(sequence); obj["children"] = children; obj["nodeType"] = std::string("seq"); } //obj["nodeType"] = std::string(timeContainer->Type().c_str()); obj["epubtype"] = std::string(""); //"textref" : "", //Sequence //timeContainer->Name().c_str(); //"textref" : "", //"epubtype" : "" //"children" : [] //qDebug() << obj; ret.push_back(obj); } return ret; }