--- /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
+