bool RDSvc::generateLog(const QDate &date,const QString &logname, const QString &nextname,QString *report) { QString sql; RDSqlQuery *q; RDClock clock; if((!date.isValid()||logname.isEmpty())) { return false; } emit generationProgress(0); // // Generate Log Structure // QDate purge_date; if(defaultLogShelflife()>=0) { purge_date=date.addDays(defaultLogShelflife()); } sql=QString().sprintf("select NAME from LOGS where NAME=\"%s\"", (const char *)RDEscapeString(logname)); q=new RDSqlQuery(sql); if(q->first()) { // Already Exists delete q; sql=QString().sprintf("update LOGS set SERVICE=\"%s\",\ DESCRIPTION=\"%s\",ORIGIN_USER=\"%s\",\ ORIGIN_DATETIME=now(),LINK_DATETIME=now(),\ MODIFIED_DATETIME=now(),START_DATE=null,\ END_DATE=null,NEXT_ID=0", (const char *)RDEscapeString(svc_name), (const char *)RDEscapeString(RDDateDecode(descriptionTemplate(),date)), "RDLogManager"); if(!purge_date.isValid()) { sql+=(",PURGE_DATE=\""+purge_date.toString("yyyy-MM-dd")+"\""); } sql+=(" where NAME=\""+RDEscapeString(logname)+"\""); q=new RDSqlQuery(sql); delete q; sql=QString("drop table `")+RDLog::tableName(logname)+"`"; q=new RDSqlQuery(sql); delete q; }
TemplateCore::GenerationResult FlashCardCore::generateMobileApplication(const QString &input_apk_file, QString &output_file) { emit generationProgress(5, tr("Preparing workspace...")); qApp->templateManager()->generator()->cleanWorkspace(); emit generationProgress(10, tr("Extracting raw data from editor...")); // We need data which will be imported into apk/zip file. QString quiz_data = editor()->generateBundleData(); if (quiz_data.isEmpty()) { // No date received, this is big problem. return BundleProblem; } QString temp_folder = qApp->templateManager()->tempDirectory(); QDir temp_directory(temp_folder); QString base_folder = temp_folder + "/" + APP_LOW_NAME; QDir base_directory(base_folder); // Preparation of target bundle file emit generationProgress(20, tr("Creating base temporary folder...")); temp_directory.mkdir(APP_LOW_NAME); base_directory.mkdir("assets"); QFile index_file(base_folder + "/assets/flash_content.xml"); index_file.open(QIODevice::WriteOnly | QIODevice::Text); emit generationProgress(30, tr("Writting info data into file...")); QTextStream out(&index_file); out << quiz_data; out.flush(); index_file.close(); emit generationProgress(40, tr("Copying template apk file...")); // Copying of target apk file. QString new_apk_name = input_apk_file; if (!QFile::copy(APP_TEMPLATES_PATH + "/" + entryPoint()->baseFolder() + "/" + entryPoint()->mobileApplicationApkFile(), base_folder + "/" + new_apk_name)) { qApp->templateManager()->generator()->cleanWorkspace(); return CopyProblem; } emit generationProgress(60, tr("Inserting data into apk file...")); // Inserting bundle file into apk file. QProcess zip; zip.setWorkingDirectory(base_folder); zip.start(qApp->zipUtilityPath(), QStringList() << "-m" << "-r" << new_apk_name << "assets"); zip.waitForFinished(); if (zip.exitCode() != EXIT_STATUS_ZIP_NORMAL) { // Error during inserting quiz data via zip. qApp->templateManager()->generator()->cleanWorkspace(); return ZipProblem; } emit generationProgress(70, tr("Signing apk file...")); // Signing and renaming target file. QString pem_certificate = QDir::toNativeSeparators(APP_CERT_PATH + "/" + CERTIFICATE_PATH); QString pk_certificate = QDir::toNativeSeparators(APP_CERT_PATH + "/" + KEY_PATH); QProcess signapk; signapk.setWorkingDirectory(base_folder); signapk.start(qApp->javaInterpreterPath(), QStringList() << "-jar" << qApp->signApkUtlityPath() << pem_certificate << pk_certificate << new_apk_name << QDir::toNativeSeparators(new_apk_name + ".new")); signapk.waitForFinished(); if (signapk.exitCode() != EXIT_STATUS_SIGNAPK_WORKING) { qApp->templateManager()->generator()->cleanWorkspace(); return SignApkProblem; } emit generationProgress(90, tr("Copying final apk file to output directory...")); // Now, our file is created. We need to move it to target directory. if (!IOFactory::copyFile(base_folder + "/" + new_apk_name + ".new", qApp->templateManager()->outputDirectory() + "/" + new_apk_name)) { qApp->templateManager()->generator()->cleanWorkspace(); return CopyProblem; } output_file = QDir(qApp->templateManager()->outputDirectory()).filePath(new_apk_name); // Removing temporary files and exit. qApp->templateManager()->generator()->cleanWorkspace(); return Success; }