utilityapps/filebrowser/engine/FBFileUtils.cpp
author hgs
Mon, 18 Oct 2010 16:30:05 +0300
changeset 55 2d9cac8919d3
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
#include "FBFileUtils.h"
hgs
parents:
diff changeset
    20
#include "FBFileOps.h"
hgs
parents:
diff changeset
    21
#include "engine.h"
hgs
parents:
diff changeset
    22
#include "FB.hrh"
hgs
parents:
diff changeset
    23
#include <filebrowser.rsg>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <textresolver.h> 
hgs
parents:
diff changeset
    26
#include <eikprogi.h>
hgs
parents:
diff changeset
    27
#include <e32svr.h>
hgs
parents:
diff changeset
    28
#include <eikfutil.h>
hgs
parents:
diff changeset
    29
#include <apparc.h>
hgs
parents:
diff changeset
    30
#include <apaid.h>
hgs
parents:
diff changeset
    31
#include <apaidpartner.h>
hgs
parents:
diff changeset
    32
#include <eikenv.h>
hgs
parents:
diff changeset
    33
#include <bautils.h>
hgs
parents:
diff changeset
    34
#include <gulicon.h>
hgs
parents:
diff changeset
    35
#include <babackup.h> 
hgs
parents:
diff changeset
    36
//#include <aknmemorycardui.mbg>
hgs
parents:
diff changeset
    37
//#include <sendui.h>
hgs
parents:
diff changeset
    38
#include <CMessageData.h>
hgs
parents:
diff changeset
    39
#include <ezgzip.h>
hgs
parents:
diff changeset
    40
#include <e32hal.h>
hgs
parents:
diff changeset
    41
#include <pathinfo.h>
hgs
parents:
diff changeset
    42
#include <apgcli.h>
hgs
parents:
diff changeset
    43
#include <apmstd.h>
hgs
parents:
diff changeset
    44
#include <apgtask.h>
hgs
parents:
diff changeset
    45
#include <apacmdln.h>
hgs
parents:
diff changeset
    46
#include <DocumentHandler.h>
hgs
parents:
diff changeset
    47
#include <msvapi.h>
hgs
parents:
diff changeset
    48
#include <msvids.h>
hgs
parents:
diff changeset
    49
#include <msvstd.h>
hgs
parents:
diff changeset
    50
#include <msvstore.h>
hgs
parents:
diff changeset
    51
#include <mmsvattachmentmanager.h>
hgs
parents:
diff changeset
    52
#include <cmsvattachment.h>
hgs
parents:
diff changeset
    53
#include <hash.h>
hgs
parents:
diff changeset
    54
//#include <sbeclient.h>
hgs
parents:
diff changeset
    55
#include <e32property.h>
hgs
parents:
diff changeset
    56
#if (!defined __SERIES60_30__ && !defined __SERIES60_31__) 
hgs
parents:
diff changeset
    57
#include <driveinfo.h>
hgs
parents:
diff changeset
    58
#endif // !defined __SERIES60_30__ && !defined __SERIES60_31__
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
#ifndef __SERIES60_30__
hgs
parents:
diff changeset
    61
//  #include <akniconconfig.h>
hgs
parents:
diff changeset
    62
#endif
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
//_LIT(KGZipExt, ".gz");
hgs
parents:
diff changeset
    65
_LIT8(KFileNewLine, "\r\n");
hgs
parents:
diff changeset
    66
const TInt KForcedFormatTimeout = 1000000;
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// copied from coreapplicationuisdomainpskeys.h
hgs
parents:
diff changeset
    69
const TUid KPSUidCoreApplicationUIs = { 0x101F8767 };
hgs
parents:
diff changeset
    70
const TUint32 KCoreAppUIsMmcRemovedWithoutEject = 0x00000109;
hgs
parents:
diff changeset
    71
enum TCoreAppUIsMmcRemovedWithoutEject
hgs
parents:
diff changeset
    72
    {
hgs
parents:
diff changeset
    73
    ECoreAppUIsEjectCommandUsedUninitialized = 0,
hgs
parents:
diff changeset
    74
    ECoreAppUIsEjectCommandNotUsed,
hgs
parents:
diff changeset
    75
    ECoreAppUIsEjectCommandUsed,
hgs
parents:
diff changeset
    76
    ECoreAppUIsEjectCommandUsedToDrive // Low 16-bits contain this value and high 16-bits TDriveNumber to eject
hgs
parents:
diff changeset
    77
    };
hgs
parents:
diff changeset
    78
const TInt KDriveLetterStringLength = 3; // e.g. C:\
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
CFileBrowserFileUtils* CFileBrowserFileUtils::NewL(CEngine* aEngine)
hgs
parents:
diff changeset
    83
	{
hgs
parents:
diff changeset
    84
	CFileBrowserFileUtils* self = new(ELeave) CFileBrowserFileUtils(aEngine);
hgs
parents:
diff changeset
    85
	CleanupStack::PushL(self);
hgs
parents:
diff changeset
    86
	self->ConstructL();
hgs
parents:
diff changeset
    87
	CleanupStack::Pop();
hgs
parents:
diff changeset
    88
	return self;
hgs
parents:
diff changeset
    89
	}
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
CFileBrowserFileUtils::CFileBrowserFileUtils(CEngine* aEngine) : CActive(EPriorityStandard), iEngine(aEngine)
hgs
parents:
diff changeset
    94
	{
hgs
parents:
diff changeset
    95
	}
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
void CFileBrowserFileUtils::ConstructL()
hgs
parents:
diff changeset
   100
	{
hgs
parents:
diff changeset
   101
    User::LeaveIfError(iTimer.CreateLocal());
hgs
parents:
diff changeset
   102
    User::LeaveIfError(iFs.Connect());
hgs
parents:
diff changeset
   103
    User::LeaveIfError(iTz.Connect());
hgs
parents:
diff changeset
   104
    
hgs
parents:
diff changeset
   105
    iState = EIdle;
hgs
parents:
diff changeset
   106
    iListingMode = ENormalEntries;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
    iSortMode = EFileBrowserCmdViewSortByName;
hgs
parents:
diff changeset
   109
    iOrderMode = EFileBrowserCmdViewOrderAscending;
hgs
parents:
diff changeset
   110
    iCurrentPath = KNullDesC;
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    iFileOps = CFileBrowserFileOps::NewL(iEngine);
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
    iDriveEntryList = new(ELeave) CDriveEntryList(8);
hgs
parents:
diff changeset
   115
    iFileEntryList = new(ELeave) CFileEntryList(64);
hgs
parents:
diff changeset
   116
    iFindFileEntryList = new(ELeave) CFileEntryList(64);
hgs
parents:
diff changeset
   117
    iAppIconList = new(ELeave) CAppIconList(16);
hgs
parents:
diff changeset
   118
    iClipBoardList = new(ELeave) CFileEntryList(64);
hgs
parents:
diff changeset
   119
    iCurrentSelectionList = new(ELeave) CFileEntryList(64);
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    iDocHandler = CDocumentHandler::NewL();
hgs
parents:
diff changeset
   122
//    iDocHandler->SetExitObserver(this);
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    // set defaults to the search settings
hgs
parents:
diff changeset
   125
    iSearchAttributes.iSearchDir = KNullDesC;
hgs
parents:
diff changeset
   126
    iSearchAttributes.iWildCards = _L("*.jpg");
hgs
parents:
diff changeset
   127
    iSearchAttributes.iTextInFile = KNullDesC;
hgs
parents:
diff changeset
   128
    iSearchAttributes.iMinSize = 0;
hgs
parents:
diff changeset
   129
    iSearchAttributes.iMaxSize = 999999999;
hgs
parents:
diff changeset
   130
    iSearchAttributes.iMinDate = TDateTime(1980, EJanuary,   0,0,0,0,0);
hgs
parents:
diff changeset
   131
    iSearchAttributes.iMaxDate = TDateTime(2060, EDecember, 30,0,0,0,0);
hgs
parents:
diff changeset
   132
    iSearchAttributes.iRecurse = ETrue;
hgs
parents:
diff changeset
   133
    
hgs
parents:
diff changeset
   134
    // init the command array
hgs
parents:
diff changeset
   135
    iCommandArray = new(ELeave) CCommandArray(64);
hgs
parents:
diff changeset
   136
        
hgs
parents:
diff changeset
   137
    // get current path from settings
hgs
parents:
diff changeset
   138
    if (iEngine->Settings().iRememberLastPath)
hgs
parents:
diff changeset
   139
        {
hgs
parents:
diff changeset
   140
        TFileName settingPath = iEngine->Settings().iLastPath;
hgs
parents:
diff changeset
   141
        if (BaflUtils::PathExists(iFs, settingPath))
hgs
parents:
diff changeset
   142
            iCurrentPath = settingPath;
hgs
parents:
diff changeset
   143
        
hgs
parents:
diff changeset
   144
        if (iCurrentPath != KNullDesC)
hgs
parents:
diff changeset
   145
            GetDriveListL();
hgs
parents:
diff changeset
   146
        }
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    CActiveScheduler::Add(this);
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
CFileBrowserFileUtils::~CFileBrowserFileUtils()
hgs
parents:
diff changeset
   154
	{
hgs
parents:
diff changeset
   155
	Cancel();
hgs
parents:
diff changeset
   156
	
hgs
parents:
diff changeset
   157
	// save current path from settings
hgs
parents:
diff changeset
   158
    if (iEngine->Settings().iRememberLastPath)
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        iEngine->Settings().iLastPath = iCurrentPath;
hgs
parents:
diff changeset
   161
        TRAP_IGNORE(iEngine->SaveSettingsL(EFalse));
hgs
parents:
diff changeset
   162
        }
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
//    if (iWaitDialog)
hgs
parents:
diff changeset
   165
//        TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); 
hgs
parents:
diff changeset
   166
//     
hgs
parents:
diff changeset
   167
//    if (iProgressDialog)
hgs
parents:
diff changeset
   168
//        TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
hgs
parents:
diff changeset
   169
    
hgs
parents:
diff changeset
   170
        delete iFileOps;
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        delete iDocHandler;
hgs
parents:
diff changeset
   173
	
hgs
parents:
diff changeset
   174
//	if (iOpenFileService)
hgs
parents:
diff changeset
   175
//	    delete iOpenFileService;
hgs
parents:
diff changeset
   176
	
hgs
parents:
diff changeset
   177
        delete iCurrentSelectionList;
hgs
parents:
diff changeset
   178
        delete iClipBoardList;
hgs
parents:
diff changeset
   179
        delete iAppIconList;
hgs
parents:
diff changeset
   180
        delete iFindFileEntryList;
hgs
parents:
diff changeset
   181
        delete iFileEntryList;
hgs
parents:
diff changeset
   182
        delete iDriveEntryList;
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
        delete iFileMan;
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
        if (iCommandArray)
hgs
parents:
diff changeset
   187
            {
hgs
parents:
diff changeset
   188
            ResetCommandArray();
hgs
parents:
diff changeset
   189
            delete iCommandArray;
hgs
parents:
diff changeset
   190
            }
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
        iTz.Close();
hgs
parents:
diff changeset
   193
        iFs.Close();
hgs
parents:
diff changeset
   194
        iTimer.Close();
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
void CFileBrowserFileUtils::DoCancel()
hgs
parents:
diff changeset
   200
	{
hgs
parents:
diff changeset
   201
    iTimer.Cancel();
hgs
parents:
diff changeset
   202
	}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
void CFileBrowserFileUtils::StartExecutingCommandsL(const TDesC& aLabel)
hgs
parents:
diff changeset
   207
    {
hgs
parents:
diff changeset
   208
    if (iCommandArray->Count() >= 2)
hgs
parents:
diff changeset
   209
        {
hgs
parents:
diff changeset
   210
        // init progress bar
hgs
parents:
diff changeset
   211
//        iProgressDialog = new(ELeave) CAknProgressDialog((reinterpret_cast<CEikDialog**>(&iProgressDialog)), ETrue);
hgs
parents:
diff changeset
   212
//        iProgressDialog->SetCallback(this);
hgs
parents:
diff changeset
   213
//        iProgressDialog->PrepareLC(R_GENERAL_PROGRESS_NOTE);
hgs
parents:
diff changeset
   214
//        iProgressDialog->SetCurrentLabelL( EAknCtNote, aLabel );
hgs
parents:
diff changeset
   215
//        iProgressInfo = iProgressDialog->GetProgressInfoL();
hgs
parents:
diff changeset
   216
//        iProgressInfo->SetFinalValue( CommandArrayCount() );
hgs
parents:
diff changeset
   217
//        iProgressDialog->RunLD();
hgs
parents:
diff changeset
   218
//        iProgressDialog->MakeVisible( ETrue );        
hgs
parents:
diff changeset
   219
        iEngine->FileBrowserUI()->ShowProgressDialog(aLabel, 0, CommandArrayCount());
hgs
parents:
diff changeset
   220
        isProgressDialog = ETrue;
hgs
parents:
diff changeset
   221
        }
hgs
parents:
diff changeset
   222
    else if (iCommandArray->Count() >= 1)
hgs
parents:
diff changeset
   223
        {
hgs
parents:
diff changeset
   224
        // init wait dialog
hgs
parents:
diff changeset
   225
//        iWaitDialog = new(ELeave) CAknWaitDialog((reinterpret_cast<CEikDialog**>(&iWaitDialog)), ETrue);
hgs
parents:
diff changeset
   226
//        iWaitDialog->SetCallback(this);
hgs
parents:
diff changeset
   227
//        iWaitDialog->PrepareLC(R_GENERAL_WAIT_NOTE);
hgs
parents:
diff changeset
   228
//        iWaitDialog->SetTextL( aLabel );
hgs
parents:
diff changeset
   229
//        iWaitDialog->RunLD();
hgs
parents:
diff changeset
   230
        iEngine->FileBrowserUI()->ShowWaitDialog(aLabel);
hgs
parents:
diff changeset
   231
        isWaitDialog = ETrue;
hgs
parents:
diff changeset
   232
        }
hgs
parents:
diff changeset
   233
    else
hgs
parents:
diff changeset
   234
        {
hgs
parents:
diff changeset
   235
        // no commands, just do nothing
hgs
parents:
diff changeset
   236
        return;
hgs
parents:
diff changeset
   237
        }
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
    // start with the first operation
hgs
parents:
diff changeset
   241
    iCurrentEntry = 0;
hgs
parents:
diff changeset
   242
    iSucceededOperations = 0;
hgs
parents:
diff changeset
   243
    iFailedOperations = 0;
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
    // starts executing commands
hgs
parents:
diff changeset
   246
    ExecuteCommand();
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
    
hgs
parents:
diff changeset
   249
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
void CFileBrowserFileUtils::ExecuteCommand()
hgs
parents:
diff changeset
   252
    {
hgs
parents:
diff changeset
   253
    // make sure the engine isn't active, should never happen
hgs
parents:
diff changeset
   254
    __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("FileUtils:IsActive"), 333));
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
    // execute a command after a very short delay (25ms)
hgs
parents:
diff changeset
   257
    if (isWaitDialog)
hgs
parents:
diff changeset
   258
        {
hgs
parents:
diff changeset
   259
        iEngine->FileBrowserUI()->ProcessEvents();
hgs
parents:
diff changeset
   260
        }
hgs
parents:
diff changeset
   261
    if (isProgressDialog)
hgs
parents:
diff changeset
   262
        {
hgs
parents:
diff changeset
   263
        TInt newValue = iCurrentEntry;
hgs
parents:
diff changeset
   264
        iEngine->FileBrowserUI()->SetProgressValue(newValue);
hgs
parents:
diff changeset
   265
        }
hgs
parents:
diff changeset
   266
    iTimer.After(iStatus, 25);
hgs
parents:
diff changeset
   267
    SetActive();
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   271
    
hgs
parents:
diff changeset
   272
void CFileBrowserFileUtils::RunL()
hgs
parents:
diff changeset
   273
    {
hgs
parents:
diff changeset
   274
    TInt err(KErrNone);
hgs
parents:
diff changeset
   275
    TInt currentCommand = iCommandArray->At(iCurrentEntry).iCommandId;
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
    // execute a command from the queue
hgs
parents:
diff changeset
   278
    switch(currentCommand)
hgs
parents:
diff changeset
   279
        {
hgs
parents:
diff changeset
   280
        case EFileBrowserFileOpCommandAttribs:
hgs
parents:
diff changeset
   281
            {
hgs
parents:
diff changeset
   282
            CCommandParamsAttribs* params = static_cast<CCommandParamsAttribs*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   283
            err = iFileOps->Attribs(params->iSourceEntry, params->iSetMask, params->iClearMask, params->iTime, params->iSwitch);
hgs
parents:
diff changeset
   284
            }
hgs
parents:
diff changeset
   285
            break;
hgs
parents:
diff changeset
   286
            
hgs
parents:
diff changeset
   287
        case EFileBrowserFileOpCommandCopy:
hgs
parents:
diff changeset
   288
            {
hgs
parents:
diff changeset
   289
            CCommandParamsCopyOrMove* params = static_cast<CCommandParamsCopyOrMove*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   290
            err = iFileOps->Copy(params->iSourceEntry, params->iTargetPath, params->iSwitch);
hgs
parents:
diff changeset
   291
            }
hgs
parents:
diff changeset
   292
            break;
hgs
parents:
diff changeset
   293
            
hgs
parents:
diff changeset
   294
        case EFileBrowserFileOpCommandMove:
hgs
parents:
diff changeset
   295
            {
hgs
parents:
diff changeset
   296
            CCommandParamsCopyOrMove* params = static_cast<CCommandParamsCopyOrMove*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   297
            err = iFileOps->Copy(params->iSourceEntry, params->iTargetPath, params->iSwitch, ETrue);
hgs
parents:
diff changeset
   298
            }
hgs
parents:
diff changeset
   299
            break;
hgs
parents:
diff changeset
   300
                
hgs
parents:
diff changeset
   301
        case EFileBrowserFileOpCommandRename:
hgs
parents:
diff changeset
   302
            {
hgs
parents:
diff changeset
   303
            CCommandParamsRename* params = static_cast<CCommandParamsRename*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   304
            err = iFileOps->Rename(params->iSourceEntry, params->iTargetPath, params->iSwitch);
hgs
parents:
diff changeset
   305
            }
hgs
parents:
diff changeset
   306
            break;
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
        case EFileBrowserFileOpCommandDelete:
hgs
parents:
diff changeset
   309
            {
hgs
parents:
diff changeset
   310
            CCommandParamsDelete* params = static_cast<CCommandParamsDelete*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   311
            err = iFileOps->Delete(params->iSourceEntry, params->iSwitch);
hgs
parents:
diff changeset
   312
            }
hgs
parents:
diff changeset
   313
            break;
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
        case EFileBrowserFileOpCommandDriveSnapShot:
hgs
parents:
diff changeset
   316
            {
hgs
parents:
diff changeset
   317
            CCommandParamsDriveSnapShot* params = static_cast<CCommandParamsDriveSnapShot*>(iCommandArray->At(iCurrentEntry).iParameters);
hgs
parents:
diff changeset
   318
            err = iFileOps->DriveSnapShot(params->iSourceDriveLetter, params->iTargetDriveLetter);
hgs
parents:
diff changeset
   319
            }
hgs
parents:
diff changeset
   320
            break;
hgs
parents:
diff changeset
   321
                                                
hgs
parents:
diff changeset
   322
        default:
hgs
parents:
diff changeset
   323
            User::Panic (_L("Unknown command"), 400);
hgs
parents:
diff changeset
   324
            break;
hgs
parents:
diff changeset
   325
        }
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
    
hgs
parents:
diff changeset
   328
    if (err == KErrNone)
hgs
parents:
diff changeset
   329
        {
hgs
parents:
diff changeset
   330
        iSucceededOperations++;
hgs
parents:
diff changeset
   331
        }
hgs
parents:
diff changeset
   332
    else if ( err != KErrCancel )
hgs
parents:
diff changeset
   333
        {
hgs
parents:
diff changeset
   334
        iFailedOperations++;
hgs
parents:
diff changeset
   335
        }
hgs
parents:
diff changeset
   336
        
hgs
parents:
diff changeset
   337
    iLastError = err;            
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
    // check for more commands in queue
hgs
parents:
diff changeset
   340
    TRAP_IGNORE( CheckForMoreCommandsL() );
hgs
parents:
diff changeset
   341
    }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
TInt CFileBrowserFileUtils::RunError(TInt aError)
hgs
parents:
diff changeset
   346
    {
hgs
parents:
diff changeset
   347
    _LIT(KMessage, "Command error %d");
hgs
parents:
diff changeset
   348
    TBuf<128> noteMsg;
hgs
parents:
diff changeset
   349
    noteMsg.Format(KMessage, aError);
hgs
parents:
diff changeset
   350
            
hgs
parents:
diff changeset
   351
    iEngine->EikonEnv()->InfoMsg(noteMsg);
hgs
parents:
diff changeset
   352
    
hgs
parents:
diff changeset
   353
    TRAP_IGNORE( CheckForMoreCommandsL() );
hgs
parents:
diff changeset
   354
    
hgs
parents:
diff changeset
   355
    return KErrNone;
hgs
parents:
diff changeset
   356
    }
hgs
parents:
diff changeset
   357
hgs
parents:
diff changeset
   358
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
void CFileBrowserFileUtils::CheckForMoreCommandsL()
hgs
parents:
diff changeset
   361
    {
hgs
parents:
diff changeset
   362
    //LOGSTRING("Creator: CCreatorEngine::CheckForMoreCommandsL");
hgs
parents:
diff changeset
   363
    
hgs
parents:
diff changeset
   364
    // update the progress bar
hgs
parents:
diff changeset
   365
//    if (iProgressInfo)
hgs
parents:
diff changeset
   366
//        iProgressInfo->IncrementAndDraw(1);
hgs
parents:
diff changeset
   367
hgs
parents:
diff changeset
   368
	// check if we have more commands to be executed
hgs
parents:
diff changeset
   369
	if (iCurrentEntry >= CommandArrayCount() - 1)
hgs
parents:
diff changeset
   370
		{
hgs
parents:
diff changeset
   371
        //LOGSTRING("Creator: CCreatorEngine::CheckForMoreCommandsL all done");
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
        // all done, free resources
hgs
parents:
diff changeset
   374
        ResetCommandArray();
hgs
parents:
diff changeset
   375
        
hgs
parents:
diff changeset
   376
        // deactive secure backup if it was activated by a file command
hgs
parents:
diff changeset
   377
        iFileOps->DeActivateSecureBackUpViaFileOp();
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
        // dismiss any wait/progress dialogs        
hgs
parents:
diff changeset
   380
        if (isWaitDialog)
hgs
parents:
diff changeset
   381
            {
hgs
parents:
diff changeset
   382
            iEngine->FileBrowserUI()->CancelWaitDialog();
hgs
parents:
diff changeset
   383
            isWaitDialog = EFalse;
hgs
parents:
diff changeset
   384
            }
hgs
parents:
diff changeset
   385
        if (isProgressDialog)
hgs
parents:
diff changeset
   386
            {
hgs
parents:
diff changeset
   387
            iEngine->FileBrowserUI()->CancelProgressDialog();
hgs
parents:
diff changeset
   388
            isProgressDialog = EFalse;
hgs
parents:
diff changeset
   389
            }
hgs
parents:
diff changeset
   390
//        if (iWaitDialog)
hgs
parents:
diff changeset
   391
//            {
hgs
parents:
diff changeset
   392
//            TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); 
hgs
parents:
diff changeset
   393
//            iWaitDialog = NULL;
hgs
parents:
diff changeset
   394
//            }
hgs
parents:
diff changeset
   395
//        if (iProgressDialog)
hgs
parents:
diff changeset
   396
//            {
hgs
parents:
diff changeset
   397
//            TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
hgs
parents:
diff changeset
   398
//            iProgressDialog = NULL;
hgs
parents:
diff changeset
   399
//            }
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
        // show result note
hgs
parents:
diff changeset
   403
        if ( iSucceededOperations == 0 && iFailedOperations == 0 )
hgs
parents:
diff changeset
   404
            {
hgs
parents:
diff changeset
   405
            // single operation cancelled -> show nothing
hgs
parents:
diff changeset
   406
            }
hgs
parents:
diff changeset
   407
        else if (iSucceededOperations == 1 && iFailedOperations == 0)    
hgs
parents:
diff changeset
   408
            {
hgs
parents:
diff changeset
   409
            _LIT(KMessage, "Operation succeeded");
hgs
parents:
diff changeset
   410
            iEngine->FileBrowserUI()->ShowConfirmationNote(KMessage);
hgs
parents:
diff changeset
   411
            }
hgs
parents:
diff changeset
   412
        else if (iSucceededOperations > 0 && iFailedOperations == 0)    
hgs
parents:
diff changeset
   413
            {
hgs
parents:
diff changeset
   414
            _LIT(KMessage, "%d operations succeeded");
hgs
parents:
diff changeset
   415
            TBuf<128> noteMsg;
hgs
parents:
diff changeset
   416
            noteMsg.Format(KMessage, iSucceededOperations);
hgs
parents:
diff changeset
   417
            iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg);
hgs
parents:
diff changeset
   418
            }
hgs
parents:
diff changeset
   419
        else if (iSucceededOperations == 0 && iFailedOperations > 1)    
hgs
parents:
diff changeset
   420
            {
hgs
parents:
diff changeset
   421
            _LIT(KMessage, "%d operations failed");
hgs
parents:
diff changeset
   422
            TBuf<128> noteMsg;
hgs
parents:
diff changeset
   423
            noteMsg.Format(KMessage, iFailedOperations);
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
            iEngine->FileBrowserUI()->ShowErrorNote(noteMsg);
hgs
parents:
diff changeset
   426
            }
hgs
parents:
diff changeset
   427
        else if (iSucceededOperations > 0 && iFailedOperations > 0)    
hgs
parents:
diff changeset
   428
            {
hgs
parents:
diff changeset
   429
            _LIT(KMessage, "%d operations succeeded, %d failed");
hgs
parents:
diff changeset
   430
            TBuf<128> noteMsg;
hgs
parents:
diff changeset
   431
            noteMsg.Format(KMessage, iSucceededOperations, iFailedOperations);
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
            iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
   434
            }
hgs
parents:
diff changeset
   435
        else    
hgs
parents:
diff changeset
   436
            {
hgs
parents:
diff changeset
   437
            iEngine->FileBrowserUI()->ShowErrorNote(ResolveErrorMessage(iLastError));
hgs
parents:
diff changeset
   438
            }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
        RefreshViewL();
hgs
parents:
diff changeset
   441
        iEngine->FileBrowserUI()->NotifyModelHasChanged();
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
            }
hgs
parents:
diff changeset
   444
	else
hgs
parents:
diff changeset
   445
            {
hgs
parents:
diff changeset
   446
            // maintain requests
hgs
parents:
diff changeset
   447
            iCurrentEntry++;
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
            //LOGSTRING2("Creator: CCreatorEngine::CheckForMoreCommandsL iCurrentEntry=%d", iCurrentEntry);
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
            ExecuteCommand();
hgs
parents:
diff changeset
   452
            }
hgs
parents:
diff changeset
   453
    }    
hgs
parents:
diff changeset
   454
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
// This callback function is called when cancel button of the progress bar was pressed
hgs
parents:
diff changeset
   457
void CFileBrowserFileUtils::DialogDismissedL(/*TInt aButtonId*/)
hgs
parents:
diff changeset
   458
    {
hgs
parents:
diff changeset
   459
//    iProgressDialog = NULL;
hgs
parents:
diff changeset
   460
//    iProgressInfo = NULL;
hgs
parents:
diff changeset
   461
//    iWaitDialog = NULL;
hgs
parents:
diff changeset
   462
    
hgs
parents:
diff changeset
   463
    // check if cancel button was pressed
hgs
parents:
diff changeset
   464
//    if (aButtonId == EAknSoftkeyCancel)
hgs
parents:
diff changeset
   465
//        {
hgs
parents:
diff changeset
   466
        // cancel the active object, command executer 
hgs
parents:
diff changeset
   467
        Cancel();
hgs
parents:
diff changeset
   468
        
hgs
parents:
diff changeset
   469
        iFileOps->CancelOp();
hgs
parents:
diff changeset
   470
        
hgs
parents:
diff changeset
   471
        ResetCommandArray();
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
        isProgressDialog = EFalse;
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Cancelled"), _L(""));
hgs
parents:
diff changeset
   476
//        }
hgs
parents:
diff changeset
   477
    }
hgs
parents:
diff changeset
   478
    
hgs
parents:
diff changeset
   479
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
void CFileBrowserFileUtils::AppendToCommandArrayL(TInt aCommand, CCommandParamsBase* aParameters)
hgs
parents:
diff changeset
   482
    {
hgs
parents:
diff changeset
   483
    if (iCommandArray)
hgs
parents:
diff changeset
   484
        iCommandArray->AppendL( TCommand(aCommand, aParameters) );
hgs
parents:
diff changeset
   485
    else
hgs
parents:
diff changeset
   486
        User::Leave(KErrNotReady);
hgs
parents:
diff changeset
   487
    }
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   490
hgs
parents:
diff changeset
   491
TInt CFileBrowserFileUtils::CommandArrayCount() const
hgs
parents:
diff changeset
   492
    {
hgs
parents:
diff changeset
   493
    TInt count(0);
hgs
parents:
diff changeset
   494
    
hgs
parents:
diff changeset
   495
    if (iCommandArray)
hgs
parents:
diff changeset
   496
        count = iCommandArray->Count();
hgs
parents:
diff changeset
   497
    
hgs
parents:
diff changeset
   498
    return count;
hgs
parents:
diff changeset
   499
    }
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
void CFileBrowserFileUtils::ResetCommandArray()
hgs
parents:
diff changeset
   504
    {
hgs
parents:
diff changeset
   505
    // delete params first
hgs
parents:
diff changeset
   506
    for (TInt i=0; i<CommandArrayCount(); i++)
hgs
parents:
diff changeset
   507
        {
hgs
parents:
diff changeset
   508
        if ( iCommandArray->At(i).iParameters )
hgs
parents:
diff changeset
   509
            {
hgs
parents:
diff changeset
   510
            delete iCommandArray->At(i).iParameters;
hgs
parents:
diff changeset
   511
            iCommandArray->At(i).iParameters = NULL;
hgs
parents:
diff changeset
   512
            }
hgs
parents:
diff changeset
   513
        }
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    // reset the entries
hgs
parents:
diff changeset
   516
    iCommandArray->Reset();
hgs
parents:
diff changeset
   517
    }
hgs
parents:
diff changeset
   518
                    
hgs
parents:
diff changeset
   519
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
void CFileBrowserFileUtils::HandleSettingsChangeL()
hgs
parents:
diff changeset
   522
    {
hgs
parents:
diff changeset
   523
	// TODO
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
//    if (iEngine->FileListContainer())
hgs
parents:
diff changeset
   526
//        {
hgs
parents:
diff changeset
   527
//        iEngine->FileListContainer()->SetScreenLayoutL(iEngine->Settings().iDisplayMode);
hgs
parents:
diff changeset
   528
//        iEngine->FileListContainer()->CreateListBoxL(iEngine->Settings().iFileViewMode);
hgs
parents:
diff changeset
   529
        //iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
hgs
parents:
diff changeset
   530
        RefreshViewL();
hgs
parents:
diff changeset
   531
//        }
hgs
parents:
diff changeset
   532
    }
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
void CFileBrowserFileUtils::SetSortModeL(TInt aSortMode)
hgs
parents:
diff changeset
   537
    {
hgs
parents:
diff changeset
   538
    iSortMode = aSortMode;
hgs
parents:
diff changeset
   539
    RefreshViewL();
hgs
parents:
diff changeset
   540
    }
hgs
parents:
diff changeset
   541
    
hgs
parents:
diff changeset
   542
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
void CFileBrowserFileUtils::SetOrderModeL(TInt aOrderMode)
hgs
parents:
diff changeset
   545
    {
hgs
parents:
diff changeset
   546
    iOrderMode = aOrderMode;
hgs
parents:
diff changeset
   547
    RefreshViewL();
hgs
parents:
diff changeset
   548
    }
hgs
parents:
diff changeset
   549
hgs
parents:
diff changeset
   550
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
TKeyResponse CFileBrowserFileUtils::HandleOfferKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
hgs
parents:
diff changeset
   553
    {
hgs
parents:
diff changeset
   554
	// TODO
hgs
parents:
diff changeset
   555
	/*
hgs
parents:
diff changeset
   556
    if(aType != EEventKey)
hgs
parents:
diff changeset
   557
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   558
    
hgs
parents:
diff changeset
   559
    TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift) ||
hgs
parents:
diff changeset
   560
                            (aKeyEvent.iModifiers & EModifierLeftShift) ||
hgs
parents:
diff changeset
   561
                            (aKeyEvent.iModifiers & EModifierRightShift);
hgs
parents:
diff changeset
   562
    TBool controlKeyPressed = (aKeyEvent.iModifiers & EModifierCtrl) || 
hgs
parents:
diff changeset
   563
                              (aKeyEvent.iModifiers & EModifierRightCtrl); 
hgs
parents:
diff changeset
   564
    
hgs
parents:
diff changeset
   565
    // handle left arrow key press
hgs
parents:
diff changeset
   566
    if (aKeyEvent.iCode == EKeyLeftArrow)
hgs
parents:
diff changeset
   567
        {
hgs
parents:
diff changeset
   568
        MoveUpOneLevelL();
hgs
parents:
diff changeset
   569
        return EKeyWasConsumed;
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
    
hgs
parents:
diff changeset
   572
    // handle right arrow key press
hgs
parents:
diff changeset
   573
    else if (aKeyEvent.iCode == EKeyRightArrow)
hgs
parents:
diff changeset
   574
        {
hgs
parents:
diff changeset
   575
        if (IsDriveListViewActive() && iDriveEntryList->Count() > 0)
hgs
parents:
diff changeset
   576
            {
hgs
parents:
diff changeset
   577
            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   578
            return EKeyWasConsumed;
hgs
parents:
diff changeset
   579
            }
hgs
parents:
diff changeset
   580
        else if (iFileEntryList->Count() > 0)
hgs
parents:
diff changeset
   581
            {
hgs
parents:
diff changeset
   582
            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   583
            return EKeyWasConsumed;
hgs
parents:
diff changeset
   584
            }        
hgs
parents:
diff changeset
   585
        }    
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
    // skip OK/Enter keys when shift or ctrl is pressed because those are needed by the listbox
hgs
parents:
diff changeset
   588
    else if ((aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter) && (shiftKeyPressed || controlKeyPressed))
hgs
parents:
diff changeset
   589
        {
hgs
parents:
diff changeset
   590
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   591
        }
hgs
parents:
diff changeset
   592
    
hgs
parents:
diff changeset
   593
    // handle OK/Enter keys
hgs
parents:
diff changeset
   594
    else if (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter)
hgs
parents:
diff changeset
   595
        {
hgs
parents:
diff changeset
   596
        if (IsDriveListViewActive() && iDriveEntryList->Count() > 0)
hgs
parents:
diff changeset
   597
            {
hgs
parents:
diff changeset
   598
            MoveDownToDirectoryL();
hgs
parents:
diff changeset
   599
            return EKeyWasConsumed;
hgs
parents:
diff changeset
   600
            }
hgs
parents:
diff changeset
   601
        else if (iFileEntryList->Count() > 0)
hgs
parents:
diff changeset
   602
            {
hgs
parents:
diff changeset
   603
            TFileEntry fileEntry = iFileEntryList->At(iEngine->FileListContainer()->CurrentListBoxItemIndex());
hgs
parents:
diff changeset
   604
            
hgs
parents:
diff changeset
   605
            if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
   606
                MoveDownToDirectoryL();
hgs
parents:
diff changeset
   607
            else
hgs
parents:
diff changeset
   608
                OpenCommonFileActionQueryL();
hgs
parents:
diff changeset
   609
            
hgs
parents:
diff changeset
   610
            return EKeyWasConsumed;
hgs
parents:
diff changeset
   611
            } 
hgs
parents:
diff changeset
   612
        }
hgs
parents:
diff changeset
   613
    
hgs
parents:
diff changeset
   614
    // handle Delete/Backspace keys
hgs
parents:
diff changeset
   615
    else if (!iEngine->FileListContainer()->SearchField() && (aKeyEvent.iCode == EKeyBackspace || aKeyEvent.iCode == EKeyDelete) &&
hgs
parents:
diff changeset
   616
             !iEngine->FileUtils()->IsCurrentDriveReadOnly() && !iEngine->FileUtils()->IsDriveListViewActive())
hgs
parents:
diff changeset
   617
        {
hgs
parents:
diff changeset
   618
        DeleteL();
hgs
parents:
diff changeset
   619
        return EKeyWasConsumed;
hgs
parents:
diff changeset
   620
        }
hgs
parents:
diff changeset
   621
    */                      
hgs
parents:
diff changeset
   622
    return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   623
    }        
