qthighway/xqservice/src/xqappmgr_p.cpp
branchRCL_3
changeset 10 cd2778e5acfe
parent 9 5d007b20cfd0
child 11 19a54be74e5e
--- a/qthighway/xqservice/src/xqappmgr_p.cpp	Tue Aug 31 16:02:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,542 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Lesser General Public License as published by
-* the Free Software Foundation, version 2.1 of the License.
-* 
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License
-* along with this program.  If not, 
-* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
-*
-* Description:
-*
-*/
-
-#include <xqservicerequest.h>
-#include <xqservicemanager.h>
-#include <QList>
-#include <xqsettingsmanager.h>
-#include <xqsettingskey.h>
-#include <e32std.h>
-
-#include "xqservicelog.h"
-#include "xqaiwutils.h"
-#include "xqaiwuridriver.h"
-#include "xqaiwdecl.h"
-#include "xqappmgr_p.h"
-
-/*!
-    \class XQApplicationManagerPrivate
-    \brief Private implementation of the XQApplicationManager
-*/
-
-XQApplicationManagerPrivate::XQApplicationManagerPrivate():
-   serviceMgr(0),
-   aiwUtilities(0)
-   
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate");
-    serviceMgr = new XQServiceManager();
-}
-
-XQApplicationManagerPrivate::~XQApplicationManagerPrivate()
-{
-    XQSERVICE_DEBUG_PRINT("~XQApplicationManagerPrivate");
-    delete serviceMgr;
-    delete aiwUtilities;
-}
-
-XQAiwRequest* XQApplicationManagerPrivate::create( const QString &interface, const QString &operation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create(interface)");
-    return create("", interface, operation, embedded);
-}
-
-XQAiwRequest* XQApplicationManagerPrivate::create(
-    const QString &service, const QString &interface, const QString &operation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create(service+interface)");
-
-    QList<XQAiwInterfaceDescriptor> impls;
-    if (service.isEmpty())
-        impls = serviceMgr->findFirstInterface(interface);
-    else
-        impls = serviceMgr->findFirstInterface(service, interface);
-
-    // Pick up the first implementation
-    if (impls.count())
-    {
-        return new XQAiwRequest(impls[0], operation, embedded);
-    }
-    return 0;
-}
-
-
-XQAiwRequest* XQApplicationManagerPrivate::create(
-    const XQAiwInterfaceDescriptor &implementation, const QString &operation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create (impl)");
-    return new XQAiwRequest(implementation, operation, embedded);
-}
-
-XQAiwRequest* XQApplicationManagerPrivate::create(
-    const QUrl &uri, const XQAiwInterfaceDescriptor *implementation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create (uri)");
-    XQSERVICE_DEBUG_PRINT("uri=%s", qPrintable(uri.toString()));
-    
-    if (!uri.isValid())
-    {
-        XQSERVICE_CRITICAL_PRINT("Invalid URI %s", qPrintable(uri.toString()));
-        return 0;
-    }
-
-    if (hasCustomHandler(uri))
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::custom handler applied");
-        XQAiwInterfaceDescriptor nullDescr;
-        return new XQAiwRequest(uri, nullDescr, XQOP_URI_VIEW);
-    }
-    
-    const XQAiwInterfaceDescriptor *impl = implementation;
-    QList<XQAiwInterfaceDescriptor> impls;
-    if (impl == 0) 
-    {
-        // Implementation not given, find first one        
-        impls = list(uri);
-        if (impls.count())
-        {
-            impl = &impls[0];
-            XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create (impl) use first)");
-        }
-    }
-
-    XQAiwRequest *req = 0;
-    if (impl != 0)
-    {
-        // Create service request for viewing the URI
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create (impl) creating request)");
-        req = new XQAiwRequest(uri, *impl, XQOP_URI_VIEW);
-        if (req)
-        {
-            req->setEmbedded(embedded);
-        }
-    }
-
-    return req;
-
-    
-}
-
-XQAiwRequest* XQApplicationManagerPrivate::create(
-     const QFile &file, const XQAiwInterfaceDescriptor *implementation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create(file)");
-    XQSERVICE_DEBUG_PRINT("file=%s", qPrintable(file.fileName()));
-
-    const XQAiwInterfaceDescriptor *impl = implementation;
-    QList<XQAiwInterfaceDescriptor> impls;
-    if (impl == 0) 
-    {
-        // Implementation not given, find services capable of handling the "file"
-        impls = list(file);
-        if (impls.count())
-        {
-            impl = &impls[0];
-        }
-    }
-
-    XQAiwRequest * req = 0;
-    if (impl != 0)
-    {
-        QVariant v = impl->property(XQAiwInterfaceDescriptor::ImplementationId);
-        req = new XQAiwRequest(file, *impl, XQOP_FILE_VIEW);
-        if (req)
-        {
-            req->setEmbedded(embedded);
-            XQSERVICE_DEBUG_PRINT("File handled by %x", v.toInt());
-        }
-    }
-    
-    return req;
-}
-
-XQAiwRequest* XQApplicationManagerPrivate::create(
-    const XQSharableFile &file, const XQAiwInterfaceDescriptor *implementation, bool embedded)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::create(XQSharableFile)");
-    if (!file.isValid())
-    {
-        XQSERVICE_DEBUG_PRINT("\tInvalid XQSharableFile)");
-        return 0;
-    }
-    
-    const XQAiwInterfaceDescriptor *impl = implementation;
-    QList<XQAiwInterfaceDescriptor> impls;
-    if (impl == 0) 
-    {
-        // Implementation not given, find services capable of handling the "file"
-        impls = list(file);
-        if (impls.count())
-        {
-            impl = &impls[0];
-        }
-    }
-
-    XQAiwRequest * req = 0;
-    if (impl != 0)
-    {
-        QVariant v = impl->property(XQAiwInterfaceDescriptor::ImplementationId);
-        req = new XQAiwRequest(file, *impl, XQOP_FILE_VIEW_SHARABLE);
-        if (req)
-        {
-            req->setEmbedded(embedded);
-            XQSERVICE_DEBUG_PRINT("File handled by %x", v.toInt());
-        }
-    }
-
-    return req;
-}
-
-
-
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::list(
-    const QString &interface, const QString& operation)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::list(interface)");
-    Q_UNUSED(operation);
-
-    return serviceMgr->findInterfaces(interface);
-}
-
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::list(
-    const QString &service, const QString& interface, const QString& operation)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::list (service+interface)");
-    Q_UNUSED(operation);
-
-    return serviceMgr->findInterfaces(service, interface);
-}
-
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::list(
-    const QUrl &uri)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::list (uri) %s", qPrintable(uri.toString()));
-
-    QList<XQAiwInterfaceDescriptor> result;
-    if (!uri.isValid())
-    {
-        XQSERVICE_CRITICAL_PRINT("Invalid URI %s", qPrintable(uri.toString()));
-        return result; // Empty
-    }
-
-    QString scheme = uri.scheme();
-    
-    if (scheme.compare(XQURI_SCHEME_FILE,Qt::CaseInsensitive) == 0)
-    {
-        QFile file (uri.toLocalFile());
-        return list(file);  // Apply file based listing
-    }
-    
-    //  Find all services implementing URI interface and support URI scheme
-    QList<XQAiwInterfaceDescriptor> uriHandlers;
-    uriHandlers = list(XQI_URI_VIEW, "");
-
-    // Pick up services supporting the required scheme
-    foreach (XQAiwInterfaceDescriptor uh, uriHandlers)
-    {
-        //  Find services that support the scheme
-        if (uh.customProperty(XQCUSTOM_PROP_SCHEMES).contains(scheme,Qt::CaseInsensitive))  // Allow multiple schemes in same string
-        {
-            XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Service %s can handle scheme %s",
-                                  qPrintable(uh.serviceName()), qPrintable(scheme))
-            result.append(uh);
-        }
-    }
-
-    return result;
-}
-
-//
-// List services capable of handling the file by MIME type
-//
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::list(const QFile &file)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::list (file) %s", qPrintable(file.fileName()));
-
-    // List first MIME handlers for file
-    QList<XQAiwInterfaceDescriptor> mimeHandlers;
-    mimeHandlers = listMimeHandlers(file);
-
-    // Then list those file services that can support the MIME type
-    return listFileHandlers(mimeHandlers);
-}
-
-//
-// List services capable of handling the sharable file by MIME type
-//
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::list(const XQSharableFile &file)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::list (handle)");
-
-    // List first MIME handlers for the sharable file
-    QList<XQAiwInterfaceDescriptor> mimeHandlers;
-    if (!file.isValid())
-    {
-        return mimeHandlers; // Empty set
-    }
-    mimeHandlers = listMimeHandlers(file);
-
-    // Then list those file services that can support the MIME type
-    return listFileHandlers(mimeHandlers);
-}
-
-
-int XQApplicationManagerPrivate::lastError() const
-{
-    int err=0;
-    err = serviceMgr->latestError();
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: lastError=%d", err);
-    return err;
-}
-
-bool XQApplicationManagerPrivate::isRunning(const XQAiwInterfaceDescriptor& implementation) const
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate isRunning");
-    return serviceMgr->isRunning(implementation);
-}
-
-bool XQApplicationManagerPrivate::getDrmAttributes(const QFile &file, const QList<int> &attributeNames, QVariantList &attributeValues)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate drmAttributes");
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    return aiwUtilities->getDrmAttributes(file.fileName(), attributeNames, attributeValues);
-}
-
-bool XQApplicationManagerPrivate::getDrmAttributes(const XQSharableFile &file, const QList<int> &attributeNames, QVariantList &attributeValues)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate drmAttributes");
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    return aiwUtilities->getDrmAttributes(file,attributeNames, attributeValues);
-}
-
-int XQApplicationManagerPrivate::status(const XQAiwInterfaceDescriptor& implementation)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate status");
-    QString statusKeyValue = implementation.customProperty(XQCUSTOM_PROP_AIW_SERVICE_STATUS);
-    if (statusKeyValue.isEmpty())
-    {
-        // No custom property,  have to assume service is enabled
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate no custom property %s",
-                              XQCUSTOM_PROP_AIW_SERVICE_STATUS);
-        return XQApplicationManager::Unknown;
-    }
-
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate custom property value=%s",
-                          qPrintable(statusKeyValue));
-    
-    bool b=false;
-    int keyId = aiwUtilities->toIntFromHex(statusKeyValue, &b);
-    if (!b)
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate bad custom property value");
-        return XQApplicationManager::Unknown;
-    }
-    
-    XQSettingsManager settingsManager;
-    int implId = implementation.property(XQAiwInterfaceDescriptor::ImplementationId).toInt();
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate %x,%x", keyId, implId);
-    
-    XQSettingsKey statusKey (XQSettingsKey::TargetCentralRepository, implId, keyId);
-    QVariant value = settingsManager.readItemValue(statusKey);
-    if (value.isNull())
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate Cenrep %x does not contain key %x",
-                              implId, keyId);
-        return XQApplicationManager::Unknown;
-    }
-
-    
-    int status = value.toInt(&b);
-    if (!b)
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate invalid status value %s",
-                              qPrintable(value.toString()));
-        return XQApplicationManager::Unknown;
-    }
-        
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate status=%d", status);
-    
-    return status;
-   
-}
-
-// ---- PRIVATE FUNCTIONS ----
-
-bool XQApplicationManagerPrivate::hasCustomHandler(const QUrl &uri) const
-{
-    return XQAiwUriDriver::hasCustomHandler(uri);
-}
-
-//
-// Get file handlers
-// TODO: Currently only one, default handler is returned !!!
-//       Possibly later all handlers need to be returned.
-//
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::listMimeHandlers(const QFile &file)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::listMimeHandlers %s", qPrintable(file.fileName()));
-    QList<XQAiwInterfaceDescriptor> mimeHandlers;
-
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    if (aiwUtilities == 0)
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Can not create aiw utils");
-        return mimeHandlers;
-    }
-
-    XQAiwInterfaceDescriptor descriptor;
-
-    // Find default application that can handle MIME type (only one at the moment)
-    int applicationId = 0;
-    if (aiwUtilities->findApplication(file, applicationId) != XQService::ENoError)
-    {
-        return mimeHandlers;  // Empty set
-    }
-
-    // Set incomplete descriptor
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Found file handler %x", applicationId);
-    descriptor.setProperty(XQAiwInterfaceDescriptor::ImplementationId, QVariant(applicationId));
-    
-    mimeHandlers.append(descriptor);
-
-    return mimeHandlers;
-}
-
-//
-// Get handlers for sharable file
-// TODO: Currently only one, default handler is returned !!!
-//       Possibly later all handlers need to be returned.
-//
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::listMimeHandlers(const XQSharableFile &file)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::listMimeHandlers (handle)");
-    QList<XQAiwInterfaceDescriptor> mimeHandlers;
-
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    if (aiwUtilities == 0)
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Can not create aiw utils");
-        return mimeHandlers;
-    }
-
-    XQAiwInterfaceDescriptor descriptor;
-
-    // Find default application that can handle MIME type (only one at the moment)
-    int applicationId = 0;
-    if (aiwUtilities->findApplication(file, applicationId) != XQService::ENoError)
-    {
-        return mimeHandlers;  // Empty set
-    }
-
-    // Set incomplete descriptor
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Found file handler %x", applicationId);
-    descriptor.setProperty(XQAiwInterfaceDescriptor::ImplementationId, QVariant(applicationId));
-
-    mimeHandlers.append(descriptor);
-
-    return mimeHandlers;
-}
-
-
-// To be called only for URI having scheme XQURI_SCHEME_ACTIVITY
-// Check that application exists and fill in only the implementationId
-bool XQApplicationManagerPrivate::getAppDescriptor(const QUrl &uri,  XQAiwInterfaceDescriptor *descriptor)
-{
-
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::getAppDescriptor %s)", qPrintable(uri.toString()));
-
-    if (aiwUtilities == 0)
-        aiwUtilities = new XQAiwUtils();
-    if (aiwUtilities == 0)
-    {
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Can not create aiw utils");
-        return false;
-    }
-
-    int applicationId = 0;
-    if (aiwUtilities->findApplication(uri, applicationId) != XQService::ENoError)
-    {
-        return false;  // No application registered for file
-    }
-
-    // Create incomplete descriptor
-    descriptor->setProperty(XQAiwInterfaceDescriptor::ImplementationId, QVariant(applicationId));
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Found uri handler %x", applicationId);
-
-    return  true; 
-}
-
-
-//
-// Get file handlers that can support the give MIME type
-//
-QList<XQAiwInterfaceDescriptor> XQApplicationManagerPrivate::listFileHandlers(
-    const QList<XQAiwInterfaceDescriptor> &mimeHandlers)
-{
-    XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate::listFileHandlers");
-
-    //  Find all services implementing URI interface, support "file" scheme and can handle the file
-    //  by MIME type
-    QList<XQAiwInterfaceDescriptor> fileServices;
-    fileServices = list(XQI_FILE_VIEW, "");
-    if (fileServices.count() == 0)
-    {
-        return fileServices; // Empty set
-    }
-
-    QList<XQAiwInterfaceDescriptor> result;
-    foreach (XQAiwInterfaceDescriptor fs, fileServices)
-    {
-        //  Find services that support the file scheme
-        XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Service %s can handle file", qPrintable(fs.serviceName()));
-        int serviceAppId = fs.property(XQAiwInterfaceDescriptor::ImplementationId).toInt();
-        foreach (XQAiwInterfaceDescriptor mh, mimeHandlers)
-        {
-            int mimeAppId = mh.property(XQAiwInterfaceDescriptor::ImplementationId).toInt();
-            if (mimeAppId == serviceAppId)
-            {
-                // Return only those services that support file scheme and claim to support also MIME type
-                XQSERVICE_DEBUG_PRINT("XQApplicationManagerPrivate:: Service %s (UID=%x) can handle file and MIME type",
-                                      qPrintable(fs.serviceName()), serviceAppId);
-                result.append(fs);
-            }
-        }
-    }
-
-    if (result.isEmpty())
-    {
-        // No service support present, try using the MIME handlers via old way
-        return mimeHandlers;
-    }
-    return result;
-}