diff -r 5723da102db1 -r 38bbf2dcd608 qtinternetradio/irqfavoritesdb/src/irqfavoritesdb.cpp --- a/qtinternetradio/irqfavoritesdb/src/irqfavoritesdb.cpp Fri Sep 17 08:27:59 2010 +0300 +++ b/qtinternetradio/irqfavoritesdb/src/irqfavoritesdb.cpp Mon Oct 04 00:07:46 2010 +0300 @@ -14,132 +14,157 @@ * Description: * */ -#include "irqfavoritesdb.h" -#include "irqfavoritesdb_p.h" +#include -IRQFavoritesDB::IRQFavoritesDB() : d_ptr(new IRQFavoritesDBPrivate(this)) -{ - d_ptr->init(); +#include "irqfavoritesdb.h" +#include "favoriteswrapper.h" +#include "channelhistorywrapper.h" +#include "urlinfowrapper.h" +#include "irqisdsdatastructure.h" +#include "irqenums.h" + +IRQFavoritesDB::IRQFavoritesDB() +{ + iFavoritesWrapper = new favoritesWrapper; + iHistoryWrapper = new channelHistoryWrapper; + iUrlWrapper = new urlInfoWrapper; } IRQFavoritesDB::~IRQFavoritesDB() { - delete d_ptr; + delete iFavoritesWrapper; + delete iHistoryWrapper; + delete iUrlWrapper; } -//add a preset +//add a preset to favorites //@param IRQPreset& the preset //@return errcode int IRQFavoritesDB::addPreset(const IRQPreset& aPreset) { - return d_ptr->addPreset(aPreset); + bool ret = false; + bool newRow = false; + + columnMap map; + map.insert(channelId, QString::number(aPreset.presetId)); + ret = iFavoritesWrapper->putFavorites(&map, newRow); + + if (!ret) + { + return EIRQErrorNotFound; //presetId is not found + } + + if (newRow) + { + return EIRQErrorNone; + } + else + { + return EIRQErrorAlreadyExist; + } } -//add a preset manually -//@return errcode -//@param -// -int IRQFavoritesDB::addPreset(const QString& aName, const QString& aURL) -{ - return d_ptr->addPreset(aName, aURL); -} - -//get a preset uniq id -//@return errcode -//@param -// -int IRQFavoritesDB::getUniqId(int aNum) const -{ - return d_ptr->getUniqId(aNum); -} - -//delete a preset by uniq id +//delete a preset //@return errcode //@param // -int IRQFavoritesDB::deletePreset(int aUniqId) +int IRQFavoritesDB::deletePreset(const IRQPreset& aPreset) { - return d_ptr->deletePreset(aUniqId); -} + columnMap map; + map.insert(channelId, QString::number(aPreset.presetId)); + bool ret = iFavoritesWrapper->deleteFavorites(&map, NULL); -//search a preset by uniqpresetId / isdspresetid -//warning: the function needs further checking -//@return errcode -// -int IRQFavoritesDB::searchPreset(int aUniqPresetId, int aIsdsPresetId) -{ - return d_ptr->searchPreset(aUniqPresetId, aIsdsPresetId); + if (ret) + { + return EIRQErrorNone; + } + else + { + return EIRQErrorNotFound; + } } -// -//get the previouse preset index in the internal list -//@return the index -// -int IRQFavoritesDB::getPreviousPreset(int aIndex) -{ - return d_ptr->getPreviousPreset(aIndex); -} - -// -//get the next preset index -//@return the index -// -int IRQFavoritesDB::getNextPreset(int aIndex) -{ - return d_ptr->getNextPreset(aIndex); -} - //replace with new preset //@return errcode // -int IRQFavoritesDB::replacePreset(const IRQPreset& aNewPreset) +void IRQFavoritesDB::replacePreset(const IRQPreset& aNewPreset) { - return d_ptr->replacePreset(aNewPreset); -} - -//@return errcode -// -int IRQFavoritesDB::replaceUserDefinedPreset(const IRQPreset& aNewPreset) -{ - return d_ptr->replaceUserDefinedPreset(aNewPreset); + //write the preset data to database + columnMap map; + QString url; + + if (IRQPreset::EIsds == aNewPreset.type) + { + map.insert(channelId, QString::number(aNewPreset.presetId)); + } + map.insert(channelName, aNewPreset.name); + map.insert(languageCode, aNewPreset.languageCode); + map.insert(languageName, aNewPreset.languageName); + map.insert(countryCode, aNewPreset.countryCode); + map.insert(countryName, aNewPreset.countryName); + map.insert(lastModified, aNewPreset.lastModified); + map.insert(musicStoreStatus, aNewPreset.musicStoreStatus); + map.insert(description, aNewPreset.description); + map.insert(shortDesc, aNewPreset.shortDesc); + map.insert(genreId, aNewPreset.genreId); + map.insert(genreName, aNewPreset.genreName); + map.insert(advertisementUrl, aNewPreset.advertisementUrl); + map.insert(advertisementInUse, aNewPreset.advertisementInUse); + map.insert(imgUrl, aNewPreset.imgUrl); + + uint cIdResult = 0; + if (IRQPreset::EIsds == aNewPreset.type) + { + cIdResult = aNewPreset.presetId; + columnMap condAnd; + condAnd.insert(channelId, QString::number(aNewPreset.presetId)); + iHistoryWrapper->putChannelHistory(&map, NULL, NULL, &condAnd); + } + else + { + columnMap condAnd; + condAnd.insert(channelType, QString::number(aNewPreset.type)); + aNewPreset.getChannelUrlAt(0, url); + condAnd.insert(channelUrl, url); + condAnd.insert(channelName, aNewPreset.name); + QList *ids = iHistoryWrapper->getChannelId(&condAnd); + if (ids && ids->count() > 0) + { + //the user-defined preset is already in database + cIdResult = ids->at(0); + condAnd.clear(); + condAnd.insert(channelId, QString::number(cIdResult)); + iHistoryWrapper->putChannelHistory(&map, NULL, NULL, &condAnd); + } + else + { + //the user-defined preset is not in database + iHistoryWrapper->putChannelHistory(&map, &cIdResult); + } + + delete ids; + } + + //write url info to database + columnUrlInfoInsertMap urlmap; + + unsigned int bitrate = 0; + for (int i = 0; i < aNewPreset.getChannelURLCount(); i++) + { + aNewPreset.getChannelBitrate(i, bitrate); + aNewPreset.getChannelUrlAt(i, url); + urlmap.insert(url, bitrate); + } + + iUrlWrapper->resetUrlInfo(&urlmap, cIdResult); } //change the preset type to user defined //@return errcode // -int IRQFavoritesDB::makePresetUserDefined(int aChannelId, int aUserDefinedChannelId) -{ - return d_ptr->makePresetUserDefined(aChannelId, aUserDefinedChannelId); -} - -//get the empty preset left count -//@return the count of empty presets left -// -int IRQFavoritesDB::emptyPresetCount() const +int IRQFavoritesDB::makePresetUserDefined(int /*aChannelId*/, int /*aUserDefinedChannelId*/) { - return d_ptr->emptyPresetCount(); -} - -//get the max preset count supported now -//@return errcode -// -int IRQFavoritesDB::maxPresetCount() -{ - return d_ptr->maxPresetCount(); -} - -//the interface is not used currently. -// -void IRQFavoritesDB::setMoveStatus(bool aStatus) -{ - d_ptr->setMoveStatus(aStatus); -} - -//the interface is not used currently -// -bool IRQFavoritesDB::getMoveStatus() -{ - return d_ptr->getMoveStatus(); + return 0; } //for CIRPreset is just an interface so we can wrapper it into the IRQPreset. @@ -148,18 +173,84 @@ // QList* IRQFavoritesDB::getPresets() const { - return d_ptr->getPresets(); -} - -/* - * Increase the played times of the preset if it's in the favorites - */ -void IRQFavoritesDB::increasePlayedTimes(const IRQPreset &aPreset) -{ - d_ptr->increasePlayedTimes(aPreset); + favoritesWrapper favorites; + QList *dataSet = favorites.getFavorites(); + if (NULL == dataSet) + { + return NULL; + } + + QList *presetList = NULL; + if (dataSet->count() > 0) + { + presetList = new QList; + int dataSize = dataSet->count(); + for (int i = 0; i < dataSize; ++i) + { + IRQPreset *preset = new IRQPreset; + bool ok = false; + QVariant *row = dataSet->at(i); + preset->type = row[channelType].toInt(&ok); + preset->presetId = row[channelId].toUInt(&ok); + preset->name = row[channelName].toString(); + preset->nickName = row[channelNickName].toString(); + preset->languageCode = row[languageCode].toString(); + preset->languageName = row[languageName].toString(); + preset->countryCode = row[countryCode].toString(); + preset->countryName = row[countryName].toString(); + preset->lastModified = row[lastModified].toString(); + preset->musicStoreStatus = row[musicStoreStatus].toString(); + preset->description = row[description].toString(); + preset->shortDesc = row[shortDesc].toString(); + preset->genreName = row[genreName].toString(); + preset->genreId = row[genreId].toString(); + preset->advertisementInUse = row[advertisementInUse].toString(); + preset->advertisementUrl = row[advertisementUrl].toString(); + preset->imgUrl = row[imgUrl].toString(); + + delete []row; + + //get url info and write to preset + urlInfoWrapper urlInfo; + columnMap cond; + cond.insert(channelId, QString::number(preset->presetId)); + QList *urlDataSet = urlInfo.getUrlInfo(&cond, NULL, i, dataSize-1); + int urlSize = urlDataSet->count(); + for (int j = 0; j < urlSize; ++j) + { + IRQChannelServerURL url; + url.url = urlDataSet->at(j)[channelUrl_URL].toString(); + url.bitrate = urlDataSet->at(j)[bitRate_URL].toInt(); + preset->insertChannelServer(url); + delete []urlDataSet->at(j); + } + delete urlDataSet; + + presetList->append(preset); + } + } + + delete dataSet; + + return presetList; } int IRQFavoritesDB::renamePreset(const IRQPreset &aPreset, const QString &aNewName) { - return d_ptr->renamePreset(aPreset, aNewName); + channelHistoryWrapper wrapper; + columnMap map; + + map.insert(channelNickName, aNewName); + columnMap condAND; + condAND.insert(channelId, QString::number(aPreset.presetId)); + bool ret = wrapper.putChannelHistory(&map, NULL, NULL, &condAND); + + if (ret) + { + return EIRQErrorNone; + } + else + { + return EIRQErrorGeneral; + } }