hgs
parents:
diff changeset
   624
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
void CFileBrowserFileUtils::RefreshViewL()
hgs
parents:
diff changeset
   627
    {
hgs
parents:
diff changeset
   628
//    if (iEngine->FileListContainer())
hgs
parents:
diff changeset
   629
//        {
hgs
parents:
diff changeset
   630
//
hgs
parents:
diff changeset
   631
//        // make sure that the search field is disabled
hgs
parents:
diff changeset
   632
//        iEngine->FileListContainer()->DisableSearchFieldL();
hgs
parents:
diff changeset
   633
        
hgs
parents:
diff changeset
   634
        // read directory listing
hgs
parents:
diff changeset
   635
        GenerateDirectoryDataL();
hgs
parents:
diff changeset
   636
        
hgs
parents:
diff changeset
   637
//        // set an icon array
hgs
parents:
diff changeset
   638
//        iEngine->FileListContainer()->SetListBoxIconArrayL(GenerateIconArrayL());
hgs
parents:
diff changeset
   639
//
hgs
parents:
diff changeset
   640
//        // set text items
hgs
parents:
diff changeset
   641
//        iEngine->FileListContainer()->SetListBoxTextArrayL(GenerateItemTextArrayL());
hgs
parents:
diff changeset
   642
//        }
hgs
parents:
diff changeset
   643
    }
hgs
parents:
diff changeset
   644
    
hgs
parents:
diff changeset
   645
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
//CAknIconArray* CFileBrowserFileUtils::GenerateIconArrayL(TBool aGenerateNewBasicIconArray)
hgs
parents:
diff changeset
   648
//    {
hgs
parents:
diff changeset
   649
//	// TODO
hgs
parents:
diff changeset
   650
//
hgs
parents:
diff changeset
   651
//    CAknIconArray* iconArray = NULL;
hgs
parents:
diff changeset
   652
//
hgs
parents:
diff changeset
   653
//    if (aGenerateNewBasicIconArray)
hgs
parents:
diff changeset
   654
//        {
hgs
parents:
diff changeset
   655
//        iconArray = new(ELeave) CAknIconArray(16);
hgs
parents:
diff changeset
   656
//        }
hgs
parents:
diff changeset
   657
//    else
hgs
parents:
diff changeset
   658
//        {
hgs
parents:
diff changeset
   659
//        if (iEngine->FileListContainer())
hgs
parents:
diff changeset
   660
//            iconArray = iEngine->FileListContainer()->ListBoxIconArrayL();
hgs
parents:
diff changeset
   661
//
hgs
parents:
diff changeset
   662
//        if (!iconArray)
hgs
parents:
diff changeset
   663
//            iconArray = new(ELeave) CAknIconArray(16);
hgs
parents:
diff changeset
   664
//        }
hgs
parents:
diff changeset
   665
//
hgs
parents:
diff changeset
   666
//
hgs
parents:
diff changeset
   667
//    CleanupStack::PushL(iconArray);
hgs
parents:
diff changeset
   668
//
hgs
parents:
diff changeset
   669
//    // generate basic items if not already existing
hgs
parents:
diff changeset
   670
//    if (iconArray->Count() < EFixedIconListLength)
hgs
parents:
diff changeset
   671
//        {
hgs
parents:
diff changeset
   672
//        // reset arrays
hgs
parents:
diff changeset
   673
//        iconArray->Reset();
hgs
parents:
diff changeset
   674
//        iAppIconList->Reset();
hgs
parents:
diff changeset
   675
//
hgs
parents:
diff changeset
   676
//        // get default control color
hgs
parents:
diff changeset
   677
//        TRgb defaultColor;
hgs
parents:
diff changeset
   678
//        defaultColor = iEngine->EikonEnv()->Color(EColorControlText);
hgs
parents:
diff changeset
   679
//
hgs
parents:
diff changeset
   680
//        // create a color icon of the marking indicator
hgs
parents:
diff changeset
   681
//        CFbsBitmap* markBitmap = NULL;
hgs
parents:
diff changeset
   682
//        CFbsBitmap* markBitmapMask = NULL;
hgs
parents:
diff changeset
   683
//
hgs
parents:
diff changeset
   684
//        AknsUtils::CreateColorIconL(AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   685
//                KAknsIIDQgnIndiMarkedAdd,
hgs
parents:
diff changeset
   686
//                KAknsIIDQsnIconColors,
hgs
parents:
diff changeset
   687
//                EAknsCIQsnIconColorsCG13,
hgs
parents:
diff changeset
   688
//                markBitmap,
hgs
parents:
diff changeset
   689
//                markBitmapMask,
hgs
parents:
diff changeset
   690
//                AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   691
//                EMbmAvkonQgn_indi_marked_add,
hgs
parents:
diff changeset
   692
//                EMbmAvkonQgn_indi_marked_add_mask,
hgs
parents:
diff changeset
   693
//                defaultColor
hgs
parents:
diff changeset
   694
//                );
hgs
parents:
diff changeset
   695
//
hgs
parents:
diff changeset
   696
//        // 0 marking indicator
hgs
parents:
diff changeset
   697
//        CGulIcon* markIcon = CGulIcon::NewL(markBitmap, markBitmapMask);
hgs
parents:
diff changeset
   698
//        iconArray->AppendL(markIcon);
hgs
parents:
diff changeset
   699
//
hgs
parents:
diff changeset
   700
//        // 1 empty
hgs
parents:
diff changeset
   701
//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   702
//                                  EMbmAvkonQgn_prop_empty, EMbmAvkonQgn_prop_empty_mask, KAknsIIDQgnPropEmpty);
hgs
parents:
diff changeset
   703
//        // 2 phone memory
hgs
parents:
diff changeset
   704
//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   705
//                                  EMbmAvkonQgn_prop_phone_memc, EMbmAvkonQgn_prop_phone_memc_mask, KAknsIIDQgnPropPhoneMemc);
hgs
parents:
diff changeset
   706
//        // 3 memory card
hgs
parents:
diff changeset
   707
//        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
hgs
parents:
diff changeset
   708
//                                  EMbmAknmemorycarduiQgn_prop_mmc_memc, EMbmAknmemorycarduiQgn_prop_mmc_memc_mask, KAknsIIDQgnPropMmcMemc);
hgs
parents:
diff changeset
   709
//        // 4 memory card disabled
hgs
parents:
diff changeset
   710
//        AppendGulIconToIconArrayL(iconArray, KMemoryCardUiBitmapFile,
hgs
parents:
diff changeset
   711
//                                  EMbmAknmemorycarduiQgn_prop_mmc_non, EMbmAknmemorycarduiQgn_prop_mmc_non_mask, KAknsIIDQgnPropMmcNon);
hgs
parents:
diff changeset
   712
//        // 5 folder
hgs
parents:
diff changeset
   713
//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   714
//                                  EMbmAvkonQgn_prop_folder_small, EMbmAvkonQgn_prop_folder_small_mask, KAknsIIDQgnPropFolderSmall);
hgs
parents:
diff changeset
   715
//        // 6 folder with subfolders
hgs
parents:
diff changeset
   716
//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   717
//                                  EMbmAvkonQgn_prop_folder_sub_small, EMbmAvkonQgn_prop_folder_sub_small_mask, KAknsIIDQgnPropFolderSubSmall);
hgs
parents:
diff changeset
   718
//        // 7 current folder
hgs
parents:
diff changeset
   719
//        AppendGulIconToIconArrayL(iconArray, AknIconUtils::AvkonIconFileName(),
hgs
parents:
diff changeset
   720
//                                  EMbmAvkonQgn_prop_folder_current, EMbmAvkonQgn_prop_folder_current_mask, KAknsIIDQgnPropFolderCurrent);
hgs
parents:
diff changeset
   721
//        }
hgs
parents:
diff changeset
   722
//
hgs
parents:
diff changeset
   723
//    // append custom icons if not in drive list view and setting is enabled
hgs
parents:
diff changeset
   724
//    if (!aGenerateNewBasicIconArray && !IsDriveListViewActive() && iEngine->Settings().iShowAssociatedIcons)
hgs
parents:
diff changeset
   725
//        {
hgs
parents:
diff changeset
   726
//        // init id counter
hgs
parents:
diff changeset
   727
//        TInt idCounter(EFixedIconListLength + iAppIconList->Count());
hgs
parents:
diff changeset
   728
//
hgs
parents:
diff changeset
   729
//        // loop all items in the file list
hgs
parents:
diff changeset
   730
//        for (TInt i=0; i<iFileEntryList->Count(); i++)
hgs
parents:
diff changeset
   731
//            {
hgs
parents:
diff changeset
   732
//            TFileEntry& fileEntry = iFileEntryList->At(i);
hgs
parents:
diff changeset
   733
//
hgs
parents:
diff changeset
   734
//            // just check for normal files
hgs
parents:
diff changeset
   735
//            if (!fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
   736
//                {
hgs
parents:
diff changeset
   737
//                TUid appUid = GetAppUid(fileEntry);
hgs
parents:
diff changeset
   738
//                TInt iconId = AppIconIdForUid(appUid);
hgs
parents:
diff changeset
   739
//
hgs
parents:
diff changeset
   740
//                if (appUid != KNullUid && iconId == KErrNotFound)
hgs
parents:
diff changeset
   741
//                    {
hgs
parents:
diff changeset
   742
//                    // icon not found from the icon array, generate it
hgs
parents:
diff changeset
   743
//                    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
   744
//                    CFbsBitmap* mask = NULL;
hgs
parents:
diff changeset
   745
//                    CGulIcon* appIcon = NULL;
hgs
parents:
diff changeset
   746
//
hgs
parents:
diff changeset
   747
//                    TRAPD(err,
hgs
parents:
diff changeset
   748
//                        AknsUtils::CreateAppIconLC(AknsUtils::SkinInstance(), appUid, EAknsAppIconTypeList, bitmap, mask);
hgs
parents:
diff changeset
   749
//                        appIcon = CGulIcon::NewL(bitmap, mask);
hgs
parents:
diff changeset
   750
//                        CleanupStack::Pop(2); //bitmap, mask
hgs
parents:
diff changeset
   751
//                        );
hgs
parents:
diff changeset
   752
//
hgs
parents:
diff changeset
   753
//                    if (err == KErrNone)
hgs
parents:
diff changeset
   754
//                        {
hgs
parents:
diff changeset
   755
//                        TAppIcon appIconEntry;
hgs
parents:
diff changeset
   756
//                        appIconEntry.iId = idCounter;
hgs
parents:
diff changeset
   757
//                        appIconEntry.iUid = appUid;
hgs
parents:
diff changeset
   758
//
hgs
parents:
diff changeset
   759
//                        appIcon->SetBitmapsOwnedExternally(EFalse);
hgs
parents:
diff changeset
   760
//                        iconArray->AppendL(appIcon);
hgs
parents:
diff changeset
   761
//                        iAppIconList->AppendL(appIconEntry);
hgs
parents:
diff changeset
   762
//
hgs
parents:
diff changeset
   763
//                        fileEntry.iIconId = idCounter;
hgs
parents:
diff changeset
   764
//
hgs
parents:
diff changeset
   765
//                        idCounter++;
hgs
parents:
diff changeset
   766
//                        }
hgs
parents:
diff changeset
   767
//                    else
hgs
parents:
diff changeset
   768
//                        {
hgs
parents:
diff changeset
   769
//                        delete bitmap;
hgs
parents:
diff changeset
   770
//                        delete mask;
hgs
parents:
diff changeset
   771
//
hgs
parents:
diff changeset
   772
//                        TAppIcon appIconEntry;
hgs
parents:
diff changeset
   773
//                        appIconEntry.iId = EFixedIconEmpty;
hgs
parents:
diff changeset
   774
//                        appIconEntry.iUid = appUid;
hgs
parents:
diff changeset
   775
//
hgs
parents:
diff changeset
   776
//                        iAppIconList->AppendL(appIconEntry);
hgs
parents:
diff changeset
   777
//                        }
hgs
parents:
diff changeset
   778
//                    }
hgs
parents:
diff changeset
   779
//
hgs
parents:
diff changeset
   780
//                else if (appUid != KNullUid && iconId >= 0)
hgs
parents:
diff changeset
   781
//                    {
hgs
parents:
diff changeset
   782
//                    // we already have already generated an icon for this uid, use it
hgs
parents:
diff changeset
   783
//                    fileEntry.iIconId = iconId;
hgs
parents:
diff changeset
   784
//                    }
hgs
parents:
diff changeset
   785
//                }
hgs
parents:
diff changeset
   786
//            }
hgs
parents:
diff changeset
   787
//        }
hgs
parents:
diff changeset
   788
//
hgs
parents:
diff changeset
   789
//    CleanupStack::Pop(); //iconArray
hgs
parents:
diff changeset
   790
//	return iconArray;
hgs
parents:
diff changeset
   791
//
hgs
parents:
diff changeset
   792
//	}
hgs
parents:
diff changeset
   793
//
hgs
parents:
diff changeset
   794
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
//void CFileBrowserFileUtils::AppendGulIconToIconArrayL(CAknIconArray* aIconArray, const TDesC& aIconFile, TInt aIconId, TInt aMaskId, const TAknsItemID aAknsItemId)
hgs
parents:
diff changeset
   797
//    {
hgs
parents:
diff changeset
   798
//    CGulIcon* icon = AknsUtils::CreateGulIconL(
hgs
parents:
diff changeset
   799
//            AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   800
//            aAknsItemId,
hgs
parents:
diff changeset
   801
//            aIconFile,
hgs
parents:
diff changeset
   802
//            aIconId,
hgs
parents:
diff changeset
   803
//            aMaskId);
hgs
parents:
diff changeset
   804
//    CleanupStack::PushL(icon);
hgs
parents:
diff changeset
   805
//	
hgs
parents:
diff changeset
   806
//	icon->SetBitmapsOwnedExternally(EFalse);
hgs
parents:
diff changeset
   807
//	aIconArray->AppendL(icon);
hgs
parents:
diff changeset
   808
//	
hgs
parents:
diff changeset
   809
//	CleanupStack::Pop(); //icon          
hgs
parents:
diff changeset
   810
//    }
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
TInt CFileBrowserFileUtils::AppIconIdForUid(TUid aUid)
hgs
parents:
diff changeset
   815
    {
hgs
parents:
diff changeset
   816
    TInt result(KErrNotFound);
hgs
parents:
diff changeset
   817
    
hgs
parents:
diff changeset
   818
    for (TInt i=0; i<iAppIconList->Count(); i++)
hgs
parents:
diff changeset
   819
        {
hgs
parents:
diff changeset
   820
        if (iAppIconList->At(i).iUid == aUid)
hgs
parents:
diff changeset
   821
            {
hgs
parents:
diff changeset
   822
            result = iAppIconList->At(i).iId;
hgs
parents:
diff changeset
   823
            break;
hgs
parents:
diff changeset
   824
            }
hgs
parents:
diff changeset
   825
        }
hgs
parents:
diff changeset
   826
    
hgs
parents:
diff changeset
   827
    return result;
hgs
parents:
diff changeset
   828
    }
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   831
hgs
parents:
diff changeset
   832
TUid CFileBrowserFileUtils::GetAppUid(const TFileEntry &aFileEntry)
hgs
parents:
diff changeset
   833
    {
hgs
parents:
diff changeset
   834
    TFileName fullPath;
hgs
parents:
diff changeset
   835
    fullPath.Copy(aFileEntry.iPath);
hgs
parents:
diff changeset
   836
    fullPath.Append(aFileEntry.iEntry.iName);
hgs
parents:
diff changeset
   837
    
hgs
parents:
diff changeset
   838
    TParse parsedName;
hgs
parents:
diff changeset
   839
    parsedName.Set(fullPath, NULL, NULL);
hgs
parents:
diff changeset
   840
hgs
parents:
diff changeset
   841
    // this will boost performance in \sys\bin folder    
hgs
parents:
diff changeset
   842
    if (parsedName.Ext().CompareF(_L(".dll")) == 0 || parsedName.Ext().CompareF(_L(".rsc")) == 0)
hgs
parents:
diff changeset
   843
        return KNullUid;
hgs
parents:
diff changeset
   844
    
hgs
parents:
diff changeset
   845
    TInt err1(KErrNone), err2(KErrNone);
hgs
parents:
diff changeset
   846
    TUid appUid;
hgs
parents:
diff changeset
   847
    TDataType dataType;
hgs
parents:
diff changeset
   848
    TBool isProgram;
hgs
parents:
diff changeset
   849
    
hgs
parents:
diff changeset
   850
    err1 = iEngine->LsSession().AppForDocument(fullPath, appUid, dataType);
hgs
parents:
diff changeset
   851
    err2 = iEngine->LsSession().IsProgram(fullPath, isProgram);
hgs
parents:
diff changeset
   852
        
hgs
parents:
diff changeset
   853
    if (err1 == KErrNone && err2 == KErrNone)
hgs
parents:
diff changeset
   854
        {
hgs
parents:
diff changeset
   855
        if (isProgram)
hgs
parents:
diff changeset
   856
            {
hgs
parents:
diff changeset
   857
            // get the real app Uid from the app list
hgs
parents:
diff changeset
   858
            TApaAppInfo appInfo;
hgs
parents:
diff changeset
   859
            iEngine->LsSession().GetAllApps();
hgs
parents:
diff changeset
   860
hgs
parents:
diff changeset
   861
            while (iEngine->LsSession().GetNextApp(appInfo) == KErrNone)
hgs
parents:
diff changeset
   862
                {
hgs
parents:
diff changeset
   863
                if (fullPath.CompareF(appInfo.iFullName) == 0)
hgs
parents:
diff changeset
   864
                    return appInfo.iUid;
hgs
parents:
diff changeset
   865
                }
hgs
parents:
diff changeset
   866
            }
hgs
parents:
diff changeset
   867
        else
hgs
parents:
diff changeset
   868
            {
hgs
parents:
diff changeset
   869
            // return the app Uid associated for it
hgs
parents:
diff changeset
   870
            return appUid;
hgs
parents:
diff changeset
   871
            }            
hgs
parents:
diff changeset
   872
        }
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
    return KNullUid;
hgs
parents:
diff changeset
   875
    }
hgs
parents:
diff changeset
   876
hgs
parents:
diff changeset
   877
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
CFileEntryList* CFileBrowserFileUtils::FileEntries() const
hgs
parents:
diff changeset
   880
{
hgs
parents:
diff changeset
   881
    return iFileEntryList;
hgs
parents:
diff changeset
   882
}
hgs
parents:
diff changeset
   883
hgs
parents:
diff changeset
   884
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   885
hgs
parents:
diff changeset
   886
CDriveEntryList* CFileBrowserFileUtils::DriveEntries() const
hgs
parents:
diff changeset
   887
{
hgs
parents:
diff changeset
   888
    return iDriveEntryList;
hgs
parents:
diff changeset
   889
}
hgs
parents:
diff changeset
   890
hgs
parents:
diff changeset
   891
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   892
hgs
parents:
diff changeset
   893
TFileName CFileBrowserFileUtils::ResolveErrorMessage(TInt aErrCode)
hgs
parents:
diff changeset
   894
    {
hgs
parents:
diff changeset
   895
    TPtrC buf;
hgs
parents:
diff changeset
   896
    CTextResolver* textResolver = CTextResolver::NewLC(*iEngine->EikonEnv());
hgs
parents:
diff changeset
   897
    buf.Set(textResolver->ResolveErrorString(aErrCode, CTextResolver::ECtxNoCtxNoSeparator));
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
    TFileName errorMessage;
hgs
parents:
diff changeset
   900
    errorMessage.Copy(buf);
hgs
parents:
diff changeset
   901
hgs
parents:
diff changeset
   902
    CleanupStack::PopAndDestroy();  //textResolver
hgs
parents:
diff changeset
   903
    return errorMessage;
hgs
parents:
diff changeset
   904
    }
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
//// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   907
//
hgs
parents:
diff changeset
   908
//CDesCArray* CFileBrowserFileUtils::GenerateItemTextArrayL()
hgs
parents:
diff changeset
   909
//    {
hgs
parents:
diff changeset
   910
//    iTextArray = new(ELeave) CDesCArrayFlat(64);
hgs
parents:
diff changeset
   911
////    CleanupStack::PushL(textArray);
hgs
parents:
diff changeset
   912
//
hgs
parents:
diff changeset
   913
//    if (IsDriveListViewActive())
hgs
parents:
diff changeset
   914
//        {
hgs
parents:
diff changeset
   915
//        _LIT(KSimpleDriveEntry, "%d\t%c: <%S>\t\t");
hgs
parents:
diff changeset
   916
//        _LIT(KExtendedDriveEntry, "%d\t%c: <%S>\t%LD / %LD kB\t");
hgs
parents:
diff changeset
   917
//
hgs
parents:
diff changeset
   918
//        for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
   919
//            {
hgs
parents:
diff changeset
   920
//            TFileName textEntry;
hgs
parents:
diff changeset
   921
//            TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
   922
//
hgs
parents:
diff changeset
   923
//            if (iEngine->Settings().iFileViewMode == EFileViewModeSimple)
hgs
parents:
diff changeset
   924
//                {
hgs
parents:
diff changeset
   925
//                textEntry.Format(KSimpleDriveEntry, driveEntry.iIconId, TUint(driveEntry.iLetter), &driveEntry.iMediaTypeDesc);
hgs
parents:
diff changeset
   926
//                }
hgs
parents:
diff changeset
   927
//            else if (iEngine->Settings().iFileViewMode == EFileViewModeExtended)
hgs
parents:
diff changeset
   928
//                {
hgs
parents:
diff changeset
   929
//                textEntry.Format(KExtendedDriveEntry, driveEntry.iIconId, TUint(driveEntry.iLetter), &driveEntry.iMediaTypeDesc, driveEntry.iVolumeInfo.iFree/1024, driveEntry.iVolumeInfo.iSize/1024);
hgs
parents:
diff changeset
   930
//                }
hgs
parents:
diff changeset
   931
//
hgs
parents:
diff changeset
   932
//            iTextArray->AppendL(textEntry);
hgs
parents:
diff changeset
   933
//            }
hgs
parents:
diff changeset
   934
//        }
hgs
parents:
diff changeset
   935
//
hgs
parents:
diff changeset
   936
//    else
hgs
parents:
diff changeset
   937
//        {
hgs
parents:
diff changeset
   938
//        _LIT(KSimpleFileEntry, "%d\t%S\t\t");
hgs
parents:
diff changeset
   939
//        _LIT(KExtendedFileEntry, "%d\t%S\t%S\t");
hgs
parents:
diff changeset
   940
//
hgs
parents:
diff changeset
   941
//        for (TInt i=0; i<iFileEntryList->Count(); i++)
hgs
parents:
diff changeset
   942
//            {
hgs
parents:
diff changeset
   943
//            TFileName textEntry;
hgs
parents:
diff changeset
   944
//            TFileEntry fileEntry = iFileEntryList->At(i);
hgs
parents:
diff changeset
   945
//
hgs
parents:
diff changeset
   946
//            // format text line entries
hgs
parents:
diff changeset
   947
//            if (iEngine->Settings().iFileViewMode == EFileViewModeSimple)
hgs
parents:
diff changeset
   948
//                {
hgs
parents:
diff changeset
   949
//                textEntry.Format(KSimpleFileEntry, fileEntry.iIconId, &fileEntry.iEntry.iName);
hgs
parents:
diff changeset
   950
//                }
hgs
parents:
diff changeset
   951
//            else if (iEngine->Settings().iFileViewMode == EFileViewModeExtended)
hgs
parents:
diff changeset
   952
//                {
hgs
parents:
diff changeset
   953
//                TBuf<128> extraData;
hgs
parents:
diff changeset
   954
//
hgs
parents:
diff changeset
   955
//                // append entry date
hgs
parents:
diff changeset
   956
//                TTime entryModified = fileEntry.iEntry.iModified;
hgs
parents:
diff changeset
   957
//                if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
hgs
parents:
diff changeset
   958
//                    {
hgs
parents:
diff changeset
   959
//                    entryModified = fileEntry.iEntry.iModified;
hgs
parents:
diff changeset
   960
//                    }
hgs
parents:
diff changeset
   961
//
hgs
parents:
diff changeset
   962
//                _LIT(KCurrentDate,"%D%M%*Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B");
hgs
parents:
diff changeset
   963
//                entryModified.FormatL(extraData, KCurrentDate);
hgs
parents:
diff changeset
   964
//
hgs
parents:
diff changeset
   965
//                // for a directory append number of entries and for a file the file size
hgs
parents:
diff changeset
   966
//                if (fileEntry.iEntry.IsDir() && fileEntry.iDirEntries >= 0)
hgs
parents:
diff changeset
   967
//                    {
hgs
parents:
diff changeset
   968
//                    extraData.Append(_L(" - "));
hgs
parents:
diff changeset
   969
//                    extraData.AppendNum(fileEntry.iDirEntries);
hgs
parents:
diff changeset
   970
//
hgs
parents:
diff changeset
   971
//                    if (fileEntry.iDirEntries == 1)
hgs
parents:
diff changeset
   972
//                        extraData.Append(_L(" entry"));
hgs
parents:
diff changeset
   973
//                    else
hgs
parents:
diff changeset
   974
//                        extraData.Append(_L(" entries"));
hgs
parents:
diff changeset
   975
//                    }
hgs
parents:
diff changeset
   976
//
hgs
parents:
diff changeset
   977
//                // normal file entry
hgs
parents:
diff changeset
   978
//                else if (!fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
   979
//                    {
hgs
parents:
diff changeset
   980
//                    extraData.Append(_L(" - "));
hgs
parents:
diff changeset
   981
//
hgs
parents:
diff changeset
   982
//                    if (fileEntry.iEntry.iSize < 1024)
hgs
parents:
diff changeset
   983
//                        {
hgs
parents:
diff changeset
   984
//                        extraData.AppendNum(fileEntry.iEntry.iSize);
hgs
parents:
diff changeset
   985
//                        extraData.Append(_L(" B"));
hgs
parents:
diff changeset
   986
//                        }
hgs
parents:
diff changeset
   987
//                    else if (fileEntry.iEntry.iSize < 1024*1024)
hgs
parents:
diff changeset
   988
//                        {
hgs
parents:
diff changeset
   989
//                        TReal sizeKB = (TReal)fileEntry.iEntry.iSize / 1024;
hgs
parents:
diff changeset
   990
//                        extraData.AppendNum(sizeKB, TRealFormat(KDefaultRealWidth, 1));
hgs
parents:
diff changeset
   991
//                        extraData.Append(_L(" kB"));
hgs
parents:
diff changeset
   992
//                        }
hgs
parents:
diff changeset
   993
//                    else
hgs
parents:
diff changeset
   994
//                        {
hgs
parents:
diff changeset
   995
//                        TReal sizeMB = (TReal)fileEntry.iEntry.iSize / (1024*1024);
hgs
parents:
diff changeset
   996
//                        extraData.AppendNum(sizeMB, TRealFormat(KDefaultRealWidth, 1));
hgs
parents:
diff changeset
   997
//                        extraData.Append(_L(" MB"));
hgs
parents:
diff changeset
   998
//                        }
hgs
parents:
diff changeset
   999
//                    }
hgs
parents:
diff changeset
  1000
//
hgs
parents:
diff changeset
  1001
//                // append attribute flags if any
hgs
parents:
diff changeset
  1002
//                TBuf<4> atts;
hgs
parents:
diff changeset
  1003
//                if (fileEntry.iEntry.IsArchive())
hgs
parents:
diff changeset
  1004
//                    atts.Append(_L("A"));
hgs
parents:
diff changeset
  1005
//                if (fileEntry.iEntry.IsHidden())
hgs
parents:
diff changeset
  1006
//                    atts.Append(_L("H"));
hgs
parents:
diff changeset
  1007
//                if (fileEntry.iEntry.IsReadOnly())
hgs
parents:
diff changeset
  1008
//                    atts.Append(_L("R"));
hgs
parents:
diff changeset
  1009
//                if (fileEntry.iEntry.IsSystem())
hgs
parents:
diff changeset
  1010
//                    atts.Append(_L("S"));
hgs
parents:
diff changeset
  1011
//
hgs
parents:
diff changeset
  1012
//                if (atts.Length() > 0)
hgs
parents:
diff changeset
  1013
//                    {
hgs
parents:
diff changeset
  1014
//                    extraData.Append(_L(" - ["));
hgs
parents:
diff changeset
  1015
//                    extraData.Append(atts);
hgs
parents:
diff changeset
  1016
//                    extraData.Append(_L("]"));
hgs
parents:
diff changeset
  1017
//                    }
hgs
parents:
diff changeset
  1018
//
hgs
parents:
diff changeset
  1019
//                // format
hgs
parents:
diff changeset
  1020
//                textEntry.Format(KExtendedFileEntry, fileEntry.iIconId, &fileEntry.iEntry.iName, &extraData);
hgs
parents:
diff changeset
  1021
//                }
hgs
parents:
diff changeset
  1022
//
hgs
parents:
diff changeset
  1023
//            iTextArray->AppendL(textEntry);
hgs
parents:
diff changeset
  1024
//            }
hgs
parents:
diff changeset
  1025
//        }
hgs
parents:
diff changeset
  1026
//
hgs
parents:
diff changeset
  1027
////    CleanupStack::Pop(); //textArray
hgs
parents:
diff changeset
  1028
//    return iTextArray;
hgs
parents:
diff changeset
  1029
//    }
hgs
parents:
diff changeset
  1030
    
hgs
parents:
diff changeset
  1031
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1032
hgs
parents:
diff changeset
  1033
void CFileBrowserFileUtils::GenerateDirectoryDataL()
hgs
parents:
diff changeset
  1034
    {
hgs
parents:
diff changeset
  1035
    if (iListingMode == ENormalEntries)
hgs
parents:
diff changeset
  1036
        {
hgs
parents:
diff changeset
  1037
        if (IsDriveListViewActive())
hgs
parents:
diff changeset
  1038
            GetDriveListL();    
hgs
parents:
diff changeset
  1039
        else
hgs
parents:
diff changeset
  1040
            GetDirectoryListingL();        
hgs
parents:
diff changeset
  1041
        }
hgs
parents:
diff changeset
  1042
    }
hgs
parents:
diff changeset
  1043
hgs
parents:
diff changeset
  1044
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1045
hgs
parents:
diff changeset
  1046
void CFileBrowserFileUtils::GetDriveListL()
hgs
parents:
diff changeset
  1047
    {
hgs
parents:
diff changeset
  1048
    TDriveList driveList;
hgs
parents:
diff changeset
  1049
    
hgs
parents:
diff changeset
  1050
    // get drive listing depending of the support for network drives
hgs
parents:
diff changeset
  1051
    if (iEngine->Settings().iSupportNetworkDrives)
hgs
parents:
diff changeset
  1052
        {
hgs
parents:
diff changeset
  1053
        #ifndef __SERIES60_30__
hgs
parents:
diff changeset
  1054
            #ifndef __SERIES60_31__
hgs
parents:
diff changeset
  1055
                User::LeaveIfError(iFs.DriveList(driveList, KDriveAttAll));
hgs
parents:
diff changeset
  1056
            #endif
hgs
parents:
diff changeset
  1057
        #else    
hgs
parents:
diff changeset
  1058
            User::LeaveIfError(iFs.DriveList(driveList));
hgs
parents:
diff changeset
  1059
        #endif        
hgs
parents:
diff changeset
  1060
        }
hgs
parents:
diff changeset
  1061
    else
hgs
parents:
diff changeset
  1062
        {
hgs
parents:
diff changeset
  1063
        User::LeaveIfError(iFs.DriveList(driveList));
hgs
parents:
diff changeset
  1064
        }
hgs
parents:
diff changeset
  1065
    
hgs
parents:
diff changeset
  1066
    iDriveEntryList->Reset();        
hgs
parents:
diff changeset
  1067
    
hgs
parents:
diff changeset
  1068
    for (TInt i=0; i<KMaxDrives; i++)
hgs
parents:
diff changeset
  1069
        {
hgs
parents:
diff changeset
  1070
        if (driveList[i])
hgs
parents:
diff changeset
  1071
            {
hgs
parents:
diff changeset
  1072
            TDriveEntry driveEntry;
hgs
parents:
diff changeset
  1073
            
hgs
parents:
diff changeset
  1074
            // set default icon
hgs
parents:
diff changeset
  1075
            driveEntry.iIconId = EFixedIconPhoneMemory;
hgs
parents:
diff changeset
  1076
hgs
parents:
diff changeset
  1077
            // get drive letter and number 
hgs
parents:
diff changeset
  1078
            driveEntry.iLetter = 'A' + i;
hgs
parents:
diff changeset
  1079
            iFs.CharToDrive(driveEntry.iLetter, driveEntry.iNumber);
hgs
parents:
diff changeset
  1080
            
hgs
parents:
diff changeset
  1081
            // get volume info and check errors
hgs
parents:
diff changeset
  1082
            if (iFs.Volume(driveEntry.iVolumeInfo, driveEntry.iNumber) == KErrNone)
hgs
parents:
diff changeset
  1083
                {
hgs
parents:
diff changeset
  1084
                // set media type descriptor
hgs
parents:
diff changeset
  1085
                TInt mediaType = driveEntry.iVolumeInfo.iDrive.iType;
hgs
parents:
diff changeset
  1086
                TBool extMountable( EFalse );
hgs
parents:
diff changeset
  1087
                
hgs
parents:
diff changeset
  1088
                if (mediaType == EMediaNotPresent)
hgs
parents:
diff changeset
  1089
                    driveEntry.iMediaTypeDesc = _L("Not present");
hgs
parents:
diff changeset
  1090
                else if (mediaType ==EMediaUnknown )
hgs
parents:
diff changeset
  1091
                    driveEntry.iMediaTypeDesc = _L("Unknown");
hgs
parents:
diff changeset
  1092
                else if (mediaType ==EMediaFloppy )
hgs
parents:
diff changeset
  1093
                    driveEntry.iMediaTypeDesc = _L("Floppy");
hgs
parents:
diff changeset
  1094
                else if (mediaType == EMediaHardDisk)
hgs
parents:
diff changeset
  1095
                    driveEntry.iMediaTypeDesc = _L("Mass storage");
hgs
parents:
diff changeset
  1096
                else if (mediaType == EMediaCdRom)
hgs
parents:
diff changeset
  1097
                    driveEntry.iMediaTypeDesc = _L("CD-ROM");
hgs
parents:
diff changeset
  1098
                else if (mediaType == EMediaRam)
hgs
parents:
diff changeset
  1099
                    driveEntry.iMediaTypeDesc = _L("RAM");
hgs
parents:
diff changeset
  1100
                else if (mediaType == EMediaFlash)
hgs
parents:
diff changeset
  1101
                    driveEntry.iMediaTypeDesc = _L("Flash");
hgs
parents:
diff changeset
  1102
                else if (mediaType == EMediaRom)
hgs
parents:
diff changeset
  1103
                    driveEntry.iMediaTypeDesc = _L("ROM");
hgs
parents:
diff changeset
  1104
                else if (mediaType == EMediaRemote)
hgs
parents:
diff changeset
  1105
                    driveEntry.iMediaTypeDesc = _L("Remote");
hgs
parents:
diff changeset
  1106
                else if (mediaType == EMediaNANDFlash)
hgs
parents:
diff changeset
  1107
                    driveEntry.iMediaTypeDesc = _L("NAND flash");
hgs
parents:
diff changeset
  1108
                
hgs
parents:
diff changeset
  1109
                // get real size of the ROM drive
hgs
parents:
diff changeset
  1110
                if (mediaType == EMediaRom)
hgs
parents:
diff changeset
  1111
                    {
hgs
parents:
diff changeset
  1112
                    TMemoryInfoV1Buf ramMemory;
hgs
parents:
diff changeset
  1113
                    UserHal::MemoryInfo(ramMemory);
hgs
parents:
diff changeset
  1114
                    driveEntry.iVolumeInfo.iSize = ramMemory().iTotalRomInBytes;
hgs
parents:
diff changeset
  1115
                    }
hgs
parents:
diff changeset
  1116
                
hgs
parents:
diff changeset
  1117
                // set attribute descripitions
hgs
parents:
diff changeset
  1118
                if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatNotSupported)
hgs
parents:
diff changeset
  1119
                    driveEntry.iAttributesDesc.Append(_L("Battery not supported"));
hgs
parents:
diff changeset
  1120
                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatGood)
hgs
parents:
diff changeset
  1121
                    driveEntry.iAttributesDesc.Append(_L("Battery good"));
hgs
parents:
diff changeset
  1122
                else if (driveEntry.iVolumeInfo.iDrive.iBattery == EBatLow)
hgs
parents:
diff changeset
  1123
                    driveEntry.iAttributesDesc.Append(_L("Battery low"));
hgs
parents:
diff changeset
  1124
                else
hgs
parents:
diff changeset
  1125
                    driveEntry.iAttributesDesc.Append(_L("Battery state unknown"));
hgs
parents:
diff changeset
  1126
                
hgs
parents:
diff changeset
  1127
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttLocal)
hgs
parents:
diff changeset
  1128
                    driveEntry.iAttributesDesc.Append(_L(" + Local"));
hgs
parents:
diff changeset
  1129
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRom)
hgs
parents:
diff changeset
  1130
                    driveEntry.iAttributesDesc.Append(_L(" + ROM"));
