diff -r 000000000000 -r c464cd7e2753 wizardproviders/ftuwizardprovider/src/ftumanifestparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wizardproviders/ftuwizardprovider/src/ftumanifestparser.cpp Mon Apr 19 14:01:47 2010 +0300 @@ -0,0 +1,227 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: FTU manifest parser. +* +*/ + + +#include "ftumanifestparser.h" +#ifdef Q_OS_SYMBIAN +#include "ftuwizardproviderinternalcrkeys.h" +#endif +#include +#include +#include +#include +#include +#include + +#ifdef Q_OS_SYMBIAN + +#include // for reading cenrep keys +#endif // Q_OS_SYMBIAN + +// --------------------------------------------------------------------------- +// FtuManifestParser::FtuManifestParser +// --------------------------------------------------------------------------- +// +FtuManifestParser::FtuManifestParser(QObject* aParent) + : QObject(aParent) +{ +} + +// --------------------------------------------------------------------------- +// FtuManifestParser::~FtuManifestParser +// --------------------------------------------------------------------------- +// +FtuManifestParser::~FtuManifestParser() +{ + +} + + +// --------------------------------------------------------------------------- +// FtuManifestParser::parsePluginList +// --------------------------------------------------------------------------- +// +QStringList FtuManifestParser::parsePluginList(const QString& manifestPath) +{ + QStringList dllNameList; + QStringList pathList; + + //Check plugin dirs from root of different drives + QFileInfoList drives = QDir::drives(); + int i; + for(i = 0; i < drives.count(); i++) + { + QFileInfo drive = drives.at(i); + QString driveLetter = drive.absolutePath(); + QString path = driveLetter + manifestPath; + if(QDir(path).exists()) + { + qDebug() << "ftu:: append to path list: " << path; + pathList << path; + } + } + // Read the configured plugin list. + QStringList filesToRead = readManifestFilesFromConfig(); + + for(i=0; i < pathList.count(); i++) + { + QString path = pathList.at(i); + QDir dir(path); + + // Use the configured list as a filter while getting the + // manifest files. + dir.setNameFilters(filesToRead); + QStringList entries = dir.entryList(filesToRead, QDir::Files); + + qDebug() << "ftu: Configured manifest file count " + << filesToRead.count() + << " found manifest files from system " << entries.count(); + + // Go through the configured list and find the manifest files. + for(int j=0; j < filesToRead.count() ; ++j) + { + int index = entries.indexOf(filesToRead[j]); + qDebug() << "ftu:reading manifest file from "<< index; + if(index > -1 && index <= entries.count()) + { + QString fileName = entries[index]; + qDebug() << "ftu:: loading from manifest file: " << fileName; + QString path = loadFromXml(dir.absoluteFilePath(fileName)); + qDebug() << "ftu:: path from manifest: " << path; + if(!path.isEmpty()) + { + dllNameList << path; + } + } + } + } + return dllNameList; +} + +// --------------------------------------------------------------------------- +// FtuManifestParser::readManifestFilesFromConfig +// --------------------------------------------------------------------------- +// + +QStringList FtuManifestParser::readManifestFilesFromConfig() +{ + QStringList filesFromConf; +#ifdef Q_OS_SYMBIAN + + XQSettingsManager* settingsManager = new XQSettingsManager(); + + XQSettingsKey numberOfPluginsKey(XQSettingsKey::TargetCentralRepository, + KCrUidFtuWizardProvider, + KFtuNumberOfWizardPlugins); + + bool ok = false; + int numberOfPlugins = settingsManager->readItemValue( + numberOfPluginsKey).toInt(&ok); + + qDebug() << "Ftu:FtuManifestParser reading the nbr of plugins resulted: " + << ok; + + if(ok) + { + qDebug() << "Ftu:reading config for " << numberOfPlugins + << " plugins"; + + + for(int i=1; i <= numberOfPlugins ; ++i) + { + XQSettingsKey fileKey(XQSettingsKey::TargetCentralRepository, + KCrUidFtuWizardProvider, + KFtuNumberOfWizardPlugins + i); + + QString file = settingsManager->readItemValue(fileKey, + XQSettingsManager::TypeString).toString(); + qDebug() << "Ftu:Reading filename from conf :" << file; + filesFromConf << file; + } + } + delete settingsManager; +#else + // Add hardcoded strings for windows environment, + // currently the settings manager is not available for windows. + filesFromConf << "ftusocialmediawizard.manifest" + << "ftudatetimelocationwizard.manifest" + << "ftuexamplewizard.manifest" + << "ftuemailwizard.manifest"; +#endif + return filesFromConf; +} + +// --------------------------------------------------------------------------- +// FtuManifestParser::loadFromXml +// --------------------------------------------------------------------------- +// +QString FtuManifestParser::loadFromXml(const QString& aFileName) +{ + + qDebug() << "ftu:: ManifestParser::loadFromXml " << aFileName; + QFile file(aFileName); + + if(!file.exists()) + { + qDebug() << "ftu: file does not exist"; + return QString(); + } + + QDomDocument document; + if(!document.setContent(&file)) + { + return QString(); + } + + QDomElement element = document.documentElement(); + if(element.tagName() != "plugin") + { + qDebug() << "ftu: Tag name plugin not found"; + return QString(); + } + + QDomNodeList plugins = element.elementsByTagName("runtime"); + + for(int i = 0; i < plugins.count(); ++i) + { + element = plugins.at(i).toElement(); + QString attr = parseAttribute(element, "library"); + qDebug() << "ftu::parsed attr " << attr; + return attr; + } + return QString(); +} + + +// --------------------------------------------------------------------------- +// FtuManifestParser::parseAttribute +// --------------------------------------------------------------------------- +// +QString FtuManifestParser::parseAttribute(QDomElement& element, + const QString& attributeName) const +{ + QDomAttr attribute = element.attributeNode(attributeName); + if(attribute.isNull() || attribute.value().isEmpty()) + { + qDebug() << "ftu: attribute not parsed [attr name]" << attributeName; + return QString(); + } + + return attribute.value(); +} + +