filebrowser/engine/engine.cpp
branchRCL_3
changeset 19 b3cee849fa46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/engine/engine.cpp	Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// INCLUDE FILES
+
+#include "engine.h"
+
+//#include "FBApp.h"
+#include "FB.hrh"
+#include "FBFileUtils.h"
+#include "FBStd.h"
+//#include <filebrowser.rsg>
+
+#include <eikenv.h>
+#include <coeutils.h>
+#include <bautils.h>
+#include <apaid.h>
+#include <s32file.h>
+
+// CONSTANTS
+// UID of the application
+const TUid KUidFileBrowser = { 0x102828D6 };
+
+const TInt KSettingsDrive = EDriveC;
+_LIT(KSettingsFileName, "filebrowser_settings.ini");
+
+// ===================================== MEMBER FUNCTIONS =====================================
+
+CEngine* CEngine::NewL(MFileBrowserUI *aFileBrowserUI)
+    {
+    CEngine* self = new(ELeave) CEngine;
+    CleanupStack::PushL(self);
+    self->ConstructL(aFileBrowserUI);
+    CleanupStack::Pop();
+    return self;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CEngine::CEngine()
+    : iFileUtils(NULL)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CEngine::ConstructL(MFileBrowserUI *aFileBrowserUI)
+    {
+    iFileBrowserUI = aFileBrowserUI;
+    iEnv = CEikonEnv::Static();
+    User::LeaveIfError(iLs.Connect());
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CEngine::~CEngine()
+    {
+	if (iFileUtils != NULL)
+	    delete iFileUtils;
+
+	iLs.Close();
+    }
+
+// ---------------------------------------------------------------------------
+
+void CEngine::ActivateEngineL()
+    {
+    TRAP_IGNORE( LoadSettingsL() );
+
+    iFileUtils = CFileBrowserFileUtils::NewL(this);
+    }
+
+// ---------------------------------------------------------------------------
+
+void CEngine::DeActivateEngineL()
+    {
+    }
+	
+// ---------------------------------------------------------------------------
+
+void CEngine::LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TInt& aValue)
+    {
+    if (aDicFS->IsPresentL(aUid))
+        {
+        RDictionaryReadStream in;
+        in.OpenLC(*aDicFS, aUid);
+        aValue = in.ReadInt16L();
+        CleanupStack::PopAndDestroy(); // in        
+        }
+    }
+
+// ---------------------------------------------------------------------------
+
+void CEngine::LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TDes& aValue)
+    {
+    if (aDicFS->IsPresentL(aUid))
+        {
+        RDictionaryReadStream in;
+        in.OpenLC(*aDicFS, aUid);
+        TInt bufLength = in.ReadInt16L();   // get length of descriptor
+        in.ReadL(aValue, bufLength);        // get the descriptor itself
+        CleanupStack::PopAndDestroy(); // in
+        }
+    }
+
+// ---------------------------------------------------------------------------
+
+void CEngine::SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TInt& aValue)
+    {
+    RDictionaryWriteStream out;
+    out.AssignLC(*aDicFS, aUid);
+    out.WriteInt16L(aValue);
+    out.CommitL(); 	
+    CleanupStack::PopAndDestroy(1);// out
+    }
+
+// ---------------------------------------------------------------------------
+
+void CEngine::SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TDes& aValue)
+    {
+    RDictionaryWriteStream out;
+    out.AssignLC(*aDicFS, aUid);
+    out.WriteInt16L(aValue.Length());       // write length of the descriptor
+    out.WriteL(aValue, aValue.Length());    // write the descriptor itself
+    out.CommitL(); 	
+    CleanupStack::PopAndDestroy(1);// out
+    }
+        
+// --------------------------------------------------------------------------------------------
+
+void CEngine::LoadSettingsL()
+    {
+    const TSize screenSize = iEnv->ScreenDevice()->SizeInPixels();
+
+    // set defaults
+    iSettings.iDisplayMode = EDisplayModeFullScreen;
+    iSettings.iFileViewMode = IsQHD(screenSize) ? EFileViewModeExtended : EFileViewModeSimple;
+    iSettings.iShowSubDirectoryInfo = EFalse;
+    iSettings.iShowAssociatedIcons = EFalse;
+    iSettings.iRememberLastPath = EFalse;
+    iSettings.iLastPath = KNullDesC;
+    iSettings.iRememberFolderSelection = ETrue;
+//#if 0 // TODO
+//#if(!defined __SERIES60_30__ && !defined __SERIES60_31__ && !defined __S60_32__)
+//    if ( AknLayoutUtils::PenEnabled() )
+//        {
+//        iSettings.iEnableToolbar = ETrue;
+//        }
+//    else
+//        {
+//        iSettings.iEnableToolbar = EFalse;
+//        }
+//#else
+//    iSettings.iEnableToolbar = EFalse;
+//#endif
+//#endif // TODO
+
+    iSettings.iSupportNetworkDrives = EFalse;
+    iSettings.iBypassPlatformSecurity = EFalse;
+    iSettings.iRemoveFileLocks = ETrue;
+    iSettings.iIgnoreProtectionsAtts = ETrue;
+    iSettings.iRemoveROMWriteProrection = ETrue;
+
+    // build specific defaults
+#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
+    iSettings.iSupportNetworkDrives = ETrue;
+#endif 
+
+
+    // make sure that the private path of this app in c-drive exists
+    iEnv->FsSession().CreatePrivatePath( KSettingsDrive ); // c:\\private\\102828d6\\
+    
+    // handle settings always in the private directory 
+    if (iEnv->FsSession().SetSessionToPrivate( KSettingsDrive ) == KErrNone)
+        {
+        // open or create a dictionary file store
+        CDictionaryFileStore* settingsStore = CDictionaryFileStore::OpenLC(iEnv->FsSession(), KSettingsFileName, KUidFileBrowser);
+
+        LoadDFSValueL(settingsStore, KFBSettingDisplayMode,                 iSettings.iDisplayMode);
+        LoadDFSValueL(settingsStore, KFBSettingFileViewMode,                iSettings.iFileViewMode);
+        LoadDFSValueL(settingsStore, KFBSettingShowSubDirectoryInfo,        iSettings.iShowSubDirectoryInfo);
+        LoadDFSValueL(settingsStore, KFBSettingShowAssociatedIcons,         iSettings.iShowAssociatedIcons);
+        LoadDFSValueL(settingsStore, KFBSettingRememberLastPath,            iSettings.iRememberLastPath);
+        LoadDFSValueL(settingsStore, KFBSettingLastPath,                    iSettings.iLastPath);
+        LoadDFSValueL(settingsStore, KFBSettingFolderSelection,             iSettings.iRememberFolderSelection);
+        LoadDFSValueL(settingsStore, KFBSettingEnableToolbar,               iSettings.iEnableToolbar);
+
+        LoadDFSValueL(settingsStore, KFBSettingSupportNetworkDrives,        iSettings.iSupportNetworkDrives);
+        LoadDFSValueL(settingsStore, KFBSettingBypassPlatformSecurity,      iSettings.iBypassPlatformSecurity);
+        LoadDFSValueL(settingsStore, KFBSettingRemoveFileLocks,             iSettings.iRemoveFileLocks);
+        LoadDFSValueL(settingsStore, KFBSettingIgnoreProtectionsAtts,       iSettings.iIgnoreProtectionsAtts);
+        LoadDFSValueL(settingsStore, KFBSettingRemoveROMWriteProtection,    iSettings.iRemoveROMWriteProrection);
+
+        CleanupStack::PopAndDestroy(); // settingsStore         
+        }
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CEngine::SaveSettingsL(TBool aNotifyModules)
+    {
+    // handle settings always in c:\\private\\102828d6\\
+    if (iEnv->FsSession().SetSessionToPrivate( KSettingsDrive ) == KErrNone)
+        {
+        // delete existing store to make sure that it is clean and not eg corrupted
+        if (BaflUtils::FileExists(iEnv->FsSession(), KSettingsFileName))
+            {
+            iEnv->FsSession().Delete(KSettingsFileName);
+            }
+        
+        // create a dictionary file store
+        CDictionaryFileStore* settingsStore = CDictionaryFileStore::OpenLC(iEnv->FsSession(), KSettingsFileName, KUidFileBrowser);
+
+        SaveDFSValueL(settingsStore, KFBSettingDisplayMode,                 iSettings.iDisplayMode);
+        SaveDFSValueL(settingsStore, KFBSettingFileViewMode,                iSettings.iFileViewMode);
+        SaveDFSValueL(settingsStore, KFBSettingShowSubDirectoryInfo,        iSettings.iShowSubDirectoryInfo);
+        SaveDFSValueL(settingsStore, KFBSettingShowAssociatedIcons,         iSettings.iShowAssociatedIcons);
+        SaveDFSValueL(settingsStore, KFBSettingRememberLastPath,            iSettings.iRememberLastPath);
+        SaveDFSValueL(settingsStore, KFBSettingLastPath,                    iSettings.iLastPath);
+        SaveDFSValueL(settingsStore, KFBSettingFolderSelection,             iSettings.iRememberFolderSelection);
+        SaveDFSValueL(settingsStore, KFBSettingEnableToolbar,               iSettings.iEnableToolbar);
+
+        SaveDFSValueL(settingsStore, KFBSettingSupportNetworkDrives,        iSettings.iSupportNetworkDrives);
+        SaveDFSValueL(settingsStore, KFBSettingBypassPlatformSecurity,      iSettings.iBypassPlatformSecurity);
+        SaveDFSValueL(settingsStore, KFBSettingRemoveFileLocks,             iSettings.iRemoveFileLocks);
+        SaveDFSValueL(settingsStore, KFBSettingIgnoreProtectionsAtts,       iSettings.iIgnoreProtectionsAtts);
+        SaveDFSValueL(settingsStore, KFBSettingRemoveROMWriteProtection,    iSettings.iRemoveROMWriteProrection);
+        
+        settingsStore->CommitL();
+        CleanupStack::PopAndDestroy(); // settingsStore             
+        }
+
+    // update changes to modules
+    if (aNotifyModules)
+        {
+        //iScreenCapture->HandleSettingsChangeL();
+        if (iFileUtils != NULL) 
+			{
+			iFileUtils->HandleSettingsChangeL();
+			}
+        //iFileListContainer->HandleSettingsChangeL();
+        }
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TInt CEngine::LaunchSettingsDialogL()
+    {
+	TInt retValue = KErrNone;
+	// TODO:
+    // set to normal mode
+    //iFileListContainer->SetScreenLayoutL(EDisplayModeNormal);
+    //iFileListContainer->DeleteNaviPane();
+    //iFileListContainer->HideToolbar();
+    
+    // launch the dialog and save settings
+    //CFileBrowserSettingViewDlg* dlg = CFileBrowserSettingViewDlg::NewL(iSettings);
+    //TInt retValue = dlg->ExecuteLD(R_FILEBROWSER_SETTINGS_DIALOG);        
+    //FileListContainer()->CreateEmptyNaviPaneLabelL();
+    TRAP_IGNORE(SaveSettingsL());
+    return retValue;
+    }
+	
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CAsyncWaiter* CAsyncWaiter::NewL(TInt aPriority)
+	{
+	CAsyncWaiter* self = new(ELeave) CAsyncWaiter(aPriority);
+	return self;
+	}
+
+CAsyncWaiter* CAsyncWaiter::NewLC(TInt aPriority)
+	{
+	CAsyncWaiter* self = new(ELeave) CAsyncWaiter(aPriority);
+	CleanupStack::PushL(self);
+	return self;
+	}
+	
+CAsyncWaiter::CAsyncWaiter(TInt aPriority) : CActive(aPriority)
+	{
+	CActiveScheduler::Add(this);
+	}	
+
+CAsyncWaiter::~CAsyncWaiter()
+	{
+	Cancel();
+	}
+	
+void CAsyncWaiter::StartAndWait()
+	{
+        iStatus = KRequestPending;
+        SetActive();
+        iWait.Start();
+	}
+	
+TInt CAsyncWaiter::Result() const
+	{
+	return iError;
+	}
+	
+void CAsyncWaiter::RunL()
+	{
+	iError = iStatus.Int();
+	//CAknEnv::StopSchedulerWaitWithBusyMessage( iWait );
+	iWait.AsyncStop();
+	}
+	
+void CAsyncWaiter::DoCancel()
+	{
+	iError = KErrCancel;
+    if( iStatus == KRequestPending )
+        {
+        TRequestStatus* s=&iStatus;
+        User::RequestComplete( s, KErrCancel );
+        }
+
+        //CAknEnv::StopSchedulerWaitWithBusyMessage( iWait );
+	iWait.AsyncStop();
+	}
+
+// --------------------------------------------------------------------------------------------
+
+void CEngine::OpenWithApparcL(TFileName aFileName)
+        {
+	if (iFileUtils != NULL) 
+		{
+		iFileUtils->OpenWithApparcL(aFileName);
+		}
+	}
+
+// --------------------------------------------------------------------------------------------
+
+void CEngine::OpenWithDocHandlerL(TFileName aFileName, TBool aEmbed)
+        {
+	if (iFileUtils != NULL) 
+		{
+		iFileUtils->OpenWithDocHandlerL(aFileName, aEmbed);
+		}
+	}
+
+// --------------------------------------------------------------------------------------------
+
+//TInt CEngine::QueryCurrentItemIndex()
+//	{
+//        return iFileBrowserUI->QueryCurrentItemIndex();
+//	}
+
+// --------------------------------------------------------------------------------------------	
+
+TSearchAttributes CEngine::GetSearchAttributes()
+	{
+	if (iFileUtils != NULL) 
+		{
+		return iFileUtils->GetSearchAttributes();
+		} 
+	else
+		{
+		return TSearchAttributes(); 
+		}
+	}
+
+// --------------------------------------------------------------------------------------------	
+
+void CEngine::ChangeAttributes(TSearchAttributes attributes) 
+	{ 
+	if (iFileUtils != NULL) 
+		{
+		iFileUtils->ChangeAttributes(attributes); 
+		}
+	}
+
+// --------------------------------------------------------------------------------------------	
+
+TSearchResults CEngine::SearchResults() 
+	{ 
+	if (iFileUtils != NULL) 
+		{
+		return iFileUtils->SearchResults(); 
+		}
+	else
+		{
+		return TSearchResults();
+		}
+	}
+
+// --------------------------------------------------------------------------------------------	
+
+CFileEntryList* CEngine::FoundFiles() 
+	{ 
+	if (iFileUtils != NULL) 
+		{
+		return iFileUtils->FoundFiles(); 
+		}
+	else 
+		{
+		return NULL;
+		}
+	}
+	
+// --------------------------------------------------------------------------------------------	
+
+void CEngine::SearchL() 
+	{ 
+	if (iFileUtils != NULL) 
+		{
+		TRAP_IGNORE(iFileUtils->SearchL()); 
+		}
+	}
+	
+// --------------------------------------------------------------------------------------------	
+	
+// End of File