int MainLoop::getSaveVersion(const SaveFileInfo& save) { if (auto info = getNameAndVersion(userPath + "/" + save.filename)) return info->second; else return -1; }
bool KDiff3Part::openFile() { // m_file is always local so we can use QFile on it std::cerr << "KDiff3: " << m_file.latin1() << std::endl; QFile file(m_file); if (file.open(IO_ReadOnly) == false) return false; // our example widget is text-based, so we use QTextStream instead // of a raw QDataStream QTextStream stream(&file); QString str; QString fileName1; QString fileName2; QString version1; QString version2; while (!stream.eof() && (fileName1.isEmpty() || fileName2.isEmpty()) ) { str = stream.readLine() + "\n"; getNameAndVersion( str, "---", fileName1, version1 ); getNameAndVersion( str, "+++", fileName2, version2 ); } file.close(); if ( fileName1.isEmpty() && fileName2.isEmpty() ) { KMessageBox::sorry(m_widget, i18n("Couldn't find files for comparison.")); return false; } FileAccess f1(fileName1); FileAccess f2(fileName2); if ( f1.exists() && f2.exists() && fileName1!=fileName2 ) { m_widget->slotFileOpen2( fileName1, fileName2, "", "", "", "", "", 0 ); return true; } else if ( version1.isEmpty() && f1.exists() ) { // Normal patch // patch -f -u --ignore-whitespace -i [inputfile] -o [outfile] [patchfile] QString tempFileName = FileAccess::tempFileName(); QString cmd = "patch -f -u --ignore-whitespace -i \"" + m_file + "\" -o \""+tempFileName + "\" \"" + fileName1+ "\""; ::system( cmd.ascii() ); m_widget->slotFileOpen2( fileName1, tempFileName, "", "", "", version2.isEmpty() ? fileName2 : "REV:"+version2+":"+fileName2, "", 0 ); // alias names // std::cerr << "KDiff3: f1:" << fileName1.latin1() <<"<->"<<tempFileName.latin1()<< std::endl; FileAccess::removeTempFile( tempFileName ); } else if ( version2.isEmpty() && f2.exists() ) { // Reverse patch // patch -f -u -R --ignore-whitespace -i [inputfile] -o [outfile] [patchfile] QString tempFileName = FileAccess::tempFileName(); QString cmd = "patch -f -u -R --ignore-whitespace -i \"" + m_file + "\" -o \""+tempFileName + "\" \"" + fileName2+"\""; ::system( cmd.ascii() ); m_widget->slotFileOpen2( tempFileName, fileName2, "", "", version1.isEmpty() ? fileName1 : "REV:"+version1+":"+fileName1, "", "", 0 ); // alias name // std::cerr << "KDiff3: f2:" << fileName2.latin1() <<"<->"<<tempFileName.latin1()<< std::endl; FileAccess::removeTempFile( tempFileName ); } else if ( !version1.isEmpty() && !version2.isEmpty() ) { std::cerr << "KDiff3: f1/2:" << fileName1.latin1() <<"<->"<<fileName2.latin1()<< std::endl; // Assuming that files are on CVS: Try to get them // cvs update -p -r [REV] [FILE] > [OUTPUTFILE] QString tempFileName1 = FileAccess::tempFileName(); QString cmd1 = "cvs update -p -r " + version1 + " \"" + fileName1 + "\" >\""+tempFileName1+"\""; ::system( cmd1.ascii() ); QString tempFileName2 = FileAccess::tempFileName(); QString cmd2 = "cvs update -p -r " + version2 + " \"" + fileName2 + "\" >\""+tempFileName2+"\""; ::system( cmd2.ascii() ); m_widget->slotFileOpen2( tempFileName1, tempFileName2, "", "", "REV:"+version1+":"+fileName1, "REV:"+version2+":"+fileName2, "", 0 ); // std::cerr << "KDiff3: f1/2:" << tempFileName1.latin1() <<"<->"<<tempFileName2.latin1()<< std::endl; FileAccess::removeTempFile( tempFileName1 ); FileAccess::removeTempFile( tempFileName2 ); return true; } else { KMessageBox::sorry(m_widget, i18n("Couldn't find files for comparison.")); } return true; }
View::ListElem MainLoop::getGameName(const SaveFileInfo& save) { auto info = getNameAndVersion(userPath + "/" + save.filename); return View::ListElem(info->first, getDateString(save.date)); }