--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiopresetstorage/src/radiopresetstorage_win32.cpp Tue Aug 31 15:15:02 2010 +0300
@@ -0,0 +1,293 @@
+/*
+* 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:
+*
+*/
+
+// System includes
+#include <QString>
+#include <QSettings>
+#include <QDataStream>
+
+// User includes
+#include "radiopresetstorage.h"
+#include "radiopresetstorage_win32_p.h"
+#include "radiostationif.h"
+
+const QString KKeyBookKeeping = "BookKeeping";
+const QString KKeyBase = "Preset-";
+
+/*!
+ *
+ */
+static QString makeKey( int index ) {
+ QString key = KKeyBase;
+ key.append( index );
+ return key;
+}
+
+/*!
+ *
+ */
+Preset::Preset() :
+ mFrequency( 0 ),
+ mRenamedByUser( false ),
+ mGenre( -1 ),
+ mPiCode( -1 ),
+ mFavorite( false ),
+ mLocalStation( false )
+{
+}
+
+/*!
+ *
+ */
+Preset::~Preset()
+{
+}
+
+/*!
+ *
+ */
+void Preset::externalize( QDataStream& outStream )
+{
+ outStream << mFrequency;
+ outStream << mName;
+ outStream << mRenamedByUser;
+ outStream << mGenre;
+ outStream << mUrl;
+ outStream << mPiCode;
+ outStream << mFavorite;
+ outStream << mLocalStation;
+}
+
+/*!
+ *
+ */
+void Preset::internalize( QDataStream& inStream )
+{
+ inStream >> mFrequency;
+ inStream >> mName;
+ inStream >> mRenamedByUser;
+ inStream >> mGenre;
+ inStream >> mUrl;
+ inStream >> mPiCode;
+ inStream >> mFavorite;
+ inStream >> mLocalStation;
+}
+
+/*!
+ *
+ */
+RadioPresetStorage::RadioPresetStorage() :
+ d_ptr( new RadioPresetStoragePrivate() )
+{
+ Q_D( RadioPresetStorage );
+ d->init();
+}
+
+/*!
+ *
+ */
+RadioPresetStorage::~RadioPresetStorage()
+{
+}
+
+/*!
+ *
+ */
+int RadioPresetStorage::maxNumberOfPresets() const
+{
+ return 100;
+}
+
+/*!
+ *
+ */
+int RadioPresetStorage::presetCount() const
+{
+ Q_D( const RadioPresetStorage );
+ return d->mBookKeeping.count();
+}
+
+/*!
+ *
+ */
+int RadioPresetStorage::firstPreset() const
+{
+ Q_D( const RadioPresetStorage );
+ if ( d->mBookKeeping.count() > 0 ) {
+ return d->mBookKeeping.at( 0 );
+ }
+ return -1;
+}
+
+/*!
+ *
+ */
+int RadioPresetStorage::nextPreset( int fromIndex ) const
+{
+ Q_D( const RadioPresetStorage );
+ int index = d->mBookKeeping.indexOf( fromIndex ) + 1;
+ if ( index > 0 && index < d->mBookKeeping.count() ) {
+ return d->mBookKeeping.at( index );
+ }
+ return -1;
+}
+
+/*!
+ *
+ */
+bool RadioPresetStorage::deletePreset( int presetIndex )
+{
+ Q_D( RadioPresetStorage );
+ if ( presetIndex > -1 ) {
+ int index = d->mBookKeeping.indexOf( presetIndex );
+ if ( index > -1 ) {
+ d->mBookKeeping.remove( index, 1 );
+ d->mSettings->remove( makeKey( presetIndex ) );
+ d->removeIndex( presetIndex );
+ return true;
+ }
+ } else if ( presetIndex == -1 ) {
+ for ( int i = d->mBookKeeping.count() - 1; i >= 0; --i ) {
+ d->mSettings->remove( makeKey( d->mBookKeeping.at( i ) ) );
+ }
+ d->mBookKeeping.clear();
+ return true;
+ }
+ return false;
+}
+
+/*!
+ *
+ */
+bool RadioPresetStorage::savePreset( const RadioStationIf& station )
+{
+ Preset preset;
+ preset.mFrequency = station.frequency();
+ preset.mName = station.name();
+ preset.mRenamedByUser = station.isRenamedByUser() ;
+ preset.mGenre = station.genre();
+ preset.mUrl = station.url();
+ preset.mPiCode = station.piCode();
+ preset.mFavorite = station.isFavorite();
+ preset.mLocalStation = station.isLocalStation();
+
+ QByteArray array;
+ QDataStream outStream( &array, QIODevice::WriteOnly );
+ preset.externalize( outStream );
+
+ Q_D( RadioPresetStorage );
+ d->mSettings->setValue( makeKey( station.presetIndex() ), array );
+
+ d->addIndex( station.presetIndex() );
+
+ return true;
+}
+
+/*!
+ *
+ */
+bool RadioPresetStorage::readPreset( int index, RadioStationIf& station )
+{
+ Q_D( RadioPresetStorage );
+ QByteArray array = d->mSettings->value( makeKey( index ) ).toByteArray();
+ if ( !array.isEmpty() ) {
+ Preset preset;
+
+ QDataStream inStream( array );
+ preset.internalize( inStream );
+
+ station.setPresetIndex( index );
+ station.setFrequency( preset.mFrequency );
+ station.setName( preset.mName );
+ station.setRenamedByUser( preset.mRenamedByUser );
+ station.setGenre( preset.mGenre );
+ station.setUrl( preset.mUrl );
+ station.setPiCode( preset.mPiCode );
+ station.setFavorite( preset.mFavorite );
+ station.setLocalStation( preset.mLocalStation );
+
+ return true;
+ }
+ return false;
+}
+
+/*!
+ *
+ */
+RadioPresetStoragePrivate::RadioPresetStoragePrivate()
+{
+}
+
+/*!
+ *
+ */
+RadioPresetStoragePrivate::~RadioPresetStoragePrivate()
+{
+}
+
+/*!
+ *
+ */
+bool RadioPresetStoragePrivate::init()
+{
+ mSettings.reset( new QSettings( "Nokia", "QtFmRadio" ) );
+ readBookKeeping();
+ return true;
+}
+
+/*!
+ *
+ */
+void RadioPresetStoragePrivate::readBookKeeping()
+{
+ QVariant value = mSettings->value( KKeyBookKeeping );
+ if ( value.isValid() ) {
+ mBookKeeping = value.toByteArray();
+ }
+}
+
+/*!
+ *
+ */
+void RadioPresetStoragePrivate::saveBookKeeping()
+{
+ mSettings->setValue( KKeyBookKeeping, mBookKeeping );
+}
+
+/*!
+ *
+ */
+void RadioPresetStoragePrivate::removeIndex( int index )
+{
+ int pos = mBookKeeping.indexOf( index );
+ if ( pos > -1 ) {
+ mBookKeeping.remove( pos, 1 );
+ saveBookKeeping();
+ }
+}
+
+/*!
+ *
+ */
+void RadioPresetStoragePrivate::addIndex( int index )
+{
+ int pos = mBookKeeping.indexOf( index );
+ if ( pos == -1 ) {
+ mBookKeeping.append( index );
+ saveBookKeeping();
+ }
+}