hgs
parents:
diff changeset
  1131
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRedirected)
hgs
parents:
diff changeset
  1132
                    driveEntry.iAttributesDesc.Append(_L("+ Redirected"));
hgs
parents:
diff changeset
  1133
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttSubsted)
hgs
parents:
diff changeset
  1134
                    driveEntry.iAttributesDesc.Append(_L(" + Substed"));
hgs
parents:
diff changeset
  1135
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttInternal)
hgs
parents:
diff changeset
  1136
                    driveEntry.iAttributesDesc.Append(_L(" + Internal"));
hgs
parents:
diff changeset
  1137
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable)
hgs
parents:
diff changeset
  1138
                    {
hgs
parents:
diff changeset
  1139
                    driveEntry.iAttributesDesc.Append(_L(" + Removable"));
hgs
parents:
diff changeset
  1140
#if (!defined __SERIES60_30__ && !defined __SERIES60_31__)
hgs
parents:
diff changeset
  1141
                    TUint drvStatus( 0 );
hgs
parents:
diff changeset
  1142
                    if ( !DriveInfo::GetDriveStatus( iFs, driveEntry.iNumber, drvStatus ) &&
hgs
parents:
diff changeset
  1143
                         drvStatus & DriveInfo::EDriveExternallyMountable &&
hgs
parents:
diff changeset
  1144
                         drvStatus & DriveInfo::EDriveInternal )
hgs
parents:
diff changeset
  1145
                        {
hgs
parents:
diff changeset
  1146
                        extMountable = ETrue;
hgs
parents:
diff changeset
  1147
                        // iMediaTypeDesc already set as "Mass storage" 
hgs
parents:
diff changeset
  1148
                        }
hgs
parents:
diff changeset
  1149
                    else
hgs
parents:
diff changeset
  1150
                        {
hgs
parents:
diff changeset
  1151
                        driveEntry.iMediaTypeDesc = _L("Memory card");
hgs
parents:
diff changeset
  1152
                        }
hgs
parents:
diff changeset
  1153
#else
hgs
parents:
diff changeset
  1154
                    driveEntry.iMediaTypeDesc = _L("Memory card");
hgs
parents:
diff changeset
  1155
#endif
hgs
parents:
diff changeset
  1156
                    }
hgs
parents:
diff changeset
  1157
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemote)
hgs
parents:
diff changeset
  1158
                    driveEntry.iAttributesDesc.Append(_L(" + Remote"));
hgs
parents:
diff changeset
  1159
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttTransaction)
hgs
parents:
diff changeset
  1160
                    driveEntry.iAttributesDesc.Append(_L(" + Transaction"));
hgs
parents:
diff changeset
  1161
                                
hgs
parents:
diff changeset
  1162
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttVariableSize)
hgs
parents:
diff changeset
  1163
                    driveEntry.iAttributesDesc.Append(_L(" + Variable size"));
hgs
parents:
diff changeset
  1164
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDualDensity)
hgs
parents:
diff changeset
  1165
                    driveEntry.iAttributesDesc.Append(_L(" + Dual density"));
hgs
parents:
diff changeset
  1166
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttFormattable)
hgs
parents:
diff changeset
  1167
                    driveEntry.iAttributesDesc.Append(_L(" + Formattable"));
hgs
parents:
diff changeset
  1168
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttWriteProtected)
hgs
parents:
diff changeset
  1169
                    driveEntry.iAttributesDesc.Append(_L(" + Write protected"));
hgs
parents:
diff changeset
  1170
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLockable)
hgs
parents:
diff changeset
  1171
                    driveEntry.iAttributesDesc.Append(_L(" + Lockable"));
hgs
parents:
diff changeset
  1172
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked)
hgs
parents:
diff changeset
  1173
                    driveEntry.iAttributesDesc.Append(_L(" + Locked"));
hgs
parents:
diff changeset
  1174
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttHasPassword)
hgs
parents:
diff changeset
  1175
                    driveEntry.iAttributesDesc.Append(_L(" + Has password"));
hgs
parents:
diff changeset
  1176
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttReadWhileWrite)
hgs
parents:
diff changeset
  1177
                    driveEntry.iAttributesDesc.Append(_L(" + Read while write"));
hgs
parents:
diff changeset
  1178
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttDeleteNotify)
hgs
parents:
diff changeset
  1179
                    driveEntry.iAttributesDesc.Append(_L(" + Supports DeleteNotify"));
hgs
parents:
diff changeset
  1180
                
hgs
parents:
diff changeset
  1181
                
hgs
parents:
diff changeset
  1182
                // mark a removable media with memory card icon
hgs
parents:
diff changeset
  1183
                if (driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAttRemovable && !extMountable)
hgs
parents:
diff changeset
  1184
                    {
hgs
parents:
diff changeset
  1185
                    if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAbsent)
hgs
parents:
diff changeset
  1186
                        {                
hgs
parents:
diff changeset
  1187
                        driveEntry.iIconId = EFixedIconMemoryCardDisabled;
hgs
parents:
diff changeset
  1188
                        }                 
hgs
parents:
diff changeset
  1189
                    else
hgs
parents:
diff changeset
  1190
                        {                
hgs
parents:
diff changeset
  1191
                        driveEntry.iIconId = EFixedIconMemoryCard;
hgs
parents:
diff changeset
  1192
                        } 
hgs
parents:
diff changeset
  1193
                    }
hgs
parents:
diff changeset
  1194
                }   
hgs
parents:
diff changeset
  1195
            
hgs
parents:
diff changeset
  1196
            // if this fails, likely it's a memory card which is not present
hgs
parents:
diff changeset
  1197
            else
hgs
parents:
diff changeset
  1198
                {
hgs
parents:
diff changeset
  1199
                TVolumeInfo volumeInfo;
hgs
parents:
diff changeset
  1200
                volumeInfo.iSize = 0;
hgs
parents:
diff changeset
  1201
                volumeInfo.iFree = 0;
hgs
parents:
diff changeset
  1202
                volumeInfo.iDrive.iDriveAtt = KDriveAttRemovable;
hgs
parents:
diff changeset
  1203
                volumeInfo.iDrive.iMediaAtt = KMediaAttWriteProtected;
hgs
parents:
diff changeset
  1204
                driveEntry.iVolumeInfo = volumeInfo;
hgs
parents:
diff changeset
  1205
hgs
parents:
diff changeset
  1206
                driveEntry.iMediaTypeDesc = _L("Not ready");
hgs
parents:
diff changeset
  1207
                driveEntry.iIconId = EFixedIconMemoryCardDisabled;
hgs
parents:
diff changeset
  1208
                }
hgs
parents:
diff changeset
  1209
            
hgs
parents:
diff changeset
  1210
            if ( iPrevFolderName != KNullDesC && iPrevFolderName[0] == driveEntry.iLetter )
hgs
parents:
diff changeset
  1211
                {
hgs
parents:
diff changeset
  1212
                iPrevFolderIndex = iDriveEntryList->Count();
hgs
parents:
diff changeset
  1213
                }
hgs
parents:
diff changeset
  1214
            
hgs
parents:
diff changeset
  1215
            iDriveEntryList->AppendL(driveEntry);
hgs
parents:
diff changeset
  1216
            }
hgs
parents:
diff changeset
  1217
        }
hgs
parents:
diff changeset
  1218
    
hgs
parents:
diff changeset
  1219
    }
hgs
parents:
diff changeset
  1220
hgs
parents:
diff changeset
  1221
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1222
hgs
parents:
diff changeset
  1223
