diff -r 000000000000 -r 7f85d04be362 upnpsharing/applicationengine/src/upnpfilesharingengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpsharing/applicationengine/src/upnpfilesharingengine.cpp Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,522 @@ +/* +* 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: CUPnPFileSharingEngine class implementation + * +*/ + + + + + + +// Include Files +#include +#include +#include +#include + +#include +#include "upnpfilesharingengine.h" +#include "upnpfilesharingengineao.h" +#include "upnpcontentrequestao.h" +#include "upnpcontentshareao.h" +#include "upnpcontentserverclient.h" +#include "upnpsettingsengine.h" +#include "upnpprogresswatcher.h" +#include "upnpcommonutils.h" +#include "upnpdownloaditemresolver.h" +#include "upnpcontentshareao.h" +#include "upnpconnectionmonitor.h" +#include "upnpiconconfigurator.h" + +_LIT( KComponentLogfile, "applicationengine.txt"); +#include "upnplog.h" + +// ============================ MEMBER FUNCTIONS ============================= + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::CUPnPFileSharingEngine +// C++ default constructor can NOT contain any code, that +// might leave. +// -------------------------------------------------------------------------- +// +CUPnPFileSharingEngine::CUPnPFileSharingEngine() + { + iShareFileState = EFalse; + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::ConstructL +// Symbian 2nd phase constructor can leave. +// -------------------------------------------------------------------------- +// +void CUPnPFileSharingEngine::ConstructL() + { + iContentServer.OpenL(); + iAO = new (ELeave) CUPnPFileSharingEngineAO( *this, iContentServer ); + iContentSharer = CUpnpContentShareAO::NewL( *this, iContentServer ); + UPnPCommonUtils::DeleteTempFilesL(); + CUPnPDownloadItemResolver::DeleteTempDownloadFilesL(); + iContentRequestor = new (ELeave) CUpnpContentRequestAO( + *this, iContentServer ); + + // create connection monitor, so we can receive wlan lost notifications + // immideatly and observe connection if application was restarted + CUPnPSettingsEngine* settings = CUPnPSettingsEngine::NewLC(); + TInt iap( 0 ); + User::LeaveIfError( settings->GetAccessPoint( iap ) ); + CleanupStack::PopAndDestroy( settings ); + iConnMon = CUPnPConnectionMonitor::NewL( *this, iap ); + + //set flag that icons hasn't been set + CUPnPIconConfigurator::MarkIconsAddedL( EFalse ); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::NewL +// Two-phased constructor. +// -------------------------------------------------------------------------- +// +EXPORT_C CUPnPFileSharingEngine* CUPnPFileSharingEngine::NewL() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::NewL begin"); + CUPnPFileSharingEngine* self = CUPnPFileSharingEngine::NewLC(); + CleanupStack::Pop( self ); + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::NewL end"); + return self; + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::NewLC +// Two-phased constructor. +// -------------------------------------------------------------------------- +// +EXPORT_C CUPnPFileSharingEngine* CUPnPFileSharingEngine::NewLC() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::NewLC begin"); + CUPnPFileSharingEngine* self = new (ELeave) CUPnPFileSharingEngine; + CleanupStack::PushL( self ); + self->ConstructL(); + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::NewLC end"); + return self; + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::~CUPnPFileSharingEngine +// Destructor +// -------------------------------------------------------------------------- +// +EXPORT_C CUPnPFileSharingEngine::~CUPnPFileSharingEngine() + { + __LOG("[UPNP_ENGINE]\tCUPnPFileSharingEngine::~CUPnPFileSharingEngine\ + begin"); + + delete iConnMon; + delete iAO; + delete iContentSharer; + + delete iImageSelections; + delete iMusicSelections; + delete iContentRequestor; + + + iContentServer.Close(); + delete iProgress; + + __LOG("[UPNP_ENGINE]\tCUPnPFileSharingEngine::~CUPnPFileSharingEngine\ + end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::SetObserver +// Set observer +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::SetObserver( + MUPnPFileSharingEngineObserver* aObserver ) + { + iObserver = aObserver; + if ( !iObserver ) + { + if ( iProgress ) + { + iProgress->Stop(); + } + } + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::Observer +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +EXPORT_C MUPnPFileSharingEngineObserver* CUPnPFileSharingEngine::Observer() + { + return iObserver; + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::SetSharingState +// Starts/Stops file sharing using UPnP Media server API +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::SetSharingStateL( TBool aState ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SetSharingState \ +begin"); + if ( iProgress && iShareFileState ) + { + iProgress->Stop(); + } + iAO->SetSharingStateL( aState ); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SetSharingState \ +end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::SharingState +// Gets file sharing status. +// -------------------------------------------------------------------------- +// +EXPORT_C TBool CUPnPFileSharingEngine::SharingStateL() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SharingState \ +begin"); + + TBool status( EFalse ); + if ( iAO ) + { + status = iAO->SharingStateL(); + } + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SharingState \ +end"); + return status; + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::ShareMediaL +// Starts sharing process +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::ShareMediaL( + THomeConnectMediaType aType ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::ShareMediaL begin"); + + switch ( aType ) + { + case EImageAndVideo : + { + iContentSharer->ChangeSharedContentL( + UpnpContentServer::TUpnpMediaType( aType ), + *iImageSelections ); + } + break; + case EPlaylist: + { + iContentSharer->ChangeSharedContentL( + UpnpContentServer::TUpnpMediaType( aType ), + *iMusicSelections ); + } + break; + default : + User::Leave( KErrArgument ); + break; + } + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::ShareMediaL end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::RefreshSharedMediaL +// Updates shared objects +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::RefreshSharedMediaL( + THomeConnectMediaType aType ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RefreshSharedMediaL\ + begin"); + + // clear UI cache + delete iImageSelections; + iImageSelections = NULL; + delete iMusicSelections; + iMusicSelections = NULL; + + + iContentSharer->RefreshSharedContentL( + UpnpContentServer::TUpnpMediaType( aType ) ); + RequestSharingProgressL(); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RefreshSharedMediaL\ + end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::RequestSelectionIndexesL +// Gets the selected albums/playlist indexes +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::RequestSelectionIndexesL( + THomeConnectMediaType aType ) const + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RequestSelectionIndexesL\ + begin"); + + iContentRequestor->RequestSelectionIndexesL( + UpnpContentServer::TUpnpMediaType( aType ) ); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RequestSelectionIndexesL\ + end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::GetSelectionIndexes +// Gets the selected albums/playlist indexes +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::GetSelectionIndexesL( + CArrayFix& aMarkedItems ) const + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::GetSelectionIndexesL\ + begin"); + + iContentRequestor->GetSelectionIndexesL( aMarkedItems ); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::GetSelectionIndexesL\ + end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::SetSelectionIndexes +// Sets the user selections +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::SetSelectionIndexesL( + THomeConnectMediaType aType, + const CArrayFix& aMarkedItems ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SetSelectionIndexesL\ + begin"); + + switch ( aType ) + { + case EImageAndVideo: + { + delete iImageSelections; + iImageSelections = NULL; + iImageSelections = new (ELeave) CArrayFixFlat + (aMarkedItems.Count()); + CopyTintArrayL( aMarkedItems, *iImageSelections ); + } + break; + case EPlaylist: + { + delete iMusicSelections; + iMusicSelections = NULL; + iMusicSelections = new (ELeave) CArrayFixFlat + (aMarkedItems.Count()); + CopyTintArrayL( aMarkedItems, *iMusicSelections ); + + } + break; + default: + User::Leave( KErrArgument ); + break; + } + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SetSelectionIndexesL\ + end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::RequestSelectionContentL +// Requests the album /playlist names +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::RequestSelectionContentL( + THomeConnectMediaType aType ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RequestSelectionContentL\ + begin"); + + iContentRequestor->RequestSelectionContentL( + UpnpContentServer::TUpnpMediaType( aType ) ); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::RequestSelectionContentL\ + begin"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::GetSelectionContentL +// Get all albums/playlists identifiers from Media gallery +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::GetSelectionContentL( + CDesCArray& aArray ) const + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine:: \ +GetSelectionContentL begin"); + + iContentRequestor->GetSelectionContentL( aArray ); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine:: \ +GetSelectionContentL end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::RequestSharingProgressL +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::RequestSharingProgressL() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +RequestSharingProgressL begin"); + if( !iProgress ) + { + iProgress = CUpnpProgressWatcher::NewL( *this ); + } + iProgress->StartL(); + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +RequestSharingProgressL end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::StartUploadListenerL +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::StartUploadListenerL() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +StartUploadListenerL begin"); + iContentServer.StartUploadListenerL(); + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +StartUploadListenerL end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::StopUploadListenerL +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +EXPORT_C void CUPnPFileSharingEngine::StopUploadListenerL() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +StopUploadListenerL begin"); + iContentServer.StopUploadListenerL(); + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +StopUploadListenerL end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::SetConMonState +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +void CUPnPFileSharingEngine::SetConMonStateL( + TBool aState, TRequestStatus& aStatus ) + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +SetConMonState begin"); + + delete iConnMon; + iConnMon = NULL; + + if ( aState ) + { + // (Re)Start + CUPnPSettingsEngine* settings = CUPnPSettingsEngine::NewLC(); + TInt iap( KErrNotFound ); + User::LeaveIfError( settings->GetAccessPoint( iap ) ); + iConnMon = CUPnPConnectionMonitor::NewL( *this, iap ); + CleanupStack::PopAndDestroy( settings ); + iContentServer.StartConnectionMonitorL( iap, aStatus ); + } + else + { + iContentServer.StopConnectionMonitorL( aStatus ); + } + + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +SetConMonState end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::ConnectionLost +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +void CUPnPFileSharingEngine::ConnectionLost() + { + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +ConnectionLost begin"); + if( iAO->SharingStateL() ) + { + iAO->ConnectionLost(); + if ( iObserver ) + { + iObserver->HandleSharingConnectionLost( *this ); + } + } + __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::\ +ConnectionLost end"); + } + +// -------------------------------------------------------------------------- +// CUPnPFileSharingEngine::CopyTintArrayL +// ( other items are commented in header ) +// -------------------------------------------------------------------------- +// +void CUPnPFileSharingEngine::CopyTintArrayL( const CArrayFix& aSrc, + CArrayFix& aDst ) const + { + for ( TInt i(0); i