--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetchermodel.cpp Fri Jun 25 15:47:40 2010 +0530
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2010 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:
+ * The source file for messaging's audio fetcher model
+ */
+
+// SYSTEM INCLUDES
+#include <xqutils.h>
+#include <xqappmgr.h>
+
+// USER INCLUDES
+#include "msgaudiofetchermodel.h"
+#include "msgaudioselectionengine.h"
+
+MsgAudioFetcherModel::MsgAudioFetcherModel(QObject *parent) :
+ QStandardItemModel(parent), mSelectionEngine(0)
+{
+ init();
+}
+
+MsgAudioFetcherModel::~MsgAudioFetcherModel()
+{
+ delete mSelectionEngine;
+}
+
+void MsgAudioFetcherModel::init()
+{
+ mSelectionEngine = new MsgAudioSelectionEngine();
+
+ connect(mSelectionEngine, SIGNAL(mdeSessionOpened()), this, SLOT(mdeSessionOpened()));
+ connect(mSelectionEngine, SIGNAL(mdeSessionError(int)), this, SLOT(mdeSessionError(int)));
+ connect(mSelectionEngine, SIGNAL(queryComplete(QStringList, QStringList)), this,
+ SLOT(queryComplete(QStringList, QStringList)));
+ connect(mSelectionEngine, SIGNAL(queryError(int)), this, SLOT(queryError(int)));
+
+ connect(mSelectionEngine, SIGNAL(notifyObjectChanged()), this, SLOT(onObjectChanged()));
+ mSelectionEngine->CreateMetaDataSession();
+}
+
+void MsgAudioFetcherModel::getRomToneFiles()
+{
+ // z:\data\sounds\digital
+ QDir digitalsoundPath(XQUtils::romRootPath() + XQUtils::digitalSoundsPath());
+ addToneFiles(digitalsoundPath);
+
+ //z:\data\sounds\simple
+ QDir simpleSoundPath(XQUtils::romRootPath() + XQUtils::simpleSoundsPath());
+ addToneFiles(simpleSoundPath);
+
+ //z:\data\sounds
+ QDir soundPath(XQUtils::romRootPath() + XQUtils::soundsPath());
+ addToneFiles(soundPath);
+}
+
+void MsgAudioFetcherModel::addToneFiles(QDir& toneDir)
+{
+ // List only xx.amr files
+ QStringList filters;
+ filters << "*.amr";
+ toneDir.setNameFilters(filters);
+
+ QStringList soundList = toneDir.entryList();
+ for (int i = 0; i < soundList.size(); ++i) {
+ QString fullPath = QDir::toNativeSeparators(toneDir.absolutePath());
+ fullPath.append(QDir::separator());
+ fullPath.append(soundList.at(i));
+ addRow(fullPath);
+ }
+}
+
+QVariant MsgAudioFetcherModel::data(const QModelIndex &index, int role) const
+{
+ return QStandardItemModel::data(index, role);
+}
+
+void MsgAudioFetcherModel::addRow(QString filepath)
+{
+ if(isDRM(filepath))
+ {
+ // don't insert DRM protected files, as sending itself
+ // is not allowed in 'Restricted Mode'
+ return;
+ }
+
+ QFileInfo fInfo(filepath);
+ QStandardItem* item = new QStandardItem();
+ QString filename = fInfo.baseName();
+ item->setData(filename, Qt::DisplayRole);
+ item->setData(filepath, Qt::UserRole);
+
+ // get insert index
+ int index = this->insertIndex(0, rowCount(), filename);
+ insertRow(index, item);
+}
+
+int MsgAudioFetcherModel::insertIndex(int low, int high, QString value)
+{
+ if (low == high) {
+ return low;
+ }
+ int middle = (low + high - 1) / 2;
+ QModelIndex lowItemIndex = ((QStandardItemModel *) this)->index(low, 0);
+ QModelIndex highItemIndex = ((QStandardItemModel *) this)->index(high - 1, 0);
+ QModelIndex middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
+ QString lowString = data(lowItemIndex).toString();
+ QString highString = data(highItemIndex).toString();
+ QString middleString = data(middleItemIndex).toString();
+
+ if (value >= highString) {
+ return high;
+ }
+ if (value < lowString) {
+ return low;
+ }
+ high = high - 1;
+ while (low < high) {
+ middle = (low + high) / 2;
+ middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
+ middleString = data(middleItemIndex).toString();
+ if (value >= middleString) {
+ low = middle + 1;
+ }
+ else {
+ high = middle;
+ }
+ }
+ return low;
+}
+
+void MsgAudioFetcherModel::clearAll()
+{
+ QStandardItemModel::clear();
+}
+
+void MsgAudioFetcherModel::mdeSessionOpened()
+{
+ mSelectionEngine->QueryTones();
+ getRomToneFiles();
+}
+
+void MsgAudioFetcherModel::queryComplete(const QStringList &nameList, const QStringList &uriList)
+{
+ for (int i = 0; i < nameList.size(); ++i) {
+ addRow(uriList.at(i));
+ }
+}
+
+void MsgAudioFetcherModel::queryError(int error)
+{
+ Q_UNUSED(error);
+}
+
+void MsgAudioFetcherModel::mdeSessionError(int error)
+{
+ Q_UNUSED(error);
+}
+
+void MsgAudioFetcherModel::onObjectChanged()
+{
+ clearAll();
+ getRomToneFiles();
+ mSelectionEngine->QueryTones();
+}
+
+bool MsgAudioFetcherModel::isDRM(QString filepath)
+{
+ QList<int> attrNames;
+ attrNames.append(XQApplicationManager::IsProtected);
+
+ QFile file(filepath);
+ QVariantList attrValues;
+ XQApplicationManager appmgr;
+ bool ok = appmgr.getDrmAttributes(file, attrNames, attrValues);
+ if(!ok)
+ {
+ return true;
+ }
+ return (0 < attrValues.at(0).toInt());
+}
+
+//End of File