homesync/contentmanager/mediaservant/src/msmainview.cpp
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/mediaservant/src/msmainview.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,529 @@
+/*
+* Copyright (c) 2008 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:  CMSMainView class implementation
+*
+*/
+
+
+
+#include <mediaservant.rsg>
+#include <StringLoader.h>
+#include <hlplch.h>
+#include <driveinfo.h>
+
+#include "msgspluginuids.h"
+#include "msstorelistcontroller.h"
+#include "cmsettingsfactory.h"
+#include "cmsettings.h"
+#include "cmdriveinfo.h"
+#include "msmaincontainer.h"
+#include "mediaservant.hrh"
+#include "msgsinterface.h"
+#include "msengine.h"
+#include "msconstants.h"
+#include "msmainview.h"
+#include "msappui.h"
+#include "msdebug.h"
+#include "cmsappwizard.h"
+
+
+// --------------------------------------------------------------------------
+// CMSMainView::CMSMainView()
+// --------------------------------------------------------------------------
+//
+CMSMainView::CMSMainView(CMSAppUi& aAppUi )
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::CMSMainView"));
+
+    iAppUi = &aAppUi;
+    iCheckMMC = ETrue;
+
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CMSMainView::ConstructL()
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::ConstructL"));
+
+    BaseConstructL( R_MS_MAIN_VIEW );
+
+    TInt error( KErrNone );
+    TBool runWizard( EFalse );
+
+    // Check if wizard has been executed:
+    runWizard = iAppUi->MSEngine()->GetAppWizardState( error );
+
+    TRACE( Print(_L("[MediaServant]\t CMSMainView::ConstructL \
+                    wizard state error = %d"), error ));
+
+    if ( error == KErrNone && !runWizard )
+        {
+        // prevent user events handling
+        iWizardInitialization = ETrue;
+        iIdle = CIdle::NewL( CActive::EPriorityIdle );
+        TCallBack cb( InitializeWizardL, this );
+        iIdle->Start( cb );
+        }
+    else
+        {
+        iIdle = CIdle::NewL( CActive::EPriorityIdle );
+        TCallBack cb( InitializeMemoryCardL, this );
+        iIdle->Start( cb );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::~CMSMainView()
+// --------------------------------------------------------------------------
+//
+CMSMainView::~CMSMainView()
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::~CMSMainView"));
+
+    delete iIdle;
+
+    DoDeactivate();
+    }
+// --------------------------------------------------------------------------
+// TUid CMSMainView::Id()
+// --------------------------------------------------------------------------
+//
+TUid CMSMainView::Id() const
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::Id"));
+
+    return KMSMainViewId;
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::FocusIndex()
+// --------------------------------------------------------------------------
+//
+TInt CMSMainView::FocusIndex() const
+    {
+    return iContainer->SelectedItemIndex();
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::HandleCommandL(TInt aCommand)
+// --------------------------------------------------------------------------
+//
+void CMSMainView::HandleCommandL( TInt aCommand )
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::HandleCommandL"));
+
+    if ( !iWizardInitialization )
+        {
+        switch ( aCommand )
+            {
+            case EMSCmdSelect:
+            // fall through
+            case EAknCmdOpen:
+            // fall through:
+            case EAknSoftkeyOpen:
+            // fall through:
+            case EAknSoftkeySelect:
+                {
+                iContainer->OpenSelectedListboxItemL();
+                break;
+                }
+
+            case EMSCmdStartHarvest:
+                {
+                iAppUi->MSEngine()->ScanMediaServersL();
+                iContainer->ShowRefreshIndicationL();
+                break;
+                }
+
+            case EMSCmdStopHarvest:
+                {
+                // clear navi pane
+                ClearCurrentNaviPaneText();
+
+                iAppUi->MSEngine()->StopOperation();
+                iContainer->StopRefreshL();
+                break;
+                }
+
+            case EMSCmdSettings:
+                {
+                if ( iAppUi->SettingsPlugin() )
+                    {
+                    // activate plugin
+                    iAppUi->ActivateLocalViewL(
+                                iAppUi->SettingsPlugin()->Id() );
+                    }
+                break;
+                }
+            case EMSCmdRunWizard:
+                {
+                LOG(_L("[MediaServant]\t CMSMainView::\
+                        HandleCommandL WIZARD"));
+                TBool wizRetVal(KErrNone);
+                CMSAppWizard* wiz =
+                    CMSAppWizard::NewL( *iAppUi->MSEngine() );
+                CleanupStack::PushL( wiz );
+                wizRetVal = wiz->StartL();
+
+                iAppUi->RefreshListsL();
+                CleanupStack::PopAndDestroy( wiz );
+
+                if( wizRetVal != KErrNone )
+                    {
+                    // Start harvest:
+                    LOG(_L("[MediaServant]\t CMSMainView::\
+                            HandleCommandL WIZARD, Start Harvest"));
+                    iContainer->SetManualWizardInfo( ETrue );
+                    iContainer->StartMetadataDeleteL();
+                    iContainer->ShowRefreshIndicationL();
+                    }
+
+                break;
+                }
+
+            case EAknCmdHelp :
+                {
+
+                TRAP_IGNORE( HlpLauncher::LaunchHelpApplicationL(
+                            iEikonEnv->WsSession(),
+                iEikonEnv->EikAppUi()->AppHelpContextL() ));
+                break;
+                }
+
+            default:
+                {
+                AppUi()->HandleCommandL( aCommand );
+                break;
+                }
+            }
+        }
+    }
+
+
+
+// --------------------------------------------------------------------------
+// CMSMainView::DoActivateL(...)
+// --------------------------------------------------------------------------
+//
+void CMSMainView::DoActivateL(
+   const TVwsViewId& aPrevViewId, TUid /*aCustomMessageId*/,
+   const TDesC8& /*aCustomMessage*/)
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::DoActivateL"));
+    if( KMSGSImplementationUid == aPrevViewId.iViewUid )
+        {
+        // Refresh store and fill rules array from server.
+        iAppUi->RefreshListsL();
+
+        CCmStoreRuleContainer* container =
+                    ( iAppUi->StoreListController() )->StoreListContainer();
+        // update the Table transferInfo
+        iAppUi->MSEngine()->SetStoreRulesL( container );
+        }
+
+    // Set title pane text to default
+    SetTitlePaneTextL( KMSDefaultTitleId );
+
+    if ( !iContainer )
+        {
+        iContainer = new (ELeave) CMSMainContainer( *iAppUi,
+                                                    *this );
+        iContainer->ConstructL( ClientRect() );
+        iContainer->SetMopParent( this );
+        AppUi()->AddToViewStackL( *this, iContainer );
+        }
+   }
+
+// --------------------------------------------------------------------------
+// CMSMainView::DoDeactivate()
+// --------------------------------------------------------------------------
+//
+void CMSMainView::DoDeactivate()
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::DoDeactivate"));
+
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack( iContainer );
+        }
+
+    delete iContainer; // Deletes the container class object.
+    iContainer = NULL;
+
+    ClearCurrentNaviPaneText();
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::DynInitMenuPaneL
+// --------------------------------------------------------------------------
+//
+void CMSMainView::DynInitMenuPaneL( TInt aResourceId,
+                                         CEikMenuPane* aMenuPane)
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::DynInitMenuPaneL"));
+
+    TCmServerState state;
+
+    if (aResourceId == R_MAIN_VIEW_MENU )
+        {
+        iAppUi->MSEngine()->ServerState( state );
+
+        switch ( state )
+            {
+            case ECmServerStateHarvesting:
+                {
+                aMenuPane->SetItemDimmed(EMSCmdStartHarvest, ETrue);
+                aMenuPane->SetItemDimmed(EMSCmdSettings, ETrue);
+                aMenuPane->SetItemDimmed(EMSCmdRunWizard, ETrue);
+                break;
+                }
+            case ECmServerStateDeleting:
+            // fall through
+            case ECmServerStateFilling:
+            // fall through
+            case ECmServerStateStoring:
+            // fall through
+            case ECmServicePreProcessingStore:
+            // fall through
+            case ECmServicePreProcessingFill:
+                {
+                aMenuPane->SetItemDimmed(EMSCmdStartHarvest, ETrue);
+                aMenuPane->SetItemDimmed(EMSCmdStopHarvest, ETrue);
+                aMenuPane->SetItemDimmed(EMSCmdSettings, ETrue);
+                aMenuPane->SetItemDimmed(EMSCmdRunWizard, ETrue);
+                break;
+                }
+            default:
+                {
+                aMenuPane->SetItemDimmed(EMSCmdStopHarvest, ETrue);
+                }
+            }
+
+        // sync item highlighted
+        if ( iContainer->SelectedItemIndex() == 0 )
+            {
+            aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed( EMSCmdSelect, ETrue );
+            }
+
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::SetCbaL()
+// Changes softkeys
+// --------------------------------------------------------------------------
+//
+void CMSMainView::SetCbaL( TBool aHighlightedIndex )
+    {
+    CEikButtonGroupContainer* cba = Cba();
+
+    if ( aHighlightedIndex == EStoreAndFill )
+        {
+        cba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK__SELECT );
+        }
+    else
+        {
+        cba->SetCommandSetL( R_MS_SOFTKEYS_OPTIONS_BACK__OPEN );
+        }
+    cba->DrawDeferred();
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::CheckMemoryCardL
+// Checks if memory card has been changed
+// --------------------------------------------------------------------------
+//
+void CMSMainView::CheckMemoryCardL()
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::CheckMemoryCardL"));
+
+    RFs& fileServer = iAppUi->FsSession();
+    RPointerArray<CCmDriveInfo> storedDrives;
+    CleanupClosePushL( storedDrives );
+    RPointerArray<CCmDriveInfo> driveArray;
+    CleanupClosePushL( driveArray );
+
+    MCmSettings* settings = CCmSettingsFactory::NewCmSettingsEngineLC();
+
+    // read stored info of stored drives
+    iAppUi->MSEngine()->GetDrivesL( storedDrives );
+
+    // get system drive info
+    settings->DriveListL( fileServer, driveArray );
+
+    TInt count = driveArray.Count();
+
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TRACE(
+            Print(_L("[MediaServant]\t CMSMainView::drivearray type = %d"), \
+            driveArray[i]->DriveType()));
+
+        // check if mmc card is found
+        if ( driveArray[i]->DriveType() == DriveInfo::EDriveRemovable )
+            {
+            // check if memory card is used before
+            TIdentityRelation<CCmDriveInfo> relation(CMSAppUi::CompareIds );
+            TInt index = storedDrives.Find( driveArray[i], relation );
+            if ( index == KErrNotFound )
+                {
+                ShowAndHandleMMCQueryL( *&storedDrives,
+                                        *&driveArray,
+                                        i );
+
+                iAppUi->MSEngine()->ExecuteStorePreProcessingL();
+
+                i = count; // break loop
+                }
+            }
+        }
+
+    settings->Close();
+    CleanupStack::Pop(); // settings
+    driveArray.ResetAndDestroy();
+    storedDrives.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 2, &storedDrives );
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::ShowAndHandleMMCQueryL
+// Shows mmc query and handles selection
+// --------------------------------------------------------------------------
+//
+void CMSMainView::ShowAndHandleMMCQueryL(
+                                RPointerArray<CCmDriveInfo>& aStoredArray,
+                                RPointerArray<CCmDriveInfo>& aDriveArray,
+                                TInt index )
+    {
+    LOG(_L("[MediaServant]\t CMSMainView::ShowAndHandleMMCQueryL"));
+
+    // Show delete files query
+    CAknQueryDialog* query= CAknQueryDialog::NewL(
+                                     CAknQueryDialog::ENoTone );
+
+    if ( query->ExecuteLD( R_MSERV_MMC_QUERY ) )
+        {
+        TInt driveCount = aStoredArray.Count();
+        // search and delete existing mmc card info
+        for ( TInt i = driveCount - 1 ; i >= 0 ; i-- )
+            {
+          TRACE( Print( _L("[MediaServant]\t CMSAppUi::storedarray \
+                  type = %d"), aStoredArray[i]->DriveType() ) );
+            if ( aStoredArray[i]->DriveType() == DriveInfo::EDriveRemovable )
+                {
+                delete aStoredArray[i];
+                aStoredArray[i] = NULL;
+                aStoredArray.Remove(i);
+                LOG(_L("[MediaServant]\t CMSMainView::CheckMemoryCardL \
+                old mmc info removed"));
+                }
+            }
+        TInt64 quota =
+               ( aDriveArray[index]->DriveSize() * KMMCDefaultQuota ) / 100;
+        aDriveArray[index]->SetDriveQuota( quota );
+        aDriveArray[index]->SetStatus( ETrue );
+        // then append new one
+        aStoredArray.Append( aDriveArray[index] );
+        // ownership transferred->remove pointer from drivearray
+        aDriveArray.Remove(index);
+
+        // store drives
+        iAppUi->MSEngine()->SetDrivesL( aStoredArray );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::InitializeWizardL
+// Starts the wizard when run first time
+// --------------------------------------------------------------------------
+//
+TBool CMSMainView::InitializeWizardL( TAny* aPtr )
+    {
+    CMSMainView* main = static_cast< CMSMainView* >( aPtr );
+
+    return main->DoInitializeWizardL();
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::InitializeMemoryCardL
+// Starts the new memroy card when new memory card inserted
+// --------------------------------------------------------------------------
+//
+TInt CMSMainView::InitializeMemoryCardL( TAny* aPtr )
+    {
+    CMSMainView* main = static_cast< CMSMainView* >( aPtr );
+
+    main->DoInitializeMemoryCardL();
+
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::DoInitializeWizardL
+// Do starts the wizard when run first time
+// --------------------------------------------------------------------------
+//
+TBool CMSMainView::DoInitializeWizardL()
+    {
+    LOG(_L("[MediaServant]\t CMSAppUi::DoInitializeWizardL"));
+        TInt wizRetVal(KErrNone);
+
+    TRAPD( error, wizRetVal = iAppUi->RunWizardL() );
+
+    if ( error )
+        {
+        TRACE(Print(_L("[MediaServant]\t DoInitializeWizardL::\
+        wizard error value: %d"), error));
+        }
+
+    if( wizRetVal != KErrNone)
+        {
+        iContainer->SetManualWizardInfo( ETrue );
+        iAppUi->RefreshListsL();
+        iContainer->StartMetadataDeleteL();
+        iContainer->ShowRefreshIndicationL();
+        }
+    else
+        {
+        TRACE(Print(_L("[MediaServant]\t DoInitializeWizardL::\
+        wizard return value: %d"), wizRetVal));
+        // wizard cancelled. Check memory card
+        iContainer->MemoryCardChangedL(EMemoryCardInsert);
+        }
+
+    // let view to respond user events again
+    iWizardInitialization = EFalse;
+
+    // must return EFalse because this is not called anymore
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CMSMainView::DoInitializeMemoryCardL
+// Do Starts the new memroy card when new memory card dialog inserted
+// --------------------------------------------------------------------------
+//
+void CMSMainView::DoInitializeMemoryCardL()
+    {
+    CheckMemoryCardL();
+    }
+
+// End of File