upnpsharing/applicationengine/src/upnpfilesharingengine.cpp
changeset 0 7f85d04be362
--- /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 <upnpcontainer.h>
+#include <f32file.h>
+#include <upnpstring.h>
+#include <s32file.h>
+
+#include <upnpmediaserverclient.h>
+#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<TInt>& 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<TInt>& aMarkedItems )
+    {
+    __LOG("[UPNP_ENGINE]\t CUPnPFileSharingEngine::SetSelectionIndexesL\
+ begin");
+
+    switch ( aType )
+        {
+    case EImageAndVideo:
+        {
+        delete iImageSelections;
+        iImageSelections = NULL;
+        iImageSelections = new (ELeave) CArrayFixFlat<TInt>
+            (aMarkedItems.Count());
+        CopyTintArrayL( aMarkedItems, *iImageSelections );
+        }
+        break;
+    case EPlaylist:
+        {
+        delete iMusicSelections;
+        iMusicSelections = NULL;
+        iMusicSelections = new (ELeave) CArrayFixFlat<TInt>
+            (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<TInt>& aSrc,
+    CArrayFix<TInt>& aDst ) const
+    {
+    for ( TInt i(0); i<aSrc.Count();i++ )
+        {
+        aDst.AppendL(aSrc.At(i));
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPFileSharingEngine::CopyCdescArray
+// ( other items are commented in header )
+// --------------------------------------------------------------------------
+//
+void CUPnPFileSharingEngine::CopyCdescArrayL( 
+    const CDesCArray& aSrc,
+    CDesCArray& aDst ) const
+    {
+    for ( TInt i(0); i<aSrc.Count();i++ )
+        {
+        aDst.AppendL( aSrc[ i ] );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPFileSharingEngine::SetShareFileComplete
+// ( other items are commented in header )
+// --------------------------------------------------------------------------
+//
+void CUPnPFileSharingEngine::SetShareFileComplete( 
+    TBool aShareState )
+    { 
+    iShareFileState = aShareState; 
+    }
+
+// End of file