void CFileBrowserFileUtils::GetDirectoryListingL()
hgs
parents:
diff changeset
  1224
    {
hgs
parents:
diff changeset
  1225
    iFileEntryList->Reset();
hgs
parents:
diff changeset
  1226
hgs
parents:
diff changeset
  1227
    TInt sortMode(ESortByName);
hgs
parents:
diff changeset
  1228
    if (iSortMode == EFileBrowserCmdViewSortByExtension)    
hgs
parents:
diff changeset
  1229
        sortMode = ESortByExt; 
hgs
parents:
diff changeset
  1230
    else if (iSortMode == EFileBrowserCmdViewSortBySize)    
hgs
parents:
diff changeset
  1231
        sortMode = ESortBySize; 
hgs
parents:
diff changeset
  1232
    else if (iSortMode == EFileBrowserCmdViewSortByDate)    
hgs
parents:
diff changeset
  1233
        sortMode = ESortByDate; 
hgs
parents:
diff changeset
  1234
    
hgs
parents:
diff changeset
  1235
    TInt orderMode(EAscending);
hgs
parents:
diff changeset
  1236
    if (iOrderMode == EFileBrowserCmdViewOrderDescending)    
hgs
parents:
diff changeset
  1237
        orderMode = EDescending; 
hgs
parents:
diff changeset
  1238
    
hgs
parents:
diff changeset
  1239
    CDir* dir = NULL;
hgs
parents:
diff changeset
  1240
    if (iFs.GetDir(iCurrentPath, KEntryAttMatchMask, sortMode | orderMode | EDirsFirst, dir) == KErrNone)
hgs
parents:
diff changeset
  1241
        {
hgs
parents:
diff changeset
  1242
        CleanupStack::PushL(dir);
hgs
parents:
diff changeset
  1243
        
hgs
parents:
diff changeset
  1244
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  1245
            {
hgs
parents:
diff changeset
  1246
            TFileEntry fileEntry;
hgs
parents:
diff changeset
  1247
            fileEntry.iPath = iCurrentPath;
hgs
parents:
diff changeset
  1248
            fileEntry.iEntry = (*dir)[i];
hgs
parents:
diff changeset
  1249
            fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
  1250
            fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
  1251
            
hgs
parents:
diff changeset
  1252
            if ( iPrevFolderName != KNullDesC && iPrevFolderName == fileEntry.iEntry.iName )
hgs
parents:
diff changeset
  1253
                {
hgs
parents:
diff changeset
  1254
                iPrevFolderIndex = i;
hgs
parents:
diff changeset
  1255
                }
hgs
parents:
diff changeset
  1256
            
hgs
parents:
diff changeset
  1257
            // check for directory entries
hgs
parents:
diff changeset
  1258
            if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1259
                {
hgs
parents:
diff changeset
  1260
                fileEntry.iIconId = EFixedIconFolder;
hgs
parents:
diff changeset
  1261
hgs
parents:
diff changeset
  1262
                TFileName subPath = fileEntry.iPath;
hgs
parents:
diff changeset
  1263
                subPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  1264
                subPath.Append(_L("\\"));
hgs
parents:
diff changeset
  1265
                                
hgs
parents:
diff changeset
  1266
                // get number of entries in this directory if extended info about sub directories enabled
hgs
parents:
diff changeset
  1267
                if (iEngine->Settings().iShowSubDirectoryInfo && iEngine->Settings().iFileViewMode == EFileViewModeExtended)
hgs
parents:
diff changeset
  1268
                    {
hgs
parents:
diff changeset
  1269
                    CDir* subDir = NULL;
hgs
parents:
diff changeset
  1270
                    if (iFs.GetDir(subPath, KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
hgs
parents:
diff changeset
  1271
                        {
hgs
parents:
diff changeset
  1272
                        fileEntry.iDirEntries = subDir->Count();
hgs
parents:
diff changeset
  1273
                        delete subDir;    
hgs
parents:
diff changeset
  1274
                        }
hgs
parents:
diff changeset
  1275
                    }
hgs
parents:
diff changeset
  1276
                
hgs
parents:
diff changeset
  1277
                // apply subfolder icon for known directories (speed improvement)
hgs
parents:
diff changeset
  1278
                if (subPath[0]=='Z' && (subPath.CompareF(_L("Z:\\data\\"))==0 || subPath.CompareF(_L("Z:\\Nokia\\"))==0
hgs
parents:
diff changeset
  1279
                    || subPath.Compare(_L("Z:\\private\\"))==0 || subPath.Compare(_L("Z:\\resource\\"))==0
hgs
parents:
diff changeset
  1280
                    || subPath.Compare(_L("Z:\\sys\\"))==0 || subPath.Compare(_L("Z:\\system\\"))==0))
hgs
parents:
diff changeset
  1281
                    {
hgs
parents:
diff changeset
  1282
                    fileEntry.iIconId = EFixedIconFolderSub;
hgs
parents:
diff changeset
  1283
                    }
hgs
parents:
diff changeset
  1284
                else if (subPath[0]=='Z' && (subPath.CompareF(_L("Z:\\sys\\bin\\"))==0))
hgs
parents:
diff changeset
  1285
                    {
hgs
parents:
diff changeset
  1286
                    // normal folder icon for these ones
hgs
parents:
diff changeset
  1287
                    fileEntry.iIconId = EFixedIconFolder;
hgs
parents:
diff changeset
  1288
                    }
hgs
parents:
diff changeset
  1289
                else
hgs
parents:
diff changeset
  1290
                    {
hgs
parents:
diff changeset
  1291
                    // check if this folder has subdirectories
hgs
parents:
diff changeset
  1292
                    CDir* subDir = NULL;
hgs
parents:
diff changeset
  1293
                    if (iFs.GetDir(subPath, KEntryAttDir|KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
hgs
parents:
diff changeset
  1294
                        {
hgs
parents:
diff changeset
  1295
                        for (TInt j=0; j<subDir->Count(); j++)
hgs
parents:
diff changeset
  1296
                            {
hgs
parents:
diff changeset
  1297
                            TEntry entry = (*subDir)[j];
hgs
parents:
diff changeset
  1298
hgs
parents:
diff changeset
  1299
                            if (entry.IsDir())
hgs
parents:
diff changeset
  1300
                                {
hgs
parents:
diff changeset
  1301
                                fileEntry.iIconId = EFixedIconFolderSub;
hgs
parents:
diff changeset
  1302
                                break;    
hgs
parents:
diff changeset
  1303
                                }
hgs
parents:
diff changeset
  1304
                            }
hgs
parents:
diff changeset
  1305
hgs
parents:
diff changeset
  1306
                        delete subDir;    
hgs
parents:
diff changeset
  1307
                        }                    
hgs
parents:
diff changeset
  1308
                    }
hgs
parents:
diff changeset
  1309
                }
hgs
parents:
diff changeset
  1310
hgs
parents:
diff changeset
  1311
            iFileEntryList->AppendL(fileEntry);
hgs
parents:
diff changeset
  1312
            }
hgs
parents:
diff changeset
  1313
        
hgs
parents:
diff changeset
  1314
        CleanupStack::PopAndDestroy(); //dir    
hgs
parents:
diff changeset
  1315
        }
hgs
parents:
diff changeset
  1316
    }
hgs
parents:
diff changeset
  1317
hgs
parents:
diff changeset
  1318
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1319
hgs
parents:
diff changeset
  1320
void CFileBrowserFileUtils::MoveUpOneLevelL()
hgs
parents:
diff changeset
  1321
    {
hgs
parents:
diff changeset
  1322
    iPrevFolderIndex = KErrNotFound;
hgs
parents:
diff changeset
  1323
    iPrevFolderName.Zero();
hgs
parents:
diff changeset
  1324
    
hgs
parents:
diff changeset
  1325
    // change back to normal mode or move up
hgs
parents:
diff changeset
  1326
    if (iListingMode != ENormalEntries)
hgs
parents:
diff changeset
  1327
        {
hgs
parents:
diff changeset
  1328
        iListingMode = ENormalEntries;
hgs
parents:
diff changeset
  1329
        }
hgs
parents:
diff changeset
  1330
    else
hgs
parents:
diff changeset
  1331
        {
hgs
parents:
diff changeset
  1332
        // do nothing if displaying drive list view
hgs
parents:
diff changeset
  1333
        if (IsDriveListViewActive())
hgs
parents:
diff changeset
  1334
            return;
hgs
parents:
diff changeset
  1335
        
hgs
parents:
diff changeset
  1336
        if (iCurrentPath.Length() <= KDriveLetterStringLength)
hgs
parents:
diff changeset
  1337
            {
hgs
parents:
diff changeset
  1338
            if ( iCurrentPath.Length() > 0 )
hgs
parents:
diff changeset
  1339
                {
hgs
parents:
diff changeset
  1340
                iPrevFolderName.Append( iCurrentPath[0] );
hgs
parents:
diff changeset
  1341
                }
hgs
parents:
diff changeset
  1342
            // move to drive list view if the current path is already short enough
hgs
parents:
diff changeset
  1343
            iCurrentPath = KNullDesC;
hgs
parents:
diff changeset
  1344
            }
hgs
parents:
diff changeset
  1345
        else
hgs
parents:
diff changeset
  1346
            {
hgs
parents:
diff changeset
  1347
            // move one directory up
hgs
parents:
diff changeset
  1348
            TInt marker(iCurrentPath.Length());
hgs
parents:
diff changeset
  1349
            
hgs
parents:
diff changeset
  1350
            // find second last dir marker
hgs
parents:
diff changeset
  1351
            for (TInt i=iCurrentPath.Length()-2; i>=0; i--)
hgs
parents:
diff changeset
  1352
                {
hgs
parents:
diff changeset
  1353
                if (iCurrentPath[i] == '\\')
hgs
parents:
diff changeset
  1354
                    {
hgs
parents:
diff changeset
  1355
                    marker = i;
hgs
parents:
diff changeset
  1356
                    break;
hgs
parents:
diff changeset
  1357
                    }
hgs
parents:
diff changeset
  1358
                    
hgs
parents:
diff changeset
  1359
                }
hgs
parents:
diff changeset
  1360
            
hgs
parents:
diff changeset
  1361
            // update iPrevDir with the directory name that we just left 
hgs
parents:
diff changeset
  1362
            iPrevFolderName.Copy( iCurrentPath.RightTPtr( iCurrentPath.Length() -  marker - 1 ) );
hgs
parents:
diff changeset
  1363
            iPrevFolderName.Delete( iPrevFolderName.Length() -1, 2 ); // remove extra '\\'
hgs
parents:
diff changeset
  1364
            
hgs
parents:
diff changeset
  1365
            iCurrentPath = iCurrentPath.LeftTPtr(marker+1);
hgs
parents:
diff changeset
  1366
            }    
hgs
parents:
diff changeset
  1367
        }
hgs
parents:
diff changeset
  1368
hgs
parents:
diff changeset
  1369
//    if (iEngine->FileListContainer())
hgs
parents:
diff changeset
  1370
//        {
hgs
parents:
diff changeset
  1371
        //iEngine->FileListContainer()->DisableSearchFieldL();
hgs
parents:
diff changeset
  1372
        //iEngine->FileListContainer()->ListBox()->ClearSelection();
hgs
parents:
diff changeset
  1373
        //iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
hgs
parents:
diff changeset
  1374
        //iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
hgs
parents:
diff changeset
  1375
//        }
hgs
parents:
diff changeset
  1376
    
hgs
parents:
diff changeset
  1377
    // update view
hgs
parents:
diff changeset
  1378
    RefreshViewL();
hgs
parents:
diff changeset
  1379
    
hgs
parents:
diff changeset
  1380
    if (iEngine->Settings().iRememberFolderSelection
hgs
parents:
diff changeset
  1381
        //&& iEngine->FileListContainer()
hgs
parents:
diff changeset
  1382
        && iPrevFolderIndex > KErrNotFound )
hgs
parents:
diff changeset
  1383
        {
hgs
parents:
diff changeset
  1384
        
hgs
parents:
diff changeset
  1385
//        TInt visibleItems = iEngine->FileListContainer()->ListBox()->Rect().Height() /
hgs
parents:
diff changeset
  1386
//                            iEngine->FileListContainer()->ListBox()->ItemHeight()
hgs
parents:
diff changeset
  1387
//                            - 1; // for the title row
hgs
parents:
diff changeset
  1388
//
hgs
parents:
diff changeset
  1389
//        // By default, the selected item would be the last visible item on the listbox.
hgs
parents:
diff changeset
  1390
//        // We want the selected item be displayed at the middle of the listbox, so we
hgs
parents:
diff changeset
  1391
//        // select one of the successor items first to scroll down a bit
hgs
parents:
diff changeset
  1392
//        iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex(
hgs
parents:
diff changeset
  1393
//            Min( iEngine->FileListContainer()->ListBox()->Model()->ItemTextArray()->MdcaCount() -1,
hgs
parents:
diff changeset
  1394
//                 iPrevFolderIndex + visibleItems / 2 ) );
hgs
parents:
diff changeset
  1395
//
hgs
parents:
diff changeset
  1396
//        // ...and after that we select the the correct item.
hgs
parents:
diff changeset
  1397
//        iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex( iPrevFolderIndex );
hgs
parents:
diff changeset
  1398
        
hgs
parents:
diff changeset
  1399
        // update view
hgs
parents:
diff changeset
  1400
        RefreshViewL();
hgs
parents:
diff changeset
  1401
        }
hgs
parents:
diff changeset
  1402
    }
hgs
parents:
diff changeset
  1403
hgs
parents:
diff changeset
  1404
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1405
hgs
parents:
diff changeset
  1406
void CFileBrowserFileUtils::MoveDownToDirectoryL(TInt aIndex)
hgs
parents:
diff changeset
  1407
    {
hgs
parents:
diff changeset
  1408
hgs
parents:
diff changeset
  1409
    // change back to normal mode
hgs
parents:
diff changeset
  1410
    if (iListingMode != ENormalEntries)
hgs
parents:
diff changeset
  1411
        {
hgs
parents:
diff changeset
  1412
        iListingMode = ENormalEntries;
hgs
parents:
diff changeset
  1413
        }
hgs
parents:
diff changeset
  1414
    
hgs
parents:
diff changeset
  1415
    if (aIndex >= 0)
hgs
parents:
diff changeset
  1416
        {
hgs
parents:
diff changeset
  1417
        TBool needsRefresh(EFalse);
hgs
parents:
diff changeset
  1418
hgs
parents:
diff changeset
  1419
        if (IsDriveListViewActive())
hgs
parents:
diff changeset
  1420
            {
hgs
parents:
diff changeset
  1421
            // currently in a drive list view, move to root of selected drive
hgs
parents:
diff changeset
  1422
            if (iDriveEntryList->Count() > aIndex)
hgs
parents:
diff changeset
  1423
                {
hgs
parents:
diff changeset
  1424
                TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  1425
                
hgs
parents:
diff changeset
  1426
                iCurrentPath.Append(driveEntry.iLetter);    
hgs
parents:
diff changeset
  1427
                iCurrentPath.Append(_L(":\\"));
hgs
parents:
diff changeset
  1428
                
hgs
parents:
diff changeset
  1429
                needsRefresh = ETrue;    
hgs
parents:
diff changeset
  1430
                }
hgs
parents:
diff changeset
  1431
            }
hgs
parents:
diff changeset
  1432
        else
hgs
parents:
diff changeset
  1433
            {
hgs
parents:
diff changeset
  1434
            // otherwise just append the new directory
hgs
parents:
diff changeset
  1435
            if (iFileEntryList->Count() > aIndex)
hgs
parents:
diff changeset
  1436
                {
hgs
parents:
diff changeset
  1437
                TFileEntry fileEntry = iFileEntryList->At(aIndex);
hgs
parents:
diff changeset
  1438
                
hgs
parents:
diff changeset
  1439
                if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1440
                    {
hgs
parents:
diff changeset
  1441
                    iCurrentPath.Copy(fileEntry.iPath);
hgs
parents:
diff changeset
  1442
                    iCurrentPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  1443
                    iCurrentPath.Append(_L("\\"));
hgs
parents:
diff changeset
  1444
hgs
parents:
diff changeset
  1445
                    needsRefresh = ETrue;    
hgs
parents:
diff changeset
  1446
                    }
hgs
parents:
diff changeset
  1447
                }
hgs
parents:
diff changeset
  1448
            }
hgs
parents:
diff changeset
  1449
hgs
parents:
diff changeset
  1450
        if (needsRefresh /*&& iEngine->FileListContainer()*/)
hgs
parents:
diff changeset
  1451
            {
hgs
parents:
diff changeset
  1452
            //iEngine->FileListContainer()->DisableSearchFieldL();
hgs
parents:
diff changeset
  1453
            //iEngine->FileListContainer()->ListBox()->ClearSelection();
hgs
parents:
diff changeset
  1454
            //iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
hgs
parents:
diff changeset
  1455
            //iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
hgs
parents:
diff changeset
  1456
hgs
parents:
diff changeset
  1457
            // update view
hgs
parents:
diff changeset
  1458
            RefreshViewL();
hgs
parents:
diff changeset
  1459
            }
hgs
parents:
diff changeset
  1460
        }
hgs
parents:
diff changeset
  1461
    }
hgs
parents:
diff changeset
  1462
    
hgs
parents:
diff changeset
  1463
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1464
hgs
parents:
diff changeset
  1465
TBool CFileBrowserFileUtils::IsCurrentDriveReadOnly()
hgs
parents:
diff changeset
  1466
    {
hgs
parents:
diff changeset
  1467
    if (iListingMode !=ENormalEntries || iCurrentPath.Length() < 2)
hgs
parents:
diff changeset
  1468
        return EFalse;
hgs
parents:
diff changeset
  1469
    else
hgs
parents:
diff changeset
  1470
        {
hgs
parents:
diff changeset
  1471
        for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  1472
            {
hgs
parents:
diff changeset
  1473
            TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  1474
            
hgs
parents:
diff changeset
  1475
            if (driveEntry.iLetter == iCurrentPath[0])
hgs
parents:
diff changeset
  1476
                {
hgs
parents:
diff changeset
  1477
                if (driveEntry.iVolumeInfo.iDrive.iMediaAtt == KMediaAttWriteProtected || driveEntry.iVolumeInfo.iDrive.iMediaAtt == KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt == KDriveAbsent)
hgs
parents:
diff changeset
  1478
                    return ETrue;    
hgs
parents:
diff changeset
  1479
                else
hgs
parents:
diff changeset
  1480
                    return EFalse;
hgs
parents:
diff changeset
  1481
                }
hgs
parents:
diff changeset
  1482
            }
hgs
parents:
diff changeset
  1483
        }
hgs
parents:
diff changeset
  1484
hgs
parents:
diff changeset
  1485
    return EFalse;
hgs
parents:
diff changeset
  1486
    }
hgs
parents:
diff changeset
  1487
hgs
parents:
diff changeset
  1488
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1489
hgs
parents:
diff changeset
  1490
TBool CFileBrowserFileUtils::IsItemDirectory(TInt aCurrentItemIndex)
hgs
parents:
diff changeset
  1491
    {
hgs
parents:
diff changeset
  1492
    if (aCurrentItemIndex < 0)
hgs
parents:
diff changeset
  1493
        {
hgs
parents:
diff changeset
  1494
        return EFalse;
hgs
parents:
diff changeset
  1495
        }
hgs
parents:
diff changeset
  1496
    else
hgs
parents:
diff changeset
  1497
        {
hgs
parents:
diff changeset
  1498
        if (iFileEntryList->Count() > aCurrentItemIndex)
hgs
parents:
diff changeset
  1499
            {
hgs
parents:
diff changeset
  1500
            TFileEntry fileEntry = iFileEntryList->At(aCurrentItemIndex) ;
hgs
parents:
diff changeset
  1501
            return fileEntry.iEntry.IsDir();
hgs
parents:
diff changeset
  1502
            }
hgs
parents:
diff changeset
  1503
        else
hgs
parents:
diff changeset
  1504
            {
hgs
parents:
diff changeset
  1505
            return EFalse;
hgs
parents:
diff changeset
  1506
            }
hgs
parents:
diff changeset
  1507
        }
hgs
parents:
diff changeset
  1508
    }
hgs
parents:
diff changeset
  1509
hgs
parents:
diff changeset
  1510
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1511
hgs
parents:
diff changeset
  1512
TInt CFileBrowserFileUtils::SetSelectedItemsOrCurrentItemL(const CArrayFix<TInt>* selectionIndexes,
hgs
parents:
diff changeset
  1513
                                                           CFileEntryList* aFileEntryList)
hgs
parents:
diff changeset
  1514
    {
hgs
parents:
diff changeset
  1515
    aFileEntryList->Reset();
hgs
parents:
diff changeset
  1516
hgs
parents:
diff changeset
  1517
    // by default use selected items
hgs
parents:
diff changeset
  1518
    if (selectionIndexes && selectionIndexes->Count() > 0)
hgs
parents:
diff changeset
  1519
        {
hgs
parents:
diff changeset
  1520
        TInt ref(0);
hgs
parents:
diff changeset
  1521
        TKeyArrayFix key(0, ECmpTUint16);
hgs
parents:
diff changeset
  1522
        TInt index(0);
hgs
parents:
diff changeset
  1523
hgs
parents:
diff changeset
  1524
        for (TInt i=0; i<iFileEntryList->Count(); i++)
hgs
parents:
diff changeset
  1525
            {
hgs
parents:
diff changeset
  1526
            ref = i;
hgs
parents:
diff changeset
  1527
hgs
parents:
diff changeset
  1528
            if (selectionIndexes->Find(ref, key, index) == 0)
hgs
parents:
diff changeset
  1529
                {
hgs
parents:
diff changeset
  1530
                aFileEntryList->AppendL(iFileEntryList->At(i));
hgs
parents:
diff changeset
  1531
                }
hgs
parents:
diff changeset
  1532
            }
hgs
parents:
diff changeset
  1533
        }
hgs
parents:
diff changeset
  1534
    return aFileEntryList->Count();
hgs
parents:
diff changeset
  1535
    }
hgs
parents:
diff changeset
  1536
hgs
parents:
diff changeset
  1537
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1538
hgs
parents:
diff changeset
  1539
TInt CFileBrowserFileUtils::ClipboardCutL(const CArrayFix<TInt>* aSelectionIndices)
hgs
parents:
diff changeset
  1540
    {
hgs
parents:
diff changeset
  1541
	
hgs
parents:
diff changeset
  1542
    iClipBoardMode = EClipBoardModeCut;
hgs
parents:
diff changeset
  1543
    TInt operations = SetSelectedItemsOrCurrentItemL(aSelectionIndices, iClipBoardList);
hgs
parents:
diff changeset
  1544
    return operations;
hgs
parents:
diff changeset
  1545
    }
hgs
parents:
diff changeset
  1546
hgs
parents:
diff changeset
  1547
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1548
hgs
parents:
diff changeset
  1549
TInt CFileBrowserFileUtils::ClipboardCopyL(const CArrayFix<TInt>* aSelectionIndices)
hgs
parents:
diff changeset
  1550
    {
hgs
parents:
diff changeset
  1551
    iClipBoardMode = EClipBoardModeCopy;
hgs
parents:
diff changeset
  1552
    TInt operations = SetSelectedItemsOrCurrentItemL(aSelectionIndices, iClipBoardList);
hgs
parents:
diff changeset
  1553
    return operations;
hgs
parents:
diff changeset
  1554
    }
hgs
parents:
diff changeset
  1555
hgs
parents:
diff changeset
  1556
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1557
hgs
parents:
diff changeset
  1558
void CFileBrowserFileUtils::ClipboardPasteL(const TOverwriteOptions &aOverwriteOptions)
hgs
parents:
diff changeset
  1559
    {
hgs
parents:
diff changeset
  1560
    if (iClipBoardMode == EClipBoardModeCut)
hgs
parents:
diff changeset
  1561
        {
hgs
parents:
diff changeset
  1562
        DoCopyToFolderL(iClipBoardList, iCurrentPath, aOverwriteOptions, ETrue );
hgs
parents:
diff changeset
  1563
        iClipBoardList->Reset();
hgs
parents:
diff changeset
  1564
        }
hgs
parents:
diff changeset
  1565
    else if (iClipBoardMode == EClipBoardModeCopy)
hgs
parents:
diff changeset
  1566
        {
hgs
parents:
diff changeset
  1567
        DoCopyToFolderL(iClipBoardList, iCurrentPath, aOverwriteOptions, EFalse);
hgs
parents:
diff changeset
  1568
        }
hgs
parents:
diff changeset
  1569
    }
hgs
parents:
diff changeset
  1570
hgs
parents:
diff changeset
  1571
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1572
hgs
parents:
diff changeset
  1573
TInt CFileBrowserFileUtils::SetCurrentSelection(const CArrayFix<TInt>* aSelectionIndices)
hgs
parents:
diff changeset
  1574
    {
hgs
parents:
diff changeset
  1575
    TInt operations = SetSelectedItemsOrCurrentItemL(aSelectionIndices, iCurrentSelectionList);
hgs
parents:
diff changeset
  1576
    return operations;
hgs
parents:
diff changeset
  1577
    }
hgs
parents:
diff changeset
  1578
hgs
parents:
diff changeset
  1579
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1580
hgs
parents:
diff changeset
  1581
void CFileBrowserFileUtils::CopyToFolderL(const TFileName &aTargetDir,
hgs
parents:
diff changeset
  1582
                                          const TOverwriteOptions &aOverwriteOptions,
hgs
parents:
diff changeset
  1583
                                          TBool aMove)
hgs
parents:
diff changeset
  1584
    {
hgs
parents:
diff changeset
  1585
hgs
parents:
diff changeset
  1586
    //	TFileName destinationFolder;
hgs
parents:
diff changeset
  1587
hgs
parents:
diff changeset
  1588
    // generate an icon array
hgs
parents:
diff changeset
  1589
    // CAknIconArray* iconArray = GenerateIconArrayL(ETrue);
hgs
parents:
diff changeset
  1590
    //    CleanupStack::PushL(iconArray);
hgs
parents:
diff changeset
  1591
hgs
parents:
diff changeset
  1592
    // run folder selection dialog
hgs
parents:
diff changeset
  1593
    //    CFileBrowserDestinationFolderSelectionDlg* dlg = CFileBrowserDestinationFolderSelectionDlg::NewL(destinationFolder, iDriveEntryList, iconArray);
hgs
parents:
diff changeset
  1594
hgs
parents:
diff changeset
  1595
    // do the file operations
hgs
parents:
diff changeset
  1596
    //DoCopyToFolderL(entryList, aTargetDir, aOverwriteOptions, aMove);
hgs
parents:
diff changeset
  1597
    DoCopyToFolderL(iCurrentSelectionList, aTargetDir, aOverwriteOptions, aMove);
hgs
parents:
diff changeset
  1598
hgs
parents:
diff changeset
  1599
    //    CleanupStack::Pop(); //iconArray
hgs
parents:
diff changeset
  1600
    }
hgs
parents:
diff changeset
  1601
hgs
parents:
diff changeset
  1602
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1603
hgs
parents:
diff changeset
  1604
TBool CFileBrowserFileUtils::IsDestinationEntriesExists(const TDesC& aTargetDir)
hgs
parents:
diff changeset
  1605
    {
hgs
parents:
diff changeset
  1606
    TBool someEntryExists(EFalse);
hgs
parents:
diff changeset
  1607
    if (iCurrentSelectionList && iCurrentSelectionList->Count() > 0)
hgs
parents:
diff changeset
  1608
        {
hgs
parents:
diff changeset
  1609
        // check if some destination entries also exists
hgs
parents:
diff changeset
  1610
        for (TInt i=0; i<iCurrentSelectionList->Count(); i++)
hgs
parents:
diff changeset
  1611
            {
hgs
parents:
diff changeset
  1612
            TFileEntry fileEntry = iCurrentSelectionList->At(i);
hgs
parents:
diff changeset
  1613
hgs
parents:
diff changeset
  1614
            TFileName targetEntry = aTargetDir;
hgs
parents:
diff changeset
  1615
            targetEntry.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  1616
hgs
parents:
diff changeset
  1617
            if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1618
                {
hgs
parents:
diff changeset
  1619
                targetEntry.Append(_L("\\"));
hgs
parents:
diff changeset
  1620
hgs
parents:
diff changeset
  1621
                if (BaflUtils::PathExists(iFs, targetEntry))
hgs
parents:
diff changeset
  1622
                    {
hgs
parents:
diff changeset
  1623
                    someEntryExists = ETrue;
hgs
parents:
diff changeset
  1624
                    break;
hgs
parents:
diff changeset
  1625
                    }
hgs
parents:
diff changeset
  1626
                }
hgs
parents:
diff changeset
  1627
            else
hgs
parents:
diff changeset
  1628
                {
hgs
parents:
diff changeset
  1629
                if (BaflUtils::FileExists(iFs, targetEntry))
hgs
parents:
diff changeset
  1630
                    {
hgs
parents:
diff changeset
  1631
                    someEntryExists = ETrue;
hgs
parents:
diff changeset
  1632
                    break;
hgs
parents:
diff changeset
  1633
                    }
hgs
parents:
diff changeset
  1634
                }
hgs
parents:
diff changeset
  1635
            }
hgs
parents:
diff changeset
  1636
        }
hgs
parents:
diff changeset
  1637
    return someEntryExists;
hgs
parents:
diff changeset
  1638
    }
hgs
parents:
diff changeset
  1639
hgs
parents:
diff changeset
  1640
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1641
hgs
parents:
diff changeset
  1642
void CFileBrowserFileUtils::DoCopyToFolderL(CFileEntryList* aEntryList,
hgs
parents:
diff changeset
  1643
                                            const TDesC& aTargetDir,
hgs
parents:
diff changeset
  1644
                                            const TOverwriteOptions &aOverwriteOptions,
hgs
parents:
diff changeset
  1645
                                            TBool aDeleteSource)
hgs
parents:
diff changeset
  1646
    {
hgs
parents:
diff changeset
  1647
    if (aEntryList && aEntryList->Count() > 0)
hgs
parents:
diff changeset
  1648
        {
hgs
parents:
diff changeset
  1649
        if (aOverwriteOptions.iDoFileOperations)
hgs
parents:
diff changeset
  1650
            {
hgs
parents:
diff changeset
  1651
            // set correct command id depending if we are copying or moving
hgs
parents:
diff changeset
  1652
            TInt commandId(EFileBrowserFileOpCommandCopy);
hgs
parents:
diff changeset
  1653
            if (aDeleteSource)
hgs
parents:
diff changeset
  1654
                commandId = EFileBrowserFileOpCommandMove;
hgs
parents:
diff changeset
  1655
            
hgs
parents:
diff changeset
  1656
            // do the file operations for each entry
hgs
parents:
diff changeset
  1657
            for (TInt i=0; i<aEntryList->Count(); i++)
hgs
parents:
diff changeset
  1658
                {
hgs
parents:
diff changeset
  1659
                TFileEntry fileEntry = aEntryList->At(i);
hgs
parents:
diff changeset
  1660
                
hgs
parents:
diff changeset
  1661
                TFileName targetEntry = aTargetDir;
hgs
parents:
diff changeset
  1662
                targetEntry.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  1663
                
hgs
parents:
diff changeset
  1664
                if (aOverwriteOptions.iQueryIndex == EFileActionGenerateUniqueFilenames)
hgs
parents:
diff changeset
  1665
                    {
hgs
parents:
diff changeset
  1666
                    CApaApplication::GenerateFileName(iFs, targetEntry);
hgs
parents:
diff changeset
  1667
                    }
hgs
parents:
diff changeset
  1668
                else if (aOverwriteOptions.iQueryIndex == EFileActionQueryPostFix)
hgs
parents:
diff changeset
  1669
                    {
hgs
parents:
diff changeset
  1670
                    targetEntry.Append(aOverwriteOptions.iPostFix);
hgs
parents:
diff changeset
  1671
                    }
hgs
parents:
diff changeset
  1672
hgs
parents:
diff changeset
  1673
                
hgs
parents:
diff changeset
  1674
                // append the new command to the command array
hgs
parents:
diff changeset
  1675
                if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1676
                    {
hgs
parents:
diff changeset
  1677
                    AppendToCommandArrayL(commandId,
hgs
parents:
diff changeset
  1678
                                          new(ELeave)CCommandParamsCopyOrMove(fileEntry, targetEntry, aOverwriteOptions.iOverWriteFlags|CFileMan::ERecurse)
hgs
parents:
diff changeset
  1679
                                         );
hgs
parents:
diff changeset
  1680
                    }
hgs
parents:
diff changeset
  1681
                else
hgs
parents:
diff changeset
  1682
                    {
hgs
parents:
diff changeset
  1683
                    AppendToCommandArrayL(commandId,
hgs
parents:
diff changeset
  1684
                                          new(ELeave)CCommandParamsCopyOrMove(fileEntry, targetEntry, aOverwriteOptions.iOverWriteFlags)
hgs
parents:
diff changeset
  1685
                                         );
hgs
parents:
diff changeset
  1686
                    }
hgs
parents:
diff changeset
  1687
hgs
parents:
diff changeset
  1688
                }
hgs
parents:
diff changeset
  1689
            }
hgs
parents:
diff changeset
  1690
        }
hgs
parents:
diff changeset
  1691
    }
hgs
parents:
diff changeset
  1692
hgs
parents:
diff changeset
  1693
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1694
hgs
parents:
diff changeset
  1695
void CFileBrowserFileUtils::DeleteL()
hgs
parents:
diff changeset
  1696
    {
hgs
parents:
diff changeset
  1697
    // do the file operations for each entry
hgs
parents:
diff changeset
  1698
    for (TInt i=0; i<iCurrentSelectionList->Count(); i++)
hgs
parents:
diff changeset
  1699
        {
hgs
parents:
diff changeset
  1700
        TFileEntry fileEntry = iCurrentSelectionList->At(i);
hgs
parents:
diff changeset
  1701
hgs
parents:
diff changeset
  1702
        // append the new command to the command array
hgs
parents:
diff changeset
  1703
        if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1704
            {
hgs
parents:
diff changeset
  1705
            AppendToCommandArrayL(EFileBrowserFileOpCommandDelete,
hgs
parents:
diff changeset
  1706
                                  new(ELeave)CCommandParamsDelete(fileEntry, CFileMan::ERecurse)
hgs
parents:
diff changeset
  1707
                                 );
hgs
parents:
diff changeset
  1708
            }
hgs
parents:
diff changeset
  1709
        else
hgs
parents:
diff changeset
  1710
            {
hgs
parents:
diff changeset
  1711
            AppendToCommandArrayL(EFileBrowserFileOpCommandDelete,
hgs
parents:
diff changeset
  1712
                                  new(ELeave)CCommandParamsDelete(fileEntry, 0)
hgs
parents:
diff changeset
  1713
                                 );
hgs
parents:
diff changeset
  1714
            }
hgs
parents:
diff changeset
  1715
hgs
parents:
diff changeset
  1716
        }
hgs
parents:
diff changeset
  1717
    }
hgs
parents:
diff changeset
  1718
hgs
parents:
diff changeset
  1719
hgs
parents:
diff changeset
  1720
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1721
hgs
parents:
diff changeset
  1722
TBool CFileBrowserFileUtils::SelectionHasDirs()
hgs
parents:
diff changeset
  1723
{
hgs
parents:
diff changeset
  1724
    TBool isDir(EFalse);
hgs
parents:
diff changeset
  1725
hgs
parents:
diff changeset
  1726
    // check if any directories and ask recursion
hgs
parents:
diff changeset
  1727
    for (TInt i=0; i<iCurrentSelectionList->Count(); i++)
hgs
parents:
diff changeset
  1728
        {
hgs
parents:
diff changeset
  1729
        TFileEntry fileEntry = iCurrentSelectionList->At(i);
hgs
parents:
diff changeset
  1730
hgs
parents:
diff changeset
  1731
        if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1732
            {
hgs
parents:
diff changeset
  1733
            isDir = ETrue;
hgs
parents:
diff changeset
  1734
            break;
hgs
parents:
diff changeset
  1735
            }
hgs
parents:
diff changeset
  1736
        }
hgs
parents:
diff changeset
  1737
    return isDir;
hgs
parents:
diff changeset
  1738
}
hgs
parents:
diff changeset
  1739
hgs
parents:
diff changeset
  1740
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1741
hgs
parents:
diff changeset
  1742
void CFileBrowserFileUtils::TouchL(TBool aRecurse)
hgs
parents:
diff changeset
  1743
    {
hgs
parents:
diff changeset
  1744
    // now go through all entries
hgs
parents:
diff changeset
  1745
    for (TInt i=0; i<iCurrentSelectionList->Count(); i++)
hgs
parents:
diff changeset
  1746
        {
hgs
parents:
diff changeset
  1747
        TFileEntry fileEntry = iCurrentSelectionList->At(i);
hgs
parents:
diff changeset
  1748
hgs
parents:
diff changeset
  1749
        // touch to current time
hgs
parents:
diff changeset
  1750
        TTime now;
hgs
parents:
diff changeset
  1751
        now.UniversalTime();
hgs
parents:
diff changeset
  1752
hgs
parents:
diff changeset
  1753
hgs
parents:
diff changeset
  1754
        // append the new command to the command array
hgs
parents:
diff changeset
  1755
        if (fileEntry.iEntry.IsDir() && aRecurse)
hgs
parents:
diff changeset
  1756
            {
hgs
parents:
diff changeset
  1757
            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
hgs
parents:
diff changeset
  1758
                                  new(ELeave)CCommandParamsAttribs(fileEntry, NULL, NULL, now, CFileMan::ERecurse)
hgs
parents:
diff changeset
  1759
                                 );
hgs
parents:
diff changeset
  1760
            }
hgs
parents:
diff changeset
  1761
        else
hgs
parents:
diff changeset
  1762
            {
hgs
parents:
diff changeset
  1763
            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
hgs
parents:
diff changeset
  1764
                                  new(ELeave)CCommandParamsAttribs(fileEntry, NULL, NULL, now, 0)
hgs
parents:
diff changeset
  1765
                                 );
hgs
parents:
diff changeset
  1766
            }
hgs
parents:
diff changeset
  1767
        }
hgs
parents:
diff changeset
  1768
    }
hgs
parents:
diff changeset
  1769
hgs
parents:
diff changeset
  1770
TBool CFileBrowserFileUtils::TargetExists(const TInt aIndex, const TFileName &newName)
hgs
parents:
diff changeset
  1771
    {
hgs
parents:
diff changeset
  1772
    TBool alreadyExists(EFalse);
hgs
parents:
diff changeset
  1773
    if (iFileEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  1774
        {
hgs
parents:
diff changeset
  1775
hgs
parents:
diff changeset
  1776
        TFileEntry fileEntry = iFileEntryList->At(aIndex);
hgs
parents:
diff changeset
  1777
        TFileName targetEntry = fileEntry.iPath;
hgs
parents:
diff changeset
  1778
        targetEntry.Append(newName);
hgs
parents:
diff changeset
  1779
        if (fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  1780
            {
hgs
parents:
diff changeset
  1781
            //targetEntry.Append(_L("\\"));
hgs
parents:
diff changeset
  1782
            alreadyExists = BaflUtils::PathExists(iFs, targetEntry);
hgs
parents:
diff changeset
  1783
            }
hgs
parents:
diff changeset
  1784
        else
hgs
parents:
diff changeset
  1785
            {
hgs
parents:
diff changeset
  1786
            alreadyExists = BaflUtils::FileExists(iFs, targetEntry);
hgs
parents:
diff changeset
  1787
            }
hgs
parents:
diff changeset
  1788
        }
hgs
parents:
diff changeset
  1789
    return alreadyExists;
hgs
parents:
diff changeset
  1790
    }
hgs
parents:
diff changeset
  1791
hgs
parents:
diff changeset
  1792
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1793
hgs
parents:
diff changeset
  1794
void CFileBrowserFileUtils::RenameL(const TInt aIndex, const TFileName &newName)
hgs
parents:
diff changeset
  1795
    {
hgs
parents:
diff changeset
  1796
        if (iFileEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  1797
        {
hgs
parents:
diff changeset
  1798
            TFileEntry fileEntry = iFileEntryList->At(aIndex);
hgs
parents:
diff changeset
  1799
hgs
parents:
diff changeset
  1800
            TFileName targetEntry = fileEntry.iPath;
hgs
parents:
diff changeset
  1801
            targetEntry.Append(newName);
hgs
parents:
diff changeset
  1802
hgs
parents:
diff changeset
  1803
            // append the new command to the command array
hgs
parents:
diff changeset
  1804
            AppendToCommandArrayL(EFileBrowserFileOpCommandRename,
hgs
parents:
diff changeset
  1805
                                  new(ELeave)CCommandParamsRename(fileEntry, targetEntry, CFileMan::EOverWrite)
hgs
parents:
diff changeset
  1806
                                 );
hgs
parents:
diff changeset
  1807
        }
hgs
parents:
diff changeset
  1808
    }
hgs
parents:
diff changeset
  1809
hgs
parents:
diff changeset
  1810
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1811
hgs
parents:
diff changeset
  1812
void CFileBrowserFileUtils::SetAttributesL(TUint &aSetAttMask, TUint &aClearAttMask, TBool &aRecurse)
hgs
parents:
diff changeset
  1813
    {
hgs
parents:
diff changeset
  1814
    for (TInt i=0; i<iCurrentSelectionList->Count(); i++)
hgs
parents:
diff changeset
  1815
        {
hgs
parents:
diff changeset
  1816
        TFileEntry fileEntry = iCurrentSelectionList->At(i);
hgs
parents:
diff changeset
  1817
hgs
parents:
diff changeset
  1818
        // append the new command to the command array
hgs
parents:
diff changeset
  1819
        if (fileEntry.iEntry.IsDir() && aRecurse)
hgs
parents:
diff changeset
  1820
            {
hgs
parents:
diff changeset
  1821
            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
hgs
parents:
diff changeset
  1822
                                  new(ELeave)CCommandParamsAttribs(fileEntry, aSetAttMask, aClearAttMask, fileEntry.iEntry.iModified, CFileMan::ERecurse)
hgs
parents:
diff changeset
  1823
                                 );
hgs
parents:
diff changeset
  1824
            }
hgs
parents:
diff changeset
  1825
        else
hgs
parents:
diff changeset
  1826
            {
hgs
parents:
diff changeset
  1827
            AppendToCommandArrayL(EFileBrowserFileOpCommandAttribs,
hgs
parents:
diff changeset
  1828
                                  new(ELeave)CCommandParamsAttribs(fileEntry, aSetAttMask, aClearAttMask, fileEntry.iEntry.iModified, 0)
hgs
parents:
diff changeset
  1829
                                 );
hgs
parents:
diff changeset
  1830
            }
hgs
parents:
diff changeset
  1831
        }
hgs
parents:
diff changeset
  1832
hgs
parents:
diff changeset
  1833
    // execute all operations
hgs
parents:
diff changeset
  1834
    StartExecutingCommandsL(_L("Changing attributes"));
hgs
parents:
diff changeset
  1835
    }
hgs
parents:
diff changeset
  1836
       
hgs
parents:
diff changeset
  1837
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1838
hgs
parents:
diff changeset
  1839
void CFileBrowserFileUtils::SearchL()
hgs
parents:
diff changeset
  1840
    {
hgs
parents:
diff changeset
  1841
//    iEngine->FileListContainer()->SetScreenLayoutL(EDisplayModeNormal);
hgs
parents:
diff changeset
  1842
//    iEngine->FileListContainer()->SetNaviPaneTextL(KNullDesC);
hgs
parents:
diff changeset
  1843
//
hgs
parents:
diff changeset
  1844
//    iEngine->FileListContainer()->SetScreenLayoutL(iEngine->Settings().iDisplayMode);
hgs
parents:
diff changeset
  1845
//    iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
hgs
parents:
diff changeset
  1846
//
hgs
parents:
diff changeset
  1847
        iEngine->FileBrowserUI()->ShowWaitDialog(_L("Searching"));
hgs
parents:
diff changeset
  1848
        iFileEntryList->Reset();
hgs
parents:
diff changeset
  1849
hgs
parents:
diff changeset
  1850
        // if search dir is empty, find from all drives
hgs
parents:
diff changeset
  1851
        if (iSearchAttributes.iSearchDir == KNullDesC)
hgs
parents:
diff changeset
  1852
            {
hgs
parents:
diff changeset
  1853
            for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  1854
                {
hgs
parents:
diff changeset
  1855
                TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  1856
hgs
parents:
diff changeset
  1857
                TBuf<10> driveRoot;
hgs
parents:
diff changeset
  1858
                driveRoot.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  1859
                driveRoot.Append(_L(":\\"));
hgs
parents:
diff changeset
  1860
hgs
parents:
diff changeset
  1861
                DoSearchFiles(iSearchAttributes.iWildCards, driveRoot);
hgs
parents:
diff changeset
  1862
hgs
parents:
diff changeset
  1863
                if (iSearchAttributes.iRecurse)
hgs
parents:
diff changeset
  1864
                    DoSearchFilesRecursiveL(iSearchAttributes.iWildCards, driveRoot);
hgs
parents:
diff changeset
  1865
                }
hgs
parents:
diff changeset
  1866
hgs
parents:
diff changeset
  1867
            }
hgs
parents:
diff changeset
  1868
hgs
parents:
diff changeset
  1869
        // otherwise just search from the selected directory
hgs
parents:
diff changeset
  1870
        else
hgs
parents:
diff changeset
  1871
            {
hgs
parents:
diff changeset
  1872
            DoSearchFiles(iSearchAttributes.iWildCards, iSearchAttributes.iSearchDir);
hgs
parents:
diff changeset
  1873
hgs
parents:
diff changeset
  1874
            if (iSearchAttributes.iRecurse)
hgs
parents:
diff changeset
  1875
                DoSearchFilesRecursiveL(iSearchAttributes.iWildCards, iSearchAttributes.iSearchDir);
hgs
parents:
diff changeset
  1876
            }
hgs
parents:
diff changeset
  1877
hgs
parents:
diff changeset
  1878
        iEngine->FileBrowserUI()->CancelWaitDialog();
hgs
parents:
diff changeset
  1879
hgs
parents:
diff changeset
  1880
        iListingMode = ESearchResults;
hgs
parents:
diff changeset
  1881
        RefreshViewL();
hgs
parents:
diff changeset
  1882
    }
hgs
parents:
diff changeset
  1883
hgs
parents:
diff changeset
  1884
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1885
hgs
parents:
diff changeset
  1886
TInt CFileBrowserFileUtils::DoSearchFiles(const TDesC& aFileName, const TDesC& aPath)
hgs
parents:
diff changeset
  1887
    {
hgs
parents:
diff changeset
  1888
    TFindFile fileFinder(iFs);
hgs
parents:
diff changeset
  1889
    CDir* dir;
hgs
parents:
diff changeset
  1890
    TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
hgs
parents:
diff changeset
  1891
    iEngine->FileBrowserUI()->ProcessEvents();
hgs
parents:
diff changeset
  1892
hgs
parents:
diff changeset
  1893
    while (err == KErrNone && iAllowProcessing)
hgs
parents:
diff changeset
  1894
        {
hgs
parents:
diff changeset
  1895
        iEngine->FileBrowserUI()->ProcessEvents();
hgs
parents:
diff changeset
  1896
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  1897
            {
hgs
parents:
diff changeset
  1898
            TEntry entry = (*dir)[i];
hgs
parents:
diff changeset
  1899
            
hgs
parents:
diff changeset
  1900
            TTime entryModified = entry.iModified;
hgs
parents:
diff changeset
  1901
            // convert from universal time
hgs
parents:
diff changeset
  1902
            if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
hgs
parents:
diff changeset
  1903
                {
hgs
parents:
diff changeset
  1904
                entryModified = entry.iModified;
hgs
parents:
diff changeset
  1905
                }
hgs
parents:
diff changeset
  1906
            if ((entry.IsDir() && entryModified >= iSearchAttributes.iMinDate && entryModified <= iSearchAttributes.iMaxDate) ||
hgs
parents:
diff changeset
  1907
                (!entry.IsDir() &&entry.iSize >= iSearchAttributes.iMinSize && entry.iSize <= iSearchAttributes.iMaxSize &&
hgs
parents:
diff changeset
  1908
                 entryModified >= iSearchAttributes.iMinDate && entryModified <= iSearchAttributes.iMaxDate))
hgs
parents:
diff changeset
  1909
                {
hgs
parents:
diff changeset
  1910
                TParse parsedName;
hgs
parents:
diff changeset
  1911
                parsedName.Set(entry.iName, &fileFinder.File(), NULL);
hgs
parents:
diff changeset
  1912
                
hgs
parents:
diff changeset
  1913
                if (parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
hgs
parents:
diff changeset
  1914
                    {
hgs
parents:
diff changeset
  1915
                    TFileEntry fileEntry;
hgs
parents:
diff changeset
  1916
                    fileEntry.iPath = parsedName.DriveAndPath();
hgs
parents:
diff changeset
  1917
                    fileEntry.iEntry = entry;
hgs
parents:
diff changeset
  1918
                    fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
  1919
                    
hgs
parents:
diff changeset
  1920
                    TBool appendToArray(EFalse);
hgs
parents:
diff changeset
  1921
                    
hgs
parents:
diff changeset
  1922
                    // append directories always
hgs
parents:
diff changeset
  1923
                    if (entry.IsDir() && !iSearchAttributes.iTextInFile.Length())
hgs
parents:
diff changeset
  1924
                        {
hgs
parents:
diff changeset
  1925
                        fileEntry.iIconId = EFixedIconFolder;
hgs
parents:
diff changeset
  1926
                        appendToArray = ETrue;    
hgs
parents:
diff changeset
  1927
                        }
hgs
parents:
diff changeset
  1928
                    
hgs
parents:
diff changeset
  1929
                    // normal file
hgs
parents:
diff changeset
  1930
                    else
hgs
parents:
diff changeset
  1931
                        {
hgs
parents:
diff changeset
  1932
                        fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
  1933
                        
hgs
parents:
diff changeset
  1934
                        // check if a string needs to be found inside the file
hgs
parents:
diff changeset
  1935
                        if (iSearchAttributes.iTextInFile.Length())
hgs
parents:
diff changeset
  1936
                            {
hgs
parents:
diff changeset
  1937
                            // currently only 8-bit searching, so convert from 16-bit
hgs
parents:
diff changeset
  1938
                            TBuf8<256> searchText;
hgs
parents:
diff changeset
  1939
                            searchText.Copy(iSearchAttributes.iTextInFile);
hgs
parents:
diff changeset
  1940
                            
hgs
parents:
diff changeset
  1941
                            // specify buffer size and create a buffer
hgs
parents:
diff changeset
  1942
                            const TInt KReadBufSize = 1024*1024;
hgs
parents:
diff changeset
  1943
                            HBufC8* buffer = HBufC8::NewLC(KReadBufSize);
hgs
parents:
diff changeset
  1944
                            TPtr8 bufferPtr = buffer->Des();
hgs
parents:
diff changeset
  1945
hgs
parents:
diff changeset
  1946
                            // open the file for reading
hgs
parents:
diff changeset
  1947
                            RFile file;
hgs
parents:
diff changeset
  1948
                            if (file.Open(iFs, parsedName.FullName(), EFileRead) == KErrNone)
hgs
parents:
diff changeset
  1949
                                {
hgs
parents:
diff changeset
  1950
                                TInt currentPos(0);
hgs
parents:
diff changeset
  1951
                                
hgs
parents:
diff changeset
  1952
                                for (;;)
hgs
parents:
diff changeset
  1953
                                    {
hgs
parents:
diff changeset
  1954
                                    // read from the file
hgs
parents:
diff changeset
  1955
                                    file.Read(currentPos, bufferPtr, KReadBufSize);
hgs
parents:
diff changeset
  1956
hgs
parents:
diff changeset
  1957
                                    // stop looping if the read buffer isn't long enough
hgs
parents:
diff changeset
  1958
                                    if (bufferPtr.Length() < searchText.Length())
hgs
parents:
diff changeset
  1959
                                        {
hgs
parents:
diff changeset
  1960
                                        break;
hgs
parents:
diff changeset
  1961
                                        }
hgs
parents:
diff changeset
  1962
                                        
hgs
parents:
diff changeset
  1963
                                    // try to find the text
hgs
parents:
diff changeset
  1964
                                    if (bufferPtr.FindF(searchText) >= 0)
hgs
parents:
diff changeset
  1965
                                        {
hgs
parents:
diff changeset
  1966
                                        // match found!
hgs
parents:
diff changeset
  1967
                                        appendToArray = ETrue;
hgs
parents:
diff changeset
  1968
                                        break;
hgs
parents:
diff changeset
  1969
                                        }
hgs
parents:
diff changeset
  1970
                                        
hgs
parents:
diff changeset
  1971
                                    // calculate the next position
hgs
parents:
diff changeset
  1972
                                    currentPos += KReadBufSize - searchText.Length();    
hgs
parents:
diff changeset
  1973
                                    }
hgs
parents:
diff changeset
  1974
                                
hgs
parents:
diff changeset
  1975
                                file.Close();
hgs
parents:
diff changeset
  1976
                                }
hgs
parents:
diff changeset
  1977
                            
hgs
parents:
diff changeset
  1978
                            CleanupStack::PopAndDestroy(); //buffer
hgs
parents:
diff changeset
  1979
                            }
hgs
parents:
diff changeset
  1980
                        else
hgs
parents:
diff changeset
  1981
                            {
hgs
parents:
diff changeset
  1982
                            appendToArray = ETrue;
hgs
parents:
diff changeset
  1983
                            }
hgs
parents:
diff changeset
  1984
                        }
hgs
parents:
diff changeset
  1985
hgs
parents:
diff changeset
  1986
                    if (appendToArray)
hgs
parents:
diff changeset
  1987
                        TRAP(err, iFileEntryList->AppendL(fileEntry));    
hgs
parents:
diff changeset
  1988
                    }
hgs
parents:
diff changeset
  1989
                }
hgs
parents:
diff changeset
  1990
            }
hgs
parents:
diff changeset
  1991
hgs
parents:
diff changeset
  1992
        delete dir;
hgs
parents:
diff changeset
  1993
        err = fileFinder.FindWild(dir);
hgs
parents:
diff changeset
  1994
        }
hgs
parents:
diff changeset
  1995
hgs
parents:
diff changeset
  1996
    return err;
hgs
parents:
diff changeset
  1997
    }
hgs
parents:
diff changeset
  1998
hgs
parents:
diff changeset
  1999
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2000
hgs
parents:
diff changeset
  2001
TInt CFileBrowserFileUtils::DoSearchFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
hgs
parents:
diff changeset
  2002
	{
hgs
parents:
diff changeset
  2003
    TInt err(KErrNone);
hgs
parents:
diff changeset
  2004
    CDirScan* scan = CDirScan::NewLC(iFs);
hgs
parents:
diff changeset
  2005
    scan->SetScanDataL(aPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst);
hgs
parents:
diff changeset
  2006
    CDir* dir = NULL;
hgs
parents:
diff changeset
  2007
hgs
parents:
diff changeset
  2008
    for(;;)
hgs
parents:
diff changeset
  2009
        {
hgs
parents:
diff changeset
  2010
        TRAP(err, scan->NextL(dir));
hgs
parents:
diff changeset
  2011
        if (!dir  || (err != KErrNone))
hgs
parents:
diff changeset
  2012
            break;
hgs
parents:
diff changeset
  2013
hgs
parents:
diff changeset
  2014
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  2015
            {
hgs
parents:
diff changeset
  2016
            TEntry entry = (*dir)[i];
hgs
parents:
diff changeset
  2017
            
hgs
parents:
diff changeset
  2018
            if (entry.IsDir())
hgs
parents:
diff changeset
  2019
                {
hgs
parents:
diff changeset
  2020
                TFileName path(scan->FullPath());
hgs
parents:
diff changeset
  2021
                
hgs
parents:
diff changeset
  2022
                if (path.Length())
hgs
parents:
diff changeset
  2023
                    {
hgs
parents:
diff changeset
  2024
                    path.Append(entry.iName);
hgs
parents:
diff changeset
  2025
                    path.Append(_L("\\"));
hgs
parents:
diff changeset
  2026
                    DoSearchFiles(aFileName, path);
hgs
parents:
diff changeset
  2027
                    }
hgs
parents:
diff changeset
  2028
                }
hgs
parents:
diff changeset
  2029
            }
hgs
parents:
diff changeset
  2030
        delete(dir);
hgs
parents:
diff changeset
  2031
        }
hgs
parents:
diff changeset
  2032
hgs
parents:
diff changeset
  2033
    CleanupStack::PopAndDestroy(scan);
hgs
parents:
diff changeset
  2034
    return err;
hgs
parents:
diff changeset
  2035
    }
hgs
parents:
diff changeset
  2036
         
hgs
parents:
diff changeset
  2037
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2038
hgs
parents:
diff changeset
  2039
void CFileBrowserFileUtils::NewFileL(const TFileName &aNewFileName)
hgs
parents:
diff changeset
  2040
    {
hgs
parents:
diff changeset
  2041
    TFileName fullPath = iCurrentPath;
hgs
parents:
diff changeset
  2042
    fullPath.Append(aNewFileName);
hgs
parents:
diff changeset
  2043
hgs
parents:
diff changeset
  2044
    TParse nameParser;
hgs
parents:
diff changeset
  2045
    User::LeaveIfError(nameParser.SetNoWild(fullPath, NULL, NULL));
hgs
parents:
diff changeset
  2046
hgs
parents:
diff changeset
  2047
    // do not try to recreate the file if it already exists
hgs
parents:
diff changeset
  2048
    if (BaflUtils::PathExists(iFs, nameParser.DriveAndPath()))
hgs
parents:
diff changeset
  2049
        {
hgs
parents:
diff changeset
  2050
        User::LeaveIfError(iFileOps->CreateEmptyFile(fullPath));
hgs
parents:
diff changeset
  2051
        }
hgs
parents:
diff changeset
  2052
    else
hgs
parents:
diff changeset
  2053
        {
hgs
parents:
diff changeset
  2054
        User::Leave(KErrAlreadyExists);
hgs
parents:
diff changeset
  2055
        }
hgs
parents:
diff changeset
  2056
    }
hgs
parents:
diff changeset
  2057
hgs
parents:
diff changeset
  2058
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2059
hgs
parents:
diff changeset
  2060
void CFileBrowserFileUtils::NewDirectoryL(const TFileName &aNewDirectoryName)
hgs
parents:
diff changeset
  2061
    {       
hgs
parents:
diff changeset
  2062
    TFileName fullPath = iCurrentPath;
hgs
parents:
diff changeset
  2063
    fullPath.Append(aNewDirectoryName);
hgs
parents:
diff changeset
  2064
    fullPath.Append(_L("\\"));
hgs
parents:
diff changeset
  2065
hgs
parents:
diff changeset
  2066
    User::LeaveIfError(iFileOps->MkDirAll(fullPath, 0, ETrue));
hgs
parents:
diff changeset
  2067
    }
hgs
parents:
diff changeset
  2068
hgs
parents:
diff changeset
  2069
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2070
hgs
parents:
diff changeset
  2071
void CFileBrowserFileUtils::SendToL()
hgs
parents:
diff changeset
  2072
    {
hgs
parents:
diff changeset
  2073
//    CFileEntryList* entries = new(ELeave) CFileEntryList(32);
hgs
parents:
diff changeset
  2074
//    GetSelectedItemsOrCurrentItemL(entries);
hgs
parents:
diff changeset
  2075
//    CleanupStack::PushL(entries);
hgs
parents:
diff changeset
  2076
//
hgs
parents:
diff changeset
  2077
//    TInt operations(0);
hgs
parents:
diff changeset
  2078
//
hgs
parents:
diff changeset
  2079
//    CSendUi* sendUi = CSendUi::NewL();
hgs
parents:
diff changeset
  2080
//    CleanupStack::PushL(sendUi);
hgs
parents:
diff changeset
  2081
//    CMessageData* messageData = CMessageData::NewL();
hgs
parents:
diff changeset
  2082
//    CleanupStack::PushL(messageData);
hgs
parents:
diff changeset
  2083
//
hgs
parents:
diff changeset
  2084
//    for (TInt i=0; i<entries->Count(); i++)
hgs
parents:
diff changeset
  2085
//        {
hgs
parents:
diff changeset
  2086
//        TFileEntry fileEntry = entries->At(i);
hgs
parents:
diff changeset
  2087
//
hgs
parents:
diff changeset
  2088
//        // only supported for normal file entries
hgs
parents:
diff changeset
  2089
//        if (!fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  2090
//            {
hgs
parents:
diff changeset
  2091
//            TFileName fullPath = fileEntry.iPath;
hgs
parents:
diff changeset
  2092
//            fullPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2093
//
hgs
parents:
diff changeset
  2094
//            messageData->AppendAttachmentL(fullPath);
hgs
parents:
diff changeset
  2095
//            operations++;
hgs
parents:
diff changeset
  2096
//
hgs
parents:
diff changeset
  2097
//            }
hgs
parents:
diff changeset
  2098
//        }
hgs
parents:
diff changeset
  2099
//
hgs
parents:
diff changeset
  2100
//    if (operations > 0)
hgs
parents:
diff changeset
  2101
//        {
hgs
parents:
diff changeset
  2102
//        sendUi->ShowQueryAndSendL(messageData, TSendingCapabilities(0, 0, TSendingCapabilities::ESupportsAttachments));
hgs
parents:
diff changeset
  2103
//
hgs
parents:
diff changeset
  2104
//        // I guess this note is not needed..
hgs
parents:
diff changeset
  2105
////        _LIT(KMessage, "%d entries sent");
hgs
parents:
diff changeset
  2106
////        TFileName noteMsg;
hgs
parents:
diff changeset
  2107
////        noteMsg.Format(KMessage, operations);
hgs
parents:
diff changeset
  2108
////
hgs
parents:
diff changeset
  2109
////        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg);
hgs
parents:
diff changeset
  2110
//        }
hgs
parents:
diff changeset
  2111
//    else
hgs
parents:
diff changeset
  2112
//        {
hgs
parents:
diff changeset
  2113
//        _LIT(KMessage, "Nothing to send");
hgs
parents:
diff changeset
  2114
//        iEngine->FileBrowserUI()->ShowInformationNote(KMessage, _L(""));
hgs
parents:
diff changeset
  2115
//        }
hgs
parents:
diff changeset
  2116
//
hgs
parents:
diff changeset
  2117
//    CleanupStack::PopAndDestroy(3); // entries, sendUi, messageData
hgs
parents:
diff changeset
  2118
    }
hgs
parents:
diff changeset
  2119
hgs
parents:
diff changeset
  2120
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2121
hgs
parents:
diff changeset
  2122
void CFileBrowserFileUtils::CompressL()
hgs
parents:
diff changeset
  2123
    {
hgs
parents:
diff changeset
  2124
//    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
hgs
parents:
diff changeset
  2125
//    GetSelectedItemsOrCurrentItemL(entries);
hgs
parents:
diff changeset
  2126
//    CleanupStack::PushL(entries);
hgs
parents:
diff changeset
  2127
//
hgs
parents:
diff changeset
  2128
//    for (TInt i=0; i<entries->Count(); i++)
hgs
parents:
diff changeset
  2129
//        {
hgs
parents:
diff changeset
  2130
//        TFileEntry fileEntry = entries->At(i);
hgs
parents:
diff changeset
  2131
//
hgs
parents:
diff changeset
  2132
//        TFileName sourceEntry = fileEntry.iPath;
hgs
parents:
diff changeset
  2133
//        sourceEntry.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2134
//
hgs
parents:
diff changeset
  2135
//        TFileName targetEntry = sourceEntry;
hgs
parents:
diff changeset
  2136
//        targetEntry.Append(KGZipExt);
hgs
parents:
diff changeset
  2137
//
hgs
parents:
diff changeset
  2138
//        TFileName targetEntryShort;
hgs
parents:
diff changeset
  2139
//        targetEntryShort.Copy(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2140
//        targetEntryShort.Append(KGZipExt);
hgs
parents:
diff changeset
  2141
//
hgs
parents:
diff changeset
  2142
//        if (BaflUtils::FileExists(iFs, targetEntry))
hgs
parents:
diff changeset
  2143
//            {
hgs
parents:
diff changeset
  2144
//            _LIT(KMessage, "%S already exists");
hgs
parents:
diff changeset
  2145
//            TFileName noteMsg;
hgs
parents:
diff changeset
  2146
//            noteMsg.Format(KMessage, &targetEntryShort);
hgs
parents:
diff changeset
  2147
//
hgs
parents:
diff changeset
  2148
//            iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  2149
//            }
hgs
parents:
diff changeset
  2150
//        else
hgs
parents:
diff changeset
  2151
//            {
hgs
parents:
diff changeset
  2152
//            TRAPD(err,
hgs
parents:
diff changeset
  2153
//                RFile inputFile;
hgs
parents:
diff changeset
  2154
//                User::LeaveIfError(inputFile.Open(iFs, sourceEntry, EFileStream | EFileRead | EFileShareAny));
hgs
parents:
diff changeset
  2155
//                CleanupClosePushL(inputFile);
hgs
parents:
diff changeset
  2156
//
hgs
parents:
diff changeset
  2157
//                CEZFileToGZip* gZip = CEZFileToGZip::NewLC(iFs, targetEntry, inputFile);
hgs
parents:
diff changeset
  2158
//
hgs
parents:
diff changeset
  2159
//                while (gZip->DeflateL())
hgs
parents:
diff changeset
  2160
//                    ;
hgs
parents:
diff changeset
  2161
//
hgs
parents:
diff changeset
  2162
//                CleanupStack::PopAndDestroy(2); //inputFile, gZip
hgs
parents:
diff changeset
  2163
//                );
hgs
parents:
diff changeset
  2164
//
hgs
parents:
diff changeset
  2165
//             if (err == KErrNone)
hgs
parents:
diff changeset
  2166
//                {
hgs
parents:
diff changeset
  2167
//                _LIT(KMessage, "%S created succesfully");
hgs
parents:
diff changeset
  2168
//                TFileName noteMsg;
hgs
parents:
diff changeset
  2169
//                noteMsg.Format(KMessage, &targetEntryShort);
hgs
parents:
diff changeset
  2170
//
hgs
parents:
diff changeset
  2171
//                iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg);
hgs
parents:
diff changeset
  2172
//                }
hgs
parents:
diff changeset
  2173
//             else
hgs
parents:
diff changeset
  2174
//                {
hgs
parents:
diff changeset
  2175
//                _LIT(KMessage, "Unable to create %S");
hgs
parents:
diff changeset
  2176
//                TFileName noteMsg;
hgs
parents:
diff changeset
  2177
//                noteMsg.Format(KMessage, &targetEntryShort);
hgs
parents:
diff changeset
  2178
//
hgs
parents:
diff changeset
  2179
//                iEngine->FileBrowserUI()->ShowErrorNote(noteMsg);
hgs
parents:
diff changeset
  2180
//                }
hgs
parents:
diff changeset
  2181
//
hgs
parents:
diff changeset
  2182
//            RefreshViewL();
hgs
parents:
diff changeset
  2183
//            }
hgs
parents:
diff changeset
  2184
//        }
hgs
parents:
diff changeset
  2185
//
hgs
parents:
diff changeset
  2186
//    CleanupStack::PopAndDestroy(); //entries
hgs
parents:
diff changeset
  2187
    }
hgs
parents:
diff changeset
  2188
hgs
parents:
diff changeset
  2189
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2190
hgs
parents:
diff changeset
  2191
void CFileBrowserFileUtils::DecompressL()
hgs
parents:
diff changeset
  2192
    {
hgs
parents:
diff changeset
  2193
//    CFileEntryList* entries = new(ELeave) CFileEntryList(16);
hgs
parents:
diff changeset
  2194
//    GetSelectedItemsOrCurrentItemL(entries);
hgs
parents:
diff changeset
  2195
//    CleanupStack::PushL(entries);
hgs
parents:
diff changeset
  2196
//
hgs
parents:
diff changeset
  2197
//    for (TInt i=0; i<entries->Count(); i++)
hgs
parents:
diff changeset
  2198
//        {
hgs
parents:
diff changeset
  2199
//        TFileEntry fileEntry = entries->At(i);
hgs
parents:
diff changeset
  2200
//
hgs
parents:
diff changeset
  2201
//        TFileName sourceEntry = fileEntry.iPath;
hgs
parents:
diff changeset
  2202
//        sourceEntry.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2203
//
hgs
parents:
diff changeset
  2204
//        TFileName targetEntry;
hgs
parents:
diff changeset
  2205
//        TFileName targetEntryShort;
hgs
parents:
diff changeset
  2206
//
hgs
parents:
diff changeset
  2207
//        TInt sourceNameLen = fileEntry.iEntry.iName.Length();
hgs
parents:
diff changeset
  2208
//        TInt gZipExtLen = KGZipExt().Length();
hgs
parents:
diff changeset
  2209
//
hgs
parents:
diff changeset
  2210
//        if (sourceNameLen > gZipExtLen && sourceEntry.Right(gZipExtLen).CompareF(KGZipExt) == 0)
hgs
parents:
diff changeset
  2211
//            {
hgs
parents:
diff changeset
  2212
//            targetEntry = sourceEntry.Left(sourceEntry.Length() - gZipExtLen);
hgs
parents:
diff changeset
  2213
//            targetEntryShort = fileEntry.iEntry.iName.Left(sourceNameLen - gZipExtLen);
hgs
parents:
diff changeset
  2214
//
hgs
parents:
diff changeset
  2215
//            if (BaflUtils::FileExists(iFs, targetEntry))
hgs
parents:
diff changeset
  2216
//                {
hgs
parents:
diff changeset
  2217
//                _LIT(KMessage, "%S already exists");
hgs
parents:
diff changeset
  2218
//                TFileName noteMsg;
hgs
parents:
diff changeset
  2219
//                noteMsg.Format(KMessage, &targetEntryShort);
hgs
parents:
diff changeset
  2220
//
hgs
parents:
diff changeset
  2221
//                iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  2222
//                }
hgs
parents:
diff changeset
  2223
//            else
hgs
parents:
diff changeset
  2224
//                {
hgs
parents:
diff changeset
  2225
//                TRAPD(err,
hgs
parents:
diff changeset
  2226
//                    RFile outputFile;
hgs
parents:
diff changeset
  2227
//                    User::LeaveIfError(outputFile.Create(iFs, targetEntry, EFileStream | EFileWrite | EFileShareExclusive));
hgs
parents:
diff changeset
  2228
//                    CleanupClosePushL(outputFile);
hgs
parents:
diff changeset
  2229
//
hgs
parents:
diff changeset
  2230
//                    CEZGZipToFile* gZip = CEZGZipToFile::NewLC(iFs, sourceEntry, outputFile);
hgs
parents:
diff changeset
  2231
//
hgs
parents:
diff changeset
  2232
//                    while (gZip->InflateL())
hgs
parents:
diff changeset
  2233
//                        ;
hgs
parents:
diff changeset
  2234
//
hgs
parents:
diff changeset
  2235
//                    CleanupStack::PopAndDestroy(2); //outputFile, gZip
hgs
parents:
diff changeset
  2236
//                    );
hgs
parents:
diff changeset
  2237
//
hgs
parents:
diff changeset
  2238
//                 if (err == KErrNone)
hgs
parents:
diff changeset
  2239
//                    {
hgs
parents:
diff changeset
  2240
//                    _LIT(KMessage, "%S decompressed succesfully");
hgs
parents:
diff changeset
  2241
//                    TFileName noteMsg;
hgs
parents:
diff changeset
  2242
//                    noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2243
//
hgs
parents:
diff changeset
  2244
//                    iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg);
hgs
parents:
diff changeset
  2245
//                    }
hgs
parents:
diff changeset
  2246
//                 else
hgs
parents:
diff changeset
  2247
//                    {
hgs
parents:
diff changeset
  2248
//                    _LIT(KMessage, "Unable to decompress %S");
hgs
parents:
diff changeset
  2249
//                    TFileName noteMsg;
hgs
parents:
diff changeset
  2250
//                    noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2251
//
hgs
parents:
diff changeset
  2252
//                    iEngine->FileBrowserUI()->ShowErrorNote(noteMsg);
hgs
parents:
diff changeset
  2253
//                    }
hgs
parents:
diff changeset
  2254
//
hgs
parents:
diff changeset
  2255
//                RefreshViewL();
hgs
parents:
diff changeset
  2256
//                }
hgs
parents:
diff changeset
  2257
//            }
hgs
parents:
diff changeset
  2258
//        else
hgs
parents:
diff changeset
  2259
//            {
hgs
parents:
diff changeset
  2260
//            _LIT(KMessage, "%S does not have %S extension");
hgs
parents:
diff changeset
  2261
//            TFileName noteMsg;
hgs
parents:
diff changeset
  2262
//            noteMsg.Format(KMessage, &fileEntry.iEntry.iName, &KGZipExt);
hgs
parents:
diff changeset
  2263
//
hgs
parents:
diff changeset
  2264
//            iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  2265
//            }
hgs
parents:
diff changeset
  2266
//        }
hgs
parents:
diff changeset
  2267
//
hgs
parents:
diff changeset
  2268
//    CleanupStack::PopAndDestroy(); //entries
hgs
parents:
diff changeset
  2269
    }
hgs
parents:
diff changeset
  2270
hgs
parents:
diff changeset
  2271
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2272
hgs
parents:
diff changeset
  2273
TInt CFileBrowserFileUtils::GetFilesCount(const TFileName &aFullPath)
hgs
parents:
diff changeset
  2274
    {
hgs
parents:
diff changeset
  2275
    iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2276
hgs
parents:
diff changeset
  2277
    SetAllowProcessing(ETrue);
hgs
parents:
diff changeset
  2278
    DoFindFiles(_L("*"), aFullPath);
hgs
parents:
diff changeset
  2279
    DoFindFilesRecursiveL(_L("*"), aFullPath);
hgs
parents:
diff changeset
  2280
    SetAllowProcessing(EFalse);
hgs
parents:
diff changeset
  2281
hgs
parents:
diff changeset
  2282
    TInt filesCount = iFindFileEntryList->Count();
hgs
parents:
diff changeset
  2283
hgs
parents:
diff changeset
  2284
    iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2285
hgs
parents:
diff changeset
  2286
    return filesCount;
hgs
parents:
diff changeset
  2287
    }
hgs
parents:
diff changeset
  2288
hgs
parents:
diff changeset
  2289
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2290
hgs
parents:
diff changeset
  2291
TInt CFileBrowserFileUtils::GetFilesCountAndSize(const TFileName &aFullPath, TInt64 &aSize)
hgs
parents:
diff changeset
  2292
    {
hgs
parents:
diff changeset
  2293
    iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2294
hgs
parents:
diff changeset
  2295
    SetAllowProcessing(ETrue);
hgs
parents:
diff changeset
  2296
    DoFindFiles(_L("*"), aFullPath);
hgs
parents:
diff changeset
  2297
    DoFindFilesRecursiveL(_L("*"), aFullPath);
hgs
parents:
diff changeset
  2298
    SetAllowProcessing(EFalse);
hgs
parents:
diff changeset
  2299
hgs
parents:
diff changeset
  2300
    // number of files
hgs
parents:
diff changeset
  2301
    TInt filesCount = iFindFileEntryList->Count();
hgs
parents:
diff changeset
  2302
hgs
parents:
diff changeset
  2303
    // size
hgs
parents:
diff changeset
  2304
    TInt64 size(0);
hgs
parents:
diff changeset
  2305
    for (TInt i=0; i<iFindFileEntryList->Count(); i++)
hgs
parents:
diff changeset
  2306
        {
hgs
parents:
diff changeset
  2307
        TFileEntry fileEntry = iFindFileEntryList->At(i);
hgs
parents:
diff changeset
  2308
        size += fileEntry.iEntry.iSize;
hgs
parents:
diff changeset
  2309
        }
hgs
parents:
diff changeset
  2310
    aSize = size;
hgs
parents:
diff changeset
  2311
hgs
parents:
diff changeset
  2312
    iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2313
hgs
parents:
diff changeset
  2314
    return filesCount;
hgs
parents:
diff changeset
  2315
    }
hgs
parents:
diff changeset
  2316
hgs
parents:
diff changeset
  2317
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2318
hgs
parents:
diff changeset
  2319
TInt CFileBrowserFileUtils::GetEntriesCount(const TFileName &aFullPath)
hgs
parents:
diff changeset
  2320
    {
hgs
parents:
diff changeset
  2321
    // number of entries
hgs
parents:
diff changeset
  2322
    CDir* subDir = NULL;
hgs
parents:
diff changeset
  2323
    TInt entriesCount = -1;
hgs
parents:
diff changeset
  2324
    if (iFs.GetDir(aFullPath, KEntryAttMatchMask, ESortNone | EDirsFirst, subDir) == KErrNone)
hgs
parents:
diff changeset
  2325
        {
hgs
parents:
diff changeset
  2326
        entriesCount = subDir->Count();
hgs
parents:
diff changeset
  2327
        }
hgs
parents:
diff changeset
  2328
    return entriesCount;
hgs
parents:
diff changeset
  2329
    }
hgs
parents:
diff changeset
  2330
hgs
parents:
diff changeset
  2331
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2332
hgs
parents:
diff changeset
  2333
TFileName CFileBrowserFileUtils::GetMimeType(const TFileName &aFullPath)
hgs
parents:
diff changeset
  2334
    {
hgs
parents:
diff changeset
  2335
    // mime type
hgs
parents:
diff changeset
  2336
    TDataType dataType;
hgs
parents:
diff changeset
  2337
    TUid appUid;
hgs
parents:
diff changeset
  2338
    TBuf<128> mimeTypeBuf;
hgs
parents:
diff changeset
  2339
    if (iEngine->LsSession().AppForDocument(aFullPath, appUid, dataType) == KErrNone)
hgs
parents:
diff changeset
  2340
        {
hgs
parents:
diff changeset
  2341
        mimeTypeBuf.Copy(dataType.Des8());
hgs
parents:
diff changeset
  2342
        if (mimeTypeBuf == KNullDesC)
hgs
parents:
diff changeset
  2343
            mimeTypeBuf.Copy(_L("N/A"));
hgs
parents:
diff changeset
  2344
        }
hgs
parents:
diff changeset
  2345
    return mimeTypeBuf;
hgs
parents:
diff changeset
  2346
    }
hgs
parents:
diff changeset
  2347
hgs
parents:
diff changeset
  2348
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2349
hgs
parents:
diff changeset
  2350
TFileName CFileBrowserFileUtils::GetOpenWith(const TFileName &aFullPath)
hgs
parents:
diff changeset
  2351
    {
hgs
parents:
diff changeset
  2352
    // opens with
hgs
parents:
diff changeset
  2353
    TDataType dataType;
hgs
parents:
diff changeset
  2354
    TUid appUid;
hgs
parents:
diff changeset
  2355
    TApaAppInfo appInfo;
hgs
parents:
diff changeset
  2356
    TFileName opensWithBuf;
hgs
parents:
diff changeset
  2357
    if (iEngine->LsSession().AppForDocument(aFullPath, appUid, dataType) == KErrNone)
hgs
parents:
diff changeset
  2358
        {
hgs
parents:
diff changeset
  2359
        if (iEngine->LsSession().GetAppInfo(appInfo, appUid) == KErrNone)
hgs
parents:
diff changeset
  2360
            {
hgs
parents:
diff changeset
  2361
            _LIT(KOpensWithFormat, "%S (0x%08X)");
hgs
parents:
diff changeset
  2362
            opensWithBuf.Format(KOpensWithFormat, &appInfo.iCaption, appInfo.iUid);
hgs
parents:
diff changeset
  2363
            }
hgs
parents:
diff changeset
  2364
        }
hgs
parents:
diff changeset
  2365
    return opensWithBuf;
hgs
parents:
diff changeset
  2366
    }
hgs
parents:
diff changeset
  2367
hgs
parents:
diff changeset
  2368
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2369
hgs
parents:
diff changeset
  2370
void CFileBrowserFileUtils::OpenWithApparcL(const TFileName &aFileName)
hgs
parents:
diff changeset
  2371
    {
hgs
parents:
diff changeset
  2372
       
hgs
parents:
diff changeset
  2373
        TFileName fullPath = aFileName;
hgs
parents:
diff changeset
  2374
        TInt err1(KErrNone), err2(KErrNone);
hgs
parents:
diff changeset
  2375
        TUid appUid;
hgs
parents:
diff changeset
  2376
        TDataType dataType;
hgs
parents:
diff changeset
  2377
        TBool isProgram;
hgs
parents:
diff changeset
  2378
        
hgs
parents:
diff changeset
  2379
	
hgs
parents:
diff changeset
  2380
        err1 = iEngine->LsSession().AppForDocument(fullPath, appUid, dataType);
hgs
parents:
diff changeset
  2381
        err2 = iEngine->LsSession().IsProgram(fullPath, isProgram);
hgs
parents:
diff changeset
  2382
        
hgs
parents:
diff changeset
  2383
        if (err1 == KErrNone && err2 == KErrNone)
hgs
parents:
diff changeset
  2384
            {
hgs
parents:
diff changeset
  2385
            if (appUid != KNullUid)
hgs
parents:
diff changeset
  2386
                {
hgs
parents:
diff changeset
  2387
                // found an app, run using it
hgs
parents:
diff changeset
  2388
                TApaTaskList taskList(CEikonEnv::Static()->WsSession());
hgs
parents:
diff changeset
  2389
                TApaTask task = (taskList.FindApp(appUid));
hgs
parents:
diff changeset
  2390
                if (task.Exists())
hgs
parents:
diff changeset
  2391
                    {
hgs
parents:
diff changeset
  2392
                    User::LeaveIfError(task.SwitchOpenFile(fullPath));
hgs
parents:
diff changeset
  2393
                    task.BringToForeground();
hgs
parents:
diff changeset
  2394
                    }
hgs
parents:
diff changeset
  2395
                else
hgs
parents:
diff changeset
  2396
                    {
hgs
parents:
diff changeset
  2397
                    TThreadId id;
hgs
parents:
diff changeset
  2398
                    iEngine->LsSession().StartDocument(fullPath, appUid, id, RApaLsSession::ESwitchFiles);
hgs
parents:
diff changeset
  2399
                    }
hgs
parents:
diff changeset
  2400
                }
hgs
parents:
diff changeset
  2401
            else if (isProgram)
hgs
parents:
diff changeset
  2402
                {
hgs
parents:
diff changeset
  2403
                LaunchProgramL(fullPath);
hgs
parents:
diff changeset
  2404
                }            
hgs
parents:
diff changeset
  2405
            }
hgs
parents:
diff changeset
  2406
        //}   
hgs
parents:
diff changeset
  2407
    }
hgs
parents:
diff changeset
  2408
	
hgs
parents:
diff changeset
  2409
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2410
hgs
parents:
diff changeset
  2411
//void CFileBrowserFileUtils::HandleServerAppExit(TInt aReason)
hgs
parents:
diff changeset
  2412
//	{
hgs
parents:
diff changeset
  2413
//	if (iOpenFileService)
hgs
parents:
diff changeset
  2414
//		{
hgs
parents:
diff changeset
  2415
//		delete iOpenFileService;
hgs
parents:
diff changeset
  2416
//		iOpenFileService = NULL;
hgs
parents:
diff changeset
  2417
//		}
hgs
parents:
diff changeset
  2418
//	MAknServerAppExitObserver::HandleServerAppExit(aReason);
hgs
parents:
diff changeset
  2419
//	}
hgs
parents:
diff changeset
  2420
hgs
parents:
diff changeset
  2421
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2422
hgs
parents:
diff changeset
  2423
void CFileBrowserFileUtils::OpenWithDocHandlerL(const TFileName &aFileName, TBool aEmbed)
hgs
parents:
diff changeset
  2424
    {
hgs
parents:
diff changeset
  2425
        TFileName fullPath = aFileName;
hgs
parents:
diff changeset
  2426
        RFile sharableFile;
hgs
parents:
diff changeset
  2427
        iDocHandler->OpenTempFileL(fullPath, sharableFile);
hgs
parents:
diff changeset
  2428
        CleanupClosePushL(sharableFile);
hgs
parents:
diff changeset
  2429
        TDataType dataType;
hgs
parents:
diff changeset
  2430
        if (aEmbed) 
hgs
parents:
diff changeset
  2431
            {
hgs
parents:
diff changeset
  2432
    	    iDocHandler->OpenFileEmbeddedL(sharableFile, dataType);
hgs
parents:
diff changeset
  2433
            }
hgs
parents:
diff changeset
  2434
        else
hgs
parents:
diff changeset
  2435
            {
hgs
parents:
diff changeset
  2436
    	    iDocHandler->OpenFileL(sharableFile, dataType);
hgs
parents:
diff changeset
  2437
            }
hgs
parents:
diff changeset
  2438
        CleanupStack::PopAndDestroy();  //sharableFile
hgs
parents:
diff changeset
  2439
    //    }   
hgs
parents:
diff changeset
  2440
    }
hgs
parents:
diff changeset
  2441
hgs
parents:
diff changeset
  2442
	// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2443
hgs
parents:
diff changeset
  2444
void CFileBrowserFileUtils::OpenWithFileServiceL(TInt aCurrentItemIndex)
hgs
parents:
diff changeset
  2445
    {
hgs
parents:
diff changeset
  2446
    if (iFileEntryList->Count() > aCurrentItemIndex && aCurrentItemIndex >= 0)
hgs
parents:
diff changeset
  2447
        {
hgs
parents:
diff changeset
  2448
        TFileEntry fileEntry = iFileEntryList->At(aCurrentItemIndex);
hgs
parents:
diff changeset
  2449
        
hgs
parents:
diff changeset
  2450
        TFileName fullPath = fileEntry.iPath;
hgs
parents:
diff changeset
  2451
        fullPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2452
hgs
parents:
diff changeset
  2453
//    	TBool itemSelected(EFalse);
hgs
parents:
diff changeset
  2454
        RFile sharableFile;
hgs
parents:
diff changeset
  2455
//        TUid appUidExtracted;
hgs
parents:
diff changeset
  2456
        
hgs
parents:
diff changeset
  2457
        TRAPD(err,
hgs
parents:
diff changeset
  2458
           
hgs
parents:
diff changeset
  2459
        	// use doc handler to get a sharable file handle
hgs
parents:
diff changeset
  2460
            iDocHandler->OpenTempFileL(fullPath, sharableFile);
hgs
parents:
diff changeset
  2461
            CleanupClosePushL(sharableFile);
hgs
parents:
diff changeset
  2462
            
hgs
parents:
diff changeset
  2463
            // find the data type
hgs
parents:
diff changeset
  2464
            TDataRecognitionResult dataType;
hgs
parents:
diff changeset
  2465
        	User::LeaveIfError(iEngine->LsSession().RecognizeData(sharableFile, dataType));
hgs
parents:
diff changeset
  2466
hgs
parents:
diff changeset
  2467
        	// get all apps that support OpenFileService for this datatype
hgs
parents:
diff changeset
  2468
        	CApaAppServiceInfoArray* apps = iEngine->LsSession().GetServiceImplementationsLC(KOpenServiceUid, dataType.iDataType);
hgs
parents:
diff changeset
  2469
        	TArray<TApaAppServiceInfo> appServiceInfos = apps->Array();
hgs
parents:
diff changeset
  2470
    	
hgs
parents:
diff changeset
  2471
        	if (appServiceInfos.Count() > 0)
hgs
parents:
diff changeset
  2472
        		{
hgs
parents:
diff changeset
  2473
        		// build an array of the app names
hgs
parents:
diff changeset
  2474
        		CDesCArray* names = new (ELeave) CDesCArrayFlat(16);
hgs
parents:
diff changeset
  2475
        		CleanupStack::PushL(names);
hgs
parents:
diff changeset
  2476
        		for (TInt ii=0; ii<appServiceInfos.Count(); ii++)
hgs
parents:
diff changeset
  2477
        			{
hgs
parents:
diff changeset
  2478
        			TUid appUid = appServiceInfos[ii].Uid();
hgs
parents:
diff changeset
  2479
        			TApaAppInfo appInfo;
hgs
parents:
diff changeset
  2480
        			if (iEngine->LsSession().GetAppInfo(appInfo, appUid) == KErrNone)
hgs
parents:
diff changeset
  2481
        				{
hgs
parents:
diff changeset
  2482
        				names->AppendL(appInfo.iCaption);
hgs
parents:
diff changeset
  2483
        				}
hgs
parents:
diff changeset
  2484
        			else
hgs
parents:
diff changeset
  2485
        				{
hgs
parents:
diff changeset
  2486
        				TBuf<10> buf;
hgs
parents:
diff changeset
  2487
        				buf.Format(_L("0x%08x"), appUid);
hgs
parents:
diff changeset
  2488
        				names->AppendL(buf);
hgs
parents:
diff changeset
  2489
        				}
hgs
parents:
diff changeset
  2490
        			}
hgs
parents:
diff changeset
  2491
    		
hgs
parents:
diff changeset
  2492
        		// use a list query to select the app
hgs
parents:
diff changeset
  2493
//        		TInt index(0);
hgs
parents:
diff changeset
  2494
//        		CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog(&index);
hgs
parents:
diff changeset
  2495
//        		dlg->PrepareLC(R_APP_SELECTION_QUERY);
hgs
parents:
diff changeset
  2496
//        		dlg->SetItemTextArray(names);
hgs
parents:
diff changeset
  2497
//        		dlg->SetOwnershipType(ELbmDoesNotOwnItemArray);
hgs
parents:
diff changeset
  2498
//
hgs
parents:
diff changeset
  2499
//        		if(dlg->RunLD())
hgs
parents:
diff changeset
  2500
//        			{
hgs
parents:
diff changeset
  2501
//        			// extract the chosen UID
hgs
parents:
diff changeset
  2502
//        			appUidExtracted = appServiceInfos[index].Uid();
hgs
parents:
diff changeset
  2503
//        			itemSelected = ETrue;
hgs
parents:
diff changeset
  2504
//        			}
hgs
parents:
diff changeset
  2505
    		
hgs
parents:
diff changeset
  2506
        		CleanupStack::PopAndDestroy(); // names
hgs
parents:
diff changeset
  2507
        		}
hgs
parents:
diff changeset
  2508
hgs
parents:
diff changeset
  2509
//            if (itemSelected)
hgs
parents:
diff changeset
  2510
//                {
hgs
parents:
diff changeset
  2511
//                // start OpenFileService for the selected app
hgs
parents:
diff changeset
  2512
//                CAiwGenericParamList& paramList = iDocHandler->InParamListL();
hgs
parents:
diff changeset
  2513
//                (void)paramList;
hgs
parents:
diff changeset
  2514
//                if (iOpenFileService)
hgs
parents:
diff changeset
  2515
//                    {
hgs
parents:
diff changeset
  2516
//                    delete iOpenFileService;
hgs
parents:
diff changeset
  2517
//                    iOpenFileService = NULL;
hgs
parents:
diff changeset
  2518
//                    }
hgs
parents:
diff changeset
  2519
//
hgs
parents:
diff changeset
  2520
//                iOpenFileService = CAknOpenFileService::NewL(appUidExtracted, sharableFile, this, &paramList);
hgs
parents:
diff changeset
  2521
//                }
hgs
parents:
diff changeset
  2522
hgs
parents:
diff changeset
  2523
            CleanupStack::PopAndDestroy(2); // sharableFile, apps
hgs
parents:
diff changeset
  2524
hgs
parents:
diff changeset
  2525
            ); // TRAPD
hgs
parents:
diff changeset
  2526
hgs
parents:
diff changeset
  2527
        if (err != KErrNone)
hgs
parents:
diff changeset
  2528
            {
hgs
parents:
diff changeset
  2529
            _LIT(KMessage, "No file service available for %S");
hgs
parents:
diff changeset
  2530
            TFileName noteMsg;
hgs
parents:
diff changeset
  2531
            noteMsg.Format(KMessage, &fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2532
            
hgs
parents:
diff changeset
  2533
            iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  2534
            }
hgs
parents:
diff changeset
  2535
        }   
hgs
parents:
diff changeset
  2536
    }
hgs
parents:
diff changeset
  2537
    
hgs
parents:
diff changeset
  2538
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2539
hgs
parents:
diff changeset
  2540
TBool CFileBrowserFileUtils::FileExists(const TDesC& aPath)
hgs
parents:
diff changeset
  2541
    {
hgs
parents:
diff changeset
  2542
    return BaflUtils::FileExists(iFs, aPath);
hgs
parents:
diff changeset
  2543
    }
hgs
parents:
diff changeset
  2544
hgs
parents:
diff changeset
  2545
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2546
hgs
parents:
diff changeset
  2547
TInt CFileBrowserFileUtils::LaunchProgramL(const TDesC& aPath)
hgs
parents:
diff changeset
  2548
    {
hgs
parents:
diff changeset
  2549
    CApaCommandLine* commandLine = CApaCommandLine::NewLC();
hgs
parents:
diff changeset
  2550
    commandLine->SetExecutableNameL(aPath);
hgs
parents:
diff changeset
  2551
    commandLine->SetCommandL(EApaCommandRun);
hgs
parents:
diff changeset
  2552
    TInt err = iEngine->LsSession().StartApp(*commandLine);
hgs
parents:
diff changeset
  2553
    CleanupStack::PopAndDestroy(); //commandLine
hgs
parents:
diff changeset
  2554
    return err;
hgs
parents:
diff changeset
  2555
    }
hgs
parents:
diff changeset
  2556
hgs
parents:
diff changeset
  2557
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2558
hgs
parents:
diff changeset
  2559
void CFileBrowserFileUtils::MemoryInfoPopupL()
hgs
parents:
diff changeset
  2560
    {
hgs
parents:
diff changeset
  2561
    _LIT(KUsedBytesEntry, "Used: %S bytes\n");
hgs
parents:
diff changeset
  2562
    _LIT(KFreeBytesEntry, "Free: %S bytes\n");
hgs
parents:
diff changeset
  2563
    _LIT(KSizeBytesEntry, "Size: %S bytes\n");
hgs
parents:
diff changeset
  2564
        
hgs
parents:
diff changeset
  2565
    HBufC* messageBuf = HBufC::NewLC(2048);
hgs
parents:
diff changeset
  2566
    TPtr messagePtr = messageBuf->Des();
hgs
parents:
diff changeset
  2567
    TBuf<128> entryLine;
hgs
parents:
diff changeset
  2568
hgs
parents:
diff changeset
  2569
    // RAM
hgs
parents:
diff changeset
  2570
    TMemoryInfoV1Buf ramMemory;
hgs
parents:
diff changeset
  2571
    UserHal::MemoryInfo(ramMemory);
hgs
parents:
diff changeset
  2572
    messagePtr.Append(_L("RAM\n"));
hgs
parents:
diff changeset
  2573
hgs
parents:
diff changeset
  2574
    // used
hgs
parents:
diff changeset
  2575
    TBuf<32> usedBuf;
hgs
parents:
diff changeset
  2576
    usedBuf.AppendNum(ramMemory().iMaxFreeRamInBytes-ramMemory().iFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2577
    entryLine.Format(KUsedBytesEntry, &usedBuf);
hgs
parents:
diff changeset
  2578
    messagePtr.Append(entryLine);        
hgs
parents:
diff changeset
  2579
hgs
parents:
diff changeset
  2580
    // free
hgs
parents:
diff changeset
  2581
    TBuf<32> freeBuf;
hgs
parents:
diff changeset
  2582
    freeBuf.AppendNum(ramMemory().iFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2583
    entryLine.Format(KFreeBytesEntry, &freeBuf);
hgs
parents:
diff changeset
  2584
    messagePtr.Append(entryLine);
hgs
parents:
diff changeset
  2585
            
hgs
parents:
diff changeset
  2586
    // size
hgs
parents:
diff changeset
  2587
    TBuf<32> sizeBuf;
hgs
parents:
diff changeset
  2588
    sizeBuf.AppendNum(ramMemory().iMaxFreeRamInBytes, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2589
    entryLine.Format(KSizeBytesEntry, &sizeBuf);
hgs
parents:
diff changeset
  2590
    messagePtr.Append(entryLine); 
hgs
parents:
diff changeset
  2591
    
hgs
parents:
diff changeset
  2592
    // All drives
hgs
parents:
diff changeset
  2593
    for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  2594
        {
hgs
parents:
diff changeset
  2595
        TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  2596
hgs
parents:
diff changeset
  2597
        messagePtr.Append(_L("\n"));
hgs
parents:
diff changeset
  2598
        messagePtr.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  2599
        messagePtr.Append(_L(":\n"));
hgs
parents:
diff changeset
  2600
hgs
parents:
diff changeset
  2601
        // used
hgs
parents:
diff changeset
  2602
        TBuf<32> usedBuf;
hgs
parents:
diff changeset
  2603
        usedBuf.AppendNum(driveEntry.iVolumeInfo.iSize-driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2604
        entryLine.Format(KUsedBytesEntry, &usedBuf);
hgs
parents:
diff changeset
  2605
        messagePtr.Append(entryLine);        
hgs
parents:
diff changeset
  2606
hgs
parents:
diff changeset
  2607
        // free
hgs
parents:
diff changeset
  2608
        TBuf<32> freeBuf;
hgs
parents:
diff changeset
  2609
        freeBuf.AppendNum(driveEntry.iVolumeInfo.iFree, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2610
        entryLine.Format(KFreeBytesEntry, &freeBuf);
hgs
parents:
diff changeset
  2611
        messagePtr.Append(entryLine);
hgs
parents:
diff changeset
  2612
                
hgs
parents:
diff changeset
  2613
        // size
hgs
parents:
diff changeset
  2614
        TBuf<32> sizeBuf;
hgs
parents:
diff changeset
  2615
        sizeBuf.AppendNum(driveEntry.iVolumeInfo.iSize, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
  2616
        entryLine.Format(KSizeBytesEntry, &sizeBuf);
hgs
parents:
diff changeset
  2617
        messagePtr.Append(entryLine); 
hgs
parents:
diff changeset
  2618
        }
hgs
parents:
diff changeset
  2619
hgs
parents:
diff changeset
  2620
//    CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
hgs
parents:
diff changeset
  2621
//    dialog->PrepareLC(R_MEMORYINFO_DIALOG);
hgs
parents:
diff changeset
  2622
//    dialog->SetMessageTextL(messagePtr);
hgs
parents:
diff changeset
  2623
//    dialog->RunLD();
hgs
parents:
diff changeset
  2624
    
hgs
parents:
diff changeset
  2625
    CleanupStack::PopAndDestroy(); //messageBuf
hgs
parents:
diff changeset
  2626
    }
hgs
parents:
diff changeset
  2627
hgs
parents:
diff changeset
  2628
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2629
hgs
parents:
diff changeset
  2630
void CFileBrowserFileUtils::ShowFileCheckSumsL(TInt aCurrentItemIndex, TInt aType)
hgs
parents:
diff changeset
  2631
    {
hgs
parents:
diff changeset
  2632
    if (iFileEntryList->Count() > aCurrentItemIndex && aCurrentItemIndex >= 0)
hgs
parents:
diff changeset
  2633
        {
hgs
parents:
diff changeset
  2634
        TFileEntry fileEntry = iFileEntryList->At(aCurrentItemIndex);
hgs
parents:
diff changeset
  2635
        TFileName fullPath = fileEntry.iPath;
hgs
parents:
diff changeset
  2636
        fullPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2637
        
hgs
parents:
diff changeset
  2638
        // try to open the file for reading
hgs
parents:
diff changeset
  2639
        RFile fileP;
hgs
parents:
diff changeset
  2640
        User::LeaveIfError(fileP.Open(iEngine->EikonEnv()->FsSession(),
hgs
parents:
diff changeset
  2641
                                      fullPath,
hgs
parents:
diff changeset
  2642
                                      EFileRead|EFileShareReadersOnly));
hgs
parents:
diff changeset
  2643
hgs
parents:
diff changeset
  2644
        CleanupClosePushL(fileP);
hgs
parents:
diff changeset
  2645
hgs
parents:
diff changeset
  2646
        TBuf<128> checkSum;
hgs
parents:
diff changeset
  2647
        HBufC* messageBuf = HBufC::NewLC(2048);
hgs
parents:
diff changeset
  2648
        TPtr messagePtr = messageBuf->Des();
hgs
parents:
diff changeset
  2649
hgs
parents:
diff changeset
  2650
        // get MD5 checksum
hgs
parents:
diff changeset
  2651
        if (aType == EFileChecksumsMD5)
hgs
parents:
diff changeset
  2652
            {
hgs
parents:
diff changeset
  2653
            CMD5* md5 = CMD5::NewL();
hgs
parents:
diff changeset
  2654
            CleanupStack::PushL(md5);
hgs
parents:
diff changeset
  2655
            HBufC8* md5Buf = MessageDigestInHexLC(md5, fileP);
hgs
parents:
diff changeset
  2656
            checkSum.Copy(*md5Buf);
hgs
parents:
diff changeset
  2657
            messagePtr.Append(_L("MD5\n"));
hgs
parents:
diff changeset
  2658
            messagePtr.Append(checkSum);
hgs
parents:
diff changeset
  2659
            CleanupStack::PopAndDestroy(2); // md5, md5Buf
hgs
parents:
diff changeset
  2660
            }
hgs
parents:
diff changeset
  2661
hgs
parents:
diff changeset
  2662
        // get MD2 checksum
hgs
parents:
diff changeset
  2663
        else if (aType == EFileChecksumsMD2)
hgs
parents:
diff changeset
  2664
            {
hgs
parents:
diff changeset
  2665
            CMD2* md2 = CMD2::NewL();
hgs
parents:
diff changeset
  2666
            CleanupStack::PushL(md2);
hgs
parents:
diff changeset
  2667
            HBufC8* md2Buf = MessageDigestInHexLC(md2, fileP);
hgs
parents:
diff changeset
  2668
            checkSum.Copy(*md2Buf);
hgs
parents:
diff changeset
  2669
            messagePtr.Append(_L("MD2\n"));
hgs
parents:
diff changeset
  2670
            messagePtr.Append(checkSum);
hgs
parents:
diff changeset
  2671
            CleanupStack::PopAndDestroy(2); // md2, md2Buf
hgs
parents:
diff changeset
  2672
            }
hgs
parents:
diff changeset
  2673
hgs
parents:
diff changeset
  2674
        // get SHA-1 checksum
hgs
parents:
diff changeset
  2675
        else if (aType == EFileChecksumsSHA1)
hgs
parents:
diff changeset
  2676
            {
hgs
parents:
diff changeset
  2677
            CSHA1* sha1 = CSHA1::NewL();
hgs
parents:
diff changeset
  2678
            CleanupStack::PushL(sha1);
hgs
parents:
diff changeset
  2679
            HBufC8* sha1Buf = MessageDigestInHexLC(sha1, fileP);
hgs
parents:
diff changeset
  2680
            checkSum.Copy(*sha1Buf);
hgs
parents:
diff changeset
  2681
            messagePtr.Append(_L("SHA-1\n"));
hgs
parents:
diff changeset
  2682
            messagePtr.Append(checkSum);
hgs
parents:
diff changeset
  2683
            CleanupStack::PopAndDestroy(2); // sha1, sha1Buf
hgs
parents:
diff changeset
  2684
            }
hgs
parents:
diff changeset
  2685
hgs
parents:
diff changeset
  2686
        else
hgs
parents:
diff changeset
  2687
            {
hgs
parents:
diff changeset
  2688
            User::Panic(_L("Inv.CS.Type"), 723);
hgs
parents:
diff changeset
  2689
            }
hgs
parents:
diff changeset
  2690
hgs
parents:
diff changeset
  2691
        // show dialog
hgs
parents:
diff changeset
  2692
        iEngine->FileBrowserUI()->ShowInformationNote(messagePtr, fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2693
hgs
parents:
diff changeset
  2694
        CleanupStack::PopAndDestroy(2); // messageBuf, fileP
hgs
parents:
diff changeset
  2695
        }
hgs
parents:
diff changeset
  2696
    }
hgs
parents:
diff changeset
  2697
hgs
parents:
diff changeset
  2698
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2699
hgs
parents:
diff changeset
  2700
HBufC8* CFileBrowserFileUtils::MessageDigestInHexLC(CMessageDigest* aMD, RFile& aFile)
hgs
parents:
diff changeset
  2701
    {
hgs
parents:
diff changeset
  2702
    // seek to file start
hgs
parents:
diff changeset
  2703
    TInt startPos(0);
hgs
parents:
diff changeset
  2704
    aFile.Seek(ESeekStart, startPos);
hgs
parents:
diff changeset
  2705
hgs
parents:
diff changeset
  2706
    // create result buffer
hgs
parents:
diff changeset
  2707
    HBufC8* result = HBufC8::NewLC(128);
hgs
parents:
diff changeset
  2708
hgs
parents:
diff changeset
  2709
    const TInt KBufSize(1024);
hgs
parents:
diff changeset
  2710
    TInt fileSize(0);
hgs
parents:
diff changeset
  2711
    TInt fileOffset(0);
hgs
parents:
diff changeset
  2712
hgs
parents:
diff changeset
  2713
    // get file size
hgs
parents:
diff changeset
  2714
    aFile.Size(fileSize);
hgs
parents:
diff changeset
  2715
hgs
parents:
diff changeset
  2716
    HBufC8* buf = HBufC8::NewMaxLC(KBufSize);
hgs
parents:
diff changeset
  2717
    TPtr8 bufPtr(buf->Des());
hgs
parents:
diff changeset
  2718
hgs
parents:
diff changeset
  2719
    // read to buffer
hgs
parents:
diff changeset
  2720
    while (fileOffset < fileSize - KBufSize)
hgs
parents:
diff changeset
  2721
        {
hgs
parents:
diff changeset
  2722
        aFile.Read(bufPtr, KBufSize);
hgs
parents:
diff changeset
  2723
        aMD->Hash(bufPtr);
hgs
parents:
diff changeset
  2724
        fileOffset += bufPtr.Length();
hgs
parents:
diff changeset
  2725
        }
hgs
parents:
diff changeset
  2726
hgs
parents:
diff changeset
  2727
    aFile.Read(bufPtr, fileSize - fileOffset);
hgs
parents:
diff changeset
  2728
    bufPtr.SetLength(fileSize - fileOffset);
hgs
parents:
diff changeset
  2729
    
hgs
parents:
diff changeset
  2730
    // get final message digest
hgs
parents:
diff changeset
  2731
    TPtrC8 hashedSig(aMD->Final(bufPtr));
hgs
parents:
diff changeset
  2732
    
hgs
parents:
diff changeset
  2733
    // change size of the result buffer
hgs
parents:
diff changeset
  2734
    result->ReAllocL(hashedSig.Length() * 2);
hgs
parents:
diff changeset
  2735
    TPtr8 resultPtr = result->Des();
hgs
parents:
diff changeset
  2736
hgs
parents:
diff changeset
  2737
    // convert to hex format
hgs
parents:
diff changeset
  2738
    for (TInt i=0; i<hashedSig.Length(); i++)
hgs
parents:
diff changeset
  2739
        {
hgs
parents:
diff changeset
  2740
        resultPtr.AppendFormat(_L8("%+02x"), hashedSig[i]);
hgs
parents:
diff changeset
  2741
        }
hgs
parents:
diff changeset
  2742
                    
hgs
parents:
diff changeset
  2743
    CleanupStack::PopAndDestroy(); // buf
hgs
parents:
diff changeset
  2744
    
hgs
parents:
diff changeset
  2745
    return result;
hgs
parents:
diff changeset
  2746
    }
hgs
parents:
diff changeset
  2747
        
hgs
parents:
diff changeset
  2748
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2749
hgs
parents:
diff changeset
  2750
void CFileBrowserFileUtils::SetErrRdL(TBool aEnable)
hgs
parents:
diff changeset
  2751
    {
hgs
parents:
diff changeset
  2752
    #ifndef FILEBROWSER_LITE
hgs
parents:
diff changeset
  2753
    if (iEngine->Settings().iBypassPlatformSecurity)
hgs
parents:
diff changeset
  2754
        {
hgs
parents:
diff changeset
  2755
        TInt err(KErrNone);
hgs
parents:
diff changeset
  2756
        
hgs
parents:
diff changeset
  2757
        if (aEnable)
hgs
parents:
diff changeset
  2758
            {
hgs
parents:
diff changeset
  2759
            // make sure that the directory exists
hgs
parents:
diff changeset
  2760
            iFileOps->MkDirAll(KErrRdPath);        
hgs
parents:
diff changeset
  2761
hgs
parents:
diff changeset
  2762
            // create the file
hgs
parents:
diff changeset
  2763
            err = iFileOps->CreateEmptyFile(KErrRdPath);
hgs
parents:
diff changeset
  2764
            }
hgs
parents:
diff changeset
  2765
        else    
hgs
parents:
diff changeset
  2766
            {
hgs
parents:
diff changeset
  2767
            // get TEntry of ErrRd
hgs
parents:
diff changeset
  2768
            TEntry entry;
hgs
parents:
diff changeset
  2769
            err = iFs.Entry(KErrRdPath, entry);
hgs
parents:
diff changeset
  2770
            
hgs
parents:
diff changeset
  2771
            if (err == KErrNone)
hgs
parents:
diff changeset
  2772
                {
hgs
parents:
diff changeset
  2773
                TFileEntry fileEntry;
hgs
parents:
diff changeset
  2774
                fileEntry.iPath = KErrRdDir;
hgs
parents:
diff changeset
  2775
                fileEntry.iEntry = entry;
hgs
parents:
diff changeset
  2776
                
hgs
parents:
diff changeset
  2777
                err = iFileOps->Delete(fileEntry);                
hgs
parents:
diff changeset
  2778
                }
hgs
parents:
diff changeset
  2779
            }        
hgs
parents:
diff changeset
  2780
hgs
parents:
diff changeset
  2781
        // update view
hgs
parents:
diff changeset
  2782
        RefreshViewL(); 
hgs
parents:
diff changeset
  2783
    
hgs
parents:
diff changeset
  2784
        if (err == KErrNone)
hgs
parents:
diff changeset
  2785
            {
hgs
parents:
diff changeset
  2786
            iEngine->FileBrowserUI()->ShowConfirmationNote(_L("State changed"));
hgs
parents:
diff changeset
  2787
            }
hgs
parents:
diff changeset
  2788
        else    
hgs
parents:
diff changeset
  2789
            {
hgs
parents:
diff changeset
  2790
            iEngine->FileBrowserUI()->ShowErrorNote(_L("Cannot change the state"));
hgs
parents:
diff changeset
  2791
            }        
hgs
parents:
diff changeset
  2792
        }
hgs
parents:
diff changeset
  2793
    else
hgs
parents:
diff changeset
  2794
        {
hgs
parents:
diff changeset
  2795
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Enable \"bypass platform security\" from the settings first"), _L(""));
hgs
parents:
diff changeset
  2796
        }
hgs
parents:
diff changeset
  2797
    #else
hgs
parents:
diff changeset
  2798
        aEnable = aEnable;
hgs
parents:
diff changeset
  2799
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Not supported in lite version"), _L(""));
hgs
parents:
diff changeset
  2800
    #endif
hgs
parents:
diff changeset
  2801
    }
hgs
parents:
diff changeset
  2802
hgs
parents:
diff changeset
  2803
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2804
hgs
parents:
diff changeset
  2805
//void CFileBrowserFileUtils::EnableAvkonIconCacheL(TBool aEnable)
hgs
parents:
diff changeset
  2806
//    {
hgs
parents:
diff changeset
  2807
//#ifndef __SERIES60_30__
hgs
parents:
diff changeset
  2808
//    if (AknIconConfig::EnableAknIconSrvCache(aEnable) == KErrNone)
hgs
parents:
diff changeset
  2809
//        {
hgs
parents:
diff changeset
  2810
//        iEngine->FileBrowserUI()->ShowConfirmationNote(_L("State changed"));
hgs
parents:
diff changeset
  2811
//        }
hgs
parents:
diff changeset
  2812
//    else
hgs
parents:
diff changeset
  2813
//        {
hgs
parents:
diff changeset
  2814
//        iEngine->FileBrowserUI()->ShowErrorNote(_L("Unknown error occured"));
hgs
parents:
diff changeset
  2815
//        }
hgs
parents:
diff changeset
  2816
// #else
hgs
parents:
diff changeset
  2817
//    aEnable = aEnable;
hgs
parents:
diff changeset
  2818
//    iEngine->FileBrowserUI()->ShowInformationNote(_L("Not supported in S60 3.0"), _L(""));
hgs
parents:
diff changeset
  2819
// #endif
hgs
parents:
diff changeset
  2820
// 
hgs
parents:
diff changeset
  2821
//    }
hgs
parents:
diff changeset
  2822
hgs
parents:
diff changeset
  2823
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2824
hgs
parents:
diff changeset
  2825
void CFileBrowserFileUtils::SimulateLeaveL(TInt aLeaveCode)
hgs
parents:
diff changeset
  2826
    {
hgs
parents:
diff changeset
  2827
    User::Leave(aLeaveCode);
hgs
parents:
diff changeset
  2828
    }
hgs
parents:
diff changeset
  2829
hgs
parents:
diff changeset
  2830
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2831
hgs
parents:
diff changeset
  2832
void CFileBrowserFileUtils::SimulatePanicL(const TDesC& aPanicCategory, TInt aPanicCode)
hgs
parents:
diff changeset
  2833
    {
hgs
parents:
diff changeset
  2834
    User::Panic(aPanicCategory, aPanicCode);
hgs
parents:
diff changeset
  2835
    }
hgs
parents:
diff changeset
  2836
hgs
parents:
diff changeset
  2837
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2838
hgs
parents:
diff changeset
  2839
void CFileBrowserFileUtils::SimulateExceptionL(TInt aExceptionCode)
hgs
parents:
diff changeset
  2840
    {
hgs
parents:
diff changeset
  2841
    User::RaiseException((TExcType)aExceptionCode);
hgs
parents:
diff changeset
  2842
    }
hgs
parents:
diff changeset
  2843
hgs
parents:
diff changeset
  2844
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2845
hgs
parents:
diff changeset
  2846
TUint32 CFileBrowserFileUtils::GetDebugMask()
hgs
parents:
diff changeset
  2847
    {
hgs
parents:
diff changeset
  2848
    return UserSvr::DebugMask();
hgs
parents:
diff changeset
  2849
    }
hgs
parents:
diff changeset
  2850
hgs
parents:
diff changeset
  2851
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2852
hgs
parents:
diff changeset
  2853
void CFileBrowserFileUtils::SetDebugMaskL(TUint32 aDbgMask)
hgs
parents:
diff changeset
  2854
    {
hgs
parents:
diff changeset
  2855
    User::SetDebugMask(aDbgMask);
hgs
parents:
diff changeset
  2856
    }
hgs
parents:
diff changeset
  2857
    
hgs
parents:
diff changeset
  2858
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2859
hgs
parents:
diff changeset
  2860
void CFileBrowserFileUtils::WriteAllAppsL()
hgs
parents:
diff changeset
  2861
    {
hgs
parents:
diff changeset
  2862
    _LIT(KAllAppsFileName, "AllApps.txt");
hgs
parents:
diff changeset
  2863
    TFileName allAppsPath = PathInfo::PhoneMemoryRootPath();
hgs
parents:
diff changeset
  2864
    allAppsPath.Append(KAllAppsFileName);
hgs
parents:
diff changeset
  2865
hgs
parents:
diff changeset
  2866
    RFile file;
hgs
parents:
diff changeset
  2867
    if (file.Replace(iFs, allAppsPath, EFileWrite) == KErrNone)
hgs
parents:
diff changeset
  2868
        {
hgs
parents:
diff changeset
  2869
        CleanupClosePushL(file);
hgs
parents:
diff changeset
  2870
        
hgs
parents:
diff changeset
  2871
        CDesC8Array* appsArray = new(ELeave) CDesC8ArrayFlat(192);
hgs
parents:
diff changeset
  2872
        CleanupStack::PushL(appsArray);
hgs
parents:
diff changeset
  2873
        
hgs
parents:
diff changeset
  2874
        TBuf8<KMaxFileName> fileEntry;
hgs
parents:
diff changeset
  2875
        TBuf8<KMaxFileName> appFullPath;
hgs
parents:
diff changeset
  2876
        _LIT8(KAppEntryFormat, "%S (0x%08X)%S");
hgs
parents:
diff changeset
  2877
        TApaAppInfo appInfo;
hgs
parents:
diff changeset
  2878
hgs
parents:
diff changeset
  2879
        iEngine->LsSession().GetAllApps();        
hgs
parents:
diff changeset
  2880
hgs
parents:
diff changeset
  2881
        while (iEngine->LsSession().GetNextApp(appInfo) == KErrNone)
hgs
parents:
diff changeset
  2882
            {
hgs
parents:
diff changeset
  2883
            appFullPath.Copy(appInfo.iFullName);
hgs
parents:
diff changeset
  2884
            fileEntry.Format(KAppEntryFormat, &appFullPath, appInfo.iUid, &KFileNewLine);
hgs
parents:
diff changeset
  2885
            appsArray->AppendL(fileEntry);    
hgs
parents:
diff changeset
  2886
            }
hgs
parents:
diff changeset
  2887
        
hgs
parents:
diff changeset
  2888
        appsArray->Sort();
hgs
parents:
diff changeset
  2889
        
hgs
parents:
diff changeset
  2890
        for (TInt i=0; i<appsArray->Count(); i++)
hgs
parents:
diff changeset
  2891
            {
hgs
parents:
diff changeset
  2892
            file.Write(appsArray->MdcaPoint(i));
hgs
parents:
diff changeset
  2893
            }
hgs
parents:
diff changeset
  2894
        
hgs
parents:
diff changeset
  2895
        CleanupStack::PopAndDestroy(2); //appsArray, file
hgs
parents:
diff changeset
  2896
        
hgs
parents:
diff changeset
  2897
        _LIT(KMessage, "App list written to %S");
hgs
parents:
diff changeset
  2898
        TFileName noteMsg;
hgs
parents:
diff changeset
  2899
        noteMsg.Format(KMessage, &allAppsPath);
hgs
parents:
diff changeset
  2900
hgs
parents:
diff changeset
  2901
        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg, ETrue); // NoTimeout
hgs
parents:
diff changeset
  2902
        }
hgs
parents:
diff changeset
  2903
    else
hgs
parents:
diff changeset
  2904
        {
hgs
parents:
diff changeset
  2905
        _LIT(KMessage, "Failed writing to %S");
hgs
parents:
diff changeset
  2906
        TFileName noteMsg;
hgs
parents:
diff changeset
  2907
        noteMsg.Format(KMessage, &allAppsPath);
hgs
parents:
diff changeset
  2908
hgs
parents:
diff changeset
  2909
        iEngine->FileBrowserUI()->ShowErrorNote(noteMsg, ETrue); // NoTimeout
hgs
parents:
diff changeset
  2910
        }    
hgs
parents:
diff changeset
  2911
    }
hgs
parents:
diff changeset
  2912
hgs
parents:
diff changeset
  2913
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2914
hgs
parents:
diff changeset
  2915
void CFileBrowserFileUtils::WriteAllFilesL()
hgs
parents:
diff changeset
  2916
    {
hgs
parents:
diff changeset
  2917
    _LIT(KAllFilesFileName, "AllFiles.txt");
hgs
parents:
diff changeset
  2918
    TFileName allFilesPath = PathInfo::PhoneMemoryRootPath();
hgs
parents:
diff changeset
  2919
    allFilesPath.Append(KAllFilesFileName);
hgs
parents:
diff changeset
  2920
hgs
parents:
diff changeset
  2921
    RFile file;
hgs
parents:
diff changeset
  2922
    if (file.Replace(iFs, allFilesPath, EFileWrite) == KErrNone)
hgs
parents:
diff changeset
  2923
        {
hgs
parents:
diff changeset
  2924
        CleanupClosePushL(file);
hgs
parents:
diff changeset
  2925
        iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2926
        
hgs
parents:
diff changeset
  2927
        iEngine->FileBrowserUI()->ShowWaitDialog(_L("Generating"));
hgs
parents:
diff changeset
  2928
        
hgs
parents:
diff changeset
  2929
        for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  2930
            {
hgs
parents:
diff changeset
  2931
            TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  2932
hgs
parents:
diff changeset
  2933
            TBuf<10> driveRoot;
hgs
parents:
diff changeset
  2934
            driveRoot.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  2935
            driveRoot.Append(_L(":\\"));
hgs
parents:
diff changeset
  2936
hgs
parents:
diff changeset
  2937
            // current dir
hgs
parents:
diff changeset
  2938
            DoFindFiles(_L("*"), driveRoot);
hgs
parents:
diff changeset
  2939
            
hgs
parents:
diff changeset
  2940
            // recurse into sub directories
hgs
parents:
diff changeset
  2941
            DoFindFilesRecursiveL(_L("*"), driveRoot);
hgs
parents:
diff changeset
  2942
            }
hgs
parents:
diff changeset
  2943
        
hgs
parents:
diff changeset
  2944
        // write entries
hgs
parents:
diff changeset
  2945
        TBuf8<KMaxFileName> writeBuf;
hgs
parents:
diff changeset
  2946
        for (TInt i=0; i<iFindFileEntryList->Count(); i++)
hgs
parents:
diff changeset
  2947
            {
hgs
parents:
diff changeset
  2948
            TFileEntry fileEntry = iFindFileEntryList->At(i);
hgs
parents:
diff changeset
  2949
            
hgs
parents:
diff changeset
  2950
            writeBuf.Copy(fileEntry.iPath);
hgs
parents:
diff changeset
  2951
            writeBuf.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  2952
            writeBuf.Append(_L(","));
hgs
parents:
diff changeset
  2953
            writeBuf.AppendNum(fileEntry.iEntry.iSize);
hgs
parents:
diff changeset
  2954
            writeBuf.Append(_L(" B"));
hgs
parents:
diff changeset
  2955
hgs
parents:
diff changeset
  2956
//            // date
hgs
parents:
diff changeset
  2957
//            TTime entryModified = fileEntry.iEntry.iModified;
hgs
parents:
diff changeset
  2958
//            // convert from universal time
hgs
parents:
diff changeset
  2959
//            if ( iTz.ConvertToLocalTime( entryModified ) == KErrNone )
hgs
parents:
diff changeset
  2960
//                {
hgs
parents:
diff changeset
  2961
//                entryModified = fileEntry.iEntry.iModified; // use universal time
hgs
parents:
diff changeset
  2962
//                }
hgs
parents:
diff changeset
  2963
//
hgs
parents:
diff changeset
  2964
//            _LIT(KDateFormat,               "%D%M%Y%/0%1%/1%2%/2%3%/3");
hgs
parents:
diff changeset
  2965
//            TBuf<32> dateBuf;
hgs
parents:
diff changeset
  2966
//            entryModified.FormatL(dateBuf, KDateFormat);
hgs
parents:
diff changeset
  2967
//            writeBuf.Append(dateBuf);
hgs
parents:
diff changeset
  2968
//
hgs
parents:
diff changeset
  2969
//            writeBuf.Append(_L(" "));
hgs
parents:
diff changeset
  2970
//            // time
hgs
parents:
diff changeset
  2971
//            _LIT(KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B");
hgs
parents:
diff changeset
  2972
//            TBuf<32> timeBuf;
hgs
parents:
diff changeset
  2973
//            entryModified.FormatL(timeBuf, KTimeFormat);
hgs
parents:
diff changeset
  2974
//            writeBuf.Append(timeBuf);
hgs
parents:
diff changeset
  2975
//
hgs
parents:
diff changeset
  2976
            writeBuf.Append(KFileNewLine);
hgs
parents:
diff changeset
  2977
            file.Write(writeBuf);
hgs
parents:
diff changeset
  2978
            }
hgs
parents:
diff changeset
  2979
        
hgs
parents:
diff changeset
  2980
        iEngine->FileBrowserUI()->CancelWaitDialog();
hgs
parents:
diff changeset
  2981
        
hgs
parents:
diff changeset
  2982
        CleanupStack::PopAndDestroy(); //file
hgs
parents:
diff changeset
  2983
        iFindFileEntryList->Reset();
hgs
parents:
diff changeset
  2984
        
hgs
parents:
diff changeset
  2985
        _LIT(KMessage, "File list written to %S");
hgs
parents:
diff changeset
  2986
        TFileName noteMsg;
hgs
parents:
diff changeset
  2987
        noteMsg.Format(KMessage, &allFilesPath);
hgs
parents:
diff changeset
  2988
hgs
parents:
diff changeset
  2989
        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg, EFalse); // NoTimeout
hgs
parents:
diff changeset
  2990
        }
hgs
parents:
diff changeset
  2991
    else
hgs
parents:
diff changeset
  2992
        {
hgs
parents:
diff changeset
  2993
        _LIT(KMessage, "Failed writing to %S");
hgs
parents:
diff changeset
  2994
        TFileName noteMsg;
hgs
parents:
diff changeset
  2995
        noteMsg.Format(KMessage, &allFilesPath);
hgs
parents:
diff changeset
  2996
hgs
parents:
diff changeset
  2997
        iEngine->FileBrowserUI()->ShowErrorNote(noteMsg, ETrue); // NoTimeout
hgs
parents:
diff changeset
  2998
        }    
hgs
parents:
diff changeset
  2999
    }
hgs
parents:
diff changeset
  3000
hgs
parents:
diff changeset
  3001
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3002
hgs
parents:
diff changeset
  3003
TInt CFileBrowserFileUtils::DoFindFiles(const TDesC& aFileName, const TDesC& aPath)
hgs
parents:
diff changeset
  3004
    {
hgs
parents:
diff changeset
  3005
    TFindFile fileFinder(iFs);
hgs
parents:
diff changeset
  3006
    CDir* dir;
hgs
parents:
diff changeset
  3007
    TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
hgs
parents:
diff changeset
  3008
hgs
parents:
diff changeset
  3009
    while (err == KErrNone && iAllowProcessing)
hgs
parents:
diff changeset
  3010
        {
hgs
parents:
diff changeset
  3011
        iEngine->FileBrowserUI()->ProcessEvents();
hgs
parents:
diff changeset
  3012
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  3013
            {
hgs
parents:
diff changeset
  3014
            TEntry entry = (*dir)[i];
hgs
parents:
diff changeset
  3015
hgs
parents:
diff changeset
  3016
            // ignore any directory entries
hgs
parents:
diff changeset
  3017
            if (!entry.IsDir() && entry.iName.Length() && aPath.Length())
hgs
parents:
diff changeset
  3018
                {
hgs
parents:
diff changeset
  3019
                TParse parsedName;
hgs
parents:
diff changeset
  3020
                parsedName.Set(entry.iName, &fileFinder.File(), NULL);
hgs
parents:
diff changeset
  3021
                
hgs
parents:
diff changeset
  3022
                if (parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
hgs
parents:
diff changeset
  3023
                    {
hgs
parents:
diff changeset
  3024
                    TFileEntry fileEntry;
hgs
parents:
diff changeset
  3025
                    fileEntry.iPath = parsedName.DriveAndPath();
hgs
parents:
diff changeset
  3026
                    fileEntry.iEntry = entry;
hgs
parents:
diff changeset
  3027
                    fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
  3028
                    fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
  3029
                    
hgs
parents:
diff changeset
  3030
                    TRAP(err, iFindFileEntryList->AppendL(fileEntry));             
hgs
parents:
diff changeset
  3031
                    }
hgs
parents:
diff changeset
  3032
                }
hgs
parents:
diff changeset
  3033
            }
hgs
parents:
diff changeset
  3034
hgs
parents:
diff changeset
  3035
        delete dir;
hgs
parents:
diff changeset
  3036
        dir = NULL;
hgs
parents:
diff changeset
  3037
        err = fileFinder.FindWild(dir);
hgs
parents:
diff changeset
  3038
        }
hgs
parents:
diff changeset
  3039
hgs
parents:
diff changeset
  3040
    return err;
hgs
parents:
diff changeset
  3041
    }
hgs
parents:
diff changeset
  3042
hgs
parents:
diff changeset
  3043
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3044
hgs
parents:
diff changeset
  3045
TInt CFileBrowserFileUtils::DoFindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath)
hgs
parents:
diff changeset
  3046
	{
hgs
parents:
diff changeset
  3047
    TInt err(KErrNone);
hgs
parents:
diff changeset
  3048
    CDirScan* scan = CDirScan::NewLC(iFs);
hgs
parents:
diff changeset
  3049
    scan->SetScanDataL(aPath, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst);
hgs
parents:
diff changeset
  3050
    CDir* dir = NULL;
hgs
parents:
diff changeset
  3051
hgs
parents:
diff changeset
  3052
    for(;;)
hgs
parents:
diff changeset
  3053
        {
hgs
parents:
diff changeset
  3054
        TRAP(err, scan->NextL(dir));
hgs
parents:
diff changeset
  3055
        if (!dir  || (err != KErrNone))
hgs
parents:
diff changeset
  3056
            break;
hgs
parents:
diff changeset
  3057
hgs
parents:
diff changeset
  3058
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  3059
            {
hgs
parents:
diff changeset
  3060
            TEntry entry = (*dir)[i];
hgs
parents:
diff changeset
  3061
            
hgs
parents:
diff changeset
  3062
            if (entry.IsDir())
hgs
parents:
diff changeset
  3063
                {
hgs
parents:
diff changeset
  3064
                TFileName path(scan->FullPath());
hgs
parents:
diff changeset
  3065
                
hgs
parents:
diff changeset
  3066
                if (path.Length())
hgs
parents:
diff changeset
  3067
                    {
hgs
parents:
diff changeset
  3068
                    path.Append(entry.iName);
hgs
parents:
diff changeset
  3069
                    path.Append(_L("\\"));
hgs
parents:
diff changeset
  3070
                    DoFindFiles(aFileName, path);
hgs
parents:
diff changeset
  3071
                    }
hgs
parents:
diff changeset
  3072
                }
hgs
parents:
diff changeset
  3073
            }
hgs
parents:
diff changeset
  3074
        delete(dir);
hgs
parents:
diff changeset
  3075
        }
hgs
parents:
diff changeset
  3076
hgs
parents:
diff changeset
  3077
    CleanupStack::PopAndDestroy(scan);
hgs
parents:
diff changeset
  3078
    return err;
hgs
parents:
diff changeset
  3079
    }
hgs
parents:
diff changeset
  3080
hgs
parents:
diff changeset
  3081
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3082
hgs
parents:
diff changeset
  3083
void CFileBrowserFileUtils::ListOpenFilesL()
hgs
parents:
diff changeset
  3084
    {
hgs
parents:
diff changeset
  3085
    iFileEntryList->Reset();
hgs
parents:
diff changeset
  3086
hgs
parents:
diff changeset
  3087
    CFileList* dir = NULL;
hgs
parents:
diff changeset
  3088
    TOpenFileScan fileScan(iFs);
hgs
parents:
diff changeset
  3089
    fileScan.NextL(dir);
hgs
parents:
diff changeset
  3090
    
hgs
parents:
diff changeset
  3091
    while (dir)
hgs
parents:
diff changeset
  3092
        {
hgs
parents:
diff changeset
  3093
        for (TInt i=0; i<dir->Count(); i++)
hgs
parents:
diff changeset
  3094
            {
hgs
parents:
diff changeset
  3095
            TEntry entry = (*dir)[i];
hgs
parents:
diff changeset
  3096
            TFileName fullPath;
hgs
parents:
diff changeset
  3097
hgs
parents:
diff changeset
  3098
            // TOpenFileScan does not return drive letters for the entries, so try to guess it
hgs
parents:
diff changeset
  3099
            if (entry.iName.Length() > 2 && entry.iName[1] != ':')
hgs
parents:
diff changeset
  3100
                {
hgs
parents:
diff changeset
  3101
                for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  3102
                    {
hgs
parents:
diff changeset
  3103
                    TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  3104
                    
hgs
parents:
diff changeset
  3105
                    TFileName guessPath;
hgs
parents:
diff changeset
  3106
                    guessPath.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  3107
                    guessPath.Append(_L(":"));
hgs
parents:
diff changeset
  3108
                    guessPath.Append(entry.iName);
hgs
parents:
diff changeset
  3109
                    
hgs
parents:
diff changeset
  3110
                    // check if the file exists
hgs
parents:
diff changeset
  3111
                    if (BaflUtils::FileExists(iFs, guessPath))
hgs
parents:
diff changeset
  3112
                        {
hgs
parents:
diff changeset
  3113
                        // if it's on read only drive, then take it or check if it's really in use
hgs
parents:
diff changeset
  3114
                        TBool readOnlyDrive(ETrue);
hgs
parents:
diff changeset
  3115
                        BaflUtils::DiskIsReadOnly(iFs, guessPath, readOnlyDrive);
hgs
parents:
diff changeset
  3116
                        
hgs
parents:
diff changeset
  3117
                        if (readOnlyDrive || iFs.SetEntry(guessPath, entry.iModified, NULL, NULL) == KErrInUse)
hgs
parents:
diff changeset
  3118
                            {
hgs
parents:
diff changeset
  3119
                            fullPath = guessPath;
hgs
parents:
diff changeset
  3120
                            break;
hgs
parents:
diff changeset
  3121
                            }
hgs
parents:
diff changeset
  3122
                        }
hgs
parents:
diff changeset
  3123
                    }
hgs
parents:
diff changeset
  3124
                }
hgs
parents:
diff changeset
  3125
            else
hgs
parents:
diff changeset
  3126
                {
hgs
parents:
diff changeset
  3127
                fullPath = entry.iName;   
hgs
parents:
diff changeset
  3128
                }
hgs
parents:
diff changeset
  3129
hgs
parents:
diff changeset
  3130
            TParse nameParser;
hgs
parents:
diff changeset
  3131
            if (fullPath.Length() && nameParser.SetNoWild(fullPath, NULL, NULL) == KErrNone)
hgs
parents:
diff changeset
  3132
                {
hgs
parents:
diff changeset
  3133
                entry.iName = nameParser.NameAndExt();
hgs
parents:
diff changeset
  3134
                
hgs
parents:
diff changeset
  3135
                TFileEntry fileEntry;
hgs
parents:
diff changeset
  3136
                fileEntry.iPath = nameParser.DriveAndPath();
hgs
parents:
diff changeset
  3137
                fileEntry.iEntry = entry;
hgs
parents:
diff changeset
  3138
                fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
  3139
                fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
  3140
                
hgs
parents:
diff changeset
  3141
                iFileEntryList->AppendL(fileEntry);                
hgs
parents:
diff changeset
  3142
                }
hgs
parents:
diff changeset
  3143
            }
hgs
parents:
diff changeset
  3144
            
hgs
parents:
diff changeset
  3145
        delete dir;
hgs
parents:
diff changeset
  3146
        dir = NULL;
hgs
parents:
diff changeset
  3147
        fileScan.NextL(dir);
hgs
parents:
diff changeset
  3148
        }
hgs
parents:
diff changeset
  3149
hgs
parents:
diff changeset
  3150
    TInt operations = iFileEntryList->Count();
hgs
parents:
diff changeset
  3151
    
hgs
parents:
diff changeset
  3152
    iListingMode = EOpenFiles;
hgs
parents:
diff changeset
  3153
	// TODO
hgs
parents:
diff changeset
  3154
    //iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
hgs
parents:
diff changeset
  3155
    RefreshViewL();            
hgs
parents:
diff changeset
  3156
hgs
parents:
diff changeset
  3157
    _LIT(KMessage, "%d open files found");
hgs
parents:
diff changeset
  3158
    TFileName noteMsg;
hgs
parents:
diff changeset
  3159
    noteMsg.Format(KMessage, operations);
hgs
parents:
diff changeset
  3160
hgs
parents:
diff changeset
  3161
    iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  3162
    }
hgs
parents:
diff changeset
  3163
hgs
parents:
diff changeset
  3164
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3165
hgs
parents:
diff changeset
  3166
void CFileBrowserFileUtils::ListMessageAttachmentsL(TInt aType)
hgs
parents:
diff changeset
  3167
    {
hgs
parents:
diff changeset
  3168
    iFileEntryList->Reset();
hgs
parents:
diff changeset
  3169
hgs
parents:
diff changeset
  3170
    CMsvSession* session = CMsvSession::OpenSyncL(*this);
hgs
parents:
diff changeset
  3171
    CleanupStack::PushL(session);
hgs
parents:
diff changeset
  3172
    
hgs
parents:
diff changeset
  3173
    CMsvEntry* context = NULL;
hgs
parents:
diff changeset
  3174
    
hgs
parents:
diff changeset
  3175
    if (aType == EFileBrowserCmdToolsMsgAttachmentsInbox)
hgs
parents:
diff changeset
  3176
        context = session->GetEntryL(KMsvGlobalInBoxIndexEntryId);
hgs
parents:
diff changeset
  3177
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsDrafts)
hgs
parents:
diff changeset
  3178
        context = session->GetEntryL(KMsvDraftEntryId);
hgs
parents:
diff changeset
  3179
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsSentItems)
hgs
parents:
diff changeset
  3180
        context = session->GetEntryL(KMsvSentEntryId);
hgs
parents:
diff changeset
  3181
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsOutbox)
hgs
parents:
diff changeset
  3182
        context = session->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
hgs
parents:
diff changeset
  3183
    else
hgs
parents:
diff changeset
  3184
        User::Panic(_L("MsgAtt.Mode"), 100);
hgs
parents:
diff changeset
  3185
    
hgs
parents:
diff changeset
  3186
    CleanupStack::PushL(context);
hgs
parents:
diff changeset
  3187
    
hgs
parents:
diff changeset
  3188
    CDesCArray* attPaths = new(ELeave) CDesCArrayFlat(128);
hgs
parents:
diff changeset
  3189
    CleanupStack::PushL(attPaths);
hgs
parents:
diff changeset
  3190
    
hgs
parents:
diff changeset
  3191
    // read attachment paths
hgs
parents:
diff changeset
  3192
    ReadAttachmentPathsRecursiveL(session, context, attPaths);
hgs
parents:
diff changeset
  3193
    
hgs
parents:
diff changeset
  3194
    // create file entries of the paths
hgs
parents:
diff changeset
  3195
    for (TInt i=0; i<attPaths->MdcaCount(); i++)
hgs
parents:
diff changeset
  3196
        {
hgs
parents:
diff changeset
  3197
        TFileEntry fileEntry;
hgs
parents:
diff changeset
  3198
        TEntry entry;
hgs
parents:
diff changeset
  3199
        TParse nameParser;
hgs
parents:
diff changeset
  3200
        
hgs
parents:
diff changeset
  3201
        if (attPaths->MdcaPoint(i).Length() &&
hgs
parents:
diff changeset
  3202
            nameParser.SetNoWild(attPaths->MdcaPoint(i), NULL, NULL) == KErrNone &&
hgs
parents:
diff changeset
  3203
            iFs.Entry(attPaths->MdcaPoint(i), entry) == KErrNone)
hgs
parents:
diff changeset
  3204
            {
hgs
parents:
diff changeset
  3205
            TFileEntry fileEntry;
hgs
parents:
diff changeset
  3206
            fileEntry.iPath = nameParser.DriveAndPath();
hgs
parents:
diff changeset
  3207
            fileEntry.iEntry = entry;
hgs
parents:
diff changeset
  3208
            fileEntry.iDirEntries = KErrNotFound;
hgs
parents:
diff changeset
  3209
            fileEntry.iIconId = EFixedIconEmpty;
hgs
parents:
diff changeset
  3210
hgs
parents:
diff changeset
  3211
            iFileEntryList->AppendL(fileEntry);                
hgs
parents:
diff changeset
  3212
            }
hgs
parents:
diff changeset
  3213
        }
hgs
parents:
diff changeset
  3214
    
hgs
parents:
diff changeset
  3215
    CleanupStack::PopAndDestroy(3); //session, context, attPaths
hgs
parents:
diff changeset
  3216
            
hgs
parents:
diff changeset
  3217
    TInt operations = iFileEntryList->Count();
hgs
parents:
diff changeset
  3218
    
hgs
parents:
diff changeset
  3219
    if (aType == EFileBrowserCmdToolsMsgAttachmentsInbox)
hgs
parents:
diff changeset
  3220
        iListingMode = EMsgAttachmentsInbox;
hgs
parents:
diff changeset
  3221
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsDrafts)
hgs
parents:
diff changeset
  3222
        iListingMode = EMsgAttachmentsDrafts;
hgs
parents:
diff changeset
  3223
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsSentItems)
hgs
parents:
diff changeset
  3224
        iListingMode = EMsgAttachmentsSentItems;
hgs
parents:
diff changeset
  3225
    else if (aType == EFileBrowserCmdToolsMsgAttachmentsOutbox)
hgs
parents:
diff changeset
  3226
        iListingMode = EMsgAttachmentsOutbox;
hgs
parents:
diff changeset
  3227
	
hgs
parents:
diff changeset
  3228
    // TODO
hgs
parents:
diff changeset
  3229
    //iEngine->FileListContainer()->ListBox()->SetCurrentItemIndex(0);
hgs
parents:
diff changeset
  3230
    RefreshViewL();            
hgs
parents:
diff changeset
  3231
hgs
parents:
diff changeset
  3232
    _LIT(KMessage, "%d files found");
hgs
parents:
diff changeset
  3233
    TFileName noteMsg;
hgs
parents:
diff changeset
  3234
    noteMsg.Format(KMessage, operations);
hgs
parents:
diff changeset
  3235
hgs
parents:
diff changeset
  3236
    iEngine->FileBrowserUI()->ShowInformationNote(noteMsg, _L(""));
hgs
parents:
diff changeset
  3237
    }
hgs
parents:
diff changeset
  3238
hgs
parents:
diff changeset
  3239
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3240
hgs
parents:
diff changeset
  3241
void CFileBrowserFileUtils::ReadAttachmentPathsRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, CDesCArray* aAttPaths)
hgs
parents:
diff changeset
  3242
    {
hgs
parents:
diff changeset
  3243
    CMsvEntrySelection* entrySelection = aContext->ChildrenL(); 
hgs
parents:
diff changeset
  3244
    CleanupStack::PushL(entrySelection);
hgs
parents:
diff changeset
  3245
    
hgs
parents:
diff changeset
  3246
    for (TInt i=0; i<entrySelection->Count(); i++)
hgs
parents:
diff changeset
  3247
        {
hgs
parents:
diff changeset
  3248
        CMsvEntry* entry = aSession->GetEntryL((*entrySelection)[i]);
hgs
parents:
diff changeset
  3249
        CleanupStack::PushL(entry);
hgs
parents:
diff changeset
  3250
        
hgs
parents:
diff changeset
  3251
        CMsvStore* store = NULL;
hgs
parents:
diff changeset
  3252
        TRAPD(err, store = entry->ReadStoreL());
hgs
parents:
diff changeset
  3253
        
hgs
parents:
diff changeset
  3254
        if (err == KErrNone)
hgs
parents:
diff changeset
  3255
            {
hgs
parents:
diff changeset
  3256
            CleanupStack::PushL(store);
hgs
parents:
diff changeset
  3257
hgs
parents:
diff changeset
  3258
            for (TInt j=0; j<store->AttachmentManagerL().AttachmentCount(); j++)
hgs
parents:
diff changeset
  3259
                {
hgs
parents:
diff changeset
  3260
                CMsvAttachment* attachment = store->AttachmentManagerL().GetAttachmentInfoL(j);
hgs
parents:
diff changeset
  3261
                CleanupStack::PushL(attachment);
hgs
parents:
diff changeset
  3262
                
hgs
parents:
diff changeset
  3263
                aAttPaths->AppendL(attachment->FilePath());
hgs
parents:
diff changeset
  3264
                
hgs
parents:
diff changeset
  3265
                CleanupStack::PopAndDestroy(); //attachment
hgs
parents:
diff changeset
  3266
                }
hgs
parents:
diff changeset
  3267
            CleanupStack::PopAndDestroy(); // store
hgs
parents:
diff changeset
  3268
            }
hgs
parents:
diff changeset
  3269
hgs
parents:
diff changeset
  3270
        // recurse into children
hgs
parents:
diff changeset
  3271
        if (entry->Count() > 0)
hgs
parents:
diff changeset
  3272
            {
hgs
parents:
diff changeset
  3273
            ReadAttachmentPathsRecursiveL(aSession, entry, aAttPaths);
hgs
parents:
diff changeset
  3274
            }
hgs
parents:
diff changeset
  3275
hgs
parents:
diff changeset
  3276
        CleanupStack::PopAndDestroy(); // entry
hgs
parents:
diff changeset
  3277
        }      
hgs
parents:
diff changeset
  3278
    }
hgs
parents:
diff changeset
  3279
hgs
parents:
diff changeset
  3280
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3281
hgs
parents:
diff changeset
  3282
void CFileBrowserFileUtils::WriteMsgStoreWalkL()
hgs
parents:
diff changeset
  3283
    {
hgs
parents:
diff changeset
  3284
    _LIT(KAllAppsFileName, "MsgStoreWalk.txt");
hgs
parents:
diff changeset
  3285
    TFileName allAppsPath = PathInfo::PhoneMemoryRootPath();
hgs
parents:
diff changeset
  3286
    allAppsPath.Append(KAllAppsFileName);
hgs
parents:
diff changeset
  3287
hgs
parents:
diff changeset
  3288
    if (iMsgStoreWalkFile.Replace(iFs, allAppsPath, EFileWrite) == KErrNone)
hgs
parents:
diff changeset
  3289
        {
hgs
parents:
diff changeset
  3290
        CMsvSession* session = CMsvSession::OpenSyncL(*this);
hgs
parents:
diff changeset
  3291
        CleanupStack::PushL(session);
hgs
parents:
diff changeset
  3292
        
hgs
parents:
diff changeset
  3293
        CMsvEntry* context = session->GetEntryL(KMsvRootIndexEntryId);
hgs
parents:
diff changeset
  3294
        CleanupStack::PushL(context);
hgs
parents:
diff changeset
  3295
        
hgs
parents:
diff changeset
  3296
        iMsgStoreWalkFile.Write(_L8("id  service_id  related_id  type  mtm  date  size  error  biotype  mtmdata1  mtmdata2  mtmdata3  description  details\r\n\r\n"));
hgs
parents:
diff changeset
  3297
        
hgs
parents:
diff changeset
  3298
        // write details about the root entry
hgs
parents:
diff changeset
  3299
        DoWriteMessageEntryInfoL(context, iMsgStoreWalkFile, 0);
hgs
parents:
diff changeset
  3300
        
hgs
parents:
diff changeset
  3301
        // get and write info recursively
hgs
parents:
diff changeset
  3302
        TInt level(1);        
hgs
parents:
diff changeset
  3303
        WriteMessageEntryInfoRecursiveL(session, context, iMsgStoreWalkFile, level);
hgs
parents:
diff changeset
  3304
hgs
parents:
diff changeset
  3305
        CleanupStack::PopAndDestroy(2); //session, context
hgs
parents:
diff changeset
  3306
        
hgs
parents:
diff changeset
  3307
        iMsgStoreWalkFile.Flush();
hgs
parents:
diff changeset
  3308
        iMsgStoreWalkFile.Close();
hgs
parents:
diff changeset
  3309
        
hgs
parents:
diff changeset
  3310
        _LIT(KMessage, "Msg. store walk written to %S");
hgs
parents:
diff changeset
  3311
        TFileName noteMsg;
hgs
parents:
diff changeset
  3312
        noteMsg.Format(KMessage, &allAppsPath);
hgs
parents:
diff changeset
  3313
hgs
parents:
diff changeset
  3314
        iEngine->FileBrowserUI()->ShowConfirmationNote(noteMsg, ETrue); // NoTimeout
hgs
parents:
diff changeset
  3315
        }
hgs
parents:
diff changeset
  3316
    else
hgs
parents:
diff changeset
  3317
        {
hgs
parents:
diff changeset
  3318
        _LIT(KMessage, "Failed writing to %S");
hgs
parents:
diff changeset
  3319
        TFileName noteMsg;
hgs
parents:
diff changeset
  3320
        noteMsg.Format(KMessage, &allAppsPath);
hgs
parents:
diff changeset
  3321
hgs
parents:
diff changeset
  3322
        iEngine->FileBrowserUI()->ShowErrorNote(noteMsg, ETrue); // NoTimeout
hgs
parents:
diff changeset
  3323
        }    
hgs
parents:
diff changeset
  3324
    }
hgs
parents:
diff changeset
  3325
hgs
parents:
diff changeset
  3326
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3327
hgs
parents:
diff changeset
  3328
void CFileBrowserFileUtils::WriteMessageEntryInfoRecursiveL(CMsvSession* aSession, CMsvEntry* aContext, RFile& aFile, TInt& aLevel)
hgs
parents:
diff changeset
  3329
    {
hgs
parents:
diff changeset
  3330
    CMsvEntrySelection* entrySelection = aContext->ChildrenL(); 
hgs
parents:
diff changeset
  3331
    CleanupStack::PushL(entrySelection);
hgs
parents:
diff changeset
  3332
    
hgs
parents:
diff changeset
  3333
    for (TInt i=0; i<entrySelection->Count(); i++)
hgs
parents:
diff changeset
  3334
        {
hgs
parents:
diff changeset
  3335
        CMsvEntry* entry = aSession->GetEntryL((*entrySelection)[i]);
hgs
parents:
diff changeset
  3336
        CleanupStack::PushL(entry);
hgs
parents:
diff changeset
  3337
        
hgs
parents:
diff changeset
  3338
        DoWriteMessageEntryInfoL(entry, aFile, aLevel);
hgs
parents:
diff changeset
  3339
hgs
parents:
diff changeset
  3340
        // recurse into children
hgs
parents:
diff changeset
  3341
        if (entry->Count() > 0)
hgs
parents:
diff changeset
  3342
            {
hgs
parents:
diff changeset
  3343
            aLevel++;
hgs
parents:
diff changeset
  3344
            WriteMessageEntryInfoRecursiveL(aSession, entry, aFile, aLevel);
hgs
parents:
diff changeset
  3345
            aLevel--;
hgs
parents:
diff changeset
  3346
            }
hgs
parents:
diff changeset
  3347
hgs
parents:
diff changeset
  3348
        CleanupStack::PopAndDestroy(); // entry
hgs
parents:
diff changeset
  3349
        }      
hgs
parents:
diff changeset
  3350
    }
hgs
parents:
diff changeset
  3351
hgs
parents:
diff changeset
  3352
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3353
hgs
parents:
diff changeset
  3354
void CFileBrowserFileUtils::DoWriteMessageEntryInfoL(CMsvEntry* aContext, RFile& aFile, TInt aLevel)
hgs
parents:
diff changeset
  3355
    {
hgs
parents:
diff changeset
  3356
    TMsvEntry messageEntry = aContext->Entry();
hgs
parents:
diff changeset
  3357
    
hgs
parents:
diff changeset
  3358
    for (TInt j=0; j<aLevel; j++)
hgs
parents:
diff changeset
  3359
        {
hgs
parents:
diff changeset
  3360
        aFile.Write(_L8("     "));
hgs
parents:
diff changeset
  3361
        }
hgs
parents:
diff changeset
  3362
hgs
parents:
diff changeset
  3363
    TBuf8<256> desc;
hgs
parents:
diff changeset
  3364
    desc.Copy(messageEntry.iDescription);
hgs
parents:
diff changeset
  3365
hgs
parents:
diff changeset
  3366
    TBuf8<256> details;
hgs
parents:
diff changeset
  3367
    details.Copy(messageEntry.iDetails);
hgs
parents:
diff changeset
  3368
hgs
parents:
diff changeset
  3369
    _LIT8(KLine, "-> %d  %d  %d  %d  %d  %Ld  %d  %d  %d  %d  %d  %d  %S  %S\r\n");
hgs
parents:
diff changeset
  3370
    TBuf8<1024> buf;
hgs
parents:
diff changeset
  3371
    buf.Format(KLine, messageEntry.Id(), messageEntry.iServiceId, messageEntry.iRelatedId, messageEntry.iType.iUid,
hgs
parents:
diff changeset
  3372
        messageEntry.iMtm.iUid, messageEntry.iDate.Int64(), messageEntry.iSize, messageEntry.iError, messageEntry.iBioType,
hgs
parents:
diff changeset
  3373
        messageEntry.iMtmData1, messageEntry.iMtmData2, messageEntry.iMtmData3, &desc, &details);
hgs
parents:
diff changeset
  3374
hgs
parents:
diff changeset
  3375
    aFile.Write(buf);
hgs
parents:
diff changeset
  3376
    }
hgs
parents:
diff changeset
  3377
hgs
parents:
diff changeset
  3378
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3379
hgs
parents:
diff changeset
  3380
void CFileBrowserFileUtils::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
hgs
parents:
diff changeset
  3381
    {
hgs
parents:
diff changeset
  3382
    }
hgs
parents:
diff changeset
  3383
hgs
parents:
diff changeset
  3384
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3385
hgs
parents:
diff changeset
  3386
void CFileBrowserFileUtils::FileEditorL(TInt aCurrentItemIndex, TInt /*aType*/)
hgs
parents:
diff changeset
  3387
    {
hgs
parents:
diff changeset
  3388
    // TODO
hgs
parents:
diff changeset
  3389
    // just get current item 
hgs
parents:
diff changeset
  3390
    //TInt currentItemIndex = iEngine->QueryCurrentItemIndex();
hgs
parents:
diff changeset
  3391
    
hgs
parents:
diff changeset
  3392
    if (iFileEntryList->Count() > aCurrentItemIndex && aCurrentItemIndex >= 0)
hgs
parents:
diff changeset
  3393
        {
hgs
parents:
diff changeset
  3394
        TFileEntry fileEntry = iFileEntryList->At(aCurrentItemIndex);
hgs
parents:
diff changeset
  3395
        
hgs
parents:
diff changeset
  3396
        // only valid for files
hgs
parents:
diff changeset
  3397
        if (!fileEntry.iEntry.IsDir())
hgs
parents:
diff changeset
  3398
            {
hgs
parents:
diff changeset
  3399
            TFileName fullPath = fileEntry.iPath;
hgs
parents:
diff changeset
  3400
            fullPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  3401
hgs
parents:
diff changeset
  3402
//            iEngine->FileListContainer()->SetNaviPaneTextL(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  3403
//
hgs
parents:
diff changeset
  3404
//            TInt editorMode(0);
hgs
parents:
diff changeset
  3405
//
hgs
parents:
diff changeset
  3406
//            if (aType == EFileBrowserCmdFileViewText)
hgs
parents:
diff changeset
  3407
//                editorMode = EFileEditorViewAsText;
hgs
parents:
diff changeset
  3408
//            else if (aType == EFileBrowserCmdFileViewHex)
hgs
parents:
diff changeset
  3409
//                editorMode = EFileEditorViewAsHex;
hgs
parents:
diff changeset
  3410
//            else if (aType == EFileBrowserCmdFileEditText)
hgs
parents:
diff changeset
  3411
//                editorMode = EFileEditorEditAsText;
hgs
parents:
diff changeset
  3412
//            else if (aType == EFileBrowserCmdFileEditHex)
hgs
parents:
diff changeset
  3413
//                editorMode = EFileEditorEditAsHex;
hgs
parents:
diff changeset
  3414
//            else
hgs
parents:
diff changeset
  3415
//                User::Panic(_L("Inv.Ed.Mode"), 843);
hgs
parents:
diff changeset
  3416
//
hgs
parents:
diff changeset
  3417
//            // launch dialog
hgs
parents:
diff changeset
  3418
//            CFileBrowserFileEditorDlg* dlg = CFileBrowserFileEditorDlg::NewL(fullPath, editorMode);
hgs
parents:
diff changeset
  3419
//            dlg->RunDlgLD();
hgs
parents:
diff changeset
  3420
//
hgs
parents:
diff changeset
  3421
//            iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);
hgs
parents:
diff changeset
  3422
//
hgs
parents:
diff changeset
  3423
//            if (aType == EFileBrowserCmdFileEditText || aType == EFileBrowserCmdFileEditHex)
hgs
parents:
diff changeset
  3424
//                {
hgs
parents:
diff changeset
  3425
//                RefreshViewL();
hgs
parents:
diff changeset
  3426
//                }
hgs
parents:
diff changeset
  3427
            }
hgs
parents:
diff changeset
  3428
        }
hgs
parents:
diff changeset
  3429
    }
hgs
parents:
diff changeset
  3430
hgs
parents:
diff changeset
  3431
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3432
hgs
parents:
diff changeset
  3433
TBool CFileBrowserFileUtils::DriveSnapShotPossible()
hgs
parents:
diff changeset
  3434
    {
hgs
parents:
diff changeset
  3435
//    // TODO
hgs
parents:
diff changeset
  3436
//    // check that E-drive is available
hgs
parents:
diff changeset
  3437
//    TBool EDriveIsOK(EFalse);
hgs
parents:
diff changeset
  3438
//
hgs
parents:
diff changeset
  3439
//    for (TInt i=0; i<iDriveEntryList->Count(); i++)
hgs
parents:
diff changeset
  3440
//        {
hgs
parents:
diff changeset
  3441
//        TDriveEntry driveEntry = iDriveEntryList->At(i);
hgs
parents:
diff changeset
  3442
//
hgs
parents:
diff changeset
  3443
//        if (driveEntry.iNumber == EDriveE)
hgs
parents:
diff changeset
  3444
//            {
hgs
parents:
diff changeset
  3445
//            if (driveEntry.iVolumeInfo.iDrive.iMediaAtt & KMediaAttLocked || driveEntry.iVolumeInfo.iDrive.iDriveAtt & KDriveAbsent)
hgs
parents:
diff changeset
  3446
//                EDriveIsOK = EFalse;
hgs
parents:
diff changeset
  3447
//            else
hgs
parents:
diff changeset
  3448
//                EDriveIsOK = ETrue;
hgs
parents:
diff changeset
  3449
//            }
hgs
parents:
diff changeset
  3450
//        }
hgs
parents:
diff changeset
  3451
//
hgs
parents:
diff changeset
  3452
//    if (!EDriveIsOK)
hgs
parents:
diff changeset
  3453
//        return EFalse;
hgs
parents:
diff changeset
  3454
//
hgs
parents:
diff changeset
  3455
//    // get current item
hgs
parents:
diff changeset
  3456
//    TInt currentItemIndex = iEngine->QueryCurrentItemIndex();
hgs
parents:
diff changeset
  3457
//
hgs
parents:
diff changeset
  3458
//    if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
  3459
//        {
hgs
parents:
diff changeset
  3460
//        TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
hgs
parents:
diff changeset
  3461
//
hgs
parents:
diff changeset
  3462
//        // drive snapshot not possible when E-drive is highlighted, since that's where we are copying
hgs
parents:
diff changeset
  3463
//        if (driveEntry.iNumber == EDriveE)
hgs
parents:
diff changeset
  3464
//            return EFalse;
hgs
parents:
diff changeset
  3465
//        else
hgs
parents:
diff changeset
  3466
//            return ETrue;
hgs
parents:
diff changeset
  3467
//        }
hgs
parents:
diff changeset
  3468
    return EFalse;
hgs
parents:
diff changeset
  3469
    }
hgs
parents:
diff changeset
  3470
hgs
parents:
diff changeset
  3471
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3472
hgs
parents:
diff changeset
  3473
void CFileBrowserFileUtils::DriveSnapShotL()
hgs
parents:
diff changeset
  3474
    {
hgs
parents:
diff changeset
  3475
//    if (iEngine->Settings().iBypassPlatformSecurity)
hgs
parents:
diff changeset
  3476
//        {
hgs
parents:
diff changeset
  3477
//        // get current item
hgs
parents:
diff changeset
  3478
//        TInt currentItemIndex = iEngine->QueryCurrentItemIndex();
hgs
parents:
diff changeset
  3479
//
hgs
parents:
diff changeset
  3480
//        if (iDriveEntryList->Count() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
  3481
//            {
hgs
parents:
diff changeset
  3482
//            TDriveEntry driveEntry = iDriveEntryList->At(currentItemIndex);
hgs
parents:
diff changeset
  3483
//
hgs
parents:
diff changeset
  3484
//            TChar sourceDriveLetter = driveEntry.iLetter;
hgs
parents:
diff changeset
  3485
//            TChar targetDriveLetter = 'E';  // hardcoded drive letter, could be better if would be queried from the user
hgs
parents:
diff changeset
  3486
//
hgs
parents:
diff changeset
  3487
//            // append to the command array
hgs
parents:
diff changeset
  3488
//            AppendToCommandArrayL(EFileBrowserFileOpCommandDriveSnapShot,
hgs
parents:
diff changeset
  3489
//                                  new(ELeave)CCommandParamsDriveSnapShot(sourceDriveLetter, targetDriveLetter)
hgs
parents:
diff changeset
  3490
//                                 );
hgs
parents:
diff changeset
  3491
//
hgs
parents:
diff changeset
  3492
//            // execute the operation
hgs
parents:
diff changeset
  3493
//            StartExecutingCommandsL(_L("Copying"));
hgs
parents:
diff changeset
  3494
//            }
hgs
parents:
diff changeset
  3495
//        }
hgs
parents:
diff changeset
  3496
//    else
hgs
parents:
diff changeset
  3497
//        {
hgs
parents:
diff changeset
  3498
//        iEngine->FileBrowserUI()->ShowInformationNote(_L("Enable \"bypass platform security\" from the settings first"), _L(""));
hgs
parents:
diff changeset
  3499
//        }
hgs
parents:
diff changeset
  3500
    }
hgs
parents:
diff changeset
  3501
    
hgs
parents:
diff changeset
  3502
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3503
hgs
parents:
diff changeset
  3504
void CFileBrowserFileUtils::SetDrivePasswordL(TInt aIndex,
hgs
parents:
diff changeset
  3505
                                              const TFileName &aOldPassword,
hgs
parents:
diff changeset
  3506
                                              const TFileName &aNewPassword)
hgs
parents:
diff changeset
  3507
    {    
hgs
parents:
diff changeset
  3508
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3509
        {
hgs
parents:
diff changeset
  3510
        TMediaPassword oldPassword;
hgs
parents:
diff changeset
  3511
        TMediaPassword newPassword;
hgs
parents:
diff changeset
  3512
hgs
parents:
diff changeset
  3513
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3514
hgs
parents:
diff changeset
  3515
        ConvertCharsToPwd(aOldPassword, oldPassword);
hgs
parents:
diff changeset
  3516
        ConvertCharsToPwd(aNewPassword, newPassword);
hgs
parents:
diff changeset
  3517
hgs
parents:
diff changeset
  3518
        // set the password, does not actually lock the drive
hgs
parents:
diff changeset
  3519
        User::LeaveIfError(iFs.LockDrive(driveEntry.iNumber, oldPassword, newPassword, ETrue));
hgs
parents:
diff changeset
  3520
        }
hgs
parents:
diff changeset
  3521
    }
hgs
parents:
diff changeset
  3522
hgs
parents:
diff changeset
  3523
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3524
hgs
parents:
diff changeset
  3525
void CFileBrowserFileUtils::UnlockDriveL(TInt aIndex, const TFileName &aOldPassword)
hgs
parents:
diff changeset
  3526
    {
hgs
parents:
diff changeset
  3527
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3528
        {
hgs
parents:
diff changeset
  3529
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3530
hgs
parents:
diff changeset
  3531
        TMediaPassword oldPassword;
hgs
parents:
diff changeset
  3532
        ConvertCharsToPwd(aOldPassword, oldPassword);
hgs
parents:
diff changeset
  3533
hgs
parents:
diff changeset
  3534
        // unlock the drive
hgs
parents:
diff changeset
  3535
        User::LeaveIfError(iFs.UnlockDrive(driveEntry.iNumber, oldPassword, ETrue));
hgs
parents:
diff changeset
  3536
        }
hgs
parents:
diff changeset
  3537
    }
hgs
parents:
diff changeset
  3538
hgs
parents:
diff changeset
  3539
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3540
hgs
parents:
diff changeset
  3541
void CFileBrowserFileUtils::ClearDrivePasswordL(TInt aIndex, const TFileName &aOldPassword)
hgs
parents:
diff changeset
  3542
    {
hgs
parents:
diff changeset
  3543
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3544
        {
hgs
parents:
diff changeset
  3545
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3546
hgs
parents:
diff changeset
  3547
        TMediaPassword oldPassword;
hgs
parents:
diff changeset
  3548
hgs
parents:
diff changeset
  3549
        ConvertCharsToPwd(aOldPassword, oldPassword);
hgs
parents:
diff changeset
  3550
hgs
parents:
diff changeset
  3551
        // clear the password from the drive
hgs
parents:
diff changeset
  3552
        User::LeaveIfError(iFs.ClearPassword(driveEntry.iNumber, oldPassword));
hgs
parents:
diff changeset
  3553
        }
hgs
parents:
diff changeset
  3554
    }
hgs
parents:
diff changeset
  3555
hgs
parents:
diff changeset
  3556
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3557
hgs
parents:
diff changeset
  3558
void CFileBrowserFileUtils::EraseDrivePasswordL(TInt aIndex)
hgs
parents:
diff changeset
  3559
    {
hgs
parents:
diff changeset
  3560
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3561
        {
hgs
parents:
diff changeset
  3562
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3563
        
hgs
parents:
diff changeset
  3564
        // erase the password from the drive
hgs
parents:
diff changeset
  3565
        User::LeaveIfError(iFs.ErasePassword(driveEntry.iNumber));
hgs
parents:
diff changeset
  3566
        }
hgs
parents:
diff changeset
  3567
    }
hgs
parents:
diff changeset
  3568
hgs
parents:
diff changeset
  3569
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3570
hgs
parents:
diff changeset
  3571
void CFileBrowserFileUtils::FormatDriveL(TInt aIndex, TBool aQuickFormat)
hgs
parents:
diff changeset
  3572
    {    
hgs
parents:
diff changeset
  3573
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3574
        {
hgs
parents:
diff changeset
  3575
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3576
hgs
parents:
diff changeset
  3577
        TInt err(KErrNone);
hgs
parents:
diff changeset
  3578
        TInt formatCount(0);
hgs
parents:
diff changeset
  3579
hgs
parents:
diff changeset
  3580
        TBuf<10> driveRoot;
hgs
parents:
diff changeset
  3581
        driveRoot.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  3582
        driveRoot.Append(_L(":"));
hgs
parents:
diff changeset
  3583
hgs
parents:
diff changeset
  3584
        TUint formatMode(0);
hgs
parents:
diff changeset
  3585
        if (aQuickFormat)
hgs
parents:
diff changeset
  3586
            formatMode = ESpecialFormat|EQuickFormat;
hgs
parents:
diff changeset
  3587
        else
hgs
parents:
diff changeset
  3588
            formatMode = ESpecialFormat|EFullFormat;
hgs
parents:
diff changeset
  3589
hgs
parents:
diff changeset
  3590
        // set as system application to prevent getting shut down events
hgs
parents:
diff changeset
  3591
        iEngine->EikonEnv()->SetSystem(ETrue);
hgs
parents:
diff changeset
  3592
hgs
parents:
diff changeset
  3593
        // first close any open applications
hgs
parents:
diff changeset
  3594
        CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
hgs
parents:
diff changeset
  3595
        CleanupStack::PushL(BSWrapper);
hgs
parents:
diff changeset
  3596
hgs
parents:
diff changeset
  3597
        TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
hgs
parents:
diff changeset
  3598
        BSWrapper->NotifyBackupOperationL(atts);
hgs
parents:
diff changeset
  3599
hgs
parents:
diff changeset
  3600
        CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
hgs
parents:
diff changeset
  3601
        BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
hgs
parents:
diff changeset
  3602
        waiter->StartAndWait();
hgs
parents:
diff changeset
  3603
        CleanupStack::PopAndDestroy(); //waiter
hgs
parents:
diff changeset
  3604
hgs
parents:
diff changeset
  3605
        // some delay to make sure all applications have been closed
hgs
parents:
diff changeset
  3606
        User::After(1000000);
hgs
parents:
diff changeset
  3607
hgs
parents:
diff changeset
  3608
        // format the drive
hgs
parents:
diff changeset
  3609
        RFormat format;
hgs
parents:
diff changeset
  3610
        err = format.Open(iFs, driveRoot, formatMode, formatCount);
hgs
parents:
diff changeset
  3611
hgs
parents:
diff changeset
  3612
        // Forced format for locked card
hgs
parents:
diff changeset
  3613
        if ( err == KErrLocked )
hgs
parents:
diff changeset
  3614
            {
hgs
parents:
diff changeset
  3615
            // Erase password and try again
hgs
parents:
diff changeset
  3616
            err = iFs.ErasePassword( driveEntry.iNumber );
hgs
parents:
diff changeset
  3617
            if ( !err )
hgs
parents:
diff changeset
  3618
                {
hgs
parents:
diff changeset
  3619
                err = format.Open(iFs, driveRoot, formatMode, formatCount);
hgs
parents:
diff changeset
  3620
                }
hgs
parents:
diff changeset
  3621
            }
hgs
parents:
diff changeset
  3622
hgs
parents:
diff changeset
  3623
        if( err != KErrNone &&  err != KErrLocked )
hgs
parents:
diff changeset
  3624
            {
hgs
parents:
diff changeset
  3625
//            CAknQueryDialog* lockQuery = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  3626
//            if ( lockQuery->ExecuteLD(R_GENERAL_CONFIRMATION_QUERY, _L("Memory card in use by other application. Proceed anyway?")))
hgs
parents:
diff changeset
  3627
            // TODO Dialog should be opened in UI part
hgs
parents:
diff changeset
  3628
            if (iEngine->FileBrowserUI()->ShowConfirmationQuery(_L("Memory card in use by other application. Proceed anyway?")))
hgs
parents:
diff changeset
  3629
                {
hgs
parents:
diff changeset
  3630
                // If format could not be started, someone is still keeping
hgs
parents:
diff changeset
  3631
                // files open on media. Let's try to dismount file system, then
hgs
parents:
diff changeset
  3632
                // remount with own extension embedded and try again.
hgs
parents:
diff changeset
  3633
hgs
parents:
diff changeset
  3634
                TFullName fsName;
hgs
parents:
diff changeset
  3635
                err = iFs.FileSystemName( fsName, driveEntry.iNumber );
hgs
parents:
diff changeset
  3636
hgs
parents:
diff changeset
  3637
                if ( err == KErrNone && fsName.Length() > 0 )
hgs
parents:
diff changeset
  3638
                    {
hgs
parents:
diff changeset
  3639
                    // Prevent SysAp shutting down applications
hgs
parents:
diff changeset
  3640
                    RProperty::Set(
hgs
parents:
diff changeset
  3641
                        KPSUidCoreApplicationUIs,
hgs
parents:
diff changeset
  3642
                        KCoreAppUIsMmcRemovedWithoutEject,
hgs
parents:
diff changeset
  3643
                        ECoreAppUIsEjectCommandUsed );
hgs
parents:
diff changeset
  3644
hgs
parents:
diff changeset
  3645
                    TRequestStatus stat;
hgs
parents:
diff changeset
  3646
                    iFs.NotifyDismount( driveEntry.iNumber, stat, EFsDismountForceDismount );
hgs
parents:
diff changeset
  3647
                    User::WaitForRequest( stat );
hgs
parents:
diff changeset
  3648
hgs
parents:
diff changeset
  3649
                    // Unfortunately, at the moment we have to wait until clients have received
hgs
parents:
diff changeset
  3650
                    // notification about card dismount. Otherwise at least causes problems with
hgs
parents:
diff changeset
  3651
                    // theme selected from card. In future clients should use new notify-API.
hgs
parents:
diff changeset
  3652
                    User::After( KForcedFormatTimeout );
hgs
parents:
diff changeset
  3653
hgs
parents:
diff changeset
  3654
                    // Let's set priority higher than normally. This is done to decrease the chance
hgs
parents:
diff changeset
  3655
                    // that someone reopens files on memory card after mandatory file system
hgs
parents:
diff changeset
  3656
                    // remounting hence preventing formatting again.
hgs
parents:
diff changeset
  3657
                    TThreadPriority priority( RThread().Priority() );
hgs
parents:
diff changeset
  3658
                    RThread().SetPriority( EPriorityAbsoluteHigh );
hgs
parents:
diff changeset
  3659
hgs
parents:
diff changeset
  3660
                    // Mount file system back...
hgs
parents:
diff changeset
  3661
                    err = iFs.MountFileSystem( fsName, driveEntry.iNumber );
hgs
parents:
diff changeset
  3662
                    err = format.Open(iFs, driveRoot, formatMode, formatCount);
hgs
parents:
diff changeset
  3663
                    RThread().SetPriority( priority );
hgs
parents:
diff changeset
  3664
                    }
hgs
parents:
diff changeset
  3665
                }
hgs
parents:
diff changeset
  3666
            }
hgs
parents:
diff changeset
  3667
hgs
parents:
diff changeset
  3668
hgs
parents:
diff changeset
  3669
        if (err == KErrNone)
hgs
parents:
diff changeset
  3670
            {
hgs
parents:
diff changeset
  3671
            // needs to be implemented with active objects
hgs
parents:
diff changeset
  3672
            // CAknProgressDialog* dlg = new(ELeave) CAknProgressDialog(formatCount, 1, 1, NULL);
hgs
parents:
diff changeset
  3673
            // dlg->SetTone(CAknNoteDialog::ENoTone);
hgs
parents:
diff changeset
  3674
            // dlg->ExecuteLD(R_FORMAT_PROGRESS_NOTE);
hgs
parents:
diff changeset
  3675
hgs
parents:
diff changeset
  3676
            while (formatCount && err == KErrNone)
hgs
parents:
diff changeset
  3677
                {
hgs
parents:
diff changeset
  3678
                err = format.Next(formatCount);
hgs
parents:
diff changeset
  3679
                }
hgs
parents:
diff changeset
  3680
            }
hgs
parents:
diff changeset
  3681
hgs
parents:
diff changeset
  3682
        format.Close();
hgs
parents:
diff changeset
  3683
hgs
parents:
diff changeset
  3684
        // restart closed applications
hgs
parents:
diff changeset
  3685
        TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
hgs
parents:
diff changeset
  3686
        BSWrapper->NotifyBackupOperationL(atts2);
hgs
parents:
diff changeset
  3687
        BSWrapper->RestartAll();
hgs
parents:
diff changeset
  3688
        CleanupStack::PopAndDestroy(); //BSWrapper
hgs
parents:
diff changeset
  3689
hgs
parents:
diff changeset
  3690
        // system status not needed anymore
hgs
parents:
diff changeset
  3691
        iEngine->EikonEnv()->SetSystem(EFalse);
hgs
parents:
diff changeset
  3692
hgs
parents:
diff changeset
  3693
hgs
parents:
diff changeset
  3694
        if (err == KErrNone)
hgs
parents:
diff changeset
  3695
            {
hgs
parents:
diff changeset
  3696
            iEngine->FileBrowserUI()->ShowConfirmationNote(_L("Format succeeded"));
hgs
parents:
diff changeset
  3697
            }
hgs
parents:
diff changeset
  3698
        else if (err == KErrNotSupported)
hgs
parents:
diff changeset
  3699
            {
hgs
parents:
diff changeset
  3700
            iEngine->FileBrowserUI()->ShowErrorNote(_L("Not supported for this drive"));
hgs
parents:
diff changeset
  3701
            }
hgs
parents:
diff changeset
  3702
        else
hgs
parents:
diff changeset
  3703
            {
hgs
parents:
diff changeset
  3704
            iEngine->FileBrowserUI()->ShowErrorNote(ResolveErrorMessage(err));
hgs
parents:
diff changeset
  3705
            }
hgs
parents:
diff changeset
  3706
hgs
parents:
diff changeset
  3707
        RefreshViewL();
hgs
parents:
diff changeset
  3708
        }
hgs
parents:
diff changeset
  3709
    }
hgs
parents:
diff changeset
  3710
hgs
parents:
diff changeset
  3711
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3712
hgs
parents:
diff changeset
  3713
void CFileBrowserFileUtils::EraseMBRL(TInt aIndex)
hgs
parents:
diff changeset
  3714
    {
hgs
parents:
diff changeset
  3715
    // TODO
hgs
parents:
diff changeset
  3716
    #ifndef FILEBROWSER_LITE
hgs
parents:
diff changeset
  3717
    if (iEngine->Settings().iBypassPlatformSecurity)
hgs
parents:
diff changeset
  3718
        {        
hgs
parents:
diff changeset
  3719
        if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3720
            {
hgs
parents:
diff changeset
  3721
            TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3722
hgs
parents:
diff changeset
  3723
            TInt err(KErrNone);
hgs
parents:
diff changeset
  3724
hgs
parents:
diff changeset
  3725
            iEngine->FileBrowserUI()->ShowInformationNote(_L("Please wait, this may take 30 seconds"), _L(""));
hgs
parents:
diff changeset
  3726
hgs
parents:
diff changeset
  3727
            // set as system application to prevent getting shut down events
hgs
parents:
diff changeset
  3728
            iEngine->EikonEnv()->SetSystem(ETrue);
hgs
parents:
diff changeset
  3729
hgs
parents:
diff changeset
  3730
            // first close any open applications
hgs
parents:
diff changeset
  3731
            CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
hgs
parents:
diff changeset
  3732
            CleanupStack::PushL(BSWrapper);
hgs
parents:
diff changeset
  3733
hgs
parents:
diff changeset
  3734
            TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
hgs
parents:
diff changeset
  3735
            BSWrapper->NotifyBackupOperationL(atts);
hgs
parents:
diff changeset
  3736
hgs
parents:
diff changeset
  3737
            CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
hgs
parents:
diff changeset
  3738
            BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
hgs
parents:
diff changeset
  3739
            waiter->StartAndWait();
hgs
parents:
diff changeset
  3740
            CleanupStack::PopAndDestroy(); //waiter
hgs
parents:
diff changeset
  3741
hgs
parents:
diff changeset
  3742
            // some delay to make sure all applications have been closed
hgs
parents:
diff changeset
  3743
            User::After(1000000);
hgs
parents:
diff changeset
  3744
hgs
parents:
diff changeset
  3745
hgs
parents:
diff changeset
  3746
            // do the erase MBR operation
hgs
parents:
diff changeset
  3747
            err = iFileOps->EraseMBR(driveEntry.iNumber);
hgs
parents:
diff changeset
  3748
hgs
parents:
diff changeset
  3749
hgs
parents:
diff changeset
  3750
            // restart closed applications
hgs
parents:
diff changeset
  3751
            TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
hgs
parents:
diff changeset
  3752
            BSWrapper->NotifyBackupOperationL(atts2);
hgs
parents:
diff changeset
  3753
            BSWrapper->RestartAll();
hgs
parents:
diff changeset
  3754
            CleanupStack::PopAndDestroy(); //BSWrapper
hgs
parents:
diff changeset
  3755
hgs
parents:
diff changeset
  3756
            // system status not needed anymore
hgs
parents:
diff changeset
  3757
            iEngine->EikonEnv()->SetSystem(EFalse);
hgs
parents:
diff changeset
  3758
hgs
parents:
diff changeset
  3759
hgs
parents:
diff changeset
  3760
            if (err == KErrNone)
hgs
parents:
diff changeset
  3761
                {
hgs
parents:
diff changeset
  3762
                iEngine->FileBrowserUI()->ShowConfirmationNote(_L("Erase MBR succeeded"));
hgs
parents:
diff changeset
  3763
                }
hgs
parents:
diff changeset
  3764
            else if (err == KErrNotSupported)
hgs
parents:
diff changeset
  3765
                {
hgs
parents:
diff changeset
  3766
                iEngine->FileBrowserUI()->ShowErrorNote(_L("Not supported for this drive"));
hgs
parents:
diff changeset
  3767
                }
hgs
parents:
diff changeset
  3768
            else
hgs
parents:
diff changeset
  3769
                {
hgs
parents:
diff changeset
  3770
                iEngine->FileBrowserUI()->ShowErrorNote(ResolveErrorMessage(err));
hgs
parents:
diff changeset
  3771
                }
hgs
parents:
diff changeset
  3772
hgs
parents:
diff changeset
  3773
            RefreshViewL();
hgs
parents:
diff changeset
  3774
            }
hgs
parents:
diff changeset
  3775
        }
hgs
parents:
diff changeset
  3776
    else
hgs
parents:
diff changeset
  3777
        {
hgs
parents:
diff changeset
  3778
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Enable \"bypass platform security\" from the settings first"), _L(""));
hgs
parents:
diff changeset
  3779
        }
hgs
parents:
diff changeset
  3780
    #else
hgs
parents:
diff changeset
  3781
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Not supported in lite version"), _L(""));
hgs
parents:
diff changeset
  3782
    #endif
hgs
parents:
diff changeset
  3783
    }
hgs
parents:
diff changeset
  3784
    
hgs
parents:
diff changeset
  3785
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3786
hgs
parents:
diff changeset
  3787
void CFileBrowserFileUtils::PartitionDriveL(TInt aIndex, TBool aEraseMBR, TInt aAmountOfPartitions)
hgs
parents:
diff changeset
  3788
    {
hgs
parents:
diff changeset
  3789
    // TODO
hgs
parents:
diff changeset
  3790
    #ifndef FILEBROWSER_LITE
hgs
parents:
diff changeset
  3791
    if (iEngine->Settings().iBypassPlatformSecurity)
hgs
parents:
diff changeset
  3792
        {
hgs
parents:
diff changeset
  3793
        if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3794
            {
hgs
parents:
diff changeset
  3795
            TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3796
hgs
parents:
diff changeset
  3797
            TInt err(KErrNone);
hgs
parents:
diff changeset
  3798
hgs
parents:
diff changeset
  3799
            iEngine->FileBrowserUI()->ShowInformationNote(_L("Please wait, this may take 30 seconds"), _L(""));
hgs
parents:
diff changeset
  3800
hgs
parents:
diff changeset
  3801
            // set as system application to prevent getting shut down events
hgs
parents:
diff changeset
  3802
            iEngine->EikonEnv()->SetSystem(ETrue);
hgs
parents:
diff changeset
  3803
hgs
parents:
diff changeset
  3804
            // first close any open applications
hgs
parents:
diff changeset
  3805
            CBaBackupSessionWrapper* BSWrapper = CBaBackupSessionWrapper::NewL();
hgs
parents:
diff changeset
  3806
            CleanupStack::PushL(BSWrapper);
hgs
parents:
diff changeset
  3807
hgs
parents:
diff changeset
  3808
            TBackupOperationAttributes atts(MBackupObserver::EReleaseLockNoAccess, MBackupOperationObserver::EStart);
hgs
parents:
diff changeset
  3809
            BSWrapper->NotifyBackupOperationL(atts);
hgs
parents:
diff changeset
  3810
hgs
parents:
diff changeset
  3811
            CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
hgs
parents:
diff changeset
  3812
            BSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, waiter->iStatus );
hgs
parents:
diff changeset
  3813
            waiter->StartAndWait();
hgs
parents:
diff changeset
  3814
            CleanupStack::PopAndDestroy(); //waiter
hgs
parents:
diff changeset
  3815
hgs
parents:
diff changeset
  3816
            // some delay to make sure all applications have been closed
hgs
parents:
diff changeset
  3817
            User::After(1000000);
hgs
parents:
diff changeset
  3818
hgs
parents:
diff changeset
  3819
            // do the erase operation
hgs
parents:
diff changeset
  3820
            if (aEraseMBR)
hgs
parents:
diff changeset
  3821
                {
hgs
parents:
diff changeset
  3822
                err = iFileOps->EraseMBR(driveEntry.iNumber);
hgs
parents:
diff changeset
  3823
hgs
parents:
diff changeset
  3824
                if (err != KErrNone)
hgs
parents:
diff changeset
  3825
                    {
hgs
parents:
diff changeset
  3826
                    iEngine->FileBrowserUI()->ShowErrorNote(_L("Erase MBR failed"));
hgs
parents:
diff changeset
  3827
                    }
hgs
parents:
diff changeset
  3828
hgs
parents:
diff changeset
  3829
                User::After(500000);
hgs
parents:
diff changeset
  3830
                }
hgs
parents:
diff changeset
  3831
hgs
parents:
diff changeset
  3832
hgs
parents:
diff changeset
  3833
            // do the partition operation
hgs
parents:
diff changeset
  3834
            err = iFileOps->PartitionDrive(driveEntry.iNumber, aAmountOfPartitions);
hgs
parents:
diff changeset
  3835
hgs
parents:
diff changeset
  3836
hgs
parents:
diff changeset
  3837
            // restart closed applications
hgs
parents:
diff changeset
  3838
            TBackupOperationAttributes atts2(MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd);
hgs
parents:
diff changeset
  3839
            BSWrapper->NotifyBackupOperationL(atts2);
hgs
parents:
diff changeset
  3840
            BSWrapper->RestartAll();
hgs
parents:
diff changeset
  3841
            CleanupStack::PopAndDestroy(); //BSWrapper
hgs
parents:
diff changeset
  3842
hgs
parents:
diff changeset
  3843
            // system status not needed anymore
hgs
parents:
diff changeset
  3844
            iEngine->EikonEnv()->SetSystem(EFalse);
hgs
parents:
diff changeset
  3845
hgs
parents:
diff changeset
  3846
hgs
parents:
diff changeset
  3847
            if (err == KErrNone)
hgs
parents:
diff changeset
  3848
                {
hgs
parents:
diff changeset
  3849
                iEngine->FileBrowserUI()->ShowConfirmationNote(_L("Partition succeeded"));
hgs
parents:
diff changeset
  3850
                }
hgs
parents:
diff changeset
  3851
            else if (err == KErrNotSupported)
hgs
parents:
diff changeset
  3852
                {
hgs
parents:
diff changeset
  3853
                iEngine->FileBrowserUI()->ShowErrorNote(_L("Not supported for this drive"));
hgs
parents:
diff changeset
  3854
                }
hgs
parents:
diff changeset
  3855
            else
hgs
parents:
diff changeset
  3856
                {
hgs
parents:
diff changeset
  3857
                iEngine->FileBrowserUI()->ShowErrorNote(ResolveErrorMessage(err));
hgs
parents:
diff changeset
  3858
                }
hgs
parents:
diff changeset
  3859
hgs
parents:
diff changeset
  3860
            RefreshViewL();
hgs
parents:
diff changeset
  3861
            }
hgs
parents:
diff changeset
  3862
        }
hgs
parents:
diff changeset
  3863
    else
hgs
parents:
diff changeset
  3864
        {
hgs
parents:
diff changeset
  3865
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Enable \"bypass platform security\" from the settings first"), _L(""));
hgs
parents:
diff changeset
  3866
        }
