void Log::printError( const std::string& msg ) { std::string str = (_prefixTimestamp ? generateTimestampString() : "") + "[ERROR] " + msg + (_appendNewLine ? "\n" : ""); if( _logToStd ) { printf("%s", str.c_str()); } if( _file.isOpen() ) { _file.write(str); } }
// Creates an index.html showing all containing files and folders for the folder/path submitted to the method void MainWindow::createSingleHTMLIndex(QString currentPath, QString targetFolder) { // write log ui->textEdit->moveCursor (QTextCursor::End); newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText ("\n"+newTimestampString+ "- Indexing: "+currentPath+"\n"); QString filename=targetFolder+"/index.html"; QFile file( filename ); if ( file.open(QIODevice::ReadWrite) ) { QDir recoredDir(currentPath); QStringList allFolders = recoredDir.entryList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs); //(QDir::Filter::Files,QDir::SortFlag::NoSort) //QStringList allFiles = recoredDir.entryList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::Files); //(QDir::Filter::Files,QDir::SortFlag::NoSort) // Create file QTextStream stream( &file ); // deleting the former content file.write(""); file.resize(file.pos()); // write the new content stream << "<!DOCTYPE html>\n"; stream << "<head>\n"; stream << "<meta charset='UTF-8'>"; stream << "<title>DirGister</title>\n"; stream << "<link rel='shortcut icon'' type='image/png'' href='https://raw.githubusercontent.com/yafp/dirgister/master/dirgister.ico'/>\n"; stream << "<script src='//code.jquery.com/jquery-1.11.3.min.js'></script>\n"; stream << "<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css'>\n"; stream << "<style>"; stream << "body { margin:0px; color: DimGray;}"; stream << "h1 { margin-top: 0;}"; stream << "h2 { color: DimGray; font-size: 20; border-bottom: solid 2px DimGray; padding-bottom: 6px;}"; stream << "h3 { color: DimGray; font-size: 8;}"; stream << "a { color: DimGray; text-decoration: none;}"; stream << "a:visited { color: DimGray;}"; stream << "#header { background-color: Gainsboro; color: DimGray; padding: 15px; margin-top: 0px; a{ color: DimGray;} }"; stream << "#content {padding-left: 10px; padding-right: 10px; }"; stream << "</style>"; stream << "</head>\n"; stream << "<body>\n"; stream << "<div id='header'>"; stream << "<h1><i class='fa fa-list-alt'></i> DirGister</h1>\n"; // run the following part only on the sub-pages if(srcFolder != currentPath) // on all sub-pages -> add a backlink-navigation to upper dir { stream << "<h3><a href='../index.html'><i class='fa fa-arrow-circle-left'></i></a> "+currentPath+"</h3>"; } else // main-page { stream << "<h3>"+currentPath+"</h3>"; } stream << "</div>"; // close header div stream << "<div id='content'>"; // Handle folders // if(allFolders.count() != 0) // found folders { stream << "<h2><i class='fa fa-folder'></i> Folders ("+QString::number(allFolders.count())+")</h2>\n"; QString newTarget; foreach (QString str, allFolders) { stream << "<a href='"; stream << QString("%1").arg(str)+"/index.html"; stream << "'><i class='fa fa-folder-o'></i> "; stream << QString("%1").arg(str); stream << "</a><br>"; newTarget = targetFolder+"/"+QString("%1").arg(str); QDir().mkdir(newTarget); // write log ui->textEdit->moveCursor (QTextCursor::End); newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText (newTimestampString+ "- Found folder: "+str+"\n"); }
// User started index-generation process void MainWindow::userTriggeredGeneration() { checkingRequirements(); if((targetFolderExists == true) & (srcFolderExists == true)) { QMessageBox msgBox; msgBox.setText("<qt>DirGister is going to create an index for<br><b>"+srcFolder+"</b><br>in<br><b>"+targetFolder+"</b>.</qt>"); msgBox.setInformativeText("Do you want to proceed?"); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); // handle user-answer switch (ret) { case QMessageBox::Yes: { updateStatusBar("Started index generation"); resetLogUI(); ui->textEdit->clear(); // to overwrite the fontsettings of resetLogUI ui->textEdit->setEnabled(true); // makes text selectable again ui->textEdit->setPlainText(""); // newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText(newTimestampString+ " - Started index generation for:\n"); newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText(newTimestampString+ " - Source: "+ srcFolder +"\n"); newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText(newTimestampString+ " - Target: "+ targetFolder +"\n\n"); // check if log file creation is enabled or not if(ui->rb_writeLog->isChecked()) { logFileCreationEnabled=true; } else { logFileCreationEnabled=false; } // disable some UI items while index-generation is running // ui->le_sourceFolder->setEnabled(false); ui->bt_selectSource->setEnabled(false); ui->le_targetFolder->setEnabled(false); ui->bt_selectTarget->setEnabled(false); ui->rb_writeLog->setEnabled(false); // disable the ui-item until index-generation is finished ui->bt_generateIndex->setEnabled(false); // disable generate-index-button // create a new target folder in the user-defined target-folder oldTargetFolder =targetFolder; newTimestampString = generateTimestampString(); targetFolder = targetFolder+"/"+newTimestampString+"_DirGister_Index"; QDir().mkdir(targetFolder); // start the index generation createSingleHTMLIndex(srcFolder,targetFolder); // If logging is enabled, copy content of UI-log to the log file if(logFileCreationEnabled == true) { newTimestampString = generateTimestampString(); QString logfileName=targetFolder+"/"+ newTimestampString +"_DirGister_log.txt"; QFile logFile( logfileName ); if ( logFile.open(QIODevice::ReadWrite) ) { QTextStream stream( &logFile ); // deleting the former content logFile.write(""); logFile.resize(logFile.pos()); // get text from textedit QString logText = ui->textEdit->toPlainText(); stream << logText; logFile.close(); } } // re-enable the GUI items ui->le_sourceFolder->setEnabled(true); ui->bt_selectSource->setEnabled(true); ui->le_targetFolder->setEnabled(true); ui->bt_selectTarget->setEnabled(true); ui->rb_writeLog->setEnabled(true); // disable the ui-item until index-generation is finished ui->bt_generateIndex->setEnabled(true); // disable generate-index-button ui->textEdit->moveCursor (QTextCursor::End); // jump to end of UI-log-textedit newTimestampString = generateTimestampString(); ui->textEdit->insertPlainText ("\n"+newTimestampString+" - Index generation finished.\n"); ui->textEdit->moveCursor (QTextCursor::End); // jump to end of UI-log-textedit // offer option to load the result index in default viewer QMessageBox::StandardButton reply; reply = QMessageBox::question(this, "Finished index generation", "Would you like to open and display it?",QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { QString link = targetFolder+"/index.html"; QDesktopServices::openUrl(QUrl(link)); } targetFolder = oldTargetFolder; // revert to old content -> targetFolder break; } case QMessageBox::No: { QMessageBox::about(this, tr("Aborted"),tr("You aborted the Index generation")); break; } default: { // should never be reached break; } } } else // either src- or target-folder doesnt exist { QMessageBox::about(this, tr("Error"),tr("Requirements failed. Aborting.")); } }