--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/downloadmanager/src/downloadinfo.cpp Fri Oct 15 17:30:59 2010 -0400
@@ -0,0 +1,346 @@
+/**
+ This file is part of CWRT package **
+
+ Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). **
+
+ 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/>.
+*/
+
+#include "downloadinfo.h"
+#include "dmcommon.h"
+#include <QStringList>
+#include <QSettings>
+#define ORGANIZATION "Nokia"
+
+class DownloadInfoPrivate
+{
+ DM_DECLARE_PUBLIC(DownloadInfo);
+public:
+ DownloadInfoPrivate();
+ ~DownloadInfoPrivate();
+
+ QSettings* m_dlInfo;
+ QString m_clientName;
+
+};
+
+DownloadInfoPrivate::DownloadInfoPrivate()
+{
+ m_dlInfo = 0;
+ m_clientName = "";
+}
+
+DownloadInfoPrivate::~DownloadInfoPrivate()
+{
+ if(m_dlInfo)
+ {
+ m_dlInfo->sync();
+ delete m_dlInfo;
+ m_dlInfo = 0;
+ }
+}
+
+/*
+Constructor
+*/
+DownloadInfo::DownloadInfo(const QString& clientName)
+{
+ DM_INITIALIZE(DownloadInfo);
+ priv->m_clientName = clientName;
+ priv->m_dlInfo = new QSettings(ORGANIZATION, clientName);
+}
+
+/*
+Destructor
+*/
+DownloadInfo::~DownloadInfo()
+{
+ DM_UNINITIALIZE(DownloadInfo);
+}
+
+/*
+Sets a string value. Gives option to updte the info file immediately or later
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::setValue(int aDlId, Key aKey, const QString& aStrValue, int aParentId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ if(aParentId > INVALID_DL_ID)
+ priv->m_dlInfo->setValue(genStrKey(aParentId, aDlId, aKey), aStrValue);
+ else
+ priv->m_dlInfo->setValue(genStrKey(aDlId, aKey), aStrValue);
+ return 0;
+}
+
+/*
+Sets a string value. Gives option to updte the info file immediately or later
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::setValueForChild(int aDlId, Key aKey, const QString& aStrValue, int aChildId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ if(aChildId > INVALID_DL_ID)
+ priv->m_dlInfo->setValue(genStrKey(aDlId, aChildId, aKey), aStrValue);
+ else
+ priv->m_dlInfo->setValue(genStrKey(aDlId, aKey), aStrValue);
+ return 0;
+}
+
+/*
+Sets an int value. Gives option to updte the info file immediately or later
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::setValue(int aDlId, Key aKeyInt, long aLongValue, int aParentId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strKey;
+ if(aParentId > INVALID_DL_ID)
+ strKey = genStrKey(aParentId, aDlId, aKeyInt);
+ else
+ strKey = genStrKey(aDlId, aKeyInt);
+ QVariant v((int)aLongValue);
+ priv->m_dlInfo->setValue(strKey, v);
+ return 0;
+}
+
+/*
+Sets an int value. Gives option to updte the info file immediately or later
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::setValueForChild(int aDlId, Key aKeyInt, long aLongValue, int aChildId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strKey;
+ if(aChildId > INVALID_DL_ID)
+ strKey = genStrKey(aDlId, aChildId, aKeyInt);
+ else
+ strKey = genStrKey(aDlId, aKeyInt);
+ QVariant v((int)aLongValue);
+ priv->m_dlInfo->setValue(strKey, v);
+ return 0;
+}
+
+/*
+Sets media object list belonging to the parent. Gives option to updte the info file immediately or later
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::setValue(int aDlId, Key aKey, const QList<QVariant>& aChildIds)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strKey = genStrKey(aDlId, aKey);
+ QVariant v(aChildIds);
+ priv->m_dlInfo->setValue(strKey, v);
+ return 0;
+}
+
+/*
+Updates(serializes) the info with all set values at once.
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::update()
+{
+ DM_PRIVATE(DownloadInfo);
+ priv->m_dlInfo->sync();
+ return 0;
+}
+
+/*
+Deletes the download info of a particular download represented by aDlId.
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::remove(int aDlId, int aParentId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId;
+ strDlId = priv->m_clientName;
+ strDlId.append("/");
+
+ QString str;
+ if(aParentId > INVALID_DL_ID)
+ {
+ str.setNum(aParentId);
+ strDlId.append(str);
+ strDlId.append("/");
+ }
+
+ str.setNum(aDlId);
+ strDlId.append(str);
+ priv->m_dlInfo->remove(strDlId);
+ return 0;
+}
+
+/*
+Retrieves the string value
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::getValue(int aDlId, Key aKeyStr, QString& aStrValue, int aParentId)
+{
+ DM_PRIVATE(DownloadInfo);
+ aStrValue = "";
+ QString strDlId;
+ if (aParentId > INVALID_DL_ID)
+ strDlId = genStrKey(aParentId, aDlId, aKeyStr);
+ else
+ strDlId = genStrKey(aDlId, aKeyStr);
+
+ if(priv->m_dlInfo->contains(strDlId))
+ {
+ aStrValue = priv->m_dlInfo->value(strDlId).toString();
+ return 0;
+ }
+ return -1;
+}
+
+/*
+Retrieves the string value
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::getValueForChild(int aDlId, Key aKeyStr, QString& aStrValue, int aChildId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ aStrValue = "";
+ QString strDlId;
+ if (aChildId > INVALID_DL_ID)
+ strDlId = genStrKey(aDlId, aChildId, aKeyStr);
+ else
+ strDlId = genStrKey(aDlId, aKeyStr);
+
+ if(priv->m_dlInfo->contains(strDlId))
+ {
+ aStrValue = priv->m_dlInfo->value(strDlId).toString();
+ return 0;
+ }
+ return -1;
+}
+
+/*
+Retrieves the int value
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::getValue(int aDlId, Key aKeyInt, long& aLongValue, int aParentId)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId;
+ if(aParentId > INVALID_DL_ID)
+ strDlId = genStrKey(aParentId, aDlId, aKeyInt);
+ else
+ strDlId = genStrKey(aDlId, aKeyInt);
+
+ if(priv->m_dlInfo->contains(strDlId))
+ {
+ aLongValue = priv->m_dlInfo->value(strDlId).toInt();
+ return 0;
+ }
+ return -1;
+}
+
+/*
+Retrieves the int value
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::getValueForChild(int aDlId, Key aKeyInt, long& aLongValue, int aChildId /*= INVALID_DL_ID*/)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId;
+ if(aChildId > INVALID_DL_ID)
+ strDlId = genStrKey(aDlId, aChildId, aKeyInt);
+ else
+ strDlId = genStrKey(aDlId, aKeyInt);
+
+ if(priv->m_dlInfo->contains(strDlId))
+ {
+ aLongValue = priv->m_dlInfo->value(strDlId).toInt();
+ return 0;
+ }
+ return -1;
+}
+
+/*
+Retrieves the mediaObject list
+Returns : 0 on success, non zero on error
+*/
+int DownloadInfo::getValue(int aDlId, Key aKey, QList<QVariant>& aChildIds)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId = genStrKey(aDlId, aKey);
+ if(priv->m_dlInfo->contains(strDlId))
+ {
+ QStringList strList(priv->m_dlInfo->value(strDlId).toStringList());
+ for (int i = 0; i < strList.count(); i++)
+ aChildIds.append(strList[i]);
+ return 0;
+ }
+ return -1;
+}
+
+/*
+Returns all download ids in a vector
+*/
+QVector<int> DownloadInfo::getAllDownloads(const QString& aClientName)
+{
+ QVector<int> ids;
+ QSettings *dlInfo = new QSettings(ORGANIZATION, aClientName);
+ dlInfo->beginGroup(aClientName);
+ QStringList idList = dlInfo->childGroups();
+ dlInfo->endGroup();
+ for(int i=0; i<idList.size(); i++)
+ {
+ ids.append(idList[i].toInt());
+ }
+ delete dlInfo;
+ return ids;
+}
+
+/*
+Helper function to generate a string key combining dlId and the InfoKey
+*/
+QString DownloadInfo::genStrKey(int aDlId, Key aKey)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId = "";
+ strDlId = priv->m_clientName;
+ strDlId.append("/");
+
+ QString str;
+ str.setNum(aDlId);
+ strDlId.append(str);
+
+ strDlId.append("/");
+ str.setNum((int)aKey);
+ strDlId.append(str);
+
+ return strDlId;
+}
+
+/*
+Helper function to generate a string key combining dlId, mediaObjdlId and the InfoKey
+*/
+QString DownloadInfo::genStrKey(int aParentId, int aChildId, Key aKey)
+{
+ DM_PRIVATE(DownloadInfo);
+ QString strDlId = "";
+ strDlId = priv->m_clientName;
+ strDlId.append("/");
+
+ QString str;
+ str.setNum(aParentId);
+ strDlId.append(str);
+ strDlId.append("/");
+
+ str.setNum(aChildId);
+ strDlId.append(str);
+
+ strDlId.append("/");
+ str.setNum((int)aKey);
+ strDlId.append(str);
+
+ return strDlId;
+}