hgs
parents:
diff changeset
  3867
    #else
hgs
parents:
diff changeset
  3868
        iEngine->FileBrowserUI()->ShowInformationNote(_L("Not supported in lite version"), _L(""));
hgs
parents:
diff changeset
  3869
    #endif
hgs
parents:
diff changeset
  3870
	}
hgs
parents:
diff changeset
  3871
    
hgs
parents:
diff changeset
  3872
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3873
hgs
parents:
diff changeset
  3874
void CFileBrowserFileUtils::CheckDiskL(TInt aIndex)
hgs
parents:
diff changeset
  3875
    {    
hgs
parents:
diff changeset
  3876
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3877
        {
hgs
parents:
diff changeset
  3878
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3879
        
hgs
parents:
diff changeset
  3880
        TBuf<10> driveRoot;
hgs
parents:
diff changeset
  3881
        driveRoot.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  3882
        driveRoot.Append(_L(":"));
hgs
parents:
diff changeset
  3883
        
hgs
parents:
diff changeset
  3884
        // check disk
hgs
parents:
diff changeset
  3885
        TInt err = iFs.CheckDisk(driveRoot);
hgs
parents:
diff changeset
  3886
hgs
parents:
diff changeset
  3887
        if (err == KErrNone)
hgs
parents:
diff changeset
  3888
            {
hgs
parents:
diff changeset
  3889
            iEngine->FileBrowserUI()->ShowConfirmationNote(_L("Integrity of the disk is ok"));
hgs
parents:
diff changeset
  3890
            }
hgs
parents:
diff changeset
  3891
        else if (err == KErrNotReady)
hgs
parents:
diff changeset
  3892
            {
hgs
parents:
diff changeset
  3893
            iEngine->FileBrowserUI()->ShowInformationNote(_L("Disk is empty"), _L(""));
hgs
parents:
diff changeset
  3894
            }
hgs
parents:
diff changeset
  3895
        else if (err == KErrNotSupported)
hgs
parents:
diff changeset
  3896
            {
hgs
parents:
diff changeset
  3897
            iEngine->FileBrowserUI()->ShowErrorNote(_L("Not supported for this drive"));
hgs
parents:
diff changeset
  3898
            }
hgs
parents:
diff changeset
  3899
        else
hgs
parents:
diff changeset
  3900
            {
hgs
parents:
diff changeset
  3901
            iEngine->FileBrowserUI()->ShowErrorNote(_L("Disk is corrupted"));
hgs
parents:
diff changeset
  3902
            }        
hgs
parents:
diff changeset
  3903
hgs
parents:
diff changeset
  3904
        RefreshViewL();
hgs
parents:
diff changeset
  3905
        }
hgs
parents:
diff changeset
  3906
    }
