MerDevicesXmlReader::MerDevicesXmlReader(const QString &fileName, QObject *parent) : QObject(parent), d(new MerDevicesXmlReaderPrivate) { Utils::FileReader reader; d->error = !reader.fetch(fileName, QIODevice::ReadOnly); if (d->error) { d->errorString = reader.errorString(); return; } QXmlSchema schema; schema.setMessageHandler(&d->messageHandler); Utils::FileReader schemeReader; d->error = !schemeReader.fetch(QString::fromLatin1("%1/mer/devices.xsd").arg(sharedDirPath()), QIODevice::ReadOnly); if (d->error) { d->errorString = schemeReader.errorString(); return; } schema.load(schemeReader.data()); d->error = !schema.isValid(); if (d->error) { d->errorString = d->messageHandler.errorString(); return; } QXmlSchemaValidator validator(schema); validator.setMessageHandler(&d->messageHandler); d->error = !validator.validate(reader.data()); if (d->error) { d->errorString = d->messageHandler.errorString(); return; } d->query.setQuery(QString::fromLatin1("doc('%1')").arg(fileName)); d->query.setMessageHandler(&d->messageHandler); d->error = !d->query.isValid(); if (d->error) { d->errorString = d->messageHandler.errorString(); return; } d->error = !d->query.evaluateTo(d->receiver); if (d->error) d->errorString = d->messageHandler.errorString(); }
QByteArray FileConverter::loadFileContent(const QString &filePath, QString &errorMessage) { QByteArray ret; Utils::FileReader fr; QString absFilePath = filePath; if (!filePath.startsWith(QLatin1String(":/"))) { const QString srcProjectPath = convertedProjectContext().srcProjectPath(); absFilePath = srcProjectPath + QLatin1Char('/') + filePath; } fr.fetch(absFilePath); if (!fr.errorString().isEmpty()) errorMessage = fr.errorString(); else ret = fr.data(); return ret; }
void QmlProject::parseProject(RefreshOptions options) { Core::MessageManager *messageManager = Core::ICore::messageManager(); if (options & Files) { if (options & ProjectFile) delete m_projectItem.data(); if (!m_projectItem) { Utils::FileReader reader; if (reader.fetch(m_fileName)) { QDeclarativeComponent *component = new QDeclarativeComponent(&m_engine, this); component->setData(reader.data(), QUrl::fromLocalFile(m_fileName)); if (component->isReady() && qobject_cast<QmlProjectItem*>(component->create())) { m_projectItem = qobject_cast<QmlProjectItem*>(component->create()); connect(m_projectItem.data(), SIGNAL(qmlFilesChanged(QSet<QString>,QSet<QString>)), this, SLOT(refreshFiles(QSet<QString>,QSet<QString>))); } else { messageManager->printToOutputPane(tr("Error while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch); messageManager->printToOutputPane(component->errorString(), Core::MessageManager::NoModeSwitch); } } else { messageManager->printToOutputPane(tr("QML project: %1").arg(reader.errorString()), Core::MessageManager::NoModeSwitch); } } if (m_projectItem) { m_projectItem.data()->setSourceDirectory(projectDir().path()); m_modelManager->updateSourceFiles(m_projectItem.data()->files(), true); QString mainFilePath = m_projectItem.data()->mainFile(); if (!mainFilePath.isEmpty()) { mainFilePath = projectDir().absoluteFilePath(mainFilePath); Utils::FileReader reader; QString errorMessage; if (!reader.fetch(mainFilePath, &errorMessage)) { messageManager->printToOutputPane( tr("Warning while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch); messageManager->printToOutputPane(errorMessage, Core::MessageManager::NoModeSwitch); } else { m_defaultImport = detectImport(QString::fromUtf8(reader.data())); } } } m_rootNode->refresh(); } if (options & Configuration) { // update configuration } if (options & Files) emit fileListChanged(); }
bool MaemoDebianPackageCreationStep::adaptRulesFile( const QString &templatePath, const QString &rulesFilePath) { Utils::FileReader reader; if (!reader.fetch(templatePath)) { raiseError(reader.errorString()); return false; } QByteArray content = reader.data(); // Always check for dependencies in release builds. if (!m_debugBuild) ensureShlibdeps(content); Utils::FileSaver saver(rulesFilePath); saver.write(content); if (!saver.finalize()) { raiseError(saver.errorString()); return false; } QFile rulesFile(rulesFilePath); rulesFile.setPermissions(rulesFile.permissions() | QFile::ExeUser); return true; }
void PluginDumper::dump(const Plugin &plugin) { if (plugin.hasPredumpedQmlTypesFile()) { const Snapshot snapshot = m_modelManager->snapshot(); LibraryInfo libraryInfo = snapshot.libraryInfo(plugin.qmldirPath); if (!libraryInfo.isValid()) return; const QString &path = plugin.predumpedQmlTypesFilePath(); Utils::FileReader reader; if (!reader.fetch(path, QFile::Text)) { libraryInfo.setPluginTypeInfoStatus(LibraryInfo::TypeInfoFileError, reader.errorString()); m_modelManager->updateLibraryInfo(plugin.qmldirPath, libraryInfo); return; } QString error; QString warning; const QList<FakeMetaObject::ConstPtr> objectsList = parseHelper(reader.data(), &error, &warning); if (error.isEmpty()) { libraryInfo.setMetaObjects(objectsList); libraryInfo.setPluginTypeInfoStatus(LibraryInfo::TypeInfoFileDone); } else { libraryInfo.setPluginTypeInfoStatus(LibraryInfo::TypeInfoFileError, tr("Failed to parse '%1'.\nError: %2").arg(path, error)); } if (!warning.isEmpty()) printParseWarnings(plugin.qmldirPath, warning); m_modelManager->updateLibraryInfo(plugin.qmldirPath, libraryInfo); return; } ProjectExplorer::Project *activeProject = ProjectExplorer::ProjectExplorerPlugin::instance()->startupProject(); if (!activeProject) return; ModelManagerInterface::ProjectInfo info = m_modelManager->projectInfo(activeProject); if (info.qmlDumpPath.isEmpty()) { const Snapshot snapshot = m_modelManager->snapshot(); LibraryInfo libraryInfo = snapshot.libraryInfo(plugin.qmldirPath); if (!libraryInfo.isValid()) return; libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, tr("Could not locate the helper application for dumping type information from C++ plugins.\n" "Please build the debugging helpers on the Qt version options page.")); m_modelManager->updateLibraryInfo(plugin.qmldirPath, libraryInfo); return; } QProcess *process = new QProcess(this); process->setEnvironment(info.qmlDumpEnvironment.toStringList()); connect(process, SIGNAL(finished(int)), SLOT(qmlPluginTypeDumpDone(int))); connect(process, SIGNAL(error(QProcess::ProcessError)), SLOT(qmlPluginTypeDumpError(QProcess::ProcessError))); QStringList args; if (plugin.importUri.isEmpty()) { args << QLatin1String("--path"); args << plugin.importPath; if (ComponentVersion(plugin.importVersion).isValid()) args << plugin.importVersion; } else { args << plugin.importUri; args << plugin.importVersion; args << plugin.importPath; } process->start(info.qmlDumpPath, args); m_runningQmldumps.insert(process, plugin.qmldirPath); }
bool MaemoDebianPackageCreationStep::copyDebianFiles(bool inSourceBuild) { const QString debianDirPath = cachedPackageDirectory() + QLatin1String("/debian"); const QString magicFilePath = debianDirPath + QLatin1Char('/') + MagicFileName; if (inSourceBuild && QFileInfo(debianDirPath).isDir() && !QFileInfo(magicFilePath).exists()) { raiseError(tr("Packaging failed: Foreign debian directory detected. " "You are not using a shadow build and there is a debian " "directory in your project root ('%1'). Qt Creator will not " "overwrite that directory. Please remove it or use the " "shadow build feature.").arg(QDir::toNativeSeparators(debianDirPath))); return false; } QString error; if (!Utils::FileUtils::removeRecursively(debianDirPath, &error)) { raiseError(tr("Packaging failed: Could not remove directory '%1': %2") .arg(debianDirPath, error)); return false; } QDir buildDir(cachedPackageDirectory()); if (!buildDir.mkdir("debian")) { raiseError(tr("Could not create Debian directory '%1'.").arg(debianDirPath)); return false; } QDir templatesDir(m_templatesDirPath); const QStringList &files = templatesDir.entryList(QDir::Files); foreach (const QString &fileName, files) { const QString srcFile = m_templatesDirPath + QLatin1Char('/') + fileName; QString newFileName = fileName; if (newFileName == Qt4HarmattanTarget::aegisManifestFileName()) newFileName = m_packageName + QLatin1String(".aegis"); const QString destFile = debianDirPath + QLatin1Char('/') + newFileName; if (fileName == QLatin1String("rules")) { if (!adaptRulesFile(srcFile, destFile)) return false; continue; } if (newFileName == maemoTarget()->packageName() + QLatin1String(".aegis")) { Utils::FileReader reader; if (!reader.fetch(srcFile)) { raiseError(tr("Could not read manifest file '%1': %2.") .arg(QDir::toNativeSeparators(srcFile), reader.errorString())); return false; } if (reader.data().isEmpty() || reader.data().startsWith("AutoGenerateAegisFile")) continue; if (reader.data().startsWith("NoAegisFile")) { QFile targetFile(destFile); if (!targetFile.open(QIODevice::WriteOnly)) { raiseError(tr("Could not write manifest file '%1': %2.") .arg(QDir::toNativeSeparators(destFile), targetFile.errorString())); return false; } continue; } } if (!QFile::copy(srcFile, destFile)) { raiseError(tr("Could not copy file '%1' to '%2'.") .arg(QDir::toNativeSeparators(srcFile), QDir::toNativeSeparators(destFile))); return false; } } QFile magicFile(magicFilePath); if (!magicFile.open(QIODevice::WriteOnly)) { raiseError(tr("Error: Could not create file '%1'.") .arg(QDir::toNativeSeparators(magicFilePath))); return false; } return true; }