browserplugin/cpixnpplugin/src/ccpixnpplugin.cpp
changeset 0 ccd0fd43f247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugin/cpixnpplugin/src/ccpixnpplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
@@ -0,0 +1,412 @@
+/*
+* 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:  CCPixNPPlugin implementation
+*
+*/
+
+#include <fbs.h>        // CFbsBitmap
+#include <bitdev.h>     // CFbsBitmapDevice
+#include <bitstd.h>     // CFbsBitGc
+#include <coemain.h>    // CCoeEnv
+
+#include <smsclnt.h> // SMS Headers
+#include <EIKENV.H>
+#include <eikappui.h>
+//@TODO: CPbkViewState not available in TB10.1 so removed
+//#include <cpbkviewstate.h>
+//#include <Pbk2ViewId.hrh>
+
+//@TODO: Not supported in TB10.1
+//#include <calenlauncher.h> // Calendar launching
+#include "mnproviderfinder.h"
+#include "mnmapview.h"
+
+#include "CCPixNPPlugin.h"
+#include "CCPixNPPluginEcom.h"
+#include "CCPixNPSearcher.h"
+
+#include "indevicecfg.h"
+#include "MsvUI.h"
+
+#include <APGCLI.H>
+#include <APGTASK.H> //TApaTaskList
+#include <W32STD.H>  //RWsSession
+//UID of PinbMdl
+const TInt KUidApaMessagePinboardValue(0x1000590C);
+//UID of NotepadApp
+const TInt KUidApaNotePad(0x10005907);
+//
+const TInt KNotePadIdMaxLength(10);
+
+_LIT( KCPixDocUidFieldName, CPIX_DOCUID_FIELD );
+_LIT( KCPixAppClassFieldName, CPIX_APPCLASS_FIELD );
+_LIT( KCPixExcerptFieldName, CPIX_EXCERPT_FIELD );
+_LIT( KCPixMimeTypeFieldName, CPIX_MIMETYPE_FIELD );
+_LIT( KCPixAggregateFieldName, CPIX_DEFAULT_FIELD );
+_LIT( KCPixDefaultFieldName, CPIX_DEFAULT_FIELD );
+_LIT( KCPixTermTextFieldName, TERM_TEXT_FIELD );
+_LIT( KCPixTermDocFreqFieldName, TERM_DOCFREQ_FIELD );
+
+_LIT( KCPixStandardAnalyzerId, 		"" CPIX_ANALYZER_STANDARD );
+
+_LIT( KCPixStandardTokenizerId, 	"" CPIX_TOKENIZER_STANDARD );
+_LIT( KCPixWhitespaceTokenizerId,  	"" CPIX_TOKENIZER_WHITESPACE );
+_LIT( KCPixLetterTokenizerId, 		"" CPIX_TOKENIZER_LETTER );
+_LIT( KCPixKeywordTokenizerId, 		"" CPIX_TOKENIZER_KEYWORD );
+
+_LIT( KCPixStandardFilterId, 		"" CPIX_FILTER_STANDARD );
+_LIT( KCPixLowercaseFilterId, 		"" CPIX_FILTER_LOWERCASE );
+_LIT( KCPixAccentFilterId, 			"" CPIX_FILTER_ACCENT );
+_LIT( KCPixStopFilterId, 			"" CPIX_FILTER_STOP );
+_LIT( KCPixStemFilterId, 			"" CPIX_FILTER_STEM );
+_LIT( KCPixLengthFilterId, 			"" CPIX_FILTER_LENGTH );
+
+_LIT( KCPixEnglishLanguageId, 		"" CPIX_WLANG_EN );
+_LIT( KCPixFinnishLanguageId, 		"" CPIX_WLANG_FI );
+_LIT( KCPixHungarianLanguageId, 	"" CPIX_WLANG_HU );
+_LIT( KCPixRussianLanguageId, 		"" CPIX_WLANG_RU );
+
+// Version number. This should be updated to current svn revision number
+const TInt KVersionNumber = 1339;
+
+CCPixNPPlugin::CCPixNPPlugin()
+	{
+	}
+
+CCPixNPPlugin::~CCPixNPPlugin()
+	{
+    iFs.Close();
+	iSearchServer.Close();
+	
+	iMnProviders.ResetAndDestroy();
+	iMnProviders.Close();
+	delete iMapView;
+	
+	delete iMsvUI;
+	}
+
+CCPixNPPlugin* CCPixNPPlugin::NewLC()
+	{
+	CCPixNPPlugin* self = new (ELeave)CCPixNPPlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CCPixNPPlugin* CCPixNPPlugin::NewL()
+	{
+	CCPixNPPlugin* self = CCPixNPPlugin::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+void CCPixNPPlugin::ConstructL()
+	{
+	InitInterfaceL();
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError( iSearchServer.Connect() );
+	iMsvUI = new (ELeave) CMsvUI();
+	}
+
+//
+// Exposed functions
+//
+
+const TDesC& CCPixNPPlugin::DocUidFieldName() const
+	{
+	return KCPixDocUidFieldName();  
+	}
+
+const TDesC& CCPixNPPlugin::AppClassFieldName() const
+	{
+	return KCPixAppClassFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::ExcerptFieldName() const
+	{
+	return KCPixExcerptFieldName(); 
+	}
+
+ const TDesC& CCPixNPPlugin::MimeTypeFieldName() const
+	{
+	return KCPixMimeTypeFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::AggregateFieldName() const
+	{
+	return KCPixAggregateFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::DefaultFieldName() const
+	{
+	return KCPixDefaultFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::TermTextFieldName() const
+	{
+	return KCPixTermTextFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::TermDocFreqFieldName() const
+	{
+	return KCPixTermDocFreqFieldName(); 
+	}
+
+const TDesC& CCPixNPPlugin::StandardAnalyzerId() const
+	{
+	return KCPixStandardAnalyzerId();
+	}
+
+const TDesC& CCPixNPPlugin::StandardTokenizerId() const
+	{
+	return KCPixStandardTokenizerId();
+	}
+
+const TDesC& CCPixNPPlugin::WhitespaceTokenizerId() const
+	{
+	return KCPixWhitespaceTokenizerId();
+	}
+
+const TDesC& CCPixNPPlugin::LetterTokenizerId() const
+	{
+	return KCPixLetterTokenizerId();
+	}
+
+const TDesC& CCPixNPPlugin::KeywordTokenizerId() const
+	{
+	return KCPixKeywordTokenizerId();
+	}
+
+const TDesC& CCPixNPPlugin::StandardFilterId() const
+	{
+	return KCPixStandardFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::LowercaseFilterId() const
+	{
+	return KCPixLowercaseFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::AccentFilterId() const
+	{
+	return KCPixAccentFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::StopFilterId() const	
+	{
+	return KCPixStopFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::StemFilterId() const
+	{
+	return KCPixStemFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::LengthFilterId() const
+	{
+	return KCPixLengthFilterId();
+	}
+
+const TDesC& CCPixNPPlugin::EnglishLanguageId() const
+	{
+	return KCPixEnglishLanguageId(); 
+	}
+
+const TDesC& CCPixNPPlugin::FinnishLanguageId() const
+	{
+	return KCPixFinnishLanguageId(); 
+	}
+
+const TDesC& CCPixNPPlugin::HungarianLanguageId() const
+	{
+	return KCPixHungarianLanguageId(); 
+	}
+
+const TDesC& CCPixNPPlugin::RussianLanguageId() const
+	{
+	return KCPixRussianLanguageId(); 
+	}
+
+CCPixNPSearcher* CCPixNPPlugin::CreateSearcherL( const TDesC& aDomainSelector, const TDesC& aDefaultSearchField ) const
+	{
+	return CCPixNPSearcher::NewL( aDomainSelector, aDefaultSearchField );
+	}
+
+CCPixNPSearcher* CCPixNPPlugin::CreateSearcherL( const TDesC& aDomainSelector ) const
+	{
+	return CCPixNPSearcher::NewL( aDomainSelector );
+	}
+
+void CCPixNPPlugin::DefineVolumeL( const TDesC& aQualifiedBaseAppClass, const TDesC& aIndexDbPath )
+	{
+	User::LeaveIfError(iSearchServer.DefineVolume( aQualifiedBaseAppClass, aIndexDbPath ));
+	}
+
+void CCPixNPPlugin::UnDefineVolumeL( const TDesC& aQualifiedBaseAppClass )
+	{
+	User::LeaveIfError(iSearchServer.UnDefineVolume( aQualifiedBaseAppClass ));
+	}
+
+
+void CCPixNPPlugin::OpenContactL( TInt aContactId )
+	{
+	//@TODO: Contact can not belaunched by this API in TB10.1
+	/*	
+	CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
+	pbkViewParam->SetFocusedContactId(aContactId);
+	 
+	// Package and return object in a buffer.
+	HBufC8* paramBuf = pbkViewParam->PackLC();
+	 
+	// Uid for Contacts application
+	const TUid appUid = {0x101f4cce};
+	// Messaging: 0x100058C5
+	 
+	// Activate the view
+	// 3 is the Contact Group Info View's ID
+	CEikonEnv::Static()->EikAppUi()->ActivateViewL(TVwsViewId(appUid, TUid::Uid(EPbk2ContactInfoViewId)), CPbkViewState::Uid(), *paramBuf);
+	 
+	// Cleanup
+	CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewParam	
+	*/
+	}
+
+
+void CCPixNPPlugin::OpenMessagingL( TInt aMessagingId )
+	{
+	iMsvUI->OpenEntryL(TUid::Uid(aMessagingId));
+	}
+
+void CCPixNPPlugin::OpenCalendarL( TInt aCalId )
+	{
+	//@TODO: Not supported in TB10.1
+	//CalenLauncher::ViewEntryL(aCalId);
+	}
+
+void CCPixNPPlugin::OpenMapsL( TReal aLatitude, TReal aLongitude )
+    {
+    const TReal KMapRadius = 500; // Radius in meters
+    
+    if ( !iMapView )
+        {
+        iMnProviders.ResetAndDestroy();
+        MnProviderFinder::FindProvidersL( iMnProviders, CMnProvider::EServiceMapView );
+
+        if ( iMnProviders.Count() > 0 )
+            {
+            iMapView = CMnMapView::NewL( *iMnProviders[0] );
+            iMapView->SetExitObserverL(*this);
+            }
+        }
+
+    TCoordinate coord(aLatitude, aLongitude);
+    
+    iMapView->ResetMapArea();
+    iMapView->SetMapAreaL( coord, KMapRadius );
+    iMapView->ShowMapL();
+    }
+
+TInt CCPixNPPlugin::GetVersionNumber() const
+    {
+    return KVersionNumber;
+    }
+
+void CCPixNPPlugin::HandleServerAppExit(TInt /*aReadon*/)
+    {
+    // Maps application close. We can't use maps handle anymore.
+    delete iMapView;
+    iMapView = 0;
+    }
+
+//Added to launch Notes from Widget
+void CCPixNPPlugin::OpenNoteL( const TInt aNoteId)
+    {
+    RWsSession wssession;
+    User::LeaveIfError( wssession.Connect() );
+    CleanupClosePushL( wssession );
+    TBuf8<KNotePadIdMaxLength> notesId;
+    notesId.AppendNum(aNoteId);
+    
+    //Get the tasklist from the Window server session
+    TApaTaskList taskList( wssession );
+    //Find the task related to NotePad app
+    TApaTask task = taskList.FindApp( TUid::Uid( KUidApaNotePad ) );
+
+    if ( task.Exists() )
+        {
+        // NotePad app is running
+        //Send a message to Notepad app with PinBoard UID as
+        //NotePad is handling the message only if it get Pinboard Uid
+        User::LeaveIfError( task.SendMessage( TUid::Uid( KUidApaMessagePinboardValue ), 
+                notesId ) );
+        //Bring the Notepad to Foreground
+        task.BringToForeground();
+        }
+    else
+        { // NotePad app not yet running
+        RApaLsSession appArcSession;
+        CleanupClosePushL( appArcSession );
+        User::LeaveIfError( appArcSession.Connect() );      
+        TApaAppInfo appInfo;
+        const TInt err = appArcSession.GetAppInfo( appInfo, 
+                                        TUid::Uid( KUidApaNotePad ) );
+        if( err == KErrNone )
+            {
+            CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+            cmdLine->SetExecutableNameL( appInfo.iFullName );
+            cmdLine->SetCommandL( EApaCommandRun );
+            //Send the Note Id as the tail
+            cmdLine->SetTailEndL( notesId );
+
+            User::LeaveIfError( appArcSession.StartApp( *cmdLine ) );
+            CleanupStack::PopAndDestroy( cmdLine );
+            }
+        CleanupStack::PopAndDestroy( &appArcSession ); 
+        } 
+    CleanupStack::PopAndDestroy( &wssession );
+    }
+
+void CCPixNPPlugin::GetDriveFromMediaIdL(HBufC* aMediaId,TDes& aDrive)
+    {
+    TUint32 mediaId;
+    TBuf<14> bufMedia;
+    bufMedia.Copy(*aMediaId);
+    TUint mediaNum;
+    TLex lex(bufMedia);
+    lex.Val(mediaNum);
+    TDriveNumber drive = TDriveNumber(KErrNotSupported);//Initialize to not supported first
+    TVolumeInfo volumeInfo;
+    TChar driveLetter;
+    for(TInt i=0;i<=EDriveZ;i++)
+       {
+       TInt err= iFs.Volume(volumeInfo,i);
+        if (err!=KErrNotReady) 
+            // Volume() returns KErrNotReady if no volume present.
+            // In this case, check next drive number
+            {
+            if(volumeInfo.iUniqueID == mediaNum)
+                {
+                drive = TDriveNumber(i);//Is the drive
+                User::LeaveIfError(iFs.DriveToChar(drive,driveLetter));
+                break;
+                }
+            }
+       }
+    aDrive.Append(driveLetter);
+    aDrive.Append(_L(":"));
+    //Convert to Int and get the drive
+    
+    }
+//  End of File
+