--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irdocument.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2006-2007 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: ?Description
+*
+*/
+
+
+#include <aknglobalnote.h>
+#include <apgwgnam.h>
+#include <hal.h>
+#include <internetradio.rsg>
+#include <stringloader.h>
+#include <coeaui.h>
+
+#include "ir.hrh"
+#include "irdebug.h"
+#include "irdocument.h"
+#include "irui.h"
+#include "irpubsubkeys.h"
+
+
+// At least 3 MB of free RAM is needed to run the application.
+const TInt KIRMinimumRAMNeeded = 3145728;
+// 5 seconds inverval for memory check timer.
+const TTimeIntervalMicroSeconds32 KIRMemCheckTimerInterval = 5000000;
+
+const TInt KBufMaxSize = 255;
+
+_LIT( KIRPlsFile, "c:\\private\\2000b499\\tempplsfile.pls" );
+// ----------------------------------------------------------------------------
+// CIRDocument::NewL(CEikApplication& aApp).
+// returns an instance of CIRDocument.
+// ----------------------------------------------------------------------------
+//
+CIRDocument* CIRDocument::NewL(CEikApplication& aApp)
+ {
+ IRLOG_INFO( "CIRDocument::NewL - Entering" );
+ CIRDocument* self = new (ELeave) CIRDocument(aApp);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ IRLOG_DEBUG( "CIRDocument::NewL - Exiting" );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::ConstructL().
+// ----------------------------------------------------------------------------
+//
+void CIRDocument::ConstructL()
+ {
+ IRLOG_DEBUG( "CIRDocument::ConstructL - Entering" );
+ iMemCheckTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+ iMemCheckTimer->Start(0, KIRMemCheckTimerInterval,
+ TCallBack( CIRDocument::MemCheckTimerCallback, this ) );
+ IRLOG_DEBUG( "CIRDocument::ConstructL - Exiting" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIRDocument::CIRDocument(CEikApplication& aApp).
+// ----------------------------------------------------------------------------
+//
+CIRDocument::CIRDocument(CEikApplication& aApp) : CAknDocument(aApp)
+ {
+ IRLOG_DEBUG( "CIRDocument::CIRDocument" );
+ }
+
+CIRDocument::~CIRDocument()
+ {
+ IRLOG_DEBUG( "CIRDocument::~CIRDocument - Entering" );
+ delete iMemCheckTimer;
+ IRLOG_DEBUG( "CIRDocument::~CIRDocument - Exiting" );
+ }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::CreateAppUiL().
+// Create the application user interface, and return a pointer to it,the
+// framework takes ownership of this object
+// ----------------------------------------------------------------------------
+//
+CEikAppUi* CIRDocument::CreateAppUiL()
+ {
+ IRLOG_DEBUG( "CIRDocument::CreateAppUiL - Entering" );
+ iAppUi = new (ELeave) CIRUi;
+ IRLOG_DEBUG( "CIRDocument::CreateAppUiL - Exiting" );
+ return iAppUi;
+ }
+
+TInt CIRDocument::MemCheckTimerCallback(TAny* /*aSelf*/)
+ {
+ IRLOG_DEBUG("CIRDocument::MemCheckTimerCallback(TAny*) - Entering");
+ TInt val(0);
+ TInt err = HAL::Get(HALData::EMemoryRAMFree, val);
+ if ( err || (val < KIRMinimumRAMNeeded) )
+ {
+ TRAP_IGNORE(
+ HBufC* errorText = StringLoader::LoadLC( R_IRAPP_MEMLO_RAM_OUT_OF_MEM );
+ CAknGlobalNote* note = CAknGlobalNote::NewLC();
+ note->ShowNoteL( EAknGlobalErrorNote, *errorText );
+ CleanupStack::PopAndDestroy( note );
+ CleanupStack::PopAndDestroy( errorText ) )
+ User::Exit( KErrNoMemory );
+ }
+ IRLOG_DEBUG("CIRDocument::MemCheckTimerCallback(TAny*) - Exiting");
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::OpenFileL( TBool aDoOpen, const TDesC& aFilename, RFs& aFs )
+// ----------------------------------------------------------------------------
+//
+CFileStore* CIRDocument::OpenFileL( TBool /*aDoOpen*/, const TDesC& aFilename, RFs& /*aFs*/ )
+ {
+ IRLOG_DEBUG("CIRDocument::OpenFileL(TBool, const TDesC&, RFs&)");
+ _LIT(KPlsExtension, ".pls");
+
+ CIRUi *appui = static_cast<CIRUi *> (iAppUi);
+
+ TParse parse;
+ parse.Set(aFilename,NULL,NULL);
+ TPtrC ext=parse.Ext(); // extract the extension from the filename
+ CEikonEnv* env = CEikonEnv::Static();
+ RFs& fs = env->FsSession();
+ RFile plsFile;
+ TInt status=plsFile.Open(fs, aFilename, EFileShareReadersOnly);
+ if(status)
+ {
+ OpenFileL( ETrue, aFilename, fs );
+ return NULL;
+ }
+ CleanupClosePushL(plsFile);
+ CFileStore* fileStore;
+ fileStore = NULL; //So the other OpenFileL version is not called
+
+ if (ext.CompareF(KPlsExtension)==0)
+ {
+ appui->ParsePlsDataL(fileStore,plsFile);
+ }
+ CleanupStack::PopAndDestroy( &plsFile );
+ //Deleting the local copy of the pls file
+ fs.Delete( KIRPlsFile );
+ return NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// CIRDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile)
+// ----------------------------------------------------------------------------
+//
+
+void CIRDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile)
+ {
+ IRLOG_DEBUG("CIRDocument::OpenFileL(CFileStore*&, RFile&) - Entering");
+ CIRUi *appui = static_cast<CIRUi *> (iAppUi);
+ aFileStore = NULL; //So the other OpenFileL version is not called
+
+ TBuf16<KBufMaxSize> aName;
+ aFile.FullName(aName);
+
+ CEikonEnv* env = CEikonEnv::Static();
+ TApaTaskList taskList( env->WsSession() );
+ // Find handler application by its UID
+ RWsSession& ws = env->WsSession();
+ const TInt myWgId = env->RootWin().Identifier();
+ TInt wgId = 0;
+ TUid uid(KUidActiveInternetRadioApp);
+ // Look for another instance of this app
+ while (wgId >= 0)
+ {
+ if (wgId && wgId != myWgId)
+ {
+ TApaTask FirstInstance(ws);
+ TApaTask SecondInstance(ws);
+ FirstInstance.SetWgId(wgId);
+ SecondInstance.SetWgId(myWgId);
+ SecondInstance.EndTask();
+
+ //To copy the contents of .PLS file into local PLS file
+
+ TInt fileSize;
+ User::LeaveIfError( aFile.Size( fileSize ) );
+ HBufC8* plsData = HBufC8::NewLC( fileSize );
+ TPtr8 pData8( plsData->Des() );
+ User::LeaveIfError( aFile.Read( pData8 ) );
+ RFile plsFile;
+ RFs& fs = env->FsSession();
+ TInt ret=plsFile.Open(fs, KIRPlsFile, EFileShareReadersOrWriters);
+ if(ret==KErrNotFound)
+ {
+ TInt status=plsFile.Create(fs, KIRPlsFile, EFileShareReadersOrWriters);
+ }
+ plsFile.Write(pData8);
+ TBuf16<KBufMaxSize> plsName;
+ plsFile.FullName(plsName);
+
+ CleanupStack::PopAndDestroy( plsData );
+
+ User::LeaveIfError( FirstInstance.SwitchOpenFile( plsName ) );
+ return;
+ }
+ CApaWindowGroupName::FindByAppUid(uid, ws, wgId);
+ }
+
+ _LIT(KPlsExtension, ".pls");
+ TParse parse;
+ parse.Set(aName,NULL,NULL);
+ TPtrC ext=parse.Ext(); // extract the extension from the filename
+ if (ext.CompareF(KPlsExtension)==0)
+ {
+ appui->ParsePlsDataL(aFileStore,aFile);
+ }
+ IRLOG_DEBUG("CIRDocument::OpenFileL - Exiting.");
+ }
+
+// ---------------------------------------------------------------------------
+// From CEikDocument; Hide the application from the tasklist
+// ---------------------------------------------------------------------------
+//
+void CIRDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+ {
+ IRLOG_INFO("CIRDocument::UpdateTaskNameL - Hiding InternetRadio from grid - Entering");
+ CAknDocument::UpdateTaskNameL( aWgName );
+#ifndef __DISABLE_RADIO_LAUNCHER
+
+ aWgName->SetHidden( EFalse );
+ IRLOG_DEBUG("CIRDocument::UpdateTaskNameL - Exiting.");
+#endif
+ }