homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp
changeset 35 f9ce957a272c
child 36 cdae8c6c3876
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp	Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,322 @@
+/*
+ * 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: hsmenuservice.cpp
+ *
+ */
+
+#include <QDebug>
+#include <QStandardItem>
+
+#include "hsapp_defs.h"
+#include "hsmenuservice.h"
+#include "hsmenuserviceutils.h"
+#include "caquery.h"
+#include "caitemmodel.h"
+#include "hsmenuitemmodel.h"
+#include "hsmenucollectionsitemmodel.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// Initialization of a static member variable.
+int HsMenuService::mAllCollectionsId = 0;
+
+/*!
+ Returns all applications model
+ \param sortAttribute ::  SortAttribute
+ \retval HsMenuItemModel: AllApplicationsModel
+ */
+HsMenuItemModel *HsMenuService::getAllApplicationsModel(
+    HsSortAttribute sortAttribute)
+{
+    qDebug() << "HsMenuService::getAllApplicationsModel sortAttribute:"
+             << sortAttribute;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::getAllApplicationsModel");
+    CaQuery query;
+    query.setEntryRoles(ItemEntryRole);
+    query.addEntryTypeName(applicationTypeName());
+    query.addEntryTypeName(urlTypeName());
+    query.addEntryTypeName(widgetTypeName());
+    query.setFlagsOn(VisibleEntryFlag);
+    query.setFlagsOff(MissingEntryFlag);
+    query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+                  HsMenuServiceUtils::sortOrder(sortAttribute));
+    HsMenuItemModel *model = new HsMenuItemModel(query);
+    HSMENUTEST_FUNC_EXIT("HsMenuService::getAllApplicationsModel");
+    return model;
+}
+
+/*!
+ Returns all collections model
+ \param sortAttribute ::  SortAttribute
+ \param details : switch to return details or not
+ \retval HsMenuItemModel: all collections model
+ */
+HsMenuItemModel *HsMenuService::getAllCollectionsModel(
+    HsSortAttribute sortAttribute)
+{
+    qDebug() << "HsMenuService::getAllCollectionsModel" << "sortAttribute:"
+             << sortAttribute;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::getAllCollectionsModel");
+    CaQuery query;
+    query.setParentId(allCollectionsId());
+    query.setFlagsOn(VisibleEntryFlag);
+    query.setFlagsOff(MissingEntryFlag);
+    query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+                  HsMenuServiceUtils::sortOrder(sortAttribute));
+    HsMenuItemModel *model = new HsMenuCollectionsItemModel(query);
+    HSMENUTEST_FUNC_EXIT("HsMenuService::getAllCollectionsModel");
+    return model;
+}
+
+/*!
+ Returns collection model
+ \param collectionId ::  id of this collection
+ \param sortAttribute ::  SortAttribute
+ \retval HsMenuItemModel: collection model
+ */
+HsMenuItemModel *HsMenuService::getCollectionModel(int collectionId,
+        HsSortAttribute sortAttribute, const QString &collectionType)
+{
+    qDebug() << "HsMenuService::getCollectionModel sortAttribute:"
+             << sortAttribute;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::getCollectionModel");
+    CaQuery query;
+    query.setFlagsOff(MissingEntryFlag);
+    if (collectionType == collectionDownloadedTypeName()) {
+        query.setFlagsOn(RemovableEntryFlag | VisibleEntryFlag);
+    } else {
+        query.setFlagsOn(VisibleEntryFlag);
+    }
+    query.setParentId(collectionId);
+    query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+                  HsMenuServiceUtils::sortOrder(sortAttribute));
+    HsMenuItemModel *model = new HsMenuItemModel(query);
+    HSMENUTEST_FUNC_EXIT("HsMenuService::getCollectionModel");
+    return model;
+}
+
+/*!
+ Returns all collections names
+ \retval CaItemModel: list with collections names
+ */
+QStringList HsMenuService::getCollectionNames()
+{
+    qDebug() << "HsMenuService::getCollectionNames";
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::getCollectionNames");
+    CaQuery query;
+    query.setParentId(allCollectionsId());
+    query.setFlagsOn(VisibleEntryFlag);
+    query.setFlagsOff(MissingEntryFlag);
+    QList<CaEntry *> collections = CaService::instance()->getEntries(query);
+    QStringList resultList;
+    while (!collections.isEmpty()) {
+        CaEntry *entry = collections.takeFirst();
+        resultList << entry->text();
+        delete entry;
+    }
+
+    qDebug() << "HsMenuService::getCollectionNames resultList:"
+             << resultList;
+    HSMENUTEST_FUNC_EXIT("HsMenuService::getCollectionNames");
+    return resultList;
+}
+
+/*!
+ Returns name of an entry
+ \param id of this entry
+ \retval QString with name of the entry
+ */
+QString HsMenuService::getName(int entryId)
+{
+    qDebug() << "HsMenuService::getName entryId:" << entryId;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::getName");
+    CaEntry *entry = CaService::instance()->getEntry(entryId);
+
+    QString name;
+    if (entry) {
+        name = entry->text();
+        delete entry;
+    }
+    qDebug() << "HsMenuService::getName name: " << name;
+    HSMENUTEST_FUNC_EXIT("HsMenuService::getName");
+    return name;
+}
+
+/*!
+ Executes action on an item
+ \param entryId of this item
+ \param actionName string with action name
+ \retval boolean error code
+ */
+bool HsMenuService::executeAction(int entryId, const QString &actionName)
+{
+    qDebug() << "HsMenuService::executeAction entryId:" << entryId
+             << "actionName:" << actionName;
+
+    return CaService::instance()->executeCommand(entryId, actionName);
+}
+
+/*!
+ Adds new collection
+ \param name of the collection
+ \retval entryId of new collection
+ */
+int HsMenuService::createCollection(const QString &name)
+{
+    qDebug() << "HsMenuService::addCollection name: " << name;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::createCollection");
+    int entryId = 0;
+    CaEntry collection(GroupEntryRole);
+    collection.setEntryTypeName(collectionTypeName());
+    collection.setText(name);
+    CaIconDescription iconDescription;
+    iconDescription.setFilename(defaultCollectionIconId());
+    collection.setIconDescription(iconDescription);
+    CaEntry *entry = CaService::instance()->createEntry(collection);
+    if (entry) {
+        qDebug() << "HsMenuService::addCollection entry" << entry;
+        entryId = entry->id();
+        delete entry;
+        CaService::instance()->appendEntryToGroup(allCollectionsId(),
+                entryId);
+    }
+    HSMENUTEST_FUNC_EXIT("HsMenuService::createCollection");
+    return entryId;
+}
+
+/*!
+ Renames a collection
+ \param id of this collection
+ \param new name for collection
+ \retval boolean error code
+ */
+bool HsMenuService::renameCollection(int collectionId,
+                                     const QString &newCollectionName)
+{
+    qDebug() << "HsMenuService::renameCollection collectionId:"
+             << collectionId << "newCollectionName" << newCollectionName;
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::renameCollection");
+    bool result(false);
+    CaEntry *collection = CaService::instance()->getEntry(collectionId);
+    if (collection) {
+        qDebug() << "HsMenuService::renameCollection collection"
+                 << collection;
+
+        collection->setText(newCollectionName);
+        result = CaService::instance()->updateEntry(*collection);
+        delete collection;
+    }
+    HSMENUTEST_FUNC_EXIT("HsMenuService::renameCollection");
+    return result;
+}
+
+/*!
+ Removes a collection
+ \param id of this collection
+ \retval boolean error code
+ */
+bool HsMenuService::removeCollection(int collectionId)
+{
+    qDebug() << "HsMenuService::removeCollection collectionId:"
+             << collectionId;
+
+    return CaService::instance()->removeEntry(collectionId);
+}
+
+/*!
+ Adds applications to collection
+ \param list with applications entries ids
+ \param collection id
+ \retval boolean error code
+ */
+bool HsMenuService::addApplicationsToCollection(
+    const QList<int> &applicationList, int collectionId)
+{
+    qDebug() << "HsMenuService::addApplicationsToCollection"
+             << "applicationList ids:" << applicationList << "collectionId:"
+             << collectionId;
+
+    return CaService::instance()->appendEntriesToGroup(collectionId,
+            applicationList);
+}
+
+/*!
+ Removes application from collection
+ \param application id
+ \param collection id
+ \retval boolean error code
+ */
+bool HsMenuService::removeApplicationFromCollection(int applicationId,
+        int collectionId)
+{
+    qDebug() << "HsMenuService::removeApplicationFromCollection"
+             << "applicationId:" << applicationId << "collectionId:"
+             << collectionId;
+
+    return CaService::instance()->removeEntryFromGroup(collectionId,
+            applicationId);
+}
+
+/*!
+ Organizes collection's entries.
+ \param groupId Group id.
+ \param entryIdList Group's entries' ids list.
+ \retval Return true if organize collection is done correctly,
+  otherwise return false.
+ */
+bool HsMenuService::organizeCollection(int groupId, QList<int> &entryIdList)
+{
+    qDebug() << "HsMenuService::organizeCollection"
+             << "groupId:" << groupId
+             << "collectionIds:" << entryIdList;
+    return CaService::instance()->customSort(groupId, entryIdList);
+}
+
+/*!
+ Retrives the all collections entry id
+ \retval all collections id
+ */
+int HsMenuService::allCollectionsId()
+{
+    HSMENUTEST_FUNC_ENTRY("HsMenuService::allCollectionsId");
+    if (mAllCollectionsId <= 0) {
+        CaQuery collectionsQuery;
+        collectionsQuery.setEntryRoles(GroupEntryRole);
+        //sorting is set to (default, ascending) to assure that
+        //proper entry is fetched, somebody can add item with
+        //"menucollections" typename to the storage, but even if he or she
+        //do this we fetch entry that we wanted
+        collectionsQuery.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+        collectionsQuery.addEntryTypeName(menuCollectionsTypeName());
+        QList<int> ids = CaService::instance()->getEntryIds(
+                             collectionsQuery);
+        Q_ASSERT(ids.count() > 0);
+        mAllCollectionsId = ids.at(0);
+        qDebug() << "HsMenuService::HsMenuService mAllCollectionsId"
+                 << mAllCollectionsId;
+    }
+    HSMENUTEST_FUNC_EXIT("HsMenuService::allCollectionsId");
+    return mAllCollectionsId;
+}
+
+/*!
+ Touch action on an entry.
+ \param entryId of this entry.
+ \retval boolean error code.
+ */
+bool HsMenuService::touch(int entryId)
+{
+    CaEntry *entry = CaService::instance()->getEntry(entryId);
+    return CaService::instance()->touch(* entry);
+}