diff -r 8434d5964e15 -r 94f223449c91 voicerecorder/UtilsSrc/TVRRename.cpp --- a/voicerecorder/UtilsSrc/TVRRename.cpp Mon Jan 18 20:21:38 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,245 +0,0 @@ -/* -* Copyright (c) 2002-2006 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: -* This class encapsulates the functionality associated with renaming -* files in different situation. The implementation is made according -* to the Folders v.4.0 specification. -* -* -*/ - - -// INCLUDES -#include -#include -#include -#include -#include -#include - -#include -#include "voicerecorder.hrh" -#include "TVRRename.h" - -// CONSTANTS -const TInt KMaxFileNameLength( 64 ); - - -// ================= MEMBER FUNCTIONS ======================================== - -// --------------------------------------------------------------------------- -// TVRRename::TVRRename -// -// --------------------------------------------------------------------------- -// -EXPORT_C TVRRename::TVRRename( RFs& aFs ) : iFs( aFs ) - { - } - - -// --------------------------------------------------------------------------- -// TVRRename::GetNewNameL -// -// --------------------------------------------------------------------------- -// -EXPORT_C TBool TVRRename::GetNewNameL( const TDesC& aOldName, - TDes& aNewName, - const TInt aPrompt ) - { - CCoeEnv* coeEnv = CCoeEnv::Static(); - - TParsePtrC nameParse( aOldName ); - TBuf fileName; - - // The query can fit only VRMEMONAMEMAXLENGTH characters - fileName.Copy( nameParse.Name().Left( VRMEMONAMEMAXLENGTH ) ); - - CAknStaticSizeDataQuerydialog* nameDlg = new( ELeave ) - CAknTextQueryDialog( fileName ); // CSI: 35 # - - nameDlg->PrepareLC( R_VR_RENAME_DIALOG ); - HBufC* prompt = StringLoader::LoadLC( aPrompt, coeEnv ); - nameDlg->SetPromptL( *prompt ); - CleanupStack::PopAndDestroy(); - - while ( nameDlg->RunLD() != 0 ) - { - // Construct the full path of the new proposed (by the user) name - aNewName.Copy( nameParse.DriveAndPath() ); - aNewName.Append( fileName ); - aNewName.Append( nameParse.Ext() ); - - TInt backslash = fileName.Find(_L( "\\" ) ); - - // Check that the name is valid for the fs32 - // Is ValidFileName does not check backslash - if ( iFs.IsValidName( aNewName ) && backslash == KErrNotFound ) - { - // Check if it exists? - if ( !BaflUtils::FileExists( iFs, aNewName ) || - aOldName == aNewName ) - { - // Nope => accepted - return ETrue; - } - - // Prompt the user for "Overwrite?" - prompt = StringLoader::LoadLC( R_QTN_FLDR_OVERWRITE_QUERY, - fileName, - coeEnv ); - - CAknQueryDialog* queryDlg = CAknQueryDialog::NewL(); - TBool accepted( queryDlg->ExecuteLD( R_VR_CONFIRMATION_QUERY, - *prompt ) ); - - CleanupStack::PopAndDestroy( prompt ); - - if ( accepted ) - { - // User accepted overwrite - return ETrue; - } - - // Create a new dialog for the next round - // TfileName. (CApaApplication::GenerateFileName needs it) - TFileName generatedName; - generatedName.Copy( nameParse.DriveAndPath() ); - generatedName.Append( fileName ); - generatedName.Append( nameParse.Ext() ); - User::LeaveIfError( - CApaApplication::GenerateFileName( iFs, generatedName ) ); - - TParsePtrC generatedNameParse( generatedName ); - TPtrC generatedNamePtr( generatedNameParse.Name() ); - if ( generatedNamePtr.Length() > VRMEMONAMEMAXLENGTH ) - { - // Name got too long => clip the suffix - fileName.Copy( generatedNamePtr.Left( - generatedNamePtr.LocateReverse( '(' ) ) ); - } - else - { - fileName.Copy( generatedNamePtr ); - } - - } - else - { - // The name wasn't a valid fs32 filename => show info note - HBufC* noteText = coeEnv->AllocReadResourceLC - ( R_QTN_FLDR_ILLEGAL_CHARACTERS ); - CAknInformationNote* infoNote = new( ELeave ) - CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy(); // noteText - } - - nameDlg = new( ELeave ) CAknTextQueryDialog( fileName ); - nameDlg->PrepareLC( R_VR_RENAME_DIALOG ); - } - - // User canceled - return EFalse; - } - - -// --------------------------------------------------------------------------- -// TVRRename::RenameL -// -// --------------------------------------------------------------------------- -// -EXPORT_C TBool TVRRename::RenameL( TDes& aName, const TInt aPrompt ) - { - HBufC* oldName = aName.AllocLC(); - if ( GetNewNameL( *oldName, aName, aPrompt ) ) - { - TInt err ( BaflUtils::RenameFile( iFs, *oldName, aName ) ); - if ( err ) - { - // Show error note "Unable to rename %U" - CAknInformationNote* infoNote = NULL; - TParsePtrC parse( oldName->Des() ); - HBufC* noteText = StringLoader::LoadLC( R_QTN_FLDR_CANT_RENAME_ITEM, - parse.Name(), - CCoeEnv::Static() ); - if ( !noteText ) - { - CleanupStack::PopAndDestroy(); // oldName - return EFalse; - } - - infoNote = new( ELeave ) CAknInformationNote( ETrue ); - if ( infoNote ) - { - infoNote->ExecuteLD( *noteText ); - } - CleanupStack::PopAndDestroy( 2 ); // oldName, noteText - return EFalse; - } - - CleanupStack::PopAndDestroy( oldName ); - return ETrue; - } - else - { - CleanupStack::PopAndDestroy( oldName ); - return EFalse; - } - } - - -// --------------------------------------------------------------------------- -// TVRRename::RenameL -// The file handle may not point to private folder, since renaming can't be -// used in embedded mode -// --------------------------------------------------------------------------- -// -EXPORT_C TBool TVRRename::RenameL( RFile& aFile, const TInt aPrompt ) - { - TFileName name( KNullDesC ); - aFile.FullName( name ); - HBufC* oldName = name.AllocLC(); - - if ( GetNewNameL( *oldName, name, aPrompt ) ) - { - aFile.Close(); - TInt err ( BaflUtils::RenameFile( iFs, *oldName, name ) ); - if ( err ) - { - // Show error note "Unable to rename %U" - // and open the old file again - User::LeaveIfError( aFile.Open( iFs, oldName->Des(), - EFileShareReadersOnly ) ); - - CAknInformationNote* infoNote = NULL; - TParsePtrC parse( oldName->Des() ); - HBufC* noteText = StringLoader::LoadLC( - R_QTN_FLDR_CANT_RENAME_ITEM, parse.Name(), CCoeEnv::Static() ); - - infoNote = new( ELeave ) CAknInformationNote( ETrue ); - infoNote->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy( 2 ); // oldName, noteText - return EFalse; - } - CleanupStack::PopAndDestroy( oldName ); - User::LeaveIfError( aFile.Open( iFs, name, EFileShareReadersOnly ) ); - return ETrue; - } - else - { - CleanupStack::PopAndDestroy( oldName ); - return EFalse; - } - }