diff -r 2e1adbfc62af -r ee64f059b8e1 qtinternetradio/ui/src/irsymbiandocument.cpp --- a/qtinternetradio/ui/src/irsymbiandocument.cpp Mon May 03 12:25:23 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* -* 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 -#include -#include -#include -#include - -#include "irsymbiandocument.h" -#include "irsymbianapplication.h" -#include "irsymbianappui.h" - -const QString KEqual("="); -const QString KFile("File"); -const QString KTitle("Title"); -const QString KLength("Length"); -const QString KPlsExtension(".pls"); -const QString KM3uExtension(".m3u"); - -IRSymbianDocument * IRSymbianDocument::documentInstance = NULL; - -IRPlsPlayListItem::IRPlsPlayListItem(const QString &aFile, const QString &aTitle, int aLength) : - iFile(aFile), iTitle(aTitle), iLength(aLength) -{ -} - -const QString & IRPlsPlayListItem::file() const -{ - return iFile; -} - -const QString & IRPlsPlayListItem::title() const -{ - return iTitle; -} - -IRSymbianDocument * IRSymbianDocument::getInstance() -{ - if (NULL == documentInstance) - { - documentInstance = new IRSymbianDocument(*IRSymbianApplication::getInstance()); - } - - return documentInstance; -} - -bool IRSymbianDocument::isPlsAvailable() const -{ - return iPlsList.count() > 0; -} - -int IRSymbianDocument::getNumberOfEntries() const -{ - return iPlsList.count(); -} - -IRPlsPlayListItem* IRSymbianDocument::getEntry(int aIndex) -{ - if (aIndex >=0 && aIndex < iPlsList.count()) - { - return iPlsList.at(aIndex); - } - - return NULL; -} - -IRSymbianDocument::IRSymbianDocument(CEikApplication &mainApplication) : QS60MainDocument(mainApplication) -{ - -} - -IRSymbianDocument::~IRSymbianDocument() -{ - clearPlsList(); -} - -void IRSymbianDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile) -{ - aFileStore = NULL; - TBuf<255> fileName; - aFile.FullName(fileName); - TParsePtr ptr(fileName); - TPtrC extension = ptr.Ext(); - QString qExtension = QString::fromUtf16(extension.Ptr(), extension.Length()); - - if (0 == qExtension.compare(KPlsExtension, Qt::CaseInsensitive) || - 0 == qExtension.compare(KM3uExtension, Qt::CaseInsensitive) ) - { - QString qFileName = QString::fromUtf16(fileName.Ptr(), fileName.Length()); - IRSymbianApplication *symbianApp = static_cast(Application()); - if (symbianApp->getInstanceFlag()) - { - //if an instance is already running, send the file name to that instance through socket - QLocalSocket socket; - QString serverName = QCoreApplication::applicationName(); - socket.connectToServer(serverName); - if (socket.waitForConnected(500)) - { - QTextStream stream(&socket); - stream << qFileName; - stream.flush(); - socket.waitForBytesWritten(); - } - } - else - { - parseFile(qFileName); - } - } -} - -CEikAppUi* IRSymbianDocument::CreateAppUiL() -{ - return new (ELeave) IRSymbianAppui; -} - -void IRSymbianDocument::parseFile(const QString &aFileName) -{ - QString extension = aFileName.right(4); - - if (0 == extension.compare(KPlsExtension, Qt::CaseInsensitive)) - { - parsePlsFile(aFileName); - } - else if (0 == extension.compare(KM3uExtension, Qt::CaseInsensitive)) - { - parseM3uFile(aFileName); - } - else - { - Q_ASSERT(false); - } -} - -void IRSymbianDocument::parsePlsFile(const QString &aFileName) -{ - if (aFileName.length() == 0) - { - return; - } - - clearPlsList(); - - QFile file(aFileName); - if (!file.open(QIODevice::ReadOnly)) - { - return; - } - - QTextStream stream(&file); - QString readStr = stream.readLine().trimmed(); - if (readStr.compare("[playlist]", Qt::CaseInsensitive)) - { - file.close(); - return; - } - - readStr = stream.readLine().trimmed(); - QStringList splitStr = readStr.split(KEqual); - if (splitStr.count() != 2) - { - file.close(); - return; - } - - int nbEntries = 0; - if (0 == splitStr.first().compare("NumberOfEntries", Qt::CaseInsensitive)) - { - nbEntries = splitStr.last().toInt(); - } - - if (nbEntries <= 0) - { - file.close(); - return; - } - - for (int i = 0; i < nbEntries; ++i) - { - //read file line : File=xxx - QString filePath = readValue(stream, KFile); - if (filePath.length() == 0) - { - break; - } - - //read title line : Title=xxx - QString title = readValue(stream, KTitle); - if (title.length() == 0) - { - break; - } - - //read length line : Length=xxx - QString strLength = readValue(stream, KLength); - if (strLength.length() == 0) - { - break; - } - - int length = strLength.toInt(); - - //all information is ready - if (length == -1) - { - IRPlsPlayListItem *item = new IRPlsPlayListItem(filePath, title, length); - iPlsList.append(item); - } - } - - file.close(); -} - -void IRSymbianDocument::parseM3uFile(const QString &aFileName) -{ - clearPlsList(); - - QFile file(aFileName); - if (!file.open(QIODevice::ReadOnly)) - { - return; - } - - QTextStream stream(&file); - QString readStr; - int stationCount = 0; - - while (!stream.atEnd()) - { - readStr = stream.readLine().trimmed(); - if (readStr.startsWith("http://", Qt::CaseInsensitive)) - { - IRPlsPlayListItem *item = new IRPlsPlayListItem(readStr, "Station " + QString::number(++stationCount), -1); - iPlsList.append(item); - } - } - - file.close(); -} - -void IRSymbianDocument::clearPlsList() -{ - while (!iPlsList.isEmpty()) - { - IRPlsPlayListItem *firstItem = iPlsList.takeFirst(); - delete firstItem; - } -} - -QString IRSymbianDocument::readValue(QTextStream &aStream, const QString &aKey) -{ - QString readStr; - QStringList splitStr; - - do - { - readStr = aStream.readLine().trimmed(); - }while (readStr.length() == 0 && !aStream.atEnd()); - - splitStr = readStr.split(KEqual); - if (splitStr.count() != 2 || !splitStr.first().startsWith(aKey, Qt::CaseInsensitive)) - { - return QString(); - } - else - { - return splitStr.last(); - } -}