hgs
parents:
diff changeset
  3907
hgs
parents:
diff changeset
  3908
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3909
hgs
parents:
diff changeset
  3910
void CFileBrowserFileUtils::ScanDriveL(TInt aIndex)
hgs
parents:
diff changeset
  3911
    {
hgs
parents:
diff changeset
  3912
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3913
        {
hgs
parents:
diff changeset
  3914
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3915
hgs
parents:
diff changeset
  3916
        TBuf<10> driveRoot;
hgs
parents:
diff changeset
  3917
        driveRoot.Append(driveEntry.iLetter);
hgs
parents:
diff changeset
  3918
        driveRoot.Append(_L(":"));
hgs
parents:
diff changeset
  3919
hgs
parents:
diff changeset
  3920
        // scan disk
hgs
parents:
diff changeset
  3921
        User::LeaveIfError(iFs.ScanDrive(driveRoot));
hgs
parents:
diff changeset
  3922
        }
hgs
parents:
diff changeset
  3923
    }
hgs
parents:
diff changeset
  3924
hgs
parents:
diff changeset
  3925
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3926
hgs
parents:
diff changeset
  3927
void CFileBrowserFileUtils::GetDriveName(TInt aIndex, TFileName &aDriveName)
hgs
parents:
diff changeset
  3928
    {
hgs
parents:
diff changeset
  3929
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3930
        {
hgs
parents:
diff changeset
  3931
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3932
hgs
parents:
diff changeset
  3933
        // get existing drive name
hgs
parents:
diff changeset
  3934
        iFs.GetDriveName(driveEntry.iNumber, aDriveName);
hgs
parents:
diff changeset
  3935
        }
hgs
parents:
diff changeset
  3936
    }
