--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/mediaservant/src/msmaincontainer.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,1453 @@
+/*
+* 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: CMSMainContainer class implementation
+*
+*/
+
+
+
+#include <AknIconArray.h>
+#include <mediaservant.rsg>
+#include <mediaservant.mbg>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+
+#include "mserv.hlp.hrh"
+#include "cmfillrule.h"
+#include "msappui.h"
+#include "msmainview.h"
+#include "mediaservantuid.h"
+#include "msmaincontainer.h"
+#include "msengine.h"
+#include "msconstants.h"
+#include "msdebug.h"
+
+// Constants
+const TInt KTimerInterval = 60000000; // 1 min
+const TInt KNaviTimerInterval = 2000000; // 2 sec
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::CMSMainContainer()
+// --------------------------------------------------------------------------
+//
+CMSMainContainer::CMSMainContainer( CMSAppUi& aAppUi,
+ CMSMainView& aView )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::CMSMainContainer"));
+
+ iAppUi = &aAppUi;
+ iView = &aView;
+ iAppWizardRun = EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::~CMSMainContainer()
+// --------------------------------------------------------------------------
+//
+CMSMainContainer::~CMSMainContainer()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::~CMSMainContainer"));
+
+ if( iPeriodic )
+ {
+ iPeriodic->Cancel();
+ }
+ delete iPeriodic;
+
+ if( iNaviTimer )
+ {
+ iNaviTimer->Cancel();
+ }
+ delete iNaviTimer;
+
+ if( iUpdateList )
+ {
+ iUpdateList->Cancel();
+ }
+ delete iUpdateList;
+
+ if( iMSPropertyWatcher )
+ {
+ iMSPropertyWatcher->Stop();
+ }
+ delete iMSPropertyWatcher;
+
+ if( iMemoryCardMonitor )
+ {
+ iMemoryCardMonitor->Cancel();
+ }
+ delete iMemoryCardMonitor;
+
+ delete iListBox; // Deletes listbox object.
+ }
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::ConstructL( TRect aRect )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ConstructL"));
+
+ // Create property watcher for progress info
+ iMSPropertyWatcher = CMSPropertyWatcher::NewL();
+ // view will observe changes in property
+ iMSPropertyWatcher->SetObserver(this);
+
+ //create a mmc monitor to capture mmc event
+ RFs& systemFs = CEikonEnv::Static()->FsSession();
+ iMemoryCardMonitor = CMSMemoryCardMonitor::NewL( this, systemFs );
+ iMemoryCardMonitor->StartMonitor();
+
+ CreateWindowL();
+
+ iListBox = new (ELeave) CAknDoubleLargeStyleListBox;
+
+ SetListBoxFromResourceL(iListBox, R_MAIN_VIEW_LISTBOX);
+
+ // Create icons
+ CAknIconArray* icons = new (ELeave) CAknIconArray( EIconCount );
+ CleanupStack::PushL( icons );
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TFileName iconsPath( AknIconUtils::AvkonIconFileName() );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_sync,
+ EMbmMediaservantQgn_mserv_sync_mask );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_sync_stop,
+ EMbmMediaservantQgn_mserv_sync_stop_mask );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_to_home,
+ EMbmMediaservantQgn_mserv_to_home_mask );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_to_home_inactive,
+ EMbmMediaservantQgn_mserv_to_home_inactive_mask );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_from_home,
+ EMbmMediaservantQgn_mserv_from_home_mask );
+
+ AppendIconToArrayL( icons, skin,
+ KMSMifFileName,
+ KAknsIIDDefault,
+ EMbmMediaservantQgn_mserv_from_home_inactive,
+ EMbmMediaservantQgn_mserv_from_home_inactive_mask );
+
+ iListBox->ItemDrawer()->FormattedCellData()->SetIconArray(icons);
+
+ CleanupStack::Pop(icons);
+
+ // Container is listbox observer
+ iListBox->SetListBoxObserver( this );
+ // Set engine observer
+ iAppUi->MSEngine()->SetObserver( this );
+
+ SetRect(aRect);
+
+ // Check if automatic sync/harvest is ongoing
+ TCmServerState state;
+ iAppUi->MSEngine()->ServerState( state );
+ if ( state == ECmServerStateStoring ||
+ state == ECmServerStateFilling ||
+ state == ECmServerStateSearchingForServers )
+ {
+ iSyncRunning = ESyncRunning;
+ }
+
+ if ( state == ECmServerStateHarvesting )
+ {
+ iRefreshRunning = ETrue;
+ }
+
+ // From home secondary item text depends list selections
+ iFillListSelected = CheckIfFillListSelected();
+
+ // Add data to listbox
+ UpdateListBoxDataL();
+
+ if ( iSyncRunning != ESyncRunning &&
+ iRefreshRunning == EFalse &&
+ state != ECmServerStateDeleting )
+ {
+ // Set last sync time to navi pane
+ SetNaviTextLastSyncL();
+ }
+
+ // Delete may be in progress so we have to inform user
+ if ( state == ECmServerStateDeleting )
+ {
+ HBufC* naviText = StringLoader::LoadLC( R_MS_PREPROCESSING_TEXT );
+ iView->SetNavigationPaneTextL( *naviText );
+ CleanupStack::PopAndDestroy( naviText );
+ }
+
+ // start listening property
+ iMSPropertyWatcher->StartL();
+
+ //Set current item
+ iListBox->SetCurrentItemIndex(
+ iAppUi->ParameterAgent()->MainViewFocusIndex() );
+
+ // Start timer for last sync time reading
+ iPeriodic = CPeriodic::NewL(CActive::EPriorityIdle);
+ iPeriodic->Start( 0, KTimerInterval, TCallBack(TimerCallbackL,this) );
+
+ // create navi text timer - don't start
+ iNaviTimer = CPeriodic::NewL( CActive::EPriorityIdle );
+
+ iUpdateList = CIdle::NewL( CActive::EPriorityIdle );
+
+ ActivateL(); // Activates window. ( Ready to draw )
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::CountComponentControls()
+// Returns number of components.
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::CountComponentControls() const
+ {
+ return 1; // return number of controls inside this container
+ }
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ComponentControl()
+// Returns pointer to particular component.
+// --------------------------------------------------------------------------
+//
+CCoeControl* CMSMainContainer::ComponentControl( TInt aIndex ) const
+
+ {
+ CCoeControl* retval = NULL;
+ switch ( aIndex )
+ {
+ case 0:
+ {
+ retval = iListBox; // return a pointer to the listbox
+ break;
+ }
+ default:
+ {
+ retval = NULL;
+ break;
+ }
+ }
+ return retval;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::OfferKeyEventL()
+// Handles the key events.
+// --------------------------------------------------------------------------
+//
+TKeyResponse CMSMainContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::OfferKeyEventL"));
+
+ TKeyResponse response = EKeyWasNotConsumed;
+
+ if ( aType != EEventKey )
+ {
+ response = EKeyWasNotConsumed;
+ }
+
+ if ( iListBox )
+ {
+ response = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ iView->SetCbaL( iListBox->CurrentItemIndex() );
+
+ return response;
+ }
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::OpenSelectedListboxItemL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::OpenSelectedListboxItemL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::OpenSelectedListboxItemL"));
+
+ HandleListBoxEventL( NULL, EEventEnterKeyPressed );
+ }
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::HandleListBoxEventL()
+// Handles listbox event.
+// --------------------------------------------------------------------------
+void CMSMainContainer::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::HandleListBoxEventL"));
+
+ if ( ( aEventType == MEikListBoxObserver::EEventEnterKeyPressed ) ||
+ ( aEventType == MEikListBoxObserver::EEventItemClicked ) )
+ {
+ TInt selected = iListBox->CurrentItemIndex();
+
+ switch ( selected )
+ {
+ case EStoreAndFill:
+ {
+ // refresh is not active
+ if ( !iRefreshRunning )
+ {
+ if ( iSyncRunning == ESyncNotRunning )
+ {
+ StartSyncL();
+ }
+ else
+ {
+ // Cancel current asyncronous operation
+ iAppUi->MSEngine()->StopOperation();
+ iSyncRunning = ESyncNotRunning;
+ iView->ClearCurrentNaviPaneText();
+ UpdateListBoxDataL();
+ }
+ }
+ // refresh is ongoing
+ else
+ {
+ if ( iSyncRunning == ESyncWaiting )
+ {
+ iSyncRunning = ESyncNotRunning;
+ }
+ else
+ {
+ iSyncRunning = ESyncWaiting;
+ }
+ UpdateListBoxDataL();
+ }
+
+ break;
+ }
+ case EStoreToNetwork:
+ {
+ if ( !iRefreshRunning &&
+ !iSyncRunning &&
+ !iPreprocessRunning )
+ {
+ iAppUi->ChangeViewL( KMSMainViewId,
+ KMSStoreListViewId );
+ }
+ else
+ {
+ TInt noteId = ( iRefreshRunning || iPreprocessRunning ?
+ R_MS_ACCESS_ERROR_NOTE :
+ R_MS_ACCESS_ERROR_NOTE_SYNC );
+ ShowErrorNoteL( noteId );
+ }
+ break;
+ }
+ case EFillToPhone:
+ {
+ if ( iAppUi->DriveSelectedL() )
+ {
+ if ( !iRefreshRunning &&
+ !iSyncRunning &&
+ !iPreprocessRunning )
+ {
+ iAppUi->ChangeViewL( KMSMainViewId, KMSFillViewId );
+ }
+ else
+ {
+ TInt noteId = ( iRefreshRunning ||
+ iPreprocessRunning ?
+ R_MS_ACCESS_ERROR_NOTE :
+ R_MS_ACCESS_ERROR_NOTE_SYNC );
+ ShowErrorNoteL( noteId );
+ }
+ }
+ else
+ {
+ ShowErrorNoteL( R_MS_INSERT_MEMORY_CARD_TEXT );
+ }
+ break;
+ }
+ default:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::\
+ HandleListBoxEventL no item selected"));
+ }
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::UpdateListBoxDataL()
+// Updates listbox texts
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::UpdateListBoxDataL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::UpdateListBoxDataL"));
+
+ TCmServerState state;
+ iAppUi->MSEngine()->ServerState( state );
+
+ CDesCArray* itemArray = static_cast<CDesCArray*>
+ (iListBox->Model()->ItemTextArray());
+
+ if ( itemArray->Count() )
+ {
+ // delete all listbox items
+ itemArray->Reset();
+ }
+
+
+ // Get file counts and sync time
+ TInt itemsToBeStored( 0 );
+ TInt itemsToBeFilled( 0 );
+ TInt syncTime( 0 );
+ TInt syncTimeStore( 0 );
+ TInt syncTimeFill( 0 );
+
+ iAppUi->MSEngine()->GetTransferInfo( ECmServiceStore,
+ itemsToBeStored,
+ syncTimeStore );
+
+ iAppUi->MSEngine()->GetTransferInfo( ECmServiceFill,
+ itemsToBeFilled,
+ syncTimeFill );
+
+ syncTime = syncTimeStore + syncTimeFill;
+
+ // Create item strings
+ HBufC* primaryText = NULL;
+ HBufC* secondaryText = NULL;
+ TInt icon = EIconSync;
+
+ switch ( iSyncRunning )
+ {
+ default:
+ // fall trough
+ case ESyncNotRunning:
+ {
+ primaryText = StringLoader::LoadLC( R_MAIN_SYNC_NOW_TEXT );
+
+ if ( itemsToBeStored > 0 || itemsToBeFilled > 0)
+ {
+ if ( syncTime/60 > 1 ) // 1 minute
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_TIME_TEXT,
+ syncTime/60 );
+ // do number conversion
+ TPtr ptr = secondaryText->Des();
+ AknTextUtils::
+ DisplayTextLanguageSpecificNumberConversion( ptr );
+ }
+ else
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_TIME_ONE_MIN_TEXT );
+ }
+
+ }
+ break;
+ }
+ case ESyncRunning:
+ {
+ primaryText = StringLoader::LoadLC( R_MAIN_STOP_SYNC_TEXT );
+ icon = EIconSyncStop;
+ break;
+ }
+ case ESyncWaiting:
+ {
+ primaryText = StringLoader::LoadLC( R_MAIN_STOP_SYNC_TEXT );
+ secondaryText = StringLoader::LoadLC( R_MS_SYNC_WAITING_TEXT );
+ icon = EIconSyncStop;
+ break;
+ }
+ }
+
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ icon,
+ *primaryText,
+ *secondaryText );
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+
+ if ( primaryText )
+ {
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+ }
+
+
+ // From Home -item
+ primaryText = StringLoader::LoadLC( R_MAIN_FROM_HOME_TEXT );
+
+ TBool driveSelected = iAppUi->DriveSelectedL();
+
+ if ( driveSelected == EFalse )
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_MEMORY_CARD_NEEDED_TEXT );
+ }
+ else if ( !iFillListSelected )
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_LIST_NOTHING_SELECTED );
+ }
+ else if ( itemsToBeFilled <= 0 )
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_ALL_IN_SYNC_TEXT );
+ }
+
+ if ( iRefreshRunning ||
+ iPreprocessRunning ||
+ iSyncRunning == ESyncRunning ||
+ driveSelected == EFalse )
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconFromHomeInactive,
+ *primaryText,
+ *secondaryText );
+ }
+ else
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconFromHome,
+ *primaryText,
+ *secondaryText );
+ }
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+
+ // To Home -item
+ primaryText = StringLoader::LoadLC( R_MAIN_TO_HOME_TEXT );
+
+ if ( itemsToBeStored < 1 )
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_ALL_IN_SYNC_TEXT );
+ }
+ else if ( itemsToBeStored == 1 )
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_SYNC_ONE_NEW_ITEM_TEXT );
+ }
+ else // > 1
+ {
+ secondaryText = StringLoader::LoadLC( R_MS_SYNC_NEW_ITEMS_TEXT,
+ itemsToBeStored );
+ // do number conversion
+ TPtr ptr = secondaryText->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
+ }
+
+ if ( iRefreshRunning ||
+ iPreprocessRunning ||
+ iSyncRunning == ESyncRunning )
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconToHomeInactive,
+ *primaryText,
+ *secondaryText );
+ }
+ else
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconToHome,
+ *primaryText,
+ *secondaryText );
+ }
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+
+
+ iListBox->DrawNow();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ReadyL()
+// engine observer callback
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::ReadyL( TCmService aService, TInt aError )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ReadyL"));
+
+ // Clears navi pane
+ iView->ClearCurrentNaviPaneText();
+
+ if( aError == KErrNotFound )
+ {
+ ShowErrorNoteL( R_MS_ERROR_DEVICES_NOT_FOUND );
+ }
+ else if( aError == KErrGeneral )
+ {
+ ShowErrorNoteL( R_MS_ERROR_SYNC_INTERRUPTED );
+ }
+ else if( aError == KErrDiskFull )
+ {
+ ShowErrorNoteL( R_MS_ERROR_MEMORY_FULL );
+ }
+ else if ( aError && aError != KErrCancel )
+ {
+#ifdef __DEBUG
+ ShowNoteL( R_ACTIVE_ERROR_NOTE_TEXT, aError );
+#endif
+ iRefreshRunning = EFalse;
+ iSyncRunning = ESyncNotRunning;
+ }
+
+ switch ( aService )
+ {
+ case ECmServiceDeleteMetadata:
+ {
+ iAppUi->MSEngine()->DeleteDeletedMediaserversL();
+ // start harvest
+ iAppUi->MSEngine()->ScanMediaServersL();
+ break;
+ }
+ case ECmServiceHarvest:
+ {
+ if( iAppWizardRun )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::\
+ ReadyL, HARVEST (Wizard)"));
+
+ // refreshes also fill rules
+ iAppUi->RefreshListsL();
+
+ // "From home" secondary item text depends list selections
+ // must be read here again because list selections change
+ // after wizard run
+ iFillListSelected = CheckIfFillListSelected();
+
+ if ( iRefreshRunning && iSyncRunning == ESyncWaiting )
+ {
+ StartSyncL();
+ iRefreshRunning = EFalse;
+ }
+
+ iRefreshRunning = EFalse;
+ iAppWizardRun = EFalse;
+ LOG(_L("[MediaServant]\t CMSMainContainer::ReadyL, \
+ START PRE PRO"));
+
+ // show navi pane text for 2 seconds
+ ShowRefreshCompleteTextL();
+ iNaviTimer->Start( KNaviTimerInterval,
+ KNaviTimerInterval,
+ TCallBack( NaviTimerCallbackL, this ) );
+ break;
+ }
+ else
+ {
+ if ( iRefreshRunning && iSyncRunning == ESyncWaiting )
+ {
+ StartSyncL();
+ iRefreshRunning = EFalse;
+ }
+ else
+ {
+ iRefreshRunning = EFalse;
+ // refreshes also fill rules and store item
+ iAppUi->RefreshListsL();
+
+ // show navi pane text for 2 seconds
+ ShowRefreshCompleteTextL();
+ iNaviTimer->Start( KNaviTimerInterval,
+ KNaviTimerInterval,
+ TCallBack( NaviTimerCallbackL, this ) );
+ }
+ }
+ break;
+ }
+
+ case ECmServiceFill:
+ // fall trough
+ case ECmServiceStore:
+ {
+ iSyncRunning = ESyncNotRunning;
+ SetNaviTextLastSyncL();
+ iAppUi->RefreshListsL();
+ break;
+ }
+
+ case ECmServicePreProcessingStore:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ReadyL, \
+ PRE PRO STORE"));
+
+ if ( iSyncRunning == ESyncWaiting )
+ {
+ StartSyncL();
+ }
+
+ iPreprocessRunning = EFalse;
+ iAppUi->RefreshListsL();
+ break;
+ }
+ case ECmServicePreProcessingFill:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ReadyL, \
+ PRE PRO FILL"));
+
+ // Set last sync time to navi pane
+ SetNaviTextLastSyncL();
+
+ iPreprocessRunning = EFalse;
+ break;
+ }
+
+ case ECmServiceDeleteFilledFiles:
+ {
+ // Set last sync time to navi pane
+ SetNaviTextLastSyncL();
+ break;
+ }
+
+ default:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ReadyL \
+ service not found"));
+ break;
+ }
+ }
+
+ UpdateListBoxDataL();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::PropertyChangedL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::PropertyChangedL( TCmService aService,
+ TInt aTotalItems,
+ TInt aProcessedItems,
+ TInt /*aItemsToBeProcessed*/ )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::PropertyChangedL"));
+
+ switch ( aService )
+ {
+ case ECmServiceHarvest:
+ {
+ // Launching propertywatcher causes unwanted call of observer
+ // (server previous state is returned
+ // We want to show progress only when refresh is truly running
+ if ( iRefreshRunning )
+ {
+ TInt value( 0 );
+ if ( aTotalItems > 0 )
+ {
+ value = (TReal(aProcessedItems)/TReal(aTotalItems))*100;
+ }
+
+ HBufC* progress = StringLoader::LoadLC(
+ R_MS_NAVI_REFRESHING_TEXT, value );
+
+ // do number conversion
+ TPtr ptr = progress->Des();
+ AknTextUtils::
+ DisplayTextLanguageSpecificNumberConversion( ptr );
+
+ // update navi pane
+ iView->SetNavigationPaneTextL( *progress );
+ CleanupStack::PopAndDestroy( progress );
+ }
+ break;
+ }
+ case ECmServiceStore:
+ // fall through
+ case ECmServiceFill:
+ {
+ if ( aTotalItems > 0 && aProcessedItems > 0 )
+ {
+ // calculate procentual value
+ TInt value = (TReal(aProcessedItems)/TReal(aTotalItems))*100;
+ HBufC* progress = StringLoader::LoadLC(
+ R_MS_NAVI_SYNC_TEXT, value );
+
+ // do number conversion
+ TPtr ptr = progress->Des();
+ AknTextUtils::
+ DisplayTextLanguageSpecificNumberConversion( ptr );
+
+ // update navi pane
+ iView->SetNavigationPaneTextL( *progress );
+ CleanupStack::PopAndDestroy( progress );
+ }
+ break;
+ }
+ case ECmServiceNone:
+ {
+ iSyncRunning = ESyncNotRunning;
+ iRefreshRunning = EFalse;
+ if ( iNaviTimer && !iNaviTimer->IsActive() )
+ {
+ SetNaviTextLastSyncL();
+ }
+
+ break;
+ }
+ default:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::PropertyChangedL \
+ service not found"));
+ }
+ }
+
+ if ( iUpdateList && !iUpdateList->IsActive() )
+ {
+ iCurStep = EFirstStep;
+ iRequestCt = 1;
+ iUpdateList->Start( TCallBack( BackgroundUpdateListL, this ) );
+ }
+ else
+ {
+ iRequestCt++;
+ LOG(_L("[MediaServant]\t S.L add to queue"));
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::SetManualWizardInfo
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::SetManualWizardInfo( TBool aAppWizardRun )
+ {
+ iAppWizardRun = aAppWizardRun;
+ }
+
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ShowRefreshIndicationL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::ShowRefreshIndicationL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ShowRefreshIndicationL"));
+
+ iRefreshRunning = ETrue;
+ // Start 0 %
+ HBufC* naviText = StringLoader::LoadLC(
+ R_MS_NAVI_REFRESHING_TEXT, 0 );
+
+ // do number conversion
+ TPtr ptr = naviText->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
+
+ iView->SetNavigationPaneTextL( *naviText );
+ CleanupStack::PopAndDestroy( naviText );
+
+ UpdateListBoxDataL();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::StopRefreshL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::StopRefreshL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::StopRefreshL"));
+
+ iRefreshRunning = EFalse;
+ iSyncRunning = ESyncNotRunning;
+ iAppUi->FillRuleController()->UpdateArrayL();
+ UpdateListBoxDataL();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::StartSyncL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::StartSyncL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::StartSync"));
+
+ iSyncRunning = ESyncRunning;
+ TInt error = iAppUi->MSEngine()->ExecuteSyncL();
+
+ if ( !error )
+ {
+ UpdateListBoxDataL();
+
+ // set progress to 0%
+ HBufC* progress = StringLoader::LoadLC(
+ R_MS_NAVI_SYNC_TEXT, 0 );
+
+ // do number conversion
+ TPtr ptr = progress->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
+
+ iView->SetNavigationPaneTextL( *progress );
+ CleanupStack::PopAndDestroy( progress );
+ }
+ else
+ {
+ iSyncRunning = ESyncNotRunning;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::StartMetadataDeleteL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::StartMetadataDeleteL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::StartMetadataDeleteL"));
+
+ iAppUi->MSEngine()->DeleteMetadataL();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::SelectedItemIndex
+// returns current item index
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::SelectedItemIndex()
+ {
+ return iListBox->CurrentItemIndex();
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ShowErrorNoteL
+// Shows error note
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::ShowErrorNoteL( TInt aTextResource )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ShowErrorNoteL"));
+
+ HBufC* errorText = StringLoader::LoadLC( aTextResource );
+ CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote();
+ dlg->ExecuteLD( *errorText );
+ CleanupStack::PopAndDestroy( errorText );
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::SetNaviTextLastSyncL
+// Sets last synchronization time to navi pane
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::SetNaviTextLastSyncL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::SetNaviTextLastSyncL"));
+
+ TTimeIntervalMinutes syncMinutes;
+ TTimeIntervalHours syncHours;
+ TTimeIntervalDays syncDays;
+
+ TTime lastSync = iAppUi->MSEngine()->LastSyncTime();
+
+ if ( lastSync.Int64() > 0 )
+ {
+ // Get current time
+ TTime time;
+ time.HomeTime();
+
+ time.MinutesFrom( lastSync, syncMinutes );
+ time.HoursFrom( lastSync, syncHours );
+ syncDays = time.DaysFrom( lastSync );
+
+
+ HBufC* naviText = NULL;
+
+ TInt days = syncDays.Int();
+ TInt hours = syncHours.Int();
+ TInt mins = syncMinutes.Int();
+ if ( days > 0 )
+ {
+ naviText = ( days == 1 ? StringLoader::LoadLC(
+ R_MS_LAST_SYNC_DAY ) :
+ StringLoader::LoadLC(
+ R_MS_LAST_SYNC_DAYS, days ));
+ }
+ else if ( hours > 0 )
+ {
+ naviText = ( hours == 1 ? StringLoader::LoadLC(
+ R_MS_LAST_SYNC_HOUR ) :
+ StringLoader::LoadLC(
+ R_MS_LAST_SYNC_HOURS, hours ));
+ }
+ else if ( mins > 0 )
+ {
+ naviText = ( mins == 1 ? StringLoader::LoadLC(
+ R_MS_LAST_SYNC_MIN ) :
+ StringLoader::LoadLC(
+ R_MS_LAST_SYNC_MINS, mins ));
+ }
+ else
+ {
+ // do nothing - leave navi pane empty
+ }
+
+ if ( naviText )
+ {
+ // do number conversion
+ TPtr ptr = naviText->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
+
+ iView->SetNavigationPaneTextL( *naviText );
+ CleanupStack::PopAndDestroy( naviText );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::SizeChanged()
+// Called by framework when the view size is changed.
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::SizeChanged()
+ {
+ // container control resize code.
+ if ( iListBox )
+ {
+ iListBox->SetRect( Rect() ); // Set rectangle of listbox.
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::HandleResourceChange
+// Handles layout change
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::HandleResourceChange( TInt aType )
+ {
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ SetRect( iView->ClientRect() );
+ }
+
+ CCoeControl::HandleResourceChange( aType );
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::TimerCallbackL()
+// Periodic timer callback
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::TimerCallbackL(TAny* aObject)
+ {
+ CMSMainContainer* mainContainer =
+ static_cast<CMSMainContainer*>(aObject);
+ TCmServerState state;
+ mainContainer->iAppUi->MSEngine()->ServerState( state );
+ if ( state == ECmServerStateIdle )
+ {
+ mainContainer->SetNaviTextLastSyncL();
+ }
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::NaviTimerCallbackL()
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::NaviTimerCallbackL(TAny* aObject)
+ {
+ CMSMainContainer* mainContainer =
+ static_cast<CMSMainContainer*>(aObject);
+ TCmServerState state;
+ mainContainer->iAppUi->MSEngine()->ServerState( state );
+
+ // Clear old text
+ mainContainer->iView->ClearCurrentNaviPaneText();
+
+ if ( state == ECmServerStateIdle )
+ {
+ mainContainer->SetNaviTextLastSyncL();
+ }
+
+ mainContainer->iNaviTimer->Cancel();
+
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::BackgroundUpdateListL
+// Static callback method for update list box data
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::BackgroundUpdateListL( TAny* aObject )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::BackgroundUpdateListL"));
+ TInt reslt = ( ( CMSMainContainer* )aObject )->UpdateListByStepL();
+ return reslt;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::UpdateListByStepL
+// Update list box data steps
+// --------------------------------------------------------------------------
+//
+TInt CMSMainContainer::UpdateListByStepL()
+ {
+ TRACE(Print(_L("[MediaServant]\t CMSMainContainer:UpdateListByStepL \
+ step: %d %d"), iCurStep, iUpdateList->IsActive()));
+
+ // Get file counts and sync time
+ static TInt staItemsToBeStored( 0 );
+ static TInt staItemsToBeFilled( 0 );
+ static TInt staSyncTime( 0 );
+ static TInt staSyncTimeStore( 0 );
+ static TInt staSyncTimeFill( 0 );
+ static TBool staDriveSelected( ETrue );
+
+ switch ( iCurStep )
+ {
+ case EFirstStep:
+ {
+ iAppUi->MSEngine()->GetTransferInfo( ECmServiceStore,
+ staItemsToBeStored,
+ staSyncTimeStore );
+ break;
+ }
+ case ESecondStep:
+ {
+ iAppUi->MSEngine()->GetTransferInfo( ECmServiceFill,
+ staItemsToBeFilled,
+ staSyncTimeFill );
+ break;
+ }
+ case EThirdStep:
+ {
+ staDriveSelected = iAppUi->DriveSelectedL();
+ break;
+ }
+ case EForthStep:
+ //fall through
+ default:
+ {
+ TInt icon = EIconSync;
+ // Create item strings
+ HBufC* primaryText = NULL;
+ HBufC* secondaryText = NULL;
+
+ CDesCArray* itemArray = static_cast<CDesCArray*>
+ (iListBox->Model()->ItemTextArray());
+ if ( itemArray->Count() )
+ {
+ // delete all listbox items
+ itemArray->Reset();
+ }
+ staSyncTime = staSyncTimeStore + staSyncTimeFill;
+ //home-sync item
+ switch ( iSyncRunning )
+ {
+ default:
+ // fall trough
+ case ESyncNotRunning:
+ {
+ primaryText = StringLoader::LoadLC(
+ R_MAIN_SYNC_NOW_TEXT );
+ if ( staItemsToBeStored > 0 || staItemsToBeFilled > 0 )
+ {
+ if ( staSyncTime/60 > 1 ) // 1 minute
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_TIME_TEXT,
+ staSyncTime/60 );
+ // do number conversion
+ TPtr ptr = secondaryText->Des();
+ AknTextUtils::
+ DisplayTextLanguageSpecificNumberConversion( ptr );
+ }
+ else
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_TIME_ONE_MIN_TEXT );
+ }
+ }
+ break;
+ }
+ case ESyncRunning:
+ {
+ primaryText = StringLoader::LoadLC(
+ R_MAIN_STOP_SYNC_TEXT );
+ icon = EIconSyncStop;
+ break;
+ }
+ case ESyncWaiting:
+ {
+ primaryText = StringLoader::LoadLC(
+ R_MAIN_STOP_SYNC_TEXT );
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_WAITING_TEXT );
+ icon = EIconSyncStop;
+ break;
+ }
+ }
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ icon,
+ *primaryText,
+ *secondaryText );
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+
+ if ( primaryText )
+ {
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+ }
+
+ // From Home -item
+ primaryText = StringLoader::LoadLC( R_MAIN_FROM_HOME_TEXT );
+
+ if ( staDriveSelected == EFalse )
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_MEMORY_CARD_NEEDED_TEXT );
+ }
+ else if ( !iFillListSelected )
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_LIST_NOTHING_SELECTED );
+ }
+ else if ( staItemsToBeFilled <= 0 )
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_ALL_IN_SYNC_TEXT );
+ }
+
+ if ( iRefreshRunning ||
+ iPreprocessRunning ||
+ iSyncRunning == ESyncRunning ||
+ staDriveSelected == EFalse )
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconFromHomeInactive,
+ *primaryText,
+ *secondaryText );
+ }
+ else
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconFromHome,
+ *primaryText,
+ *secondaryText );
+ }
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+
+ // To Home -item
+ primaryText = StringLoader::LoadLC( R_MAIN_TO_HOME_TEXT );
+
+
+ if ( staItemsToBeStored < 1 )
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_ALL_IN_SYNC_TEXT );
+ }
+ else if ( staItemsToBeStored == 1 )
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_ONE_NEW_ITEM_TEXT );
+ }
+ else // > 1
+ {
+ secondaryText = StringLoader::LoadLC(
+ R_MS_SYNC_NEW_ITEMS_TEXT,
+ staItemsToBeStored );
+ // do number conversion
+ TPtr ptr = secondaryText->Des();
+ AknTextUtils::
+ DisplayTextLanguageSpecificNumberConversion( ptr );
+ }
+
+ if ( iRefreshRunning ||
+ iPreprocessRunning ||
+ iSyncRunning == ESyncRunning )
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconToHomeInactive,
+ *primaryText,
+ *secondaryText );
+ }
+ else
+ {
+ AppendItemToListBoxArrayL( iListBox,
+ iListBox->Model(),
+ EIconToHome,
+ *primaryText,
+ *secondaryText );
+ }
+
+ if ( secondaryText )
+ {
+ CleanupStack::PopAndDestroy( secondaryText );
+ secondaryText = NULL;
+ }
+ CleanupStack::PopAndDestroy( primaryText );
+ primaryText = NULL;
+ iListBox->DrawNow();
+ break;
+ }
+ }
+ TInt theValue = ( TInt )iCurStep;
+ theValue++;
+ iCurStep = ( TMSUpdateStep )theValue;
+
+ //complete one refresh request
+ TInt reslt( 0 );
+ if( iCurStep == EEndStep )
+ {
+ iRequestCt--;
+ if( iRequestCt )
+ {
+ iCurStep = EFirstStep;
+ }
+ //if still have request,continue
+ reslt = iRequestCt;
+ }
+ //not the last step, contiue
+ else
+ {
+ reslt = ETrue;
+ }
+ return reslt;
+ }
+
+// ---------------------------------------------------------------------------
+// CMSMainContainer::GetHelpContext
+// ---------------------------------------------------------------------------
+//
+void CMSMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::GetHelpContext"));
+
+ aContext.iMajor = TUid::Uid(KMediaServantUID3);
+ aContext.iContext = KMSERV_HLP_MAIN_VIEW;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::MemoryCardChangedL
+// Callback to handle mmc insert
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::MemoryCardChangedL( TMemoryCardEvent aEvent )
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::MemoryCardChangedL start"));
+ switch ( aEvent )
+ {
+ case EMemoryCardInsert:
+ {
+ if( !iAppUi->DriveSelectedL() )
+ {
+ iView->CheckMemoryCardL();
+ }
+ UpdateListBoxDataL();
+ break;
+ }
+ default:
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::MemoryCardChangedL \
+ event not found"));
+ break;
+ }
+ }
+ LOG(_L("[MediaServant]\t CMSMainContainer::MemoryCardChangedL end"));
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::CheckIfFillListSelected
+// --------------------------------------------------------------------------
+//
+TBool CMSMainContainer::CheckIfFillListSelected()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::CheckIfFillListSelected"));
+
+ TBool listSelected( EFalse );
+ RPointerArray<CMSFillList>* listArray =
+ iAppUi->FillRuleController()->FillListArray();
+
+ for ( TInt i = 0; i < listArray->Count(); i++ )
+ {
+ CCmFillRule* list = (*listArray)[i]->List();
+ if ( list->Selected() == ECmSelected )
+ {
+ listSelected = ETrue;
+ i = listArray->Count(); // break loop
+ }
+ }
+ return listSelected;
+ }
+
+// --------------------------------------------------------------------------
+// CMSMainContainer::ShowRefreshCompleteTextL
+// --------------------------------------------------------------------------
+//
+void CMSMainContainer::ShowRefreshCompleteTextL()
+ {
+ LOG(_L("[MediaServant]\t CMSMainContainer::ShowRefreshCompleteTextL"));
+
+ HBufC* naviText = StringLoader::LoadLC( R_MS_NAVI_CONTENT_REFRESHED );
+ iView->SetNavigationPaneTextL( *naviText );
+ CleanupStack::PopAndDestroy( naviText );
+ }
+// End of File
+