homesync/contentmanager/cmserver/cmmemorymanager/src/cmmmquotalistener.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- a/homesync/contentmanager/cmserver/cmmemorymanager/src/cmmmquotalistener.cpp	Mon Nov 01 13:44:24 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,541 +0,0 @@
-/*
-* 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:  Main class in the manory manager component
-*
-*/
-
-
-#include <e32std.h>
-#include <AknGlobalNote.h> // CAknGlobalNote
-#include <AknGlobalProgressDialog.h>  // CAknGlobalProgressDialog
-#include <mpxharvesterutility.h>
-#include <MCLFContentListingEngine.h>
-#include <ContentListingFactory.h>
-#include <avkon.rsg> // R_AVKON_SOFTKEYS_OK_EMPTY
-#include <barsc.h> // RResourceFile
-#include <barsread.h> // TResourceReader
-#include <bautils.h> // BaflUtils
-#include <AknUtils.h>
-#include <memorymanager.rsg>
-#include <pathinfo.h>
-
-#include "cmcommon.h"
-#include "cmfilllistitem.h"
-#include "cmdmmain.h"
-#include "upnpstring.h"
-#include "msdebug.h"
-#include "cmmmmain.h"
-#include "cmmmquotalistener.h"
-
-
-// Contants
-const TInt64 KDeleteLimit = 50; // 50MB
-const TInt KSizeStringLength = 10;
-const TInt KTimeoutValue = 3000000; // 3 seconds
-_LIT16( KCmDoubleBackSlash,    "\\" ); 
-_LIT16( KCmColon,              ":");
-
-_LIT( KResourceFilePath, "\\resource\\apps\\memorymanager.rsc" );
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::NewL
-// ---------------------------------------------------------------------------
-//
-CCmMmQuotaListener* CCmMmQuotaListener::NewL( CCmDmMain& aDbManager,
-                                              TInt aDrive )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::NewL() start"));
-    CCmMmQuotaListener* self = CCmMmQuotaListener::NewLC( aDbManager,
-                                                          aDrive );
-    CleanupStack::Pop( self );
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::NewL() end"));
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::NewLC
-// ---------------------------------------------------------------------------
-//
-CCmMmQuotaListener* CCmMmQuotaListener::NewLC( CCmDmMain& aDbManager,
-                                               TInt aDrive )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::NewLC() start"));
-    CCmMmQuotaListener* self = new ( ELeave ) CCmMmQuotaListener( aDbManager,
-                                                                   aDrive );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::NewLC() end"));
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// C++ destructor
-// ---------------------------------------------------------------------------
-//
-CCmMmQuotaListener::~CCmMmQuotaListener()
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::~CCmMmQuotaListener()\
-             start"));
-    if( IsActive() )
-        {
-        Cancel();
-        }
-    iFileSession.Close();
-    
-    if( iHarvester )
-        {
-        iHarvester->Close();
-        }
-    delete iProgressDialog;
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::~CCmMmQuotaListener() end"));
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::DoCancel
-// ---------------------------------------------------------------------------
-//
-void CCmMmQuotaListener::DoCancel()
-    {
-    iFileSession.NotifyDiskSpaceCancel();
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::RunL
-// ---------------------------------------------------------------------------
-//
-void CCmMmQuotaListener::RunL()
-    {
-    TRACE(Print(_L("[MEMORY MNGR]\t CCmMmQuotaListener:RunL status = %d"),
-        iStatus.Int() ) );
-
-    // Check if MMC is inserted
-    if ( CCmMmMain::DriveState( iFileSession, iDrive ) && 
-         !iProgressDialog )
-        {
-        // Check out that NotifyDiskSpace event came from quota
-        TVolumeInfo volumeInfo;
-        iFileSession.Volume( volumeInfo, iDrive );
-
-        if ( volumeInfo.iFree >= iQuota )
-            {
-            // Request a notification when disk space crosses the threshold 
-            // value.
-            RequestDiskSpaceNotification();
-            }
-        else 
-            {   
-            // Get lowest priority list
-            RPointerArray<CCmFillListItem> array;
-            iDbManager.PrepareQueryCmdL( EFilledLowPriorityQuery );
-            iDbManager.GetLowPriorityFilledFilesL( iDrive, array );
-            // If Fill list is empty we wait 3 seconds and try again
-            if ( !array.Count() )
-                {
-                TRACE( Print( _L("[MEMORY MNGR]\t CCmMmQuotaListener:RunL \
-                    Fill list is empty") ) );
-                }
-            else 
-                {
-                switch ( iStatus.Int() )
-                    {
-                    case KErrNone:
-                        {
-                        // Remove files from the end of the list so that the 
-                        // total amount of files in the list is no more than 
-                        // KDeleteLimit megabytes.
-
-                        // listsize is the total size of the files in array 
-                        // in megabytes.
-                        TUint32 listSize = RemoveExtraFiles( array, 
-                                                             KDeleteLimit ); 
-
-                        // Get fill list name
-                        HBufC8* listName8 = NULL;
-                        iDbManager.GetFillListNameL( listName8,
-                                                     array[0]->ListId() );
-                        CleanupStack::PushL( listName8 );
-                        
-                        HBufC* listName16 = 
-                            HBufC::NewLC( listName8->Length() );
-                        listName16->Des().Copy( *listName8 );
-                        
-                        // Get confirmation for the delete operation from the 
-                        // user.
-                        TRequestStatus status = DeleteConfirmationL( 
-                            *listName16, 
-                            listSize );
-                        
-                        // If file deletion Yes is selected
-                        if ( status.Int() == EAknSoftkeyYes )
-                            {
-                            // delete the files
-                            TUint32 delAmount = DeleteFilesL( array, 
-                                                              *listName8 );
-                                                              
-                            TRACE( Print(_L("[MEMORY MNGR]\t Deleted %d \
-                                MBytes from list %S"), 
-                                delAmount, listName16 ) );
-                            }
-                        else
-                            {
-                            LOG( _L("EAknSoftkeyNo") );
-                            // Request a notification when disk space crosses
-                            // the threshold value.
-                            iFileSession.NotifyDiskSpace( 
-                                iQuota, iDrive, iStatus );
-                            }
-
-                        // clean up
-                        CleanupStack::PopAndDestroy( listName16 );
-                        CleanupStack::PopAndDestroy( listName8 );
-                        array.ResetAndDestroy();
-                        SetActive();
-                        break;
-                        }
-                    case KErrNotReady:
-                        {
-                        TRACE( Print( 
-                            _L("[MEMORY MNGR]\t CCmMmQuotaListener::RunL \
-                            status = %d"), iStatus.Int() ) );
-
-                        // Wait 3 seconds and try again.
-                        RequestNotificationAfterTimeout( KTimeoutValue );
-                        break;
-                        }
-                    default:
-                        {
-                        TRACE( Print( 
-                            _L("[MEMORY MNGR]\t CCmMmQuotaListener::RunL \
-                            status = %d"), iStatus.Int() ) );
-
-                        // Request a notification when disk space crosses the
-                        // threshold value.
-                        RequestDiskSpaceNotification();
-                        break;
-                        }
-                    }                
-                }
-            }
-        }
-    else if( iProgressDialog )
-        {
-        LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::RunL ProgressDialog"));
-        iProgressDialog->CancelProgressDialog();
-        iProgressDialog = NULL;
-        RequestDiskSpaceNotification();
-        }
-    else
-        {
-        TRACE(Print(_L("[MEMORY MNGR]\t CCmMmQuotaListener:RunL: \
-            Drive not found!")));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// C++ constructor
-// ---------------------------------------------------------------------------
-//
-CCmMmQuotaListener::CCmMmQuotaListener( CCmDmMain& aDbManager, TInt aDrive )
-    : CActive( EPriorityStandard ),
-    iDrive( aDrive ),
-    iQuota( KCmMmcLowMemory ),
-    iDbManager( aDbManager )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CCmMmQuotaListener::ConstructL()
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::ConstructL() start"));
-
-    User::LeaveIfError( iFileSession.Connect() );
-        
-    iHarvester = CMPXHarvesterFactory::NewL();
-
-    // Request a notification when disk space crosses the threshold 
-    // value.
-    RequestDiskSpaceNotification();
-
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::ConstructL() end"));
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::ReadResourceL
-// ---------------------------------------------------------------------------
-//
-HBufC16* CCmMmQuotaListener::ReadResourceL( TInt aResourceId )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::ReadReasourceL() start"));
-    TFileName rscFileName( KResourceFilePath );
-
-    // Get the exact filename of the resource file
-    BaflUtils::NearestLanguageFile( iFileSession, rscFileName );
-        
-    TRACE( Print( _L("[MEMORY MNGR]\t Resource path = %s"), &rscFileName ) );
-    RResourceFile resourceFile;
-    TInt err( KErrNone );
-    TRAP(err, resourceFile.OpenL(iFileSession, rscFileName ))
-    if ( err != KErrNone )
-        {        
-        LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::Read from e"));
-        // not found? let's try mmc drive
-        rscFileName.Copy( PathInfo::MemoryCardRootPath() );
-        rscFileName.Delete(2, 2); // remove //
-        rscFileName.Append( KResourceFilePath );        
-        resourceFile.OpenL(iFileSession, rscFileName );
-        }
-    HBufC8* res = resourceFile.AllocReadLC( aResourceId );    
-    TResourceReader theReader;
-    theReader.SetBuffer(res);
-    HBufC16* des = theReader.ReadHBufC16L();
-    CleanupStack::PopAndDestroy( res );
-    resourceFile.Close();
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::ReadReasourceL() end"));
-    return des;
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::ResolveAndAppendRootPath()
-// ---------------------------------------------------------------------------
-//
-HBufC* CCmMmQuotaListener::ResolveAndAppendRootPathL( 
-    const TInt aDriveNumber )
-    {
-    HBufC* buf = HBufC::NewLC( 4 );
-    TChar driveChar;
-    iFileSession.DriveToChar( aDriveNumber, driveChar );
-    buf->Des().Append( driveChar );
-    buf->Des().Append( KCmColon );
-    buf->Des().Append( KCmDoubleBackSlash );
-    CleanupStack::Pop( buf );
-    return buf;    
-    }
-    
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::RequestNotificationAfterTimeout()
-// ---------------------------------------------------------------------------
-//
-void CCmMmQuotaListener::RequestNotificationAfterTimeout( TInt aTimeoutValue )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::\
-        RequestNotificationAfterTimeout()"));
-    TTimeIntervalMicroSeconds32 timeOut( aTimeoutValue );
-    RTimer timer;
-    timer.CreateLocal();
-    TRequestStatus status( KRequestPending );
-    timer.After( status, timeOut ); // Wait time defined by aTimeoutValue
-    User::WaitForRequest( status );
-    timer.Close();
-
-    // Request a notification when disk space crosses the threshold 
-    // value.
-    RequestDiskSpaceNotification();
-    }
-    
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::RequestDiskSpaceNotification()
-// ---------------------------------------------------------------------------
-//
-void CCmMmQuotaListener::RequestDiskSpaceNotification()
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::\
-        RequestDiskSpaceNotification()"));
-    iFileSession.NotifyDiskSpace( iQuota, iDrive, iStatus );
-    SetActive();
-    }
-    
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::DeleteConfirmationL()
-// ---------------------------------------------------------------------------
-//
-TRequestStatus CCmMmQuotaListener::DeleteConfirmationL( 
-    const TDesC& aListName, 
-    TUint32 aListSize )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::DeleteConfirmationL()"));
-    // Get text for delete confirmation dialog
-    HBufC* format = ReadResourceL( R_MSERV_CONF_AUTO_REMOVE );
-    CleanupStack::PushL( format );
-
-    HBufC* tempName = aListName.AllocLC();
-        
-    // Create confirm note
-    HBufC* confirmNote = NULL;    
-    if ( aListName.Length() == 0 )
-        {
-        //reserve 1 character for empty list name
-        confirmNote = HBufC::NewLC( format->Length() +
-                                     1 + 
-                                     KSizeStringLength );
-        confirmNote->Des().Format( *format,
-                                   aListSize,
-                                   &KNullDesC() );
-        }
-    else
-        {
-        confirmNote = HBufC::NewLC( format->Length() +
-                                     aListName.Length() +
-                                     KSizeStringLength );
-        confirmNote->Des().Format( *format,
-                                   aListSize,
-                                   tempName );
-        }
-
-    // Show note to ask if it's ok to delete files.
-    CAknGlobalNote* note = CAknGlobalNote::NewLC();
-    TRequestStatus status = KRequestPending;
-    note->SetSoftkeys( R_AVKON_SOFTKEYS_YES_NO );
-    note->ShowNoteL( status,
-                     EAknGlobalInformationNote,
-                     *confirmNote );
-    User::WaitForRequest( status );
-
-    // Clean up
-    CleanupStack::PopAndDestroy( note );
-    CleanupStack::PopAndDestroy( confirmNote );
-    CleanupStack::PopAndDestroy( tempName );    
-    CleanupStack::PopAndDestroy( format );
-    
-    // Return the user selection.
-    return status;
-    }
-    
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::DeleteFilesL()
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmMmQuotaListener::DeleteFilesL( 
-    const RPointerArray<CCmFillListItem>& aArray,
-    const TDesC8& aListName
-    )
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::DeleteFilesL()"));
-    // Get text for progress dialog
-    HBufC* format = ReadResourceL( R_MSERV_PROGRESS_REMOVE );
-    CleanupStack::PushL( format );
-
-    HBufC* listName = UpnpString::ToUnicodeL( aListName );
-    CleanupStack::PushL( listName );
-    
-    HBufC* progressNote = NULL;
-    if ( listName->Length() == 0 )
-        {
-        //reserve 1 character for empty list name
-        progressNote = HBufC::NewLC( format->Length() + 1 );
-        progressNote->Des().Format( *format,
-                                    &KNullDesC() );
-        }
-    else
-        {
-        progressNote = HBufC::NewLC( format->Length() +
-                                     listName->Length() );
-        progressNote->Des().Format( *format,
-                                    listName );
-        }
-
-    
-    // Show file deletion progress in a progress dialog.
-    iProgressDialog = CAknGlobalProgressDialog::NewL();
-    iProgressDialog->ShowProgressDialogL( iStatus,
-                                 *progressNote,
-                                 R_AVKON_SOFTKEYS_EMPTY,
-                                 aArray.Count() );
-
-    // Create files array for file paths
-    CDesC16Array* files =
-        new (ELeave) CDesC16ArrayFlat( aArray.Count() );
-    CleanupStack::PushL( files );
-
-    // Delete all items from current array
-    HBufC* temp( NULL );
-    TFileName path;
-    TUint32 sizes = 0;
-    
-    for ( TInt i = 0; i < aArray.Count(); i++ )
-        {
-        temp = ResolveAndAppendRootPathL( iDrive );
-        CleanupStack::PushL( temp );
-        path.Append( *temp );
-        path.Append( aArray[i]->Path() );
-        files->AppendL( path );
-        iFileSession.Delete( path );
-        CleanupStack::PopAndDestroy( temp );
-        path.Zero();
-        sizes += aArray[i]->Size();
-        TRACE(Print(_L("[MEMORY MNGR]\t CCmMmQuotaListener::DeleteFilesL \
-                        Deleted file %S, size %d"), 
-                    &aArray[i]->Path(), 
-                    aArray[i]->Size()));
-        iProgressDialog->UpdateProgressDialog( i, aArray.Count() - 1 );
-        }
-
-    TInt tes( KErrNone );
-    TRAP( tes, iDbManager.RestoreFileStatusesL( aArray,
-                                                aListName ) );
-    TRACE( Print( _L("[MEMORY MNGR]\t tes = %d "), tes ) );
-
-    MCLFContentListingEngine* clfEngine =
-                 ContentListingFactory::NewContentListingEngineLC();    
-    TRAP_IGNORE( clfEngine->UpdateItemsL() );
-    CleanupStack::PopAndDestroy();
-    
-    TRAP_IGNORE( iHarvester->RemoveFilesL( *files ) );
-
-    CleanupStack::PopAndDestroy( files );
-    iProgressDialog->ProcessFinished();
-    CleanupStack::PopAndDestroy( progressNote );
-    CleanupStack::PopAndDestroy( listName );
-    CleanupStack::PopAndDestroy( format );
-
-    return sizes;
-    }
-
-// ---------------------------------------------------------------------------
-// CCmMmQuotaListener::RemoveExtraFiles()
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmMmQuotaListener::RemoveExtraFiles( 
-    RPointerArray<CCmFillListItem>& aArray, 
-    TInt64 aDeleteLimit ) const 
-    {
-    LOG(_L("[MEMORY MNGR]\t CCmMmQuotaListener::RemoveExtraFiles()"));
-    TUint32 listSize( 0 );
-    TInt lastIndex( 0 );
-    for ( TInt i = 0;
-          i < aArray.Count() && listSize <= aDeleteLimit; 
-          i++ )
-        {
-        listSize += ( aArray[i]->Size() / KMega );
-        lastIndex = i;
-        }
-
-    TRACE(Print(_L("[MEMORY MNGR]\t Deleting extra \
-        items...")));
-    for( TInt j = ( aArray.Count() - 1 ); 
-         j > lastIndex ; 
-         j-- )
-        {
-        delete aArray[j];
-        aArray.Remove( j );
-        }
-        
-    aArray.Compress();
-    return listSize;
-    }
-    
-// End of file