hgs
parents:
diff changeset
  3937
hgs
parents:
diff changeset
  3938
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3939
hgs
parents:
diff changeset
  3940
void CFileBrowserFileUtils::SetDriveNameL(TInt aIndex, const TFileName &aDriveName)
hgs
parents:
diff changeset
  3941
    {
hgs
parents:
diff changeset
  3942
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3943
        {
hgs
parents:
diff changeset
  3944
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3945
hgs
parents:
diff changeset
  3946
        // set drive name
hgs
parents:
diff changeset
  3947
        User::LeaveIfError(iFs.SetDriveName(driveEntry.iNumber, aDriveName));
hgs
parents:
diff changeset
  3948
        }
hgs
parents:
diff changeset
  3949
    }
hgs
parents:
diff changeset
  3950
hgs
parents:
diff changeset
  3951
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3952
hgs
parents:
diff changeset
  3953
void CFileBrowserFileUtils::GetDriveVolumeLabel(TInt aIndex, TFileName &aVolumeLabel)
hgs
parents:
diff changeset
  3954
    {
hgs
parents:
diff changeset
  3955
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3956
        {
hgs
parents:
diff changeset
  3957
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3958
hgs
parents:
diff changeset
  3959
        // get existing volume label
hgs
parents:
diff changeset
  3960
        aVolumeLabel.Copy(driveEntry.iVolumeInfo.iName);
hgs
parents:
diff changeset
  3961
        }
hgs
parents:
diff changeset
  3962
    }
