messagingapp/msgui/msgaudiofetcher/src/msgaudiofetchermodel.cpp
author hgs
Fri, 17 Sep 2010 20:01:45 +0530
changeset 67 fc91263aee62
parent 37 518b245aa84c
permissions -rw-r--r--
201037_04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 * 
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 * 
hgs
parents:
diff changeset
    14
 * Description:
hgs
parents:
diff changeset
    15
 *     The source file for messaging's audio fetcher model
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// SYSTEM INCLUDES
hgs
parents:
diff changeset
    19
#include <xqutils.h>
hgs
parents:
diff changeset
    20
#include <xqappmgr.h>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// USER INCLUDES
hgs
parents:
diff changeset
    23
#include "msgaudiofetchermodel.h"
hgs
parents:
diff changeset
    24
#include "msgaudioselectionengine.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
MsgAudioFetcherModel::MsgAudioFetcherModel(QObject *parent) :
hgs
parents:
diff changeset
    27
    QStandardItemModel(parent), mSelectionEngine(0)
hgs
parents:
diff changeset
    28
{
hgs
parents:
diff changeset
    29
    init();   
hgs
parents:
diff changeset
    30
}
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
MsgAudioFetcherModel::~MsgAudioFetcherModel()
hgs
parents:
diff changeset
    33
{
hgs
parents:
diff changeset
    34
    delete mSelectionEngine;
hgs
parents:
diff changeset
    35
}
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
void MsgAudioFetcherModel::init()
hgs
parents:
diff changeset
    38
{
hgs
parents:
diff changeset
    39
    mSelectionEngine = new MsgAudioSelectionEngine();
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    connect(mSelectionEngine, SIGNAL(mdeSessionOpened()), this, SLOT(mdeSessionOpened()));
hgs
parents:
diff changeset
    42
    connect(mSelectionEngine, SIGNAL(mdeSessionError(int)), this, SLOT(mdeSessionError(int)));
hgs
parents:
diff changeset
    43
    connect(mSelectionEngine, SIGNAL(queryComplete(QStringList, QStringList)), this,
hgs
parents:
diff changeset
    44
        SLOT(queryComplete(QStringList, QStringList)));
hgs
parents:
diff changeset
    45
    connect(mSelectionEngine, SIGNAL(queryError(int)), this, SLOT(queryError(int)));
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    connect(mSelectionEngine, SIGNAL(notifyObjectChanged()), this, SLOT(onObjectChanged()));
hgs
parents:
diff changeset
    48
    mSelectionEngine->CreateMetaDataSession();
hgs
parents:
diff changeset
    49
}
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
void MsgAudioFetcherModel::getRomToneFiles()
hgs
parents:
diff changeset
    52
{
hgs
parents:
diff changeset
    53
    // z:\data\sounds\digital
hgs
parents:
diff changeset
    54
    QDir digitalsoundPath(XQUtils::romRootPath() + XQUtils::digitalSoundsPath());
hgs
parents:
diff changeset
    55
    addToneFiles(digitalsoundPath);
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    //z:\data\sounds\simple
hgs
parents:
diff changeset
    58
    QDir simpleSoundPath(XQUtils::romRootPath() + XQUtils::simpleSoundsPath());
hgs
parents:
diff changeset
    59
    addToneFiles(simpleSoundPath);
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    //z:\data\sounds
hgs
parents:
diff changeset
    62
    QDir soundPath(XQUtils::romRootPath() + XQUtils::soundsPath());
hgs
parents:
diff changeset
    63
    addToneFiles(soundPath);
hgs
parents:
diff changeset
    64
}
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
void MsgAudioFetcherModel::addToneFiles(QDir& toneDir)
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
    // List only xx.amr files
hgs
parents:
diff changeset
    69
    QStringList filters;
hgs
parents:
diff changeset
    70
    filters << "*.amr";
hgs
parents:
diff changeset
    71
    toneDir.setNameFilters(filters);
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    QStringList soundList = toneDir.entryList();
hgs
parents:
diff changeset
    74
    for (int i = 0; i < soundList.size(); ++i) {
hgs
parents:
diff changeset
    75
        QString fullPath = QDir::toNativeSeparators(toneDir.absolutePath());
hgs
parents:
diff changeset
    76
        fullPath.append(QDir::separator());
hgs
parents:
diff changeset
    77
        fullPath.append(soundList.at(i));
hgs
parents:
diff changeset
    78
        addRow(fullPath);
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
QVariant MsgAudioFetcherModel::data(const QModelIndex &index, int role) const
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
    return QStandardItemModel::data(index, role);
hgs
parents:
diff changeset
    85
}
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
void MsgAudioFetcherModel::addRow(QString filepath)
hgs
parents:
diff changeset
    88
{
hgs
parents:
diff changeset
    89
    if(isDRM(filepath))
hgs
parents:
diff changeset
    90
    {
hgs
parents:
diff changeset
    91
        // don't insert DRM protected files, as sending itself
hgs
parents:
diff changeset
    92
        // is not allowed in 'Restricted Mode'
hgs
parents:
diff changeset
    93
        return;
hgs
parents:
diff changeset
    94
    }
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    QFileInfo fInfo(filepath);
hgs
parents:
diff changeset
    97
    QStandardItem* item = new QStandardItem();
hgs
parents:
diff changeset
    98
    QString filename = fInfo.baseName();
hgs
parents:
diff changeset
    99
    item->setData(filename, Qt::DisplayRole);
hgs
parents:
diff changeset
   100
    item->setData(filepath, Qt::UserRole);
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
    // get insert index
hgs
parents:
diff changeset
   103
    int index = this->insertIndex(0, rowCount(), filename);
hgs
parents:
diff changeset
   104
    insertRow(index, item);
hgs
parents:
diff changeset
   105
}
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
int MsgAudioFetcherModel::insertIndex(int low, int high, QString value)
hgs
parents:
diff changeset
   108
{
hgs
parents:
diff changeset
   109
    if (low == high) {
hgs
parents:
diff changeset
   110
        return low;
hgs
parents:
diff changeset
   111
    }
hgs
parents:
diff changeset
   112
    int middle = (low + high - 1) / 2;
hgs
parents:
diff changeset
   113
    QModelIndex lowItemIndex = ((QStandardItemModel *) this)->index(low, 0);
hgs
parents:
diff changeset
   114
    QModelIndex highItemIndex = ((QStandardItemModel *) this)->index(high - 1, 0);
hgs
parents:
diff changeset
   115
    QModelIndex middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
hgs
parents:
diff changeset
   116
    QString lowString = data(lowItemIndex).toString();
hgs
parents:
diff changeset
   117
    QString highString = data(highItemIndex).toString();
hgs
parents:
diff changeset
   118
    QString middleString = data(middleItemIndex).toString();
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    if (value >= highString) {
hgs
parents:
diff changeset
   121
        return high;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
    if (value < lowString) {
hgs
parents:
diff changeset
   124
        return low;
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
    high = high - 1;
hgs
parents:
diff changeset
   127
    while (low < high) {
hgs
parents:
diff changeset
   128
        middle = (low + high) / 2;
hgs
parents:
diff changeset
   129
        middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
hgs
parents:
diff changeset
   130
        middleString = data(middleItemIndex).toString();
hgs
parents:
diff changeset
   131
        if (value >= middleString) {
hgs
parents:
diff changeset
   132
            low = middle + 1;
hgs
parents:
diff changeset
   133
        }
hgs
parents:
diff changeset
   134
        else {
hgs
parents:
diff changeset
   135
            high = middle;
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
    return low;
hgs
parents:
diff changeset
   139
}
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
void MsgAudioFetcherModel::clearAll()
hgs
parents:
diff changeset
   142
{    
hgs
parents:
diff changeset
   143
    QStandardItemModel::clear();
hgs
parents:
diff changeset
   144
}
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
void MsgAudioFetcherModel::mdeSessionOpened()
hgs
parents:
diff changeset
   147
{
hgs
parents:
diff changeset
   148
    mSelectionEngine->QueryTones();
hgs
parents:
diff changeset
   149
    getRomToneFiles();
hgs
parents:
diff changeset
   150
}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
void MsgAudioFetcherModel::queryComplete(const QStringList &nameList, const QStringList &uriList)
hgs
parents:
diff changeset
   153
{
hgs
parents:
diff changeset
   154
    for (int i = 0; i < nameList.size(); ++i) {
hgs
parents:
diff changeset
   155
        addRow(uriList.at(i));
hgs
parents:
diff changeset
   156
    }
hgs
parents:
diff changeset
   157
}
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
void MsgAudioFetcherModel::queryError(int error)
hgs
parents:
diff changeset
   160
{
hgs
parents:
diff changeset
   161
    Q_UNUSED(error);        
hgs
parents:
diff changeset
   162
}
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
void MsgAudioFetcherModel::mdeSessionError(int error)
hgs
parents:
diff changeset
   165
{
hgs
parents:
diff changeset
   166
    Q_UNUSED(error);
hgs
parents:
diff changeset
   167
}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
void MsgAudioFetcherModel::onObjectChanged()
hgs
parents:
diff changeset
   170
{
hgs
parents:
diff changeset
   171
    clearAll();
hgs
parents:
diff changeset
   172
    getRomToneFiles();
hgs
parents:
diff changeset
   173
    mSelectionEngine->QueryTones();
hgs
parents:
diff changeset
   174
}
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
bool MsgAudioFetcherModel::isDRM(QString filepath)
hgs
parents:
diff changeset
   177
{
hgs
parents:
diff changeset
   178
    QList<int> attrNames;
hgs
parents:
diff changeset
   179
    attrNames.append(XQApplicationManager::IsProtected);
hgs
parents:
diff changeset
   180
    
hgs
parents:
diff changeset
   181
    QFile file(filepath);
hgs
parents:
diff changeset
   182
    QVariantList attrValues;
hgs
parents:
diff changeset
   183
    XQApplicationManager appmgr;
hgs
parents:
diff changeset
   184
    bool ok = appmgr.getDrmAttributes(file, attrNames, attrValues);
hgs
parents:
diff changeset
   185
    if(!ok)
hgs
parents:
diff changeset
   186
    {
hgs
parents:
diff changeset
   187
        return true;
hgs
parents:
diff changeset
   188
    }
hgs
parents:
diff changeset
   189
    return (0 < attrValues.at(0).toInt());
hgs
parents:
diff changeset
   190
}
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
//End of File