searchfw/plugins/filesplugin/src/filessearchplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 21:17:03 +0300
branchRCL_3
changeset 31 97232defd20e
parent 0 f979ecb2b13e
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:   Plugin for file names search 
*
*/




#include <e32cmn.h>
#include <e32def.h>
#include <data_caging_path_literals.hrh>
#include <utf.h>
#include <apgcli.h>
#include <aknnotewrappers.h>
#include <bautils.h>
#include <searchiconinfo.h>
#include <searchdocumentid.h>
#include <filessearchplugin.mbg>
#include <filessearchresource.rsg>
#include <bautils.h>

#include "filessearchplugindefines.h"
#include "filessearchplugin.h"

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::NewL() 
// 1st phase constructor
// ---------------------------------------------------------------------------------
//
CFilesSearchPlugin* CFilesSearchPlugin::NewL()
    {  
	CFilesSearchPlugin* self = new ( ELeave ) CFilesSearchPlugin();
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::~CFilesSearchPlugin() 
// destructor
// ---------------------------------------------------------------------------------
//
CFilesSearchPlugin::~CFilesSearchPlugin() 
    {
	if ( iCaption ) 
    	{
		delete iCaption;
		iCaption = NULL;
    	}
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::ContentSearcherL() 
// Creates a content searcher and ownership is transfered to calling function
// ---------------------------------------------------------------------------------
//
MSearchContentSearcher* CFilesSearchPlugin::ContentSearcherL(
  const RArray<TUid>& aContentIdArray, const CSearchCondition& aCondition ,
  MSearchPluginObserver& aObserver)
                                           	
    {

	 for ( TInt j = 0; j < aContentIdArray.Count(); j++ ) 
         {
	     //  create the filesearcher   
	     if ( ( aContentIdArray[j].iUid == KSearchCClassFilenamesUid.iUid ) )
	         {	
                  iFileSearcher = CFilesSearcher::NewL( 
                      aContentIdArray, aCondition, PluginId(),aObserver ); 
                  return iFileSearcher;								
             }
    	 }
	 return NULL;	
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::GetSupportedContentL() 
// Gets supported contents
// ---------------------------------------------------------------------------------
//
void CFilesSearchPlugin::GetSupportedContentL( 
			RPointerArray<CSearchContent>& aContent ) 
    {
	CSearchContent* content = NULL;
	CSearchIconInfo* icon = NULL;
	
	content = CSearchContent::NewL( CSearchContent::ETypeContentClass );

	CleanupStack::PushL( content );
	content->SetContentId( KSearchCClassFilenamesUid );
	content->SetSubContentId( 0 );
	content->SetPluginId( this->PluginId() );
    
	_LIT( KFilesMifFileName, "filessearchplugin.mif" );   
    
    //Read mif file from
    TPtrC driveLetter = TParsePtrC( RProcess().FileName() ).Drive();
	TFileName mifFileName( driveLetter );
	mifFileName.Append( KDC_APP_BITMAP_DIR );
	mifFileName.Append( KFilesMifFileName );
	
	//Set Icon information
	icon = CSearchIconInfo::NewL();
	CleanupStack::PushL( icon );
	icon->SetSkinId( KAknsIIDQgnPropFmgrFileApps );
	icon->SetIconFileL( mifFileName );
	icon->SetIconIndex( EMbmFilessearchpluginQgn_prop_search_file_names );
	icon->SetIconMaskIndex( EMbmFilessearchpluginQgn_prop_search_file_names_mask );
	CleanupStack::Pop( icon );
	
	content->SetIconInfo( icon );
	
	//Setting the caption
	content->SetCaptionL( *iCaption );
		
    aContent.AppendL( content );
    CleanupStack::Pop( content );    		
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::IsSupportedContent() 
// Returns if the given content is supported or not
// ---------------------------------------------------------------------------------
//
TBool CFilesSearchPlugin::IsSupportedContent( TUid aContentId )
    {
	if ( KSearchCClassFilenamesUid.iUid == aContentId.iUid ) 
	    {
		     return ETrue;
     	}
	
	return EFalse;
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::LaunchApplicationL() 
// Launches the application corresponding to document id
// ---------------------------------------------------------------------------------
//
void CFilesSearchPlugin::LaunchApplicationL(const TDesC8& aLaunchInfo)
    {
	    RFs fs;
	    User::LeaveIfError( fs.Connect() );
	    TEntry fileEntry;
	    
	         HBufC *path16 = HBufC::NewL(KMaxFileName) ;
             TPtr docIdPtr = path16->Des();
             CnvUtfConverter::ConvertToUnicodeFromUtf8( docIdPtr,aLaunchInfo) ;
		     
	        
	    fs.Entry( *path16, fileEntry );
        TBool testPath = BaflUtils::FileExists( fs, *path16 );
        fs.Close();
        if ( !testPath ) 
        	{
        	User::Leave( KErrNotFound );
        	}
	    if ( !( fileEntry.IsDir() ) /*&& testPath */ ) 
	         {
		 
		     RApaLsSession session;
		     if(session.Connect() != KErrNone)
		     {
		     	  return;
		     }	

		     // Gets the UID of the application that can handle MIME 
		     //type for the given file name.
		     TUid uid;
		     TDataType dataType;
		     //TInt err = session.AppForDocument( pathPtr, uid, dataType );
	
	         TInt err = session.AppForDocument( *path16, uid, dataType );
		     // Runs the default application using the MIME type, dataType.
		     // You can also use the UID to run the application. 
		     // If the Type is unrecognized dont do anything
		     if ( !uid.iUid ) 
		     	{
		     	User::LeaveIfError( KErrNotSupported );
		     	}
		     if ( KErrNone == err && uid.iUid ) 
		          {
			      TThreadId threadId;
			      TInt err = session.StartDocument( *path16, dataType, 
			        	threadId );
			      if ( KErrNone != err ) 
			      	  {
			      	  User::LeaveIfError( err );
			      	  }
			      
		          }
	
		     session.Close();
	         }
	   //  CleanupStack::PopAndDestroy( path16 );	
            }
   
// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::CFilesSearchPlugin() 
// constructor
// ---------------------------------------------------------------------------------
//
CFilesSearchPlugin::CFilesSearchPlugin()  
    {
	
    }

// ---------------------------------------------------------------------------------
// CFilesSearchPlugin::ConstructL() 
// 2nd phase constructor
// ---------------------------------------------------------------------------------
//
void CFilesSearchPlugin::ConstructL() 
    {
    RResourceFile resourceFile;    	
    HBufC* resourceFileName = HBufC::NewL( KMaxFileName );
    TPtr resourceFileNamePtr = resourceFileName->Des();
    
    TPtrC driveLetter = TParsePtrC( RProcess().FileName() ).Drive();
    RFs fsSession;
    User::LeaveIfError( fsSession.Connect() ); 
    //Read resource file from ecom resource dir
    resourceFileNamePtr.Copy( driveLetter );  
    resourceFileNamePtr.Append( KDC_ECOM_RESOURCE_DIR );
    resourceFileNamePtr.Append( KResoureFileName );
    
    CleanupClosePushL( resourceFile );
    TFileName fileName = resourceFileName->Des();
    BaflUtils::NearestLanguageFile( fsSession,fileName );
    resourceFile.OpenL( fsSession, fileName );
  	resourceFile.ConfirmSignatureL(0);
  	
  	HBufC8* readBuffer = resourceFile.AllocReadLC( R_QGN_SEARCH_TYPES_FILES );
	
	const TPtrC16 ptrReadBuffer( ( TText16* ) readBuffer->Ptr(),
								( readBuffer->Length()+1 )>>1 );		
								
	iCaption = ptrReadBuffer.AllocL();

	CleanupStack::PopAndDestroy( readBuffer );
	
	CleanupStack::Pop( );
	resourceFile.Close();
	delete resourceFileName;
	resourceFileName = NULL;
	fsSession.Close();
    }