hgs
parents:
diff changeset
  3963
hgs
parents:
diff changeset
  3964
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3965
hgs
parents:
diff changeset
  3966
void CFileBrowserFileUtils::SetDriveVolumeLabelL(TInt aIndex, const TFileName &aVolumeLabel)
hgs
parents:
diff changeset
  3967
    {
hgs
parents:
diff changeset
  3968
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3969
        {
hgs
parents:
diff changeset
  3970
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3971
hgs
parents:
diff changeset
  3972
        // set volume label
hgs
parents:
diff changeset
  3973
        User::LeaveIfError(iFs.SetVolumeLabel(aVolumeLabel, driveEntry.iNumber));
hgs
parents:
diff changeset
  3974
        }
hgs
parents:
diff changeset
  3975
    }
hgs
parents:
diff changeset
  3976
hgs
parents:
diff changeset
  3977
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3978
hgs
parents:
diff changeset
  3979
void CFileBrowserFileUtils::EjectDriveL(TInt aIndex)
hgs
parents:
diff changeset
  3980
    {
hgs
parents:
diff changeset
  3981
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  3982
        {
hgs
parents:
diff changeset
  3983
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  3984
        
hgs
parents:
diff changeset
  3985
        TInt err(KErrNone);
hgs
parents:
diff changeset
  3986
        
hgs
parents:
diff changeset
  3987
        // get current filesystem name
hgs
parents:
diff changeset
  3988
        TFileName fileSystemName;
hgs
parents:
diff changeset
  3989
        User::LeaveIfError(iFs.FileSystemName(fileSystemName, driveEntry.iNumber));
hgs
parents:
diff changeset
  3990
        
hgs
parents:
diff changeset
  3991
        // Prevent SysAp shutting down applications
hgs
parents:
diff changeset
  3992
        RProperty::Set(
hgs
parents:
diff changeset
  3993
            KPSUidCoreApplicationUIs,
hgs
parents:
diff changeset
  3994
            KCoreAppUIsMmcRemovedWithoutEject,
hgs
parents:
diff changeset
  3995
            ECoreAppUIsEjectCommandUsed );
hgs
parents:
diff changeset
  3996
hgs
parents:
diff changeset
  3997
        // dismount the file system
hgs
parents:
diff changeset
  3998
        User::LeaveIfError(iFs.DismountFileSystem(fileSystemName, driveEntry.iNumber));
hgs
parents:
diff changeset
  3999
hgs
parents:
diff changeset
  4000
        // remount the file system
hgs
parents:
diff changeset
  4001
        err = iFs.MountFileSystem(fileSystemName, driveEntry.iNumber);
hgs
parents:
diff changeset
  4002
hgs
parents:
diff changeset
  4003
        if (err == KErrInUse)
hgs
parents:
diff changeset
  4004
            {
hgs
parents:
diff changeset
  4005
            // try to remount after a while if locked
hgs
parents:
diff changeset
  4006
            User::After(1000000);
hgs
parents:
diff changeset
  4007
            err = iFs.MountFileSystem(fileSystemName, driveEntry.iNumber);
hgs
parents:
diff changeset
  4008
            }
hgs
parents:
diff changeset
  4009
        User::LeaveIfError(err);
hgs
parents:
diff changeset
  4010
        }
hgs
parents:
diff changeset
  4011
    }
hgs
parents:
diff changeset
  4012
    
hgs
parents:
diff changeset
  4013
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4014
hgs
parents:
diff changeset
  4015
void CFileBrowserFileUtils::DismountFileSystemL(TInt aIndex)
hgs
parents:
diff changeset
  4016
    {
hgs
parents:
diff changeset
  4017
    if (iDriveEntryList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
  4018
        {
hgs
parents:
diff changeset
  4019
        TDriveEntry driveEntry = iDriveEntryList->At(aIndex);
hgs
parents:
diff changeset
  4020
hgs
parents:
diff changeset
  4021
        // get current filesystem name
hgs
parents:
diff changeset
  4022
        TFileName fileSystemName;
hgs
parents:
diff changeset
  4023
        User::LeaveIfError(iFs.FileSystemName(fileSystemName, driveEntry.iNumber));
hgs
parents:
diff changeset
  4024
hgs
parents:
diff changeset
  4025
        // Prevent SysAp shutting down applications
hgs
parents:
diff changeset
  4026
        RProperty::Set(
hgs
parents:
diff changeset
  4027
            KPSUidCoreApplicationUIs,
hgs
parents:
diff changeset
  4028
            KCoreAppUIsMmcRemovedWithoutEject,
hgs
parents:
diff changeset
  4029
            ECoreAppUIsEjectCommandUsed );
hgs
parents:
diff changeset
  4030
hgs
parents:
diff changeset
  4031
        // dismount the file system
hgs
parents:
diff changeset
  4032
        User::LeaveIfError(iFs.DismountFileSystem(fileSystemName, driveEntry.iNumber));
hgs
parents:
diff changeset
  4033
        }
hgs
parents:
diff changeset
  4034
    }
hgs
parents:
diff changeset
  4035
    
hgs
parents:
diff changeset
  4036
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4037
hgs
parents:
diff changeset
  4038
void CFileBrowserFileUtils::ConvertCharsToPwd(const TDesC& aWord, TDes8& aConverted) const
hgs
parents:
diff changeset
  4039
    {
hgs
parents:
diff changeset
  4040
    aConverted.FillZ(aConverted.MaxLength());
hgs
parents:
diff changeset
  4041
    aConverted.Zero();
hgs
parents:
diff changeset
  4042
    
hgs
parents:
diff changeset
  4043
    if (aWord.Length())
hgs
parents:
diff changeset
  4044
        {
hgs
parents:
diff changeset
  4045
        aConverted.Copy( (TUint8*)(&aWord[0]), aWord.Size() );
hgs
parents:
diff changeset
  4046
        }
hgs
parents:
diff changeset
  4047
    }
hgs
parents:
diff changeset
  4048
hgs
parents:
diff changeset
  4049
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4050
hgs
parents:
diff changeset
  4051
void CFileBrowserFileUtils::EditDataTypesL()
hgs
parents:
diff changeset
  4052
    {
hgs
parents:
diff changeset
  4053
	// TODO
hgs
parents:
diff changeset
  4054
	/*
hgs
parents:
diff changeset
  4055
    iEngine->FileListContainer()->SetScreenLayoutL(EDisplayModeNormal);
hgs
parents:
diff changeset
  4056
    iEngine->FileListContainer()->SetNaviPaneTextL(KNullDesC);
hgs
parents:
diff changeset
  4057
    
hgs
parents:
diff changeset
  4058
    CFileBrowserDataTypesDlg* dlg = CFileBrowserDataTypesDlg::NewL();
hgs
parents:
diff changeset
  4059
    dlg->RunQueryLD();
hgs
parents:
diff changeset
  4060
hgs
parents:
diff changeset
  4061
    iEngine->FileListContainer()->SetScreenLayoutL(iEngine->Settings().iDisplayMode);
hgs
parents:
diff changeset
  4062
    iEngine->FileListContainer()->SetNaviPaneTextL(iCurrentPath);  
hgs
parents:
diff changeset
  4063
	*/	
hgs
parents:
diff changeset
  4064
    }
hgs
parents:
diff changeset
  4065
hgs
parents:
diff changeset
  4066
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4067
hgs
parents:
diff changeset
  4068
void CFileBrowserFileUtils::SecureBackupL(TInt aType)
hgs
parents:
diff changeset
  4069
    {
hgs
parents:
diff changeset
  4070
    TInt err(KErrNone);
hgs
parents:
diff changeset
  4071
    TInt showStatus(EFalse);
hgs
parents:
diff changeset
  4072
    
hgs
parents:
diff changeset
  4073
    if (aType == EFileBrowserCmdToolsSecureBackupStartBackup || aType == EFileBrowserCmdToolsSecureBackupStartRestore)
hgs
parents:
diff changeset
  4074
        {
hgs
parents:
diff changeset
  4075
//        TInt queryIndexState(0);
hgs
parents:
diff changeset
  4076
//        TInt queryIndexType(0);
hgs
parents:
diff changeset
  4077
        
hgs
parents:
diff changeset
  4078
//        CAknListQueryDialog* listQueryDlgState = new(ELeave) CAknListQueryDialog(&queryIndexState);
hgs
parents:
diff changeset
  4079
//        if (listQueryDlgState->ExecuteLD(R_SECUREBACKUP_STATE_QUERY))
hgs
parents:
diff changeset
  4080
//            {
hgs
parents:
diff changeset
  4081
//
hgs
parents:
diff changeset
  4082
//            CAknListQueryDialog* listQueryDlgType = new(ELeave) CAknListQueryDialog(&queryIndexType);
hgs
parents:
diff changeset
  4083
//            if (listQueryDlgType->ExecuteLD(R_SECUREBACKUP_TYPE_QUERY))
hgs
parents:
diff changeset
  4084
//                {
hgs
parents:
diff changeset
  4085
//                conn::TBURPartType partType = conn::EBURNormal;
hgs
parents:
diff changeset
  4086
//                conn::TBackupIncType backupIncType = conn::ENoBackup;
hgs
parents:
diff changeset
  4087
//                
hgs
parents:
diff changeset
  4088
//                if (aType == EFileBrowserCmdToolsSecureBackupStartBackup)
hgs
parents:
diff changeset
  4089
//                    {
hgs
parents:
diff changeset
  4090
//                    if (queryIndexState == ESecureBackupStateFull)
hgs
parents:
diff changeset
  4091
//                        partType = conn::EBURBackupFull;
hgs
parents:
diff changeset
  4092
//                    else if (queryIndexState == ESecureBackupStatePartial)
hgs
parents:
diff changeset
  4093
//                        partType = conn::EBURBackupPartial;
hgs
parents:
diff changeset
  4094
//                    }
hgs
parents:
diff changeset
  4095
//                else if (aType == EFileBrowserCmdToolsSecureBackupStartRestore)
hgs
parents:
diff changeset
  4096
//                    {
hgs
parents:
diff changeset
  4097
//                    if (queryIndexState == ESecureBackupStateFull)
hgs
parents:
diff changeset
  4098
//                        partType = conn::EBURRestoreFull;
hgs
parents:
diff changeset
  4099
//                    else if (queryIndexState == ESecureBackupStatePartial)
hgs
parents:
diff changeset
  4100
//                        partType = conn::EBURRestorePartial;
hgs
parents:
diff changeset
  4101
//                    }
hgs
parents:
diff changeset
  4102
//                    
hgs
parents:
diff changeset
  4103
//                if (queryIndexType == ESecureBackupTypeBase)
hgs
parents:
diff changeset
  4104
//                    backupIncType = conn::EBackupBase;
hgs
parents:
diff changeset
  4105
//                else if (queryIndexType == ESecureBackupTypeIncremental)    
hgs
parents:
diff changeset
  4106
//                    backupIncType = conn::EBackupIncrement;    
hgs
parents:
diff changeset
  4107
//
hgs
parents:
diff changeset
  4108
//                // start secure backup
hgs
parents:
diff changeset
  4109
//                err = iFileOps->ActivateSecureBackUp(partType, backupIncType);
hgs
parents:
diff changeset
  4110
//                showStatus = ETrue;
hgs
parents:
diff changeset
  4111
//                }
hgs
parents:
diff changeset
  4112
//            }
hgs
parents:
diff changeset
  4113
        }
hgs
parents:
diff changeset
  4114
hgs
parents:
diff changeset
  4115
    else if (aType == EFileBrowserCmdToolsSecureBackupStop)
hgs
parents:
diff changeset
  4116
        {
hgs
parents:
diff changeset
  4117
        err = iFileOps->DeActivateSecureBackUp();
hgs
parents:
diff changeset
  4118
        showStatus = ETrue;
hgs
parents:
diff changeset
  4119
        }
hgs
parents:
diff changeset
  4120
hgs
parents:
diff changeset
  4121
    else
hgs
parents:
diff changeset
  4122
        User::Panic(_L("Sec.br.mode"), 101);
hgs
parents:
diff changeset
  4123
    
hgs
parents:
diff changeset
  4124
    
hgs
parents:
diff changeset
  4125
    if (showStatus)
hgs
parents:
diff changeset
  4126
        {
hgs
parents:
diff changeset
  4127
        if (err == KErrNone)
hgs
parents:
diff changeset
  4128
            {
hgs
parents:
diff changeset
  4129
            iEngine->FileBrowserUI()->ShowConfirmationNote(_L("Succeeded"));
hgs
parents:
diff changeset
  4130
            }
hgs
parents:
diff changeset
  4131
        else
hgs
parents:
diff changeset
  4132
            {
hgs
parents:
diff changeset
  4133
            iEngine->FileBrowserUI()->ShowErrorNote(ResolveErrorMessage(err));
hgs
parents:
diff changeset
  4134
            }  
hgs
parents:
diff changeset
  4135
        }
hgs
parents:
diff changeset
  4136
    }
hgs
parents:
diff changeset
  4137
hgs
parents:
diff changeset
  4138
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4139
hgs
parents:
diff changeset
  4140
void CFileBrowserFileUtils::OpenCommonFileActionQueryL(TInt aCurrentItemIndex)
hgs
parents:
diff changeset
  4141
    {
hgs
parents:
diff changeset
  4142
    // TODO
hgs
parents:
diff changeset
  4143
    // just get current item
hgs
parents:
diff changeset
  4144
//    TInt currentItemIndex = iEngine->QueryCurrentItemIndex();
hgs
parents:
diff changeset
  4145
hgs
parents:
diff changeset
  4146
    if (iFileEntryList->Count() > aCurrentItemIndex && aCurrentItemIndex >= 0)
hgs
parents:
diff changeset
  4147
        {
hgs
parents:
diff changeset
  4148
//        TInt queryIndex(0);
hgs
parents:
diff changeset
  4149
//
hgs
parents:
diff changeset
  4150
//        CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
hgs
parents:
diff changeset
  4151
//
hgs
parents:
diff changeset
  4152
//        if (listQueryDlg->ExecuteLD(R_COMMON_FILE_ACTION_QUERY))
hgs
parents:
diff changeset
  4153
//            {
hgs
parents:
diff changeset
  4154
//            if (queryIndex == ECommonFileActionViewAsTextHex)
hgs
parents:
diff changeset
  4155
//                {
hgs
parents:
diff changeset
  4156
//                TFileEntry fileEntry = iFileEntryList->At(aCurrentItemIndex);
hgs
parents:
diff changeset
  4157
//
hgs
parents:
diff changeset
  4158
//                TFileName fullPath = fileEntry.iPath;
hgs
parents:
diff changeset
  4159
//                fullPath.Append(fileEntry.iEntry.iName);
hgs
parents:
diff changeset
  4160
//
hgs
parents:
diff changeset
  4161
//                TInt viewerType(EFileBrowserCmdFileViewHex);
hgs
parents:
diff changeset
  4162
//
hgs
parents:
diff changeset
  4163
//                // check from mime type if it's text
hgs
parents:
diff changeset
  4164
//                TDataType dataType;
hgs
parents:
diff changeset
  4165
//                TUid appUid;
hgs
parents:
diff changeset
  4166
//                if (iEngine->LsSession().AppForDocument(fullPath, appUid, dataType) == KErrNone)
hgs
parents:
diff changeset
  4167
//                    {
hgs
parents:
diff changeset
  4168
//                    TBuf<128> mimeTypeBuf;
hgs
parents:
diff changeset
  4169
//                    mimeTypeBuf.Copy(dataType.Des8());
hgs
parents:
diff changeset
  4170
//                    if (mimeTypeBuf == KNullDesC)
hgs
parents:
diff changeset
  4171
//                        mimeTypeBuf.Copy(_L("N/A"));
hgs
parents:
diff changeset
  4172
//
hgs
parents:
diff changeset
  4173
//                    if (mimeTypeBuf.CompareF(_L("text/plain")) == 0)
hgs
parents:
diff changeset
  4174
//                        viewerType = EFileBrowserCmdFileViewText;
hgs
parents:
diff changeset
  4175
//                    }
hgs
parents:
diff changeset
  4176
//
hgs
parents:
diff changeset
  4177
//                FileEditorL(viewerType);
hgs
parents:
diff changeset
  4178
//                }
hgs
parents:
diff changeset
  4179
//
hgs
parents:
diff changeset
  4180
//            else if (queryIndex == ECommonFileActionOpenWithApparc)
hgs
parents:
diff changeset
  4181
//                {
hgs
parents:
diff changeset
  4182
//                // TODO
hgs
parents:
diff changeset
  4183
//                //OpenWithApparcL();
hgs
parents:
diff changeset
  4184
//                }
hgs
parents:
diff changeset
  4185
//
hgs
parents:
diff changeset
  4186
//            else if (queryIndex == ECommonFileActionOpenWithDocHandlerEmbed)
hgs
parents:
diff changeset
  4187
//                {
hgs
parents:
diff changeset
  4188
//                // TODO
hgs
parents:
diff changeset
  4189
//                //OpenWithDocHandlerL(ETrue);
hgs
parents:
diff changeset
  4190
//                }
hgs
parents:
diff changeset
  4191
//
hgs
parents:
diff changeset
  4192
//            else
hgs
parents:
diff changeset
  4193
//                User::Panic(_L("Unk.Com.Act"), 221);
hgs
parents:
diff changeset
  4194
//            }
hgs
parents:
diff changeset
  4195
        }
hgs
parents:
diff changeset
  4196
    }
hgs
parents:
diff changeset
  4197
    
hgs
parents:
diff changeset
  4198
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  4199
	            
hgs
parents:
diff changeset
  4200
// End of File