qtinternetradio/irqcommon/src/irqisdsdatastructure.cpp
changeset 0 09774dfdd46b
child 3 ee64f059b8e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqcommon/src/irqisdsdatastructure.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* 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:
+*
+*/
+#include <QtAlgorithms>
+#include <QDataStream>
+#include "irqisdsdatastructure.h"
+#include "irqenums.h"
+
+void IRQChannelServerURL::internalize(QDataStream &aStream)
+{
+    aStream>>serverName>>url>>bitrate;
+}
+
+void IRQChannelServerURL::externalize(QDataStream &aStream) const
+{
+    aStream<<serverName<<url<<bitrate;
+}
+
+EXPORT_C IRQPreset::IRQPreset()
+{
+    iIsSorted = false;
+    iChannelUrlCount = 0;
+}
+
+EXPORT_C IRQPreset::~IRQPreset()
+{
+    urlArray.clear();
+    logoData.Close();
+}
+
+EXPORT_C IRQPreset& IRQPreset::operator =(const IRQPreset& aOther)
+{
+    if (this == &aOther)
+        return *this;
+
+    urlArray.clear();
+    int count = aOther.urlArray.count();
+    IRQChannelServerURL aURL;
+    for (int i = 0; i < count; i++)
+    {
+        aURL.bitrate = aOther.urlArray[i].bitrate;
+        aURL.serverName = aOther.urlArray[i].serverName;
+        aURL.url = aOther.urlArray[i].url;
+        this->urlArray.append(aURL);
+    }
+
+    this->iIsSorted = aOther.iIsSorted;
+    this->imgUrl = aOther.imgUrl;
+    this->advertisementInUse = aOther.advertisementInUse;
+    this->advertisementUrl = aOther.advertisementUrl;
+    this->bitrate = aOther.bitrate;
+    this->genreId = aOther.genreId;
+    this->genreName = aOther.genreName;
+    this->shortDesc = aOther.shortDesc;
+    this->description = aOther.description;
+    this->logoData.Close();
+    this->logoData.Create(aOther.logoData);
+    this->musicStoreStatus = aOther.musicStoreStatus;
+    this->lastModified = aOther.lastModified;
+    this->countryCode = aOther.countryCode;
+    this->countryName = aOther.countryName;
+    this->languageCode = aOther.languageCode;
+    this->languageName = aOther.languageName;
+    this->name = aOther.name;
+    this->presetId = aOther.presetId;
+    this->index = aOther.index;
+    this->type = aOther.type;
+    this->iChannelUrlCount = aOther.iChannelUrlCount;
+    this->uniqID = aOther.uniqID;
+    return *this;
+}
+
+EXPORT_C void IRQPreset::internalize(QDataStream &aStream)
+{
+    aStream>>uniqID>>presetId>>index>>type>>iChannelUrlCount;
+    
+    aStream>>languageCode>>languageName 
+           >>countryCode>>countryName
+           >>genreName>>genreId
+           >>name>>lastModified
+           >>advertisementUrl>>advertisementInUse
+           >>imgUrl>>description>>shortDesc
+           >>musicStoreStatus;
+    
+    urlArray.clear();
+    for (int i = 0; i < iChannelUrlCount; ++i)
+    {
+        IRQChannelServerURL url;
+        url.internalize(aStream);
+        urlArray.append(url);
+    }
+}
+
+EXPORT_C void IRQPreset::externalize(QDataStream &aStream) const
+{
+    aStream<<uniqID<<presetId<<index<<type<<iChannelUrlCount;
+    
+    aStream<<languageCode<<languageName
+           <<countryCode<<countryName
+           <<genreName<<genreId
+           <<name<<lastModified
+           <<advertisementUrl<<advertisementInUse
+           <<imgUrl<<description<<shortDesc
+           <<musicStoreStatus;
+    
+    for (int i = 0; i < iChannelUrlCount; ++i)
+    {
+        urlArray.at(i).externalize(aStream);
+    }
+}
+   
+//get the bitrates of the preset. Duplicated bitrate will just save once.
+EXPORT_C void IRQPreset::getAvailableBitrates(QList<int>& aBitrates) const
+{
+    aBitrates.clear();
+    int bitrate = 0;
+
+    for (int i = 0; i < urlArray.count(); i++)
+    {
+        bitrate = urlArray[i].bitrate;
+        if (!aBitrates.contains(bitrate))
+        {
+            aBitrates.append(bitrate);
+        }
+    }
+}
+
+//get the url for the specify bitrate
+//the caller should delete the QList 
+//
+EXPORT_C QList<QString> * IRQPreset::getURLsForBitrate(int aBitrate) const
+{
+    int upLimit = urlArray.count();
+    
+    //if the urls list has no item
+    if( 0 == upLimit )
+    {
+        return NULL;
+    }
+    
+    //check if the bitrate in our range
+    QList<int> bitRateList;
+    getAvailableBitrates(bitRateList);
+    if(!bitRateList.contains(aBitrate))
+    {         
+        return NULL;
+    }
+    
+    QList<QString> *stringList = new QList<QString> (); 
+    for (int i = 0; i < upLimit; i++)
+    {
+        if (urlArray[i].bitrate == aBitrate)
+        {
+            stringList->append(urlArray[i].url);
+        }
+    }
+
+    return stringList;
+}
+
+//the following functions may be changed in future 
+//
+EXPORT_C int IRQPreset::getChannelUrlAt(int aIndex, QString& aURL) const
+{
+    int upLimit = urlArray.count();
+
+    if (aIndex < 0 || aIndex >= upLimit)
+        return EIRQErrorBadParameter;
+
+    aURL = urlArray[aIndex].url;
+    return EIRQErrorNone;
+}
+
+EXPORT_C int IRQPreset::getChannelBitrate(int aIndex, int &aBitrate) const
+{
+    if (aIndex >= 0 && aIndex < urlArray.count())
+    {
+        aBitrate = urlArray[aIndex].bitrate;
+        return EIRQErrorNone;
+    }
+    
+    return EIRQErrorBadParameter;
+}
+
+//append a channel server into a internal list 
+//
+EXPORT_C void IRQPreset::insertChannelServer(const IRQChannelServerURL& aURL)
+{
+    urlArray.append(aURL);
+    iChannelUrlCount++;
+    iIsSorted = false;
+}
+
+EXPORT_C void IRQPreset::clearChannelServerList()
+{
+    urlArray.clear();
+    iChannelUrlCount = 0;
+    iIsSorted = false;
+}
+
+//sort the urlArray with bitrates by ascending. for 
+//there are not many items, here we use bubble sorting.
+//
+EXPORT_C void IRQPreset::sortURLArray()
+{
+    if (iIsSorted)
+        return;
+
+    qSort(urlArray.begin(), urlArray.end(),  bitrateLessThan);
+
+    iIsSorted = true;
+}
+
+EXPORT_C bool IRQPreset::setUrlBitrate(const int aUrlIndex, const int aBitrate)
+{
+    if(aUrlIndex < 0 || aUrlIndex > (urlArray.count()-1) )
+    {
+        return false;
+    }
+    
+    urlArray[aUrlIndex].bitrate = aBitrate;
+    return true;
+}
+
+//check wether the internal list is sorted 
+//
+EXPORT_C bool IRQPreset::isSorted() const
+{
+    return iIsSorted;
+}
+
+EXPORT_C int IRQPreset::getChannelURLCount() const
+{
+    return iChannelUrlCount;
+}
+
+bool bitrateLessThan(const IRQChannelServerURL &url1,
+        const IRQChannelServerURL &url2)
+{
+    return url1.bitrate < url2.bitrate;
+}
+
+ 
+
+
+
+