# HG changeset patch # User hgs # Date 1277703195 -19800 # Node ID 4a2987baf8f76857cd09d46efb057ae707510b1c # Parent 2f67eb14d00307c1d9d477f0b4f38a77fbfcb75f 201025 diff -r 2f67eb14d003 -r 4a2987baf8f7 browserplugin/cpixnpplugin/group/cpixnpplugin.mmp --- a/browserplugin/cpixnpplugin/group/cpixnpplugin.mmp Wed Jun 23 17:22:18 2010 +0100 +++ b/browserplugin/cpixnpplugin/group/cpixnpplugin.mmp Mon Jun 28 11:03:15 2010 +0530 @@ -38,8 +38,6 @@ APP_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/libc SYSTEMINCLUDE /epoc32/include/ecom -SYSTEMINCLUDE /epoc32/include/CPixSearch -//SYSTEMINCLUDE /epoc32/include/domain/middleware USERINCLUDE ../inc USERINCLUDE ../inc/idl diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/applications/src/applicationsplugin.cpp --- a/harvesterplugins/applications/src/applicationsplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/applications/src/applicationsplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -135,7 +135,7 @@ OstTraceExt1( TRACE_NORMAL, CAPPLICATIONSPLUGIN_ADDWIDGETINFOL, "CApplicationsPlugin::AddWidgetInfoL;PATH=%S", &temp ); //GetWidgetPropertyValueL returns CWidgetPropertyValue* which in turn has an operator to convert to TDesC - aDocument->AddFieldL(KApplicationFieldCaption, *(iWidgetRegistry.GetWidgetPropertyValueL( aUid, EBundleDisplayName )), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); + aDocument->AddFieldL(KApplicationFieldCaption, *(iWidgetRegistry.GetWidgetPropertyValueL( aUid, EBundleDisplayName )), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); //For applications, no content to go into exceprt field. //For more info, check the appclass-hierarchy.txt @@ -157,7 +157,7 @@ //We index the exe name (without extension), only if the title is not present. if( aAppInfo.iShortCaption.Compare(KNullDesC) ) { - aDocument->AddFieldL(KApplicationFieldCaption, aAppInfo.iShortCaption, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); + aDocument->AddFieldL(KApplicationFieldCaption, aAppInfo.iShortCaption, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); } else { diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/bookmarks/src/bookmarksplugin.cpp --- a/harvesterplugins/bookmarks/src/bookmarksplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/bookmarks/src/bookmarksplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -69,7 +69,8 @@ { if (iAsynchronizer) iAsynchronizer->CancelCallback(); - iFavoritesNotifier->Cancel(); + if ( iFavoritesNotifier ) + iFavoritesNotifier->Cancel(); delete iFavoritesNotifier; delete iAsynchronizer; delete iIndexer; diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/calendar/inc/ccalendarplugin.h --- a/harvesterplugins/calendar/inc/ccalendarplugin.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/calendar/inc/ccalendarplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -40,7 +40,12 @@ _LIT(KCalendarLocationField, "Location"); _LIT(KCalendarStartTimeField, "StartTime"); _LIT(KCalendarEndTimeField, "EndTime"); +_LIT(KCalenderCompletedField, "CompletedDate"); _LIT(KCalendarAttendeesField, "Attendees"); +_LIT(KCalendarPriorityField, "Priority"); +_LIT(KCalendarPriorityHigh, "High"); +_LIT(KCalendarPriorityMedium, "Normal"); +_LIT(KCalendarPriorityLow, "Low"); class CCalendarPlugin : public CIndexingPlugin, public MDelayedCallbackObserver, public MCalProgressCallBack, public MCalChangeCallBack2 { diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/calendar/src/ccalendarplugin.cpp --- a/harvesterplugins/calendar/src/ccalendarplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/calendar/src/ccalendarplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -40,9 +40,7 @@ /** The delay between harvesting chunks. */ const TInt KHarvestingDelay = 2000; - -_LIT(KCalendarTimeFormat,"%F%/0%Y %M %D %H%T"); // Locale independent YYYYMMDDHHSS - +_LIT(KCalendarTimeFormat,"%04d %02d %02d %02d %02d"); // --------------------------------------------------------------------------- // CMessagePlugin::NewL // --------------------------------------------------------------------------- @@ -352,6 +350,7 @@ { if (!iIndexer) return; + OstTrace1( TRACE_NORMAL, CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL();Uid=%d", aLocalUid ); CPIXLOGSTRING2("CCalendarPlugin::CreateEntryL(): Uid = %d.", aLocalUid); @@ -387,17 +386,53 @@ index_item->AddFieldL(KCalendarSummaryField, entry->SummaryL()); index_item->AddFieldL(KCalendarDescriptionField, entry->DescriptionL()); index_item->AddFieldL(KCalendarLocationField, entry->LocationL()); + + TUint priority = entry->PriorityL(); + + switch(priority) + { + case 1: + index_item->AddFieldL(KCalendarPriorityField, KCalendarPriorityHigh); + break; + case 2: + index_item->AddFieldL(KCalendarPriorityField, KCalendarPriorityMedium); + break; + case 3: + index_item->AddFieldL(KCalendarPriorityField, KCalendarPriorityLow); + break; + default: + index_item->AddFieldL(KCalendarPriorityField, KNullDesC); + break; + } TBuf<30> dateString; - - TTime startTime = entry->StartTimeL().TimeUtcL(); - startTime.FormatL(dateString, KCalendarTimeFormat); + TDateTime datetime = entry->StartTimeL().TimeUtcL().DateTime(); + dateString.Format( KCalendarTimeFormat, datetime.Year(), + TInt(datetime.Month()+ 1), + datetime.Day() + 1, + datetime.Hour()+ 1, + datetime.Minute()); index_item->AddFieldL(KCalendarStartTimeField, dateString, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); - TTime endTime = entry->EndTimeL().TimeUtcL(); - endTime.FormatL(dateString, KCalendarTimeFormat); + TDateTime endTime = entry->EndTimeL().TimeUtcL().DateTime(); + dateString.Format( KCalendarTimeFormat, endTime.Year(), + TInt(endTime.Month()+ 1), + endTime.Day() + 1, + endTime.Hour()+ 1, + endTime.Minute()); index_item->AddFieldL(KCalendarEndTimeField, dateString, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); - + + TTime completedTime = entry->CompletedTimeL().TimeUtcL(); + if( completedTime != Time::NullTTime() && CCalEntry::ETodo == entry->EntryTypeL()) + { + TDateTime compTime = completedTime.DateTime(); + dateString.Format( KCalendarTimeFormat, compTime.Year(), + TInt(compTime.Month()+ 1), + compTime.Day() + 1, + compTime.Hour()+ 1, + compTime.Minute()); + index_item->AddFieldL(KCalenderCompletedField, dateString, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + } index_item->AddFieldL(KMimeTypeField, KMimeTypeCalendar, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); TInt excerptLength = 1 /*single 1-character delimiters*/ + entry->DescriptionL().Length() + entry->LocationL().Length(); diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/contacts/inc/ccontactsplugin.h --- a/harvesterplugins/contacts/inc/ccontactsplugin.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/contacts/inc/ccontactsplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -142,6 +142,11 @@ // CPix database CCPixIndexer* iIndexer; +//for helping with testing. +#ifdef HARVESTERPLUGINTESTER_FRIEND + friend class CHarvesterPluginTester; +#endif + #ifdef __PERFORMANCE_DATA TTime iStartTime; TTime iCompleteTime; diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/contacts/src/ccontactsplugin.cpp --- a/harvesterplugins/contacts/src/ccontactsplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/contacts/src/ccontactsplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -78,16 +78,15 @@ // CContactsPlugin::~CContactsPlugin() { - if (iAsynchronizer) - iAsynchronizer->CancelCallback(); + if( iAsynchronizer ) iAsynchronizer->CancelCallback(); delete iAsynchronizer; iContacts = NULL; delete iChangeNotifier; delete iDatabase; delete iIndexer; - - if (iExcerpt) - delete iExcerpt; + //delete NULL is safe - so no need to test nullity of iExceprt (which routinely + //keeps getting deleted in the plugin). + delete iExcerpt; } // ----------------------------------------------------------------------------- @@ -151,6 +150,7 @@ { case EContactDbObserverEventContactChanged: case EContactDbObserverEventGroupChanged: + case EContactDbObserverEventOwnCardChanged: OstTrace1( TRACE_NORMAL, DUP3_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL, "CContactsPlugin::HandleDatabaseEventL;Monitored update id=%d", aEvent.iContactId ); CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Monitored update id=%d.", aEvent.iContactId); #ifdef __PERFORMANCE_DATA @@ -164,6 +164,7 @@ case EContactDbObserverEventContactDeleted: case EContactDbObserverEventGroupDeleted: + case EContactDbObserverEventOwnCardDeleted: OstTrace1( TRACE_NORMAL, CCONTACTSPLUGIN_HANDLEDATABASEEVENTL, "CContactsPlugin::HandleDatabaseEventL();Monitored delete id=%d", aEvent.iContactId ); CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Monitored delete id=%d.", aEvent.iContactId); #ifdef __PERFORMANCE_DATA @@ -340,6 +341,8 @@ // void CContactsPlugin::CreateContactIndexItemL(TInt aContentId, TCPixActionType aActionType ) { + //indexer is created only when StartPlugin() is called. Don't create contact + //if index is not ready. if (!iIndexer) return; @@ -481,8 +484,9 @@ void CContactsPlugin::GetDateL(const TDesC& aTime, TDes& aDateString) { TTime time; - //sort the date string to the requried format dd/mm/yyyy from returned - //format yyyy/mm/dd as parse API is currently not supporting japanese date format + //aTime is of the form yyyy-mm-dd. + //aDateString is of the form dd Month(spelled out) Year. + //example: i/p: 2010-10-10; o/p: 10 October 2010. if( aTime.Length() >= KDateFieldLength) { aDateString.Copy(aTime.Mid( KDayPosition, KDayLength )); @@ -497,6 +501,7 @@ } } } + // --------------------------------------------------------------------------- // CContactsPlugin::UpdatePerformaceDataL // --------------------------------------------------------------------------- diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/file/src/cfileplugin.cpp --- a/harvesterplugins/file/src/cfileplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/file/src/cfileplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -630,7 +630,8 @@ if (pos > 0) { fileFoldername.Copy(aFilePath.Mid(pos+1)); - index_item->AddFieldL(KNameField, fileFoldername); + index_item->AddFieldL(KNameField, fileFoldername, + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText ); } //check for the extension, for folders names store the extension field as NULL @@ -640,7 +641,7 @@ if( file.ExtPresent()) { TPtrC extension = file.Ext(); - index_item->AddFieldL(KExtensionField, extension); + index_item->AddFieldL(KExtensionField, extension, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); } index_item->AddFieldL(KMimeTypeField, KMimeTypeFile, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); } diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/group/bld.inf --- a/harvesterplugins/group/bld.inf Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/group/bld.inf Mon Jun 28 11:03:15 2010 +0530 @@ -18,7 +18,7 @@ #include "../messaging/group/bld.inf" #include "../file/group/bld.inf" #include "../calendar/group/bld.inf" -#include "../bookmarks/group/bld.inf" +//#include "../bookmarks/group/bld.inf" #include "../applications/group/bld.inf" #include "../notes/group/bld.inf" #include "../media/group/bld.inf" diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp --- a/harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -29,7 +29,8 @@ #include "cpixmediaaudiodocTraces.h" #endif - +_LIT( KFormatDateTime, "%04d %02d %02d %02d %02d"); // yyyy mm dd hh mm +_LIT( KExcerptFormat, "%04d/%02d/%02d %02d:%02d"); // ----------------------------------------------------------------------------- // CCPIXDocFetcher::NewL() // ----------------------------------------------------------------------------- @@ -101,56 +102,243 @@ //additional properties here CMdEProperty* property(NULL); CMdEPropertyDef& artistPropDef1 = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KArtistProperty ); - if(aObject.Property( artistPropDef1, property ) != KErrNotFound) - { - //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; - AddFiledtoDocumentL(*index_item, - MdeConstants::MediaObject::KArtistProperty, - textProperty->Value()); - AddToFieldExcerptL(textProperty->Value());//Add artist to excerpt - } + if(aObject.Property( artistPropDef1, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KArtistProperty, + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); + AddToFieldExcerptL(textProperty->Value());//Add artist to excerpt + } CMdEPropertyDef& albumPropDef = aObjectDef.GetPropertyDefL(MdeConstants::Audio::KAlbumProperty ); if(aObject.Property( albumPropDef, property )!= KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property); AddFiledtoDocumentL(*index_item, MdeConstants::Audio::KAlbumProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); AddToFieldExcerptL(textProperty->Value());//Add Album to excerpt } + CMdEPropertyDef& artistPropDef = aObjectDef.GetPropertyDefL(MdeConstants::Audio::KAlbumArtistProperty ); if(aObject.Property( artistPropDef, property ) != KErrNotFound) - { - //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; - AddFiledtoDocumentL(*index_item, - MdeConstants::Audio::KAlbumArtistProperty, - textProperty->Value()); - AddToFieldExcerptL(textProperty->Value());//Add Albumartist to excerpt - } + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::Audio::KAlbumArtistProperty, + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); + AddToFieldExcerptL(textProperty->Value());//Add Albumartist to excerpt + } + //orginal artist property CMdEPropertyDef& origartistPropDef = aObjectDef.GetPropertyDefL(MdeConstants::Audio::KOriginalArtistProperty ); if(aObject.Property( origartistPropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::Audio::KOriginalArtistProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); AddToFieldExcerptL(textProperty->Value());//Add Original to excerpt - } + } + //Get composer property CMdEPropertyDef& composerPropDef = aObjectDef.GetPropertyDefL(MdeConstants::Audio::KComposerProperty ); if(aObject.Property( composerPropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::Audio::KComposerProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); AddToFieldExcerptL(textProperty->Value());//Add composer to excerpt } - index_item->AddExcerptL(*iExcerpt); + //Get author property + CMdEPropertyDef& authorPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KAuthorProperty ); + if(aObject.Property( authorPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KAuthorProperty, + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); + AddToFieldExcerptL(textProperty->Value()); + } + //Get comment property + CMdEPropertyDef& commentPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCommentProperty ); + if(aObject.Property( commentPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCommentProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + //Get description property + CMdEPropertyDef& descriprionPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDescriptionProperty ); + if(aObject.Property( descriprionPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KDescriptionProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Copyright property + CMdEPropertyDef& copyrightPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCopyrightProperty ); + if(aObject.Property( copyrightPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCopyrightProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Get genre property + CMdEPropertyDef& genrePropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KGenreProperty ); + if(aObject.Property( genrePropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KGenreProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + //Size property + CMdEPropertyDef& sizePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty); + if(aObject.Property( sizePropDef, property )!= KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint32 ) + { + CMdEUint32Property& sizeProperty = static_cast < CMdEUint32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%u"), sizeProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::Object::KSizeProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + AddToFieldExcerptL(buf); + } + } + + //Get legal property + CMdEPropertyDef& legalPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KLegalProperty ); + if(aObject.Property( legalPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KLegalProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Get track property + CMdEPropertyDef& trackPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KTrackProperty ); + if(aObject.Property( trackPropDef, property ) != KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint16 ) + { + CMdEUint16Property& trackProperty = static_cast < CMdEUint16Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%d"), trackProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KTrackProperty, + buf); + } + } + // Capturedate property + CMdEPropertyDef& captureDatePropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCaptureDateProperty); + if(aObject.Property( captureDatePropDef, property ) != KErrNotFound) + { + //Add field to document + if(EPropertyTime == property->Def().PropertyType()) + { + CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); + TDateTime time = timeProperty.Value().DateTime(); + TBuf<32> buf; + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCaptureDateProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); + } + } + //Get LastModifiedDate property + CMdEPropertyDef& dateTimePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KLastModifiedDateProperty); + if(aObject.Property( dateTimePropDef, property ) != KErrNotFound) + { + //Add field to document + if(EPropertyTime == property->Def().PropertyType()) + { + CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); + TDateTime time = timeProperty.Value().DateTime(); + TBuf<32> buf; + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + + AddFiledtoDocumentL(*index_item, + MdeConstants::Object::KLastModifiedDateProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); + } + } + //Get duration property + CMdEPropertyDef& durationPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDurationProperty ); + if(aObject.Property( durationPropDef, property ) != KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyReal32 ) + { + CMdEReal32Property& durationProperty = static_cast < CMdEReal32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%f"), durationProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KDurationProperty, + buf ); + } + } + if( iExcerpt ) + { + index_item->AddExcerptL(*iExcerpt); + } CPIXLOGSTRING("END CCPIXMediaAudioDoc::GetCpixDocumentL"); OstTraceFunctionExit0( CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_EXIT ); return index_item; diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/media/image/src/cpixmediaimagedoc.cpp --- a/harvesterplugins/media/image/src/cpixmediaimagedoc.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/media/image/src/cpixmediaimagedoc.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -30,8 +30,8 @@ #endif -_LIT( KFormatDateTime, "%04d %02d %02dT%02d:%02d:%02dZ"); // yyyy-mm-ddThh:mm:ssZ - +_LIT( KFormatDateTime, "%04d %02d %02d %02d %02d"); // yyyy mm dd hh mm +_LIT( KExcerptFormat, "%04d/%02d/%02d %02d:%02d"); //yyyy/mm/dd hh:mm // ----------------------------------------------------------------------------- // CCPIXDocFetcher::NewL() // ----------------------------------------------------------------------------- @@ -96,32 +96,123 @@ CPIXLOGSTRING("START CCPIXMediaImageDoc::GetCpixDocumentL"); CSearchDocument* index_item = CCPIXDocFetcher::GetCpixDocumentL(aObject,aAppClass,aObjectDef); ResetExcerpt(); //Reset excerpt initially - //URI and Excerpt is done add additional properties here + //URI and Excerpt is done add additional properties here CMdEProperty* property(NULL); - //Title property + CMdEPropertyDef& titlePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty ); - if(aObject.Property( titlePropDef, property ) != KErrNotFound) - { - //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; - AddFiledtoDocumentL(*index_item, - MdeConstants::Object::KTitleProperty, - textProperty->Value()); - AddToFieldExcerptL(textProperty->Value()); - } - + if(aObject.Property( titlePropDef, property ) != KErrNotFound) + { + //Add field to document excerpt. + CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + AddToFieldExcerptL(textProperty->Value()); + } + //Get user comment field CMdEPropertyDef& commentPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCommentProperty ); if(aObject.Property( commentPropDef, property )!= KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::MediaObject::KCommentProperty, textProperty->Value()); AddToFieldExcerptL(textProperty->Value()); } - CMdEPropertyDef& dateTimePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Image::KDateTimeOriginalProperty); + + //Get user description field + CMdEPropertyDef& descriptionPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDescriptionProperty ); + if(aObject.Property( descriptionPropDef, property )!= KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KDescriptionProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + //Get user copyright field + CMdEPropertyDef& copyRightPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCopyrightProperty ); + if(aObject.Property( copyRightPropDef, property )!= KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCopyrightProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + //Get user genre field + CMdEPropertyDef& genrePropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KGenreProperty ); + if(aObject.Property( genrePropDef, property )!= KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KGenreProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + //Get legal property field + CMdEPropertyDef& legalPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KLegalProperty ); + if(aObject.Property( legalPropDef, property )!= KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KLegalProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Size property + CMdEPropertyDef& sizePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty); + if(aObject.Property( sizePropDef, property )!= KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint32 ) + { + CMdEUint32Property& sizeProperty = static_cast < CMdEUint32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%u"), sizeProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::Object::KSizeProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + AddToFieldExcerptL(buf); + } + } + //Get DateTimeOrginal property + CMdEPropertyDef& dateTimeOrgPropDef = aObjectDef.GetPropertyDefL(MdeConstants::Image::KDateTimeOriginalProperty); + if(aObject.Property( dateTimeOrgPropDef, property ) != KErrNotFound) + { + //Add field to document + if(EPropertyTime == property->Def().PropertyType()) + { + CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); + TDateTime time = timeProperty.Value().DateTime(); + TBuf<32> buf; + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddFiledtoDocumentL(*index_item, + MdeConstants::Image::KDateTimeOriginalProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); + } + } + //Get LastModifiedDate property + CMdEPropertyDef& dateTimePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KLastModifiedDateProperty); if(aObject.Property( dateTimePropDef, property ) != KErrNotFound) { //Add field to document @@ -130,19 +221,30 @@ CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); TDateTime time = timeProperty.Value().DateTime(); TBuf<32> buf; - buf.Format( KFormatDateTime, time.Year(), - time.Month() + 1, - time.Day() + 1, - time.Hour(), - time.Minute(), - time.Second() ); + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddFiledtoDocumentL(*index_item, - MdeConstants::Image::KDateTimeOriginalProperty, + MdeConstants::Object::KLastModifiedDateProperty, buf, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); } } - index_item->AddExcerptL(*iExcerpt); + if( iExcerpt ) + { + index_item->AddExcerptL(*iExcerpt); + } + //Latitude error currently /* TODO- Bhuvi Location is a seperate object for each image object if any such relation * exist it has to be searched from Relation table and from there we have to open diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp --- a/harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -126,7 +126,8 @@ //Uri is our Document ID AddFiledtoDocumentL(*index_item, KNameField, //URI as Name field - name); + name, + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); //Store media ID for client to generate path and launch corresponding Item TBuf mediaBuf; @@ -143,7 +144,8 @@ //Get the media file extension and store TBuf extension; GetExtension(aObject.Uri(),extension); - AddFiledtoDocumentL( *index_item, KExtensionField, extension ); + AddFiledtoDocumentL( *index_item, KExtensionField, extension, + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); CMdEProperty* property(NULL); CMdEPropertyDef& titlePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty ); @@ -153,25 +155,42 @@ if(aObject.Property( titlePropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); if(textProperty->Value() != KNullDesC) { AddFiledtoDocumentL(*index_item, MdeConstants::Object::KTitleProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); } } + //Item type as MIME type CMdEPropertyDef& mimeTypePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KItemTypeProperty); if(aObject.Property( mimeTypePropDef, property )!= KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, _L(CPIX_MIMETYPE_FIELD), textProperty->Value(), CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); } + //Get ratings field + CMdEPropertyDef& ratingsPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KRatingProperty ); + if(aObject.Property( ratingsPropDef, property )!= KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyInt32 ) + { + CMdEInt32Property& ratingProperty = static_cast < CMdEInt32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%d"), ratingProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KRatingProperty, + buf ); + } + } CleanupStack::Pop(index_item);//pop up } CPIXLOGSTRING("END CCPIXDocFetcher::GetCpixDocumentL"); diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/media/video/src/cpixmediavideodoc.cpp --- a/harvesterplugins/media/video/src/cpixmediavideodoc.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/media/video/src/cpixmediavideodoc.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -29,7 +29,8 @@ #include "cpixmediavideodocTraces.h" #endif - +_LIT( KFormatDateTime, "%04d %02d %02d %02d %02d"); // yyyy mm dd hh mm +_LIT( KExcerptFormat, "%04d/%02d/%02d %02d:%02d"); //yyyy/mm/dd hh:mm // ----------------------------------------------------------------------------- // CCPIXDocFetcher::NewL() // ----------------------------------------------------------------------------- @@ -96,14 +97,22 @@ ResetExcerpt(); //Reset excerpt initially TInt slashpos = GetUri().LocateReverse('\\'); TPtrC name = GetUri().Mid( (slashpos+1) ); - AddToFieldExcerptL(name); //Add name to excerpt field + + CMdEProperty* property(NULL); + //Add Name field to document excerpt, ONLY if title field is not empty. + CMdEPropertyDef& titlePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty ); + if(aObject.Property( titlePropDef, property ) != KErrNotFound) + { + CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + if( textProperty->Value().Compare(KNullDesC) > 0 )AddToFieldExcerptL(name); //Add name to excerpt field + } + //URI and Excerpt is done add additional properties here - CMdEProperty* property(NULL); CMdEPropertyDef& descriptionPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDescriptionProperty ); if(aObject.Property( descriptionPropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::MediaObject::KDescriptionProperty, textProperty->Value()); @@ -113,45 +122,205 @@ if(aObject.Property( artistPropDef, property )!= KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::MediaObject::KArtistProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); AddToFieldExcerptL(textProperty->Value()); } CMdEPropertyDef& authorPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KAuthorProperty ); if(aObject.Property( authorPropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::MediaObject::KAuthorProperty, - textProperty->Value()); + textProperty->Value(), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); AddToFieldExcerptL(textProperty->Value()); - } - CMdEPropertyDef& copyrightPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCopyrightProperty ); - if(aObject.Property( copyrightPropDef, property ) != KErrNotFound) - { - //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; - AddFiledtoDocumentL(*index_item, - MdeConstants::MediaObject::KCopyrightProperty, - textProperty->Value()); - AddToFieldExcerptL(textProperty->Value()); - } + } CMdEPropertyDef& commentPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCommentProperty ); if(aObject.Property( commentPropDef, property ) != KErrNotFound) { //Add field to document - CMdETextProperty* textProperty = ( CMdETextProperty* ) property; + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); AddFiledtoDocumentL(*index_item, MdeConstants::MediaObject::KCommentProperty, textProperty->Value()); AddToFieldExcerptL(textProperty->Value()); } - index_item->AddExcerptL(*iExcerpt); + + //Get description property + CMdEPropertyDef& descriprionPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDescriptionProperty ); + if(aObject.Property( descriprionPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KDescriptionProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + + CMdEPropertyDef& copyrightPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCopyrightProperty ); + if(aObject.Property( copyrightPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCopyrightProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Get genre property + CMdEPropertyDef& genrePropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KGenreProperty ); + if(aObject.Property( genrePropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KGenreProperty, + textProperty->Value()); + AddToFieldExcerptL(textProperty->Value()); + } + //Size property + CMdEPropertyDef& sizePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty); + if(aObject.Property( sizePropDef, property )!= KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint32 ) + { + CMdEUint32Property& sizeProperty = static_cast < CMdEUint32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%u"), sizeProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::Object::KSizeProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + AddToFieldExcerptL(buf); + } + } + //Get resolution property + CMdEPropertyDef& resolutionPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KResolutionUnitProperty ); + if(aObject.Property( resolutionPropDef, property ) != KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint16 ) + { + CMdEUint16Property& resolutionProperty = static_cast < CMdEUint16Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%d"), resolutionProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KResolutionUnitProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + } + } + //Get legal property + CMdEPropertyDef& legalPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KLegalProperty ); + if(aObject.Property( legalPropDef, property ) != KErrNotFound) + { + //Add field to document + CMdETextProperty* textProperty = static_cast< CMdETextProperty* > (property ); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KLegalProperty, + textProperty->Value()); + } + //Get track property + CMdEPropertyDef& trackPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KTrackProperty ); + if(aObject.Property( trackPropDef, property ) != KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyUint16 ) + { + CMdEUint16Property& trackProperty = static_cast < CMdEUint16Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%d"), trackProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KTrackProperty, + buf); + } + } + // Capturedate property + CMdEPropertyDef& captureDatePropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KCaptureDateProperty); + if(aObject.Property( captureDatePropDef, property ) != KErrNotFound) + { + //Add field to document + if(EPropertyTime == property->Def().PropertyType()) + { + CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); + TDateTime time = timeProperty.Value().DateTime(); + TBuf<32> buf; + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KCaptureDateProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); + } + } + //Get LastModifiedDate property + CMdEPropertyDef& dateTimePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KLastModifiedDateProperty); + if(aObject.Property( dateTimePropDef, property ) != KErrNotFound) + { + //Add field to document + if(EPropertyTime == property->Def().PropertyType()) + { + CMdETimeProperty& timeProperty = static_cast < CMdETimeProperty& > (*property); + TDateTime time = timeProperty.Value().DateTime(); + TBuf<32> buf; + buf.Format( KFormatDateTime, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + + AddFiledtoDocumentL(*index_item, + MdeConstants::Object::KLastModifiedDateProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + //Format for excerpt field + buf.Format( KExcerptFormat, time.Year(), + time.Month() + 1, + time.Day() + 1, + time.Hour(), + time.Minute()); + AddToFieldExcerptL(buf); + } + } + //Get duration property + CMdEPropertyDef& durationPropDef = aObjectDef.GetPropertyDefL(MdeConstants::MediaObject::KDurationProperty ); + if(aObject.Property( durationPropDef, property ) != KErrNotFound) + { + //Add field to document + if( property->Def().PropertyType() == EPropertyReal32 ) + { + CMdEReal32Property& durationProperty = static_cast < CMdEReal32Property& > (*property ); + TBuf<32> buf; + buf.Format(_L("%f"), durationProperty.Value()); + AddFiledtoDocumentL(*index_item, + MdeConstants::MediaObject::KDurationProperty, + buf, + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + } + } + if( iExcerpt ) + { + index_item->AddExcerptL(*iExcerpt); + } OstTraceFunctionExit0( CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_EXIT ); return index_item; } - diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/email/qtemailfetcher/bwins/qtemailfetcheru.def --- a/harvesterplugins/messaging/email/qtemailfetcher/bwins/qtemailfetcheru.def Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/email/qtemailfetcher/bwins/qtemailfetcheru.def Mon Jun 28 11:03:15 2010 +0530 @@ -1,27 +1,26 @@ EXPORTS - ?handlemailboxEvent@QEmailFetcher@@QAEXW4NmApiMailboxEvent@EmailClientApi@@V?$QList@_K@@@Z @ 1 NONAME ; void QEmailFetcher::handlemailboxEvent(enum EmailClientApi::NmApiMailboxEvent, class QList) - ?processMessages@QEmailFetcher@@QAEXH@Z @ 2 NONAME ; void QEmailFetcher::processMessages(int) - ?tr@QEmailFetcher@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString QEmailFetcher::tr(char const *, char const *) - ?StartHarvesting@QEmailFetcher@@QAEXXZ @ 4 NONAME ; void QEmailFetcher::StartHarvesting(void) + ?processMessages@QEmailFetcher@@QAEXH@Z @ 1 NONAME ; void QEmailFetcher::processMessages(int) + ?tr@QEmailFetcher@@SA?AVQString@@PBD0@Z @ 2 NONAME ; class QString QEmailFetcher::tr(char const *, char const *) + ?StartHarvesting@QEmailFetcher@@QAEXXZ @ 3 NONAME ; void QEmailFetcher::StartHarvesting(void) + ?initialize@QEmailFetcher@@AAEXXZ @ 4 NONAME ; void QEmailFetcher::initialize(void) ?getStaticMetaObject@QEmailFetcher@@SAABUQMetaObject@@XZ @ 5 NONAME ; struct QMetaObject const & QEmailFetcher::getStaticMetaObject(void) ??1QEmailFetcher@@UAE@XZ @ 6 NONAME ; QEmailFetcher::~QEmailFetcher(void) - ?processNextMailbox@QEmailFetcher@@AAEXXZ @ 7 NONAME ; void QEmailFetcher::processNextMailbox(void) - ?trUtf8@QEmailFetcher@@SA?AVQString@@PBD0H@Z @ 8 NONAME ; class QString QEmailFetcher::trUtf8(char const *, char const *, int) - ??_EQEmailFetcher@@UAE@I@Z @ 9 NONAME ; QEmailFetcher::~QEmailFetcher(unsigned int) - ?NotifyHarvestingComplete@QEmailFetcher@@AAEXXZ @ 10 NONAME ; void QEmailFetcher::NotifyHarvestingComplete(void) - ?handleMessageEvent@QEmailFetcher@@QAEXW4NmApiMessageEvent@EmailClientApi@@_K1V?$QList@_K@@@Z @ 11 NONAME ; void QEmailFetcher::handleMessageEvent(enum EmailClientApi::NmApiMessageEvent, unsigned long long, unsigned long long, class QList) - ?initialize@QEmailFetcher@@CAXPAV1@@Z @ 12 NONAME ; void QEmailFetcher::initialize(class QEmailFetcher *) + ?getSearchDocumentL@QEmailFetcher@@AAEPAVCSearchDocument@@ABVNmApiMessageEnvelope@EmailClientApi@@_K1@Z @ 7 NONAME ; class CSearchDocument * QEmailFetcher::getSearchDocumentL(class EmailClientApi::NmApiMessageEnvelope const &, unsigned long long, unsigned long long) + ?processNextMailbox@QEmailFetcher@@AAEXXZ @ 8 NONAME ; void QEmailFetcher::processNextMailbox(void) + ?trUtf8@QEmailFetcher@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString QEmailFetcher::trUtf8(char const *, char const *, int) + ??_EQEmailFetcher@@UAE@I@Z @ 10 NONAME ; QEmailFetcher::~QEmailFetcher(unsigned int) + ?NotifyHarvestingComplete@QEmailFetcher@@AAEXXZ @ 11 NONAME ; void QEmailFetcher::NotifyHarvestingComplete(void) + ?handleMessageEvent@QEmailFetcher@@QAEXW4NmApiMessageEvent@EmailClientApi@@_K1V?$QList@_K@@@Z @ 12 NONAME ; void QEmailFetcher::handleMessageEvent(enum EmailClientApi::NmApiMessageEvent, unsigned long long, unsigned long long, class QList) ?trUtf8@QEmailFetcher@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString QEmailFetcher::trUtf8(char const *, char const *) ?qt_metacall@QEmailFetcher@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 14 NONAME ; int QEmailFetcher::qt_metacall(enum QMetaObject::Call, int, void * *) ?tr@QEmailFetcher@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString QEmailFetcher::tr(char const *, char const *, int) ?staticMetaObject@QEmailFetcher@@2UQMetaObject@@B @ 16 NONAME ; struct QMetaObject const QEmailFetcher::staticMetaObject - ?getSearchDocument@QEmailFetcher@@AAEPAVCSearchDocument@@ABVNmApiMessageEnvelope@EmailClientApi@@_K1@Z @ 17 NONAME ; class CSearchDocument * QEmailFetcher::getSearchDocument(class EmailClientApi::NmApiMessageEnvelope const &, unsigned long long, unsigned long long) - ?handleMailboxesListed@QEmailFetcher@@QAEXH@Z @ 18 NONAME ; void QEmailFetcher::handleMailboxesListed(int) + ?handleMailboxesListed@QEmailFetcher@@QAEXH@Z @ 17 NONAME ; void QEmailFetcher::handleMailboxesListed(int) + ?emailServiceIntialized@QEmailFetcher@@QAEX_N@Z @ 18 NONAME ; void QEmailFetcher::emailServiceIntialized(bool) ?processNextFolder@QEmailFetcher@@AAEXXZ @ 19 NONAME ; void QEmailFetcher::processNextFolder(void) - ?emailServiceIntialized@QEmailFetcher@@QAEX_N@Z @ 20 NONAME ; void QEmailFetcher::emailServiceIntialized(bool) - ?qt_metacast@QEmailFetcher@@UAEPAXPBD@Z @ 21 NONAME ; void * QEmailFetcher::qt_metacast(char const *) - ?newInstance@QEmailFetcher@@SAPAV1@AAVMEmailItemObserver@@@Z @ 22 NONAME ; class QEmailFetcher * QEmailFetcher::newInstance(class MEmailItemObserver &) - ?handleMailFoldersListed@QEmailFetcher@@QAEXH@Z @ 23 NONAME ; void QEmailFetcher::handleMailFoldersListed(int) + ?qt_metacast@QEmailFetcher@@UAEPAXPBD@Z @ 20 NONAME ; void * QEmailFetcher::qt_metacast(char const *) + ?newInstance@QEmailFetcher@@SAPAV1@AAVMEmailItemObserver@@@Z @ 21 NONAME ; class QEmailFetcher * QEmailFetcher::newInstance(class MEmailItemObserver &) + ?handleMailFoldersListed@QEmailFetcher@@QAEXH@Z @ 22 NONAME ; void QEmailFetcher::handleMailFoldersListed(int) + ?metaObject@QEmailFetcher@@UBEPBUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const * QEmailFetcher::metaObject(void) const ??0QEmailFetcher@@AAE@AAVMEmailItemObserver@@@Z @ 24 NONAME ; QEmailFetcher::QEmailFetcher(class MEmailItemObserver &) - ?metaObject@QEmailFetcher@@UBEPBUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const * QEmailFetcher::metaObject(void) const diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/email/qtemailfetcher/eabi/qtemailfetcheru.def --- a/harvesterplugins/messaging/email/qtemailfetcher/eabi/qtemailfetcheru.def Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/email/qtemailfetcher/eabi/qtemailfetcheru.def Mon Jun 28 11:03:15 2010 +0530 @@ -1,27 +1,26 @@ EXPORTS - _ZN13QEmailFetcher10initializeEPS_ @ 1 NONAME + _ZN13QEmailFetcher10initializeEv @ 1 NONAME _ZN13QEmailFetcher11newInstanceER18MEmailItemObserver @ 2 NONAME _ZN13QEmailFetcher11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME _ZN13QEmailFetcher11qt_metacastEPKc @ 4 NONAME _ZN13QEmailFetcher15StartHarvestingEv @ 5 NONAME _ZN13QEmailFetcher15processMessagesEi @ 6 NONAME _ZN13QEmailFetcher16staticMetaObjectE @ 7 NONAME DATA 16 - _ZN13QEmailFetcher17getSearchDocumentERKN14EmailClientApi20NmApiMessageEnvelopeEyy @ 8 NONAME - _ZN13QEmailFetcher17processNextFolderEv @ 9 NONAME + _ZN13QEmailFetcher17processNextFolderEv @ 8 NONAME + _ZN13QEmailFetcher18getSearchDocumentLERKN14EmailClientApi20NmApiMessageEnvelopeEyy @ 9 NONAME _ZN13QEmailFetcher18handleMessageEventEN14EmailClientApi17NmApiMessageEventEyy5QListIyE @ 10 NONAME - _ZN13QEmailFetcher18handlemailboxEventEN14EmailClientApi17NmApiMailboxEventE5QListIyE @ 11 NONAME - _ZN13QEmailFetcher18processNextMailboxEv @ 12 NONAME - _ZN13QEmailFetcher19getStaticMetaObjectEv @ 13 NONAME - _ZN13QEmailFetcher21handleMailboxesListedEi @ 14 NONAME - _ZN13QEmailFetcher22emailServiceIntializedEb @ 15 NONAME - _ZN13QEmailFetcher23handleMailFoldersListedEi @ 16 NONAME - _ZN13QEmailFetcher24NotifyHarvestingCompleteEv @ 17 NONAME - _ZN13QEmailFetcherC1ER18MEmailItemObserver @ 18 NONAME - _ZN13QEmailFetcherC2ER18MEmailItemObserver @ 19 NONAME - _ZN13QEmailFetcherD0Ev @ 20 NONAME - _ZN13QEmailFetcherD1Ev @ 21 NONAME - _ZN13QEmailFetcherD2Ev @ 22 NONAME - _ZNK13QEmailFetcher10metaObjectEv @ 23 NONAME - _ZTI13QEmailFetcher @ 24 NONAME - _ZTV13QEmailFetcher @ 25 NONAME + _ZN13QEmailFetcher18processNextMailboxEv @ 11 NONAME + _ZN13QEmailFetcher19getStaticMetaObjectEv @ 12 NONAME + _ZN13QEmailFetcher21handleMailboxesListedEi @ 13 NONAME + _ZN13QEmailFetcher22emailServiceIntializedEb @ 14 NONAME + _ZN13QEmailFetcher23handleMailFoldersListedEi @ 15 NONAME + _ZN13QEmailFetcher24NotifyHarvestingCompleteEv @ 16 NONAME + _ZN13QEmailFetcherC1ER18MEmailItemObserver @ 17 NONAME + _ZN13QEmailFetcherC2ER18MEmailItemObserver @ 18 NONAME + _ZN13QEmailFetcherD0Ev @ 19 NONAME + _ZN13QEmailFetcherD1Ev @ 20 NONAME + _ZN13QEmailFetcherD2Ev @ 21 NONAME + _ZNK13QEmailFetcher10metaObjectEv @ 22 NONAME + _ZTI13QEmailFetcher @ 23 NONAME + _ZTV13QEmailFetcher @ 24 NONAME diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.cpp --- a/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -17,29 +17,30 @@ #include "qtemailfetcher.h" #include -#include #include #include #include #include #include -//#include //If we happen to use QThread::yieldCurrentThread() +#include //Symbian specific details; picked up from cemailplugin.cpp. //Refactor it to cpixmaindefs.h _LIT(KMsgBaseAppClassGeneric, "root msg email"); _LIT(KMsgSubject, "Subject"); +_LIT(KMsgSender, "Sender"); _LIT(KMsgRecipients, "Recipients"); _LIT(KMsgBody, "Body"); _LIT(KMailBoxId, "MailBoxId"); _LIT(KFolderId, "FolderId"); +_LIT(KHasAttachment, "HasAttachment"); _LIT(KMailBoxName, "MailBoxName"); -_LIT(KFolderName, "FolderName"); +//_LIT(KFolderName, "FolderName"); _LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD); _LIT(KMimeTypeMsg, "Messages"); - - +_LIT(KAttachment, "Attachment"); +_LIT(KSentTime, "SentTime"); //------------------------------------------------------------------------------ QEmailFetcher::QEmailFetcher( MEmailItemObserver& aObserver ) @@ -58,11 +59,15 @@ //------------------------------------------------------------------------------ QEmailFetcher::~QEmailFetcher() { - iEmailEventNotifier->cancel(); + if ( iEmailEventNotifier ) + iEmailEventNotifier->cancel(); + iMailBoxes.clear(); + iFolders.clear(); delete iEmailEventNotifier; delete iEmailService; - delete iMailBoxListings; + delete iEnvelopeListing; delete iMailFolderList; + delete iMailBoxListings; } //------------------------------------------------------------------------------ @@ -75,7 +80,7 @@ emailFetcher->iEmailService = new NmApiEmailService( emailFetcher ); emailFetcher->iEmailEventNotifier = new NmApiEventNotifier( emailFetcher ); emailFetcher->iMailBoxListings = new NmApiMailboxListing( emailFetcher ); - initialize( emailFetcher ); //Do the rest of the init. + emailFetcher->initialize( ); //Do the rest of the init. }catch(...){ //cleanup. qDebug() << "QEmailFetcher::newInstance ( Catch Block)"; delete emailFetcher; @@ -92,24 +97,19 @@ } //------------------------------------------------------------------------------ -void QEmailFetcher::initialize( QEmailFetcher* aThis ){ - //The use of 'aThis' is because the current function is static. +void QEmailFetcher::initialize( ){ qDebug() << "QEmailFetcher::initialize :START"; - connect( aThis->iEmailService, SIGNAL(initialized(bool)), - aThis, SLOT(emailServiceIntialized(bool)) ); - aThis->iEmailService->initialise(); + connect( iEmailService, SIGNAL(initialized(bool)), + this, SLOT(emailServiceIntialized(bool)) ); + iEmailService->initialise(); //Monitor for Message changes - aThis->connect( aThis->iEmailEventNotifier, - SIGNAL(messageEvent(MessageEvent, quint64, quint64, QList)), - aThis, - SLOT(handleMessageEvent(MessageEvent, quint64, quint64, QList)) ); - //Monitor for Mailbox changes - aThis->connect( aThis->iEmailEventNotifier, - SIGNAL(mailboxEvent(MailboxEvent, QList)), - aThis, - SLOT(handlemailboxEvent(MailboxEvent, QList))); + connect( iEmailEventNotifier, + SIGNAL(messageEvent(EmailClientApi::NmApiMessageEvent, quint64, quint64, QList)), + this, + SLOT(handleMessageEvent(EmailClientApi::NmApiMessageEvent, quint64, quint64, QList)) ); //Start the monitoring - aThis->iEmailEventNotifier->start(); + iEmailEventNotifier->start(); + qDebug() << "QEmailFetcher::Started monitoring for Email message event"; qDebug() << "QEmailFetcher::initialize :END"; } @@ -143,28 +143,12 @@ } //------------------------------------------------------------------------------ -// TODO Remove this code if qt_QString2TPtrC works. -// TODO If this function is used, remember to release memory. -// Ownership with caller. -//HBufC* qt_QString2HBufC(const QString& aString) -//{ -// HBufC *buffer; -//#ifdef QT_NO_UNICODE -// TPtrC8 ptr(reinterpret_cast(aString.toLocal8Bit().constData())); -//#else -// TPtrC16 ptr(qt_QString2TPtrC(aString)); -//#endif -// buffer = q_check_ptr(HBufC::New(ptr.Length())); -// buffer->Des().Copy(ptr); -// return buffer; -//} - -CSearchDocument* getPartialSearchDocument( const NmApiMessageEnvelope& aEnvelope ) { +CSearchDocument* getPartialSearchDocument( quint64 aEnvelopeId ) { qDebug() << "getPartialSearchDocument :START"; CSearchDocument* doc = 0; QT_TRAP_THROWING( //Use qt_Qstring2TPtrC since we are working with const EmailMessageEnvelope. - doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aEnvelope.id() ) ), + doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aEnvelopeId ) ), KMsgBaseAppClassGeneric ); ); qDebug() << "getPartialSearchDocument :END"; @@ -173,56 +157,95 @@ } //anonymous namespace //------------------------------------------------------------------------------ -CSearchDocument* QEmailFetcher::getSearchDocument( const NmApiMessageEnvelope& aEnvelope ,quint64 aMailboxId, quint64 aFolderId ){ +CSearchDocument* QEmailFetcher::getSearchDocumentL( const NmApiMessageEnvelope& aEnvelope ,quint64 aMailboxId, quint64 aFolderId ){ QList toList; - qDebug() << "QEmailFetcher::getSearchDocument :START"; + qDebug() << "QEmailFetcher::getSearchDocumentL :START"; + //We need ALL the recipients in a SINGLE field. + //Need to cast away const-ness since the get method is unfortunately not const. const_cast(aEnvelope).getToRecipients( toList ); - - //We need ALL the recipients in a SINGLE field. QString recipients = ""; for( int i=0; i(aEnvelope).getCcRecipients( toList ); + for( int i=0; i(aEnvelope).getPlainTextBody( body ); QString msgBody = body.content(); - + qDebug() << "QEmailFetcher::Body of mail using paintextAPI:"<< aEnvelope.plainText() ; CSearchDocument* doc = 0; QT_TRAP_THROWING( //Use qt_Qstring2TPtrC since we are working with const EmailMessageEnvelope. doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aEnvelope.id() ) ), KMsgBaseAppClassGeneric ); - doc->AddFieldL( KMimeTypeField, KMimeTypeMsg, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); - doc->AddFieldL( KMsgSubject, qt_QString2TPtrC( aEnvelope.subject() ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); - doc->AddFieldL( KMsgRecipients, qt_QString2TPtrC( recipients ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); - doc->AddFieldL( KMsgBody, qt_QString2TPtrC( msgBody ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); - doc->AddFieldL( KMailBoxId, qt_QString2TPtrC( QString().setNum( aMailboxId ) ), CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - doc->AddFieldL( KFolderId, qt_QString2TPtrC( QString().setNum( aFolderId ) ), CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); + //Add the sender details + doc->AddFieldL( KMsgSender, qt_QString2TPtrC( const_cast(aEnvelope).sender() ), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); + //Add the Mimetype + doc->AddFieldL( KMimeTypeField, KMimeTypeMsg, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); + //Add the Subject field + doc->AddFieldL( KMsgSubject, qt_QString2TPtrC( aEnvelope.subject() ), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); + //Add the recipients list (Includes To and CC fields) + doc->AddFieldL( KMsgRecipients, qt_QString2TPtrC( recipients ), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText ); + //Add the email body + doc->AddFieldL( KMsgBody, qt_QString2TPtrC( msgBody ), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); + //Add the mailboxid + doc->AddFieldL( KMailBoxId, qt_QString2TPtrC( QString().setNum( aMailboxId ) ), + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized | CDocumentField::EAggregateNo ); + //Add the folder Id + doc->AddFieldL( KFolderId, qt_QString2TPtrC( QString().setNum( aFolderId ) ), + CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized | CDocumentField::EAggregateNo ); + //Add the attachment field. This field will be added only if there is any attachment.Details of the attachment + //are not added due to lack of email application support. + if ( aEnvelope.hasAttachments() ) + doc->AddFieldL( KHasAttachment, KAttachment, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized); + //Add mailbox name + NmApiMailbox aMailBox; + iEmailService->getMailbox( aMailboxId, aMailBox ); + doc->AddFieldL( KMailBoxName, qt_QString2TPtrC(aMailBox.name()) , + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText ); -// NmApiMailbox aMailBox; -// iEmailService->getMailbox( aMailboxId, aMailBox ); -// doc->AddFieldL( KMailBoxName, qt_QString2TPtrC(aMailBox.name()) , CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - //TODO : Add folder name field - //_LIT(KFolderName, "FolderName"); + // Sent date time KSentTime + QDateTime time = aEnvelope.sentTime(); + doc->AddFieldL( KSentTime, qt_QString2TPtrC(time.toString ()) , + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized ); + //TODO : Foldername is not harvested as there is no API exposed from email application to get the foldername based on folderID. + //This feature will be implemented as soon as we get supporting API's from Email team + //Adding subject and body to the excerpt. QString excerpt ; excerpt = aEnvelope.subject(); excerpt += msgBody ; doc->AddExcerptL( qt_QString2TPtrC(excerpt) ); ); - qDebug() << "QEmailFetcher::getSearchDocument :END"; + qDebug() << "QEmailFetcher::getSearchDocumentL :END"; return doc; } //------------------------------------------------------------------------------ -//Just to avoid duplication of the following two lines. void QEmailFetcher::NotifyHarvestingComplete(){ qDebug() << "QEmailFetcher::NotifyHarvestingComplete :START"; iCurrentMailboxIndex = iCurrentFolderIndex = 0; + //Free the iMailBoxes and iFolders + iMailBoxes.clear(); + iFolders.clear(); QT_TRAP_THROWING( iEmailObserver.HarvestingCompleted() ); qDebug() << "QEmailFetcher::NotifyHarvestingComplete :END"; return; @@ -271,13 +294,14 @@ qDebug() << "QEmailFetcher::processNextMailbox :END (harvesting completed)"; return; } - //More mailboxes available. delete iMailFolderList; iMailFolderList = NULL; iMailFolderList = new NmApiFolderListing( this, iMailBoxes.at( iCurrentMailboxIndex++ ).id() ); connect( iMailFolderList, SIGNAL(foldersListed( qint32 )), this, SLOT(handleMailFoldersListed( qint32)) ); - const int waitForSeconds = 30; //TODO Move this constant out of here if needed elsewhere - QTimer::singleShot( waitForSeconds, iMailFolderList, SLOT( start()) ); + iMailFolderList->start(); + +// const int waitForSeconds = 30; //TODO Move this constant out of here if needed elsewhere +// QTimer::singleShot( waitForSeconds, iMailFolderList, SLOT( start()) ); qDebug() << "QEmailFetcher::processNextMailbox :END (goto next mailbox)"; } @@ -309,7 +333,6 @@ processNextMailbox(); return;//Don't proceed futher. } - //More folders to process. //Already set to NULL in constructor, so safe to call delete first time. delete iEnvelopeListing; iEnvelopeListing = NULL; @@ -336,15 +359,15 @@ for( int i=0; i aMessageList){ +void QEmailFetcher::handleMessageEvent( EmailClientApi::NmApiMessageEvent aEvent, quint64 aMailboxId, quint64 aFolderId, QList aMessageList){ NmApiMessageEnvelope envelope; qDebug() << "QEmailFetcher::handleMessageEvent :START"; const int messageCount = aMessageList.count(); @@ -355,7 +378,7 @@ if( iEmailService->getEnvelope( aMailboxId, aFolderId, aMessageList.at( i ), envelope ) ){ qDebug() << "QEmailFetcher::handleMessageEvent :HandleDocumentL"; QT_TRAP_THROWING( - iEmailObserver.HandleDocumentL( getSearchDocument( envelope, aMailboxId, aFolderId ), + iEmailObserver.HandleDocumentL( getSearchDocumentL( envelope, aMailboxId, aFolderId ), //Doing this simply avoids *duplicate* code for update action. aEvent == MessageCreated ? ECPixAddAction : ECPixUpdateAction ) ); } @@ -363,56 +386,11 @@ } else if( aEvent == MessageDeleted ) { qDebug() << "QEmailFetcher::handleMessageEvent :MessageDeleted"; - //TODO We can do better. For delete, we dont have to create full document. Just the ID should be enough. - //We can have another function called getPartialSearchDocument so deletes will be faster. for( int i=0; igetEnvelope( aMailboxId, aFolderId, aMessageList.at( i ), envelope ) ){ qDebug() << "QEmailFetcher::handleMessageEvent :MessageDeleted : HandleDocumentL"; QT_TRAP_THROWING( - iEmailObserver.HandleDocumentL( getPartialSearchDocument( envelope ), ECPixRemoveAction ) ); + iEmailObserver.HandleDocumentL( getPartialSearchDocument( aMessageList.at( i ) ), ECPixRemoveAction ) ); } } } - } } - -//-------------------------------------------------------------------------------------- -void QEmailFetcher::handlemailboxEvent( EmailClientApi::NmApiMailboxEvent event, QList idlist ){ - const int mailboxCount = idlist.count(); - if( event == MailboxCreated ) - { - //New mailbox is created.Harvest the Mailbox name and all the folder names - } - else - { - //MailBox is deleted so delete the document related to all the mailbox and folders in the mailbox - } -} - -CSearchDocument* QEmailFetcher::getMailboxorfolderSearchDocument( quint64 aMailboxId, quint64 aFolderId, TEmailDocType aDocType, QString aFoldername ){ - - CSearchDocument* doc = 0; - QT_TRAP_THROWING( - //Use qt_Qstring2TPtrC since we are working with const EmailMessageEnvelope. - if ( aDocType == EEmailTypeFolder) - { - doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aFolderId ) ), - KMsgBaseAppClassGeneric ); - doc->AddFieldL( KFolderName, qt_QString2TPtrC(aFoldername) , CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - doc->AddFieldL( KFolderId, qt_QString2TPtrC( QString().setNum( aFolderId ) ), CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - } - else if ( aDocType == EEmailTypeMailBox ) - { - doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aMailboxId ) ), - KMsgBaseAppClassGeneric ); - NmApiMailbox aMailBox; - iEmailService->getMailbox( aMailboxId, aMailBox ); - doc->AddFieldL( KMailBoxName, qt_QString2TPtrC(aMailBox.name()) , CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - } - doc->AddFieldL( KMimeTypeField, KMimeTypeMsg, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); - doc->AddFieldL( KMailBoxId, qt_QString2TPtrC( QString().setNum( aMailboxId ) ), CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized ); - - ); - qDebug() << "QEmailFetcher::getSearchDocument :END"; - return doc; -} diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.h --- a/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.h Mon Jun 28 11:03:15 2010 +0530 @@ -37,13 +37,6 @@ using namespace EmailClientApi; -enum TEmailDocType - { - EEmailTypeMail = 0, - EEmailTypeFolder, - EEmailTypeMailBox - }; - //How this works: //1. List all mail boxes. //2. In each mail box, list the folders @@ -64,22 +57,19 @@ private: QEmailFetcher(MEmailItemObserver& aObserver ); - static void initialize(QEmailFetcher* aThis); //helper (2nd phase constructor). + void initialize(); //helper (2nd phase constructor). void processNextMailbox(); void processNextFolder(); void processNextEnvelope(); void NotifyHarvestingComplete(); - CSearchDocument* getSearchDocument( const NmApiMessageEnvelope& aEnvelope ,quint64 aMailboxId, quint64 aFolderId ); - CSearchDocument* getMailboxorfolderSearchDocument( quint64 aMailboxId, quint64 aFolderId, TEmailDocType aDocType, QString aFoldername ); + CSearchDocument* getSearchDocumentL( const NmApiMessageEnvelope& aEnvelope ,quint64 aMailboxId, quint64 aFolderId ); public slots: //public since they need to be called by *other* objects. void emailServiceIntialized( bool ); void handleMailboxesListed( qint32 ); void handleMailFoldersListed( qint32 ); void processMessages( qint32 ); //Connect to messageEvent signal - void handleMessageEvent( NmApiMessageEvent aEvent, quint64 mailboxId, quint64 folderId, QList messageList ); - //Connect to Mailbox event signal - void handlemailboxEvent(EmailClientApi::NmApiMailboxEvent event, QList id); + void handleMessageEvent( EmailClientApi::NmApiMessageEvent aEvent, quint64 mailboxId, quint64 folderId, QList messageList ); private: MEmailItemObserver& iEmailObserver; //The parent/creator. Not owned. @@ -88,7 +78,6 @@ NmApiMailboxListing* iMailBoxListings; //owned. NmApiFolderListing* iMailFolderList; //owned. NmApiEnvelopeListing* iEnvelopeListing; //owned. - NmApiMessageEnvelope* iMessageListing; //owned. //These are needed to asynchronously process *all* mailboxes/folders. int iCurrentMailboxIndex; diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.pro --- a/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.pro Mon Jun 28 11:03:15 2010 +0530 @@ -31,7 +31,7 @@ TARGET.VID = VID_DEFAULT TARGET.CAPABILITY = CAP_GENERAL_DLL -DRM VERSION = 1.0.0 - + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE INCLUDEPATH += ../inc HEADERS += ../inc/memailitemobserver.h diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/group/bld.inf --- a/harvesterplugins/messaging/group/bld.inf Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/group/bld.inf Mon Jun 28 11:03:15 2010 +0530 @@ -16,4 +16,5 @@ */ PRJ_MMPFILES -#include "../smsmms/group/bld.inf" \ No newline at end of file +#include "../smsmms/group/bld.inf" +#include "../email/group/bld.inf" \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/inc/cmessagedatahandler.h --- a/harvesterplugins/messaging/smsmms/inc/cmessagedatahandler.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/inc/cmessagedatahandler.h Mon Jun 28 11:03:15 2010 +0530 @@ -35,7 +35,7 @@ class CMessageDataHandler : public CActive { -public: +public: /** * Construction * @return Harvester image plugin @@ -163,6 +163,9 @@ CPop3ClientMtm* iPop3Mtm; // client for opening pop3 CImap4ClientMtm* iImap4Mtm; // client for opening imap4 RFs iFs; +#ifdef HARVESTERPLUGINTESTER_FRIEND + friend class CHarvesterPluginTester; +#endif }; #endif // CMESSAGEDATAHANDLER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/inc/cmessageharvester.h --- a/harvesterplugins/messaging/smsmms/inc/cmessageharvester.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/inc/cmessageharvester.h Mon Jun 28 11:03:15 2010 +0530 @@ -128,7 +128,11 @@ // UID of current folder searched TMsvId iCurrentFolder; // Current folder message items - CMsvEntrySelection* iChildren; + CMsvEntrySelection* iChildren; + +#ifdef HARVESTERPLUGINTESTER_FRIEND + friend class CHarvesterPluginTester; +#endif }; #endif // CMESSAGEHARVESTER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/inc/cmessagemonitor.h --- a/harvesterplugins/messaging/smsmms/inc/cmessagemonitor.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/inc/cmessagemonitor.h Mon Jun 28 11:03:15 2010 +0530 @@ -114,7 +114,6 @@ TCPixActionType iAction; TMsvId iFolderId; }; - private: // Queue of documents to be indexed RArray iMessages; @@ -127,6 +126,9 @@ CMsvSession& iMsvSession; CMessagePlugin& iMessagePlugin; +#ifdef HARVESTERPLUGINTESTER_FRIEND + friend class CHarvesterPluginTester; +#endif }; #endif // CMESSAGEMONITOR_H diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/inc/cmessageplugin.h --- a/harvesterplugins/messaging/smsmms/inc/cmessageplugin.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/inc/cmessageplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -141,6 +141,10 @@ TInt iCurrentDrive; // CPix indexer CCPixIndexer* iIndexer[EDriveZ+1]; // EDriveZ enum value is 25, so add 1. + +#ifdef HARVESTERPLUGINTESTER_FRIEND + friend class CHarvesterPluginTester; +#endif #ifdef __PERFORMANCE_DATA TTime iStartTime; diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/src/cmessagedatahandler.cpp --- a/harvesterplugins/messaging/smsmms/src/cmessagedatahandler.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/src/cmessagedatahandler.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -66,7 +66,8 @@ _LIT(KFolderField, FOLDER_FIELD); _LIT(KBodyField, BODY_FIELD); _LIT(KSubjectField, SUBJECT_FIELD); - +_LIT(KAttachmentField, ATTACHMENT_FIELD); +_LIT(KValueAttachment, "Attachment"); // ============================ MEMBER FUNCTIONS =============================== // --------------------------------------------------------------------------- @@ -197,16 +198,7 @@ if (iMessagePlugin.GetIndexer()) { TRAPD(err, iMessagePlugin.GetIndexer()->DeleteL(docid_str)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Document deleted." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Document deleted."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in deleting the doc=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in deleting the document.", err); - } + OstTrace1( TRACE_NORMAL, DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL():DeleteL;err=%d", err ); } return; } @@ -223,52 +215,17 @@ case EMsgTypeSms: { TRAPD(err, index_item = CreateSmsDocumentL(aMsvId, aFolderId)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): SMS document created." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): SMS document created."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in creating the sms doc=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating SMS document.", err); - } + OstTrace1( TRACE_NORMAL, DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): SMS document creation;err=%d", err ); break; } case EMsgTypeMms: { TRAPD(err, index_item = CreateMmsDocumentL(aMsvId, aFolderId)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): MMS document created." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): MMS document created."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in creating the mms doc=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating MMS document.", err); - } - break; - } - case EMsgTypeEmailPop3: - case EMsgTypeEmailImap4: - case EMsgTypeEmailSmtp: - { - TRAPD(err, index_item = CreateEmailDocumentL(aMsvId, aFolderId)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): E-mail document created." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): E-mail document created."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in ccreating the email doc=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating e-mail document.", err); - } + OstTrace1( TRACE_NORMAL, DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): MMS document created;err=%d", err ); break; } case EMsgTypeInvalid: - // For EMsgTypeDraft there is no way to tell if it was a SMS, MMS or email, + // For EMsgTypeDraft there is no way to tell if it was a SMS, MMS , // so don't create index_item. case EMsgTypeDraft: default: @@ -301,30 +258,12 @@ if (aActionType == ECPixAddAction) { TRAPD(err, iMessagePlugin.GetIndexer()->AddL(*index_item)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Added." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Added."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in Adding=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in adding.", err); - } + OstTrace1( TRACE_NORMAL, DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Added;err=%d", err ); } else if (aActionType == ECPixUpdateAction) { TRAPD(err, iMessagePlugin.GetIndexer()->UpdateL(*index_item)); - if (err == KErrNone) - { - OstTrace0( TRACE_NORMAL, DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Updated." ); - CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Updated."); - } - else - { - OstTrace1( TRACE_NORMAL, DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in Updating=%d", err ); - CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in updating.", err); - } + OstTrace1( TRACE_NORMAL, DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Updated;err=%d", err ); } } else @@ -358,7 +297,8 @@ TMsvId service = 0; iMsvSession.GetEntry(aMsvId, service, entry); HBufC *fromNameOrNumberBuf = entry.iDetails.AllocLC(); - index_item->AddFieldL(KFromField, *fromNameOrNumberBuf); + index_item->AddFieldL(KFromField, *fromNameOrNumberBuf, + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); // Add the recipients as content items TBuf<64> to_field; @@ -370,7 +310,8 @@ to_field = KToField; if (i>0) to_field.AppendNum(i); - index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i)); + index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i), + CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EIndexFreeText); } // Add the body text as a content item @@ -436,6 +377,11 @@ CMsvStore* msvStore = iMmsMtm->Entry().ReadStoreL(); CleanupStack::PushL( msvStore ); MMsvAttachmentManager& attManager = msvStore->AttachmentManagerL(); + //Add attachment value field + TInt count = attManager.AttachmentCount(); + if (count > 0) + index_item->AddFieldL(KAttachmentField, KValueAttachment); + for ( TInt i = 0; i < attManager.AttachmentCount(); i++ ) { CMsvAttachment* attInfo = attManager.GetAttachmentInfoL(i); @@ -532,94 +478,6 @@ CleanupStack::Pop(index_item); return index_item; } - -// --------------------------------------------------------------------------- -// CMessageDataHandler::CreateEmailDocumentL -// --------------------------------------------------------------------------- -// -CSearchDocument* CMessageDataHandler::CreateEmailDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId) - { - // creating CSearchDocument object with unique ID for this application - TBuf docid_str; - docid_str.AppendNum(aMsvId); - CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(EMAILAPPCLASS)); - - // Open the message entry - CMsvEntry* message_entry = CMsvEntry::NewL(iMsvSession, aMsvId, TMsvSelectionOrdering()); - CleanupStack::PushL(message_entry); - - // Get body - CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL(); - CleanupStack::PushL(paraFormatLayer); - CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL(); - CleanupStack::PushL(charFormatLayer); - CRichText* richtext = CRichText::NewL(paraFormatLayer, charFormatLayer); - CleanupStack::PushL(richtext); - CImEmailMessage* message_body = CImEmailMessage::NewLC(*message_entry); - message_body->GetBodyTextL(aMsvId, CImEmailMessage::EThisMessageOnly, *richtext, *paraFormatLayer, *charFormatLayer); - - // Read the message header - CMsvStore* message_store = message_entry->ReadStoreL(); - CleanupStack::PushL(message_store); - CImHeader* header = CImHeader::NewLC(); - header->RestoreL(*message_store); - - // Add from field - index_item->AddFieldL(KFromField, header->From()); - - // Add the ToRecipients as content items - TBuf<64> to_field; - for (TInt i = 0; i < header->ToRecipients().MdcaCount(); i++) - { - to_field = KToField; - if (i>0) - to_field.AppendNum(i); - index_item->AddFieldL(to_field, header->ToRecipients().MdcaPoint(i)); - } - - // Add the CcRecipients as content items - TBuf<64> cc_field; - for (TInt i = 0; i < header->CcRecipients().MdcaCount(); i++) - { - cc_field = KCcField; - if (i>0) - cc_field.AppendNum(i); - index_item->AddFieldL(cc_field, header->CcRecipients().MdcaPoint(i)); - } - - // Add the BccRecipients as content items - TBuf<64> bcc_field; - for (TInt i = 0; i < header->BccRecipients().MdcaCount(); i++) - { - bcc_field = KBccField; - if (i>0) - bcc_field.AppendNum(i); - index_item->AddFieldL(bcc_field, header->BccRecipients().MdcaPoint(i)); - } - - const TInt richTxtLen = (richtext->DocumentLength() < KMaxDocumentSize) ? richtext->DocumentLength() : KMaxDocumentSize; - HBufC* body_text = richtext->Read(0).Left(richTxtLen).AllocLC(); - - // Add subject - TPtrC subject(header->Subject()); - index_item->AddFieldL(KSubjectField, subject); - - // Add message body - index_item->AddFieldL(KBodyField, *body_text); - - // Add excerpt - HBufC* excerpt = CreateExcerptLC(header->From(), header->ToRecipients(), subject, *body_text, aFolderId); - index_item->AddExcerptL(*excerpt); - CleanupStack::PopAndDestroy(excerpt); - - // Cleanup everything last item message entry - CleanupStack::PopAndDestroy(8, message_entry); - - // Pop the item - CleanupStack::Pop(index_item); - return index_item; - } - // --------------------------------------------------------------------------- // CMessageDataHandler::CreateExcerptLC // --------------------------------------------------------------------------- diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/src/cmessageplugin.cpp --- a/harvesterplugins/messaging/smsmms/src/cmessageplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/src/cmessageplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -252,11 +252,8 @@ iObserver->RemoveHarvestingQueue(this, baseAppClass); // Delete the index object - if (iIndexer[aMedia]) - { - delete iIndexer[aMedia]; - iIndexer[aMedia] = NULL; - } + delete iIndexer[aMedia]; + iIndexer[aMedia] = NULL; // if the aActionType is EFFMmcDismount, then the // parameter aFilename is the baseAppClass of the Index database @@ -450,14 +447,15 @@ { User::Panic(_L("CMessagePlugin PANIC"), KErrServerTerminated); break; - } - case EMsvMtmGroupInstalled: - case EMsvMtmGroupDeInstalled: - case EMsvGeneralError: // not used after v5 - case EMsvServerReady: - case EMsvCorruptedIndexRebuilt: - case EMsvMediaIncorrect: - case EMsvCorruptedIndexRebuilding: + } + // Following commented only for decision coverage +// case EMsvMtmGroupInstalled: +// case EMsvMtmGroupDeInstalled: +// case EMsvGeneralError: // not used after v5 +// case EMsvServerReady: +// case EMsvCorruptedIndexRebuilt: +// case EMsvMediaIncorrect: +// case EMsvCorruptedIndexRebuilding: default: { break; @@ -485,24 +483,6 @@ CPIXLOGSTRING("CMessagePlugin:CalculateMessageType ### Mms Message ###"); ret = EMsgTypeMms; } - else if( aEntry.iMtm.iUid == KUidMsgTypeSMTP.iUid ) - { - OstTrace0( TRACE_NORMAL, DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType ### ESmtpEmail ###" ); - CPIXLOGSTRING("CMessagePlugin:CalculateMessageType ### ESmtpEmail ###"); - ret = EMsgTypeEmailSmtp; - } - else if( aEntry.iMtm.iUid == KUidMsgTypePOP3.iUid ) - { - OstTrace0( TRACE_NORMAL, DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType ### EPop3Email ###" ); - CPIXLOGSTRING("CMessagePlugin:CalculateMessageType ### EPop3Email ###"); - ret = EMsgTypeEmailPop3; - } - else if( aEntry.iMtm.iUid == KUidMsgTypeIMAP4.iUid ) - { - OstTrace0( TRACE_NORMAL, DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType ### EImap4Email ###" ); - CPIXLOGSTRING("CMessagePlugin:CalculateMessageType ### EImap4Email ###"); - ret = EMsgTypeEmailImap4; - } // Add J.J #ifndef __SERIES60_30__ // Not supported before S60 3d FP1 else if ( aEntry.iMtm.iUid == KSenduiMtmUniMessageUid.iUid ) diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/traces/cmessagedatahandlerTraces.h --- a/harvesterplugins/messaging/smsmms/traces/cmessagedatahandlerTraces.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/traces/cmessagedatahandlerTraces.h Mon Jun 28 11:03:15 2010 +0530 @@ -1,4 +1,4 @@ -// Created by TraceCompiler 2.1.2 +// Created by TraceCompiler 2.2.3 // DO NOT EDIT, CHANGES WILL BE LOST #ifndef __CMESSAGEDATAHANDLERTRACES_H__ @@ -19,15 +19,8 @@ #define DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860007 #define DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860008 #define DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860009 -#define DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000a -#define DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000b #define DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000c -#define DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000d #define DUP9_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000e -#define DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000f -#define DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860010 -#define DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860011 -#define DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860012 #define DUP14_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860013 #define CMESSAGEDATAHANDLER_RUNL 0x860014 #define CMESSAGEDATAHANDLER_RUNERROR 0x860015 diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/traces/cmessagemonitorTraces.h --- a/harvesterplugins/messaging/smsmms/traces/cmessagemonitorTraces.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/traces/cmessagemonitorTraces.h Mon Jun 28 11:03:15 2010 +0530 @@ -1,4 +1,4 @@ -// Created by TraceCompiler 2.1.2 +// Created by TraceCompiler 2.2.3 // DO NOT EDIT, CHANGES WILL BE LOST #ifndef __CMESSAGEMONITORTRACES_H__ diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/traces/cmessagepluginTraces.h --- a/harvesterplugins/messaging/smsmms/traces/cmessagepluginTraces.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/traces/cmessagepluginTraces.h Mon Jun 28 11:03:15 2010 +0530 @@ -1,4 +1,4 @@ -// Created by TraceCompiler 2.1.2 +// Created by TraceCompiler 2.2.3 // DO NOT EDIT, CHANGES WILL BE LOST #ifndef __CMESSAGEPLUGINTRACES_H__ @@ -27,9 +27,6 @@ #define DUP3_CMESSAGEPLUGIN_HANDLESESSIONEVENTL 0x860025 #define CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860026 #define DUP1_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860027 -#define DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860028 -#define DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860029 -#define DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002a #define DUP5_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002b #define DUP6_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002c #define DUP7_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002d diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/messaging/smsmms/traces/fixed_id.definitions --- a/harvesterplugins/messaging/smsmms/traces/fixed_id.definitions Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/messaging/smsmms/traces/fixed_id.definitions Mon Jun 28 11:03:15 2010 +0530 @@ -40,10 +40,6 @@ [TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x22 [TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_MOUNTL=0x21 [TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_STARTPLUGINL=0x20 -[TRACE]TRACE_NORMAL[0x86]_DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xf -[TRACE]TRACE_NORMAL[0x86]_DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x10 -[TRACE]TRACE_NORMAL[0x86]_DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x11 -[TRACE]TRACE_NORMAL[0x86]_DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x12 [TRACE]TRACE_NORMAL[0x86]_DUP14_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x13 [TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEDATAHANDLER_CONSTRUCTL=0x2 [TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x6 @@ -53,22 +49,26 @@ [TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x23 [TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x7 [TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x19 -[TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x28 [TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x24 [TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x8 -[TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x29 [TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x25 [TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x9 [TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1a -[TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2a -[TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xa [TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1b [TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2b -[TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xb [TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1c [TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2c [TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xc [TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1d [TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2d -[TRACE]TRACE_NORMAL[0x86]_DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xd [TRACE]TRACE_NORMAL[0x86]_DUP9_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xe +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xf +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x10 +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x11 +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x12 +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x28 +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x29 +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2a +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xa +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xb +[[OBSOLETE]][TRACE]TRACE_NORMAL[0x86]_DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xd diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/notes/src/notesplugin.cpp --- a/harvesterplugins/notes/src/notesplugin.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/notes/src/notesplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -53,7 +53,7 @@ _LIT(KNpdUpdateTime , "Date"); //Reference from CPix calender harvester plugin. -_LIT(KNotesTimeFormat , "%F%/0%Y %M %D %H%T"); // Locale independent YYYYMMDDHHMM +_LIT(KNotesTimeFormat,"%04d %02d %02d %02d %02d"); // --------------------------------------------------------------------------- // CNotesPlugin::NewL @@ -346,8 +346,13 @@ index_item->AddFieldL(KNpdMemo, entry->DescriptionL()); // Add Date fields TBuf<30> dateString; - TTime endTime = entry->EndTimeL().TimeUtcL(); - endTime.FormatL(dateString, KNotesTimeFormat); + TDateTime datetime = entry->EndTimeL().TimeUtcL().DateTime(); + dateString.Format( KNotesTimeFormat, datetime.Year(), + TInt(datetime.Month()+ 1), + datetime.Day() + 1, + datetime.Hour()+ 1, + datetime.Minute()); + index_item->AddFieldL(KNpdUpdateTime, dateString, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); index_item->AddFieldL(KMimeTypeField, KMimeTypeNotes, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg --- a/harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg Mon Jun 28 11:03:15 2010 +0530 @@ -91,6 +91,111 @@ [Endtest] [Test] +title TestMessageMountNoIndexerL +create HarvesterPluginTester foobar +foobar TestMessageMountNoIndexerL +delete foobar +[Endtest] + +[Test] +title TestMessageIsMediaRemovableL +create HarvesterPluginTester foobar +foobar TestMessageIsMediaRemovableL 0 1 2 3 +delete foobar +[Endtest] + +[Test] +title TestMessageRunErrorL +create HarvesterPluginTester foobar +foobar TestMessageRunErrorL +delete foobar +[Endtest] + +[Test] +title TestQualifiedBaseAppClass +create HarvesterPluginTester foobar +foobar TestQualifiedBaseAppClass +delete foobar +[Endtest] + +[Test] +title TestHandleMsgMoved +create HarvesterPluginTester foobar +foobar TestHandleMsgMoved +delete foobar +[Endtest] + +[Test] +title TestMessageDataHandler +create HarvesterPluginTester foobar +foobar TestMessageDataHandler +delete foobar +[Endtest] + +[Test] +title TestMsgUnMount +create HarvesterPluginTester foobar +foobar TestMsgUnMount +delete foobar +[Endtest] + +[Test] +title TestFormFormBaseAppClass +create HarvesterPluginTester foobar +foobar TestFormFormBaseAppClass +delete foobar +[Endtest] + +[Test] +title TestMsgDelete +create HarvesterPluginTester foobar +foobar TestMsgDelete +delete foobar +[Endtest] + +[Test] +title TestMsgHandlesession +create HarvesterPluginTester foobar +foobar TestMsgHandlesession +delete foobar +[Endtest] + +[Test] +title TestMsgHandlesessionPanic +create HarvesterPluginTester foobar +foobar TestMsgHandlesessionPanic 0 +delete foobar +[Endtest] + +[Test] +title TestMsgHandlesessionPanic +create HarvesterPluginTester foobar +foobar TestMsgHandlesessionPanic 1 +delete foobar +[Endtest] + +[Test] +title TestMsgHandlesessionPanic +create HarvesterPluginTester foobar +foobar TestMsgHandlesessionPanic 2 +delete foobar +[Endtest] + +[Test] +title TestMsgOverwriteOrAddToQuere +create HarvesterPluginTester foobar +foobar TestMsgOverwriteOrAddToQuere +delete foobar +[Endtest] + +[Test] +title TestMsgMessageHarvester +create HarvesterPluginTester foobar +foobar TestMsgMessageHarvester +delete foobar +[Endtest] + +[Test] title TestAddBookmarkL create HarvesterPluginTester foobar foobar TestAddBookmarkL TestBookmark http:\/\/testbookmark.com testbookmark.com @@ -193,6 +298,13 @@ [Endtest] [Test] +title TestCreateAllContactFields +create HarvesterPluginTester foobar +foobar TestCreateAllContactFields And +delete foobar +[Endtest] + +[Test] title TestCreateContactIndexItemL_Edit create HarvesterPluginTester foobar foobar TestCreateContactIndexItemL_Edit update ContactNew ContactModified @@ -207,6 +319,48 @@ [Endtest] [Test] +title TestCreateContactIndexItemNoIndexerL +create HarvesterPluginTester foobar +foobar TestCreateContactIndexItemNoIndexerL +delete foobar +[Endtest] + +[Test] +title TestContactGetDateL +create HarvesterPluginTester foobar +foobar TestContactGetDateL 2010-11-30 +delete foobar +[Endtest] + +[Test] +title TestContactDelayedErrorL +create HarvesterPluginTester foobar +foobar TestContactDelayedErrorL +delete foobar +[Endtest] + +[Test] +title TestContactDelayedCallbackNoIContactsL +create HarvesterPluginTester foobar +foobar TestContactDelayedCallbackNoIContactsL +delete foobar +[Endtest] + +[Test] +title TestContactDelayedCallbackNoIObserverL +create HarvesterPluginTester foobar +foobar TestContactDelayedCallbackNoIObserverL +delete foobar +[Endtest] + +[Test] +title TestContactDelayedCallbackWrongCountL +create HarvesterPluginTester foobar +foobar TestContactDelayedCallbackWrongCountL +delete foobar +[Endtest] + +[Test] title TestCreateContactGroup create HarvesterPluginTester foobar foobar TestCreateContactGroup TestGroup @@ -251,7 +405,7 @@ [Test] title TestAudioHarvestingUpdateIndex create HarvesterPluginTester foobar -foobar TestAudiooHarvestingUpdateIndex c:\data\eagle_landed.mp3 eagle_landed.mp3 testaudio.wmv +foobar TestAudioHarvestingUpdateIndex c:\data\eagle_landed.mp3 eagle_landed.mp3 testaudio.mp3 delete foobar [Endtest] @@ -352,3 +506,17 @@ foobar TestImageMMCEventL 2 1 delete foobar [Endtest] + +[Test] +title TestStartEmailPlugin +create HarvesterPluginTester foobar +foobar TestStartEmailPlugin +delete foobar +[Endtest] + +[Test] +title TestHandleEmailDoc +create HarvesterPluginTester foobar +foobar TestHandleEmailDoc +delete foobar +[Endtest] diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp --- a/harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp Mon Jun 28 11:03:15 2010 +0530 @@ -39,6 +39,7 @@ OS_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE /epoc32/include/ecom SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/mw SOURCEPATH ../src @@ -77,6 +78,13 @@ // DEFFILE ?filename // AIF ?filename +//Used for adding friend classes for unit testing +//Example (in class header file): +//#ifdef HARVESTERPLUGINTESTER_FRIEND +// friend class CHarvesterPluginTester +//#endif +MACRO HARVESTERPLUGINTESTER_FRIEND + //------------------------Added for testing FilePlugin------------------- USERINCLUDE ./../../../file/inc USERINCLUDE ./../../../file/inc/monitorplugin @@ -206,6 +214,29 @@ SOURCE imageplugin.cpp //------------------End for image plugin ----------------------------- +//---------------Additions for Email plugin---------------------------- +USERINCLUDE ./../../../messaging/email/inc +USERINCLUDE ./../../../messaging/email/qtemailfetcher +SOURCEPATH ./../../../messaging/email/src + +SOURCE cemailplugin.cpp + +SYSTEMINCLUDE /epoc32/include/mw/QtCore +SYSTEMINCLUDE /epoc32/include/stdapis +SYSTEMINCLUDE /epoc32/include/stdapis/sys +SYSTEMINCLUDE . +SYSTEMINCLUDE /epoc32/include/stdapis/stlport + + +LIBRARY qtemailfetcher.lib +LIBRARY qtcore.lib +LIBRARY libstdcpp.lib + +OPTION CW -wchar_t on +MACRO _WCHAR_T_DECLARED +//EPOCALLOWDLLDATA +//------------------End for Eail plugin ----------------------------- + USERINCLUDE ../../../applications/traces USERINCLUDE ../../../bookmarks/traces USERINCLUDE ../../../calendar/traces diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/inc/ccalendarobserver.h --- a/harvesterplugins/tsrc/harvesterplugintester/inc/ccalendarobserver.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/inc/ccalendarobserver.h Mon Jun 28 11:03:15 2010 +0530 @@ -24,7 +24,7 @@ #include "calprogresscallback.h" _LIT8(KGuid, "AGlobalUid"); -class CCalendarObserver : public MCalProgressCallBack +class CCalendarObserver : public CBase, public MCalProgressCallBack { public: static CCalendarObserver* NewL(); diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/inc/cmessagesessionobserver.h --- a/harvesterplugins/tsrc/harvesterplugintester/inc/cmessagesessionobserver.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/inc/cmessagesessionobserver.h Mon Jun 28 11:03:15 2010 +0530 @@ -20,7 +20,7 @@ #include -class CMessageSessionObserver : public MMsvSessionObserver +class CMessageSessionObserver : public CBase, public MMsvSessionObserver { public: static CMessageSessionObserver* NewL(); diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h --- a/harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h Mon Jun 28 11:03:15 2010 +0530 @@ -51,7 +51,7 @@ // FORWARD DECLARATIONS //class ?FORWARD_CLASSNAME; class CHarvesterPluginTester; - +class CSearchDocument; // DATA TYPES //enum ?declaration //typedef ?declaration @@ -152,7 +152,7 @@ */ virtual TInt TestStartHarvesterL( CStifItemParser& aItem ); - virtual TInt TestFormBaseAppClass( CStifItemParser& aItem ); + virtual TInt TestFormBaseAppClassL( CStifItemParser& aItem ); virtual TInt TestDatabasePathL( CStifItemParser& aItem ); @@ -186,6 +186,12 @@ */ virtual TInt TestMessageHarvesterChangeDriveL( CStifItemParser& aItem ); + virtual TInt TestMessageRunErrorL( CStifItemParser& aItem ); + + virtual TInt TestMessageIsMediaRemovableL( CStifItemParser& aItem ); + + virtual TInt TestMessageMountNoIndexerL( CStifItemParser& aItem ); + virtual TInt TestStartBookmarksHarvesterL( CStifItemParser& aItem ); virtual TInt TestAddBookmarkL( CStifItemParser& aItem ); @@ -215,6 +221,20 @@ virtual TInt TestCreateContactIndexItemL( CStifItemParser& aItem ); + virtual TInt TestCreateContactIndexItemNoIndexerL( CStifItemParser& aItem ); + + virtual TInt TestContactGetDateL( CStifItemParser& aItem ); + + virtual TInt TestContactDelayedErrorL( CStifItemParser& aItem ); + + virtual TInt TestContactDelayedCallbackNoIContactsL( CStifItemParser& aItem ); + + virtual TInt TestContactDelayedCallbackNoIObserverL( CStifItemParser& aItem ); + + virtual TInt TestContactDelayedCallbackWrongCountL( CStifItemParser& aItem ); + + virtual TInt TestCreateAllContactFieldsL( CStifItemParser& aItem ); + virtual TInt TestCreateContactGroupL( CStifItemParser& aItem ); virtual TInt TestStartCalenderHarvesterL( CStifItemParser& aItem ); @@ -254,6 +274,32 @@ virtual TInt TestVideoMMCEventL( CStifItemParser& aItem ); virtual TInt TestImageMMCEventL( CStifItemParser& aItem ); + + virtual TInt TestStartEmailPluginL( CStifItemParser& aItem ); + + CSearchDocument* prepareemaildocument(); + + virtual TInt TestHandleEmailDocL( CStifItemParser& aItem ); + + virtual TInt TestQualifiedBaseAppClassL( CStifItemParser& ); + + virtual TAny TestHandleMsgMovedL( CStifItemParser& ); + + virtual TAny TestMessageDataHandlerL( CStifItemParser& ); + + virtual TInt TestMsgUnMountL( CStifItemParser& ); + + virtual TInt TestFormFormBaseAppClassL( CStifItemParser& ); + + virtual TInt TestMsgDeleteL( CStifItemParser& ); + + virtual TInt TestMsgHandlesessionL( CStifItemParser& ); + + virtual TInt TestMsgHandlesessionPanicL( CStifItemParser& aItem ); + + virtual TInt TestMsgOverwriteOrAddToQuereL( CStifItemParser& aItem ); + + virtual TInt TestMsgMessageHarvesterL( CStifItemParser& aItem ); /** * Method used to log version of test class */ diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp --- a/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp Mon Jun 28 11:03:15 2010 +0530 @@ -32,20 +32,14 @@ #ifdef SBSV2 #if defined(__S60_) - OS_LAYER_SYSTEMINCLUDE - #else // __S60_ not defined - SYSTEMINCLUDE /epoc32/include - SYSTEMINCLUDE /epoc32/include/internal + OS_LAYER_SYSTEMINCLUDE #endif // __S60_ /* Source files */ SOURCEPATH ../src #else // SBSV2 not defined #if defined(__S60_) - MW_LAYER_SYSTEMINCLUDE - #else // __S60_ not defined - SYSTEMINCLUDE /epoc32/include - SYSTEMINCLUDE /epoc32/include/internal + MW_LAYER_SYSTEMINCLUDE #endif // __S60_ /* Source files */ diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe_nrm.mmp --- a/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe_nrm.mmp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe_nrm.mmp Mon Jun 28 11:03:15 2010 +0530 @@ -32,20 +32,14 @@ #ifdef SBSV2 #if defined(__S60_) - OSEXT_LAYER_SYSTEMINCLUDE - #else // __S60_ not defined - SYSTEMINCLUDE /epoc32/include - SYSTEMINCLUDE /epoc32/include/internal + OSEXT_LAYER_SYSTEMINCLUDE #endif // __S60_ /* Source files */ SOURCEPATH ../src #else // SBSV2 not defined #if defined(__S60_) - MW_LAYER_SYSTEMINCLUDE - #else // __S60_ not defined - SYSTEMINCLUDE /epoc32/include - SYSTEMINCLUDE /epoc32/include/internal + MW_LAYER_SYSTEMINCLUDE #endif // __S60_ /* Source files */ diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/src/cmessagesessionobserver.cpp --- a/harvesterplugins/tsrc/harvesterplugintester/src/cmessagesessionobserver.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/src/cmessagesessionobserver.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -169,7 +169,7 @@ TMsvAttachmentId attaId = KMsvNullIndexEntryId; RFs iFSsession; - iFSsession.Connect(); + User::LeaveIfError( iFSsession.Connect()); RFile testfile; CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL(); @@ -216,8 +216,8 @@ entry.SetUnread( EFalse ); iMmsClient->Entry().ChangeL( entry ); iMmsClient->SaveMessageL(); - delete iMmsClient; + iMmsClient = NULL; delete mtmReg; return newMsgId; } @@ -290,6 +290,7 @@ delete iSmtpClient; + iSmtpClient = NULL; delete mtmReg; return newMsgId; } diff -r 2f67eb14d003 -r 4a2987baf8f7 harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp --- a/harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -29,8 +29,11 @@ #include #include #include +#include #include "harvesterobserver.h" #include "cmessageplugin.h" +#include "cmessagemonitor.h" +#include "cmessageharvester.h" #include "cmessagesessionobserver.h" //For CMsvSession #include "ccpixsearcher.h" #include "bookmarksplugin.h" @@ -43,11 +46,12 @@ #include "mdsitementity.h" #include "cpixmdedbmanager.h" #include "cfolderrenamedharvester.h" -//#include "CBlacklistMgr.h" #include "videoplugin.h" #include "imageplugin.h" - +#include "cemailplugin.h" +#include "cmessagedatahandler.h" _LIT(KAppBasePath,"@c:root file content"); +_LIT(KEmailAppBasePath,"@c:root msg email"); _LIT(KAppBaseFolderFilePath,"@c:root file folder"); const TInt KMsgPluginBaseAppClassMaxLen = 64; @@ -56,10 +60,8 @@ #include #include "notesplugin.h" -//Test Uid for testing Blacklist manager - -//const TUid KTestUid = { 0x101D6348 }; - +_LIT( KemailId, "1" ); +_LIT(KMsgBaseAppClassGeneric, "root msg email"); #define MEDIA_QBASEAPPCLASS "@c:root media audio" #define LMEDIA_QBASEAPPCLASS L"@c:root media audio" #define VIDEO_QBASEAPPCLASS "@c:root media video" @@ -90,7 +92,7 @@ // First string is the function name used in TestScripter script file. // Second is the actual implementation member function. ENTRY( "TestStartHarvester", CHarvesterPluginTester::TestStartHarvesterL ), - ENTRY( "TestFormBaseAppClass", CHarvesterPluginTester::TestFormBaseAppClass ), + ENTRY( "TestFormBaseAppClass", CHarvesterPluginTester::TestFormBaseAppClassL ), ENTRY( "TestDatabasePath", CHarvesterPluginTester::TestDatabasePathL ), ENTRY( "TestCreateIndexItemL_Add", CHarvesterPluginTester::TestCreateIndexItemL ), ENTRY( "TestCreateIndexItemL_Update", CHarvesterPluginTester::TestCreateIndexItemL ), @@ -100,6 +102,19 @@ ENTRY( "TestMessaging", CHarvesterPluginTester::TestMessageHarvesterL ), ENTRY( "TestMessageHarvesting", CHarvesterPluginTester::TestMessageHarvesterWithMessageL ), ENTRY( "TestMessageDriveChange", CHarvesterPluginTester::TestMessageHarvesterChangeDriveL ), + ENTRY( "TestMessageRunErrorL", CHarvesterPluginTester::TestMessageRunErrorL ), + ENTRY( "TestMessageIsMediaRemovableL", CHarvesterPluginTester::TestMessageIsMediaRemovableL ), + ENTRY( "TestMessageMountNoIndexerL", CHarvesterPluginTester::TestMessageMountNoIndexerL ), + ENTRY( "TestQualifiedBaseAppClass", CHarvesterPluginTester::TestQualifiedBaseAppClassL ), + ENTRY( "TestHandleMsgMoved", CHarvesterPluginTester::TestHandleMsgMovedL ), + ENTRY( "TestMessageDataHandler", CHarvesterPluginTester::TestMessageDataHandlerL ), + ENTRY( "TestMsgUnMount", CHarvesterPluginTester::TestMsgUnMountL ), + ENTRY( "TestFormBaseAppClass", CHarvesterPluginTester::TestFormFormBaseAppClassL ), + ENTRY( "TestMsgDelete", CHarvesterPluginTester::TestMsgDeleteL ), + ENTRY( "TestMsgHandlesession", CHarvesterPluginTester::TestMsgHandlesessionL ), + ENTRY( "TestMsgHandlesessionPanic", CHarvesterPluginTester::TestMsgHandlesessionPanicL ), + ENTRY( "TestMsgOverwriteOrAddToQuere", CHarvesterPluginTester::TestMsgOverwriteOrAddToQuereL ), + ENTRY( "TestMsgMessageHarvester", CHarvesterPluginTester::TestMsgMessageHarvesterL ), ENTRY( "TestStartBookmarksHarvesterL", CHarvesterPluginTester::TestStartBookmarksHarvesterL ), ENTRY( "TestAddBookmarkL", CHarvesterPluginTester::TestAddBookmarkL ), ENTRY( "TestAddGetDomainL", CHarvesterPluginTester::TestAddGetDomainL ), @@ -113,8 +128,15 @@ ENTRY( "TestUpdateNoteL", CHarvesterPluginTester::TestUpdateNoteL ), ENTRY( "TestContactsHarvesting", CHarvesterPluginTester::TestStartContactsHarvesterL ), ENTRY( "TestCreateContactIndexItemL_Add", CHarvesterPluginTester::TestCreateContactIndexItemL ), + ENTRY( "TestCreateAllContactFields", CHarvesterPluginTester::TestCreateAllContactFieldsL ), ENTRY( "TestCreateContactIndexItemL_Edit", CHarvesterPluginTester::TestCreateContactIndexItemL ), ENTRY( "TestCreateContactIndexItemL_Delete", CHarvesterPluginTester::TestCreateContactIndexItemL ), + ENTRY( "TestCreateContactIndexItemL_NoIndexer", CHarvesterPluginTester::TestCreateContactIndexItemNoIndexerL ), + ENTRY( "TestContactGetDateL", CHarvesterPluginTester::TestContactGetDateL ), + ENTRY( "TestContactDelayedErrorL", CHarvesterPluginTester::TestContactDelayedErrorL ), + ENTRY( "TestContactDelayedCallbackNoIContactsL", CHarvesterPluginTester::TestContactDelayedCallbackNoIContactsL ), + ENTRY( "TestContactDelayedCallbackNoIObserverL", CHarvesterPluginTester::TestContactDelayedCallbackNoIObserverL ), + ENTRY( "TestContactDelayedCallbackWrongCountL", CHarvesterPluginTester::TestContactDelayedCallbackWrongCountL ), ENTRY( "TestCreateContactGroup", CHarvesterPluginTester::TestCreateContactGroupL ), ENTRY( "TestCalenderHarvesting", CHarvesterPluginTester::TestStartCalenderHarvesterL ), ENTRY( "TestCalenderEntry",CHarvesterPluginTester::TestCalenderEntryL ), @@ -135,6 +157,8 @@ ENTRY( "TestAudioMMCEventL",CHarvesterPluginTester::TestAudioMMCEventL ), ENTRY( "TestVideoMMCEventL",CHarvesterPluginTester::TestVideoMMCEventL ), ENTRY( "TestImageMMCEventL",CHarvesterPluginTester::TestImageMMCEventL ), + ENTRY( "TestStartEmailPlugin",CHarvesterPluginTester::TestStartEmailPluginL ), + ENTRY( "TestHandleEmailDoc",CHarvesterPluginTester::TestHandleEmailDocL ), //ADD NEW ENTRY HERE // [test cases entries] - Do not remove }; @@ -155,6 +179,12 @@ else logger->Log( errorString ); } +CSearchDocument* CHarvesterPluginTester::prepareemaildocument() + { + CSearchDocument* doc = CSearchDocument::NewL( KemailId, + KMsgBaseAppClassGeneric ); + return doc; + } // Example test method function. // ----------------------------------------------------------------------------- TInt CHarvesterPluginTester::TestStartHarvesterL( CStifItemParser& /*aItem*/ ) @@ -173,11 +203,12 @@ iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete filePlugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } -TInt CHarvesterPluginTester::TestFormBaseAppClass( CStifItemParser& aItem ) +TInt CHarvesterPluginTester::TestFormBaseAppClassL( CStifItemParser& aItem ) { // Print to UI _LIT( KFilePluginBaseAppClass, "FormBaseAppClass" ); @@ -212,7 +243,7 @@ } delete filePlugin; delete iPluginTester; - + iPluginTester = NULL; doLog( iLog, error, KTestFormBaseAppClassNoError ); return error; } @@ -248,6 +279,7 @@ CleanupStack::PopAndDestroy( buffer ); delete filePlugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, error, KTestDatabasePathNoError ); return error; } @@ -259,15 +291,24 @@ ESearchTypeNoResultsExpected }; -TInt doSearch( const TDesC& aSearchString, const TDesC& aBaseAppClass, TSearchType aSearchType ) +TInt doSearchL( const TDesC& aSearchString, const TDesC& aBaseAppClass, TSearchType aSearchType ) { + _LIT(KHeaderPrefix, "$prefix(\""); + _LIT(KTrailerPrefix, "\")"); RSearchServerSession session; User::LeaveIfError( session.Connect() ); CCPixSearcher* searcher = CCPixSearcher::NewLC( session ); - searcher->OpenDatabaseL( aBaseAppClass ); - TInt docCount = searcher->SearchL( aSearchString, KNullDesC); + //Form prefix search query + searcher->OpenDatabaseL( aBaseAppClass ); + HBufC* searchbuf = HBufC::NewLC(KHeaderPrefix().Length() + aSearchString.Length() + KTrailerPrefix().Length()); + TPtr searchstring = searchbuf->Des(); + searchstring.Append(KHeaderPrefix); + searchstring.Append(aSearchString); + searchstring.Append(KTrailerPrefix); + TInt docCount = searcher->SearchL( searchstring, KNullDesC); + CleanupStack::PopAndDestroy( searchbuf ); CleanupStack::PopAndDestroy( searcher ); session.Close(); @@ -309,7 +350,7 @@ TPtrC searchString; while( aItem.GetNextString ( searchString ) == KErrNone && error == KErrNone ) { - error = doSearch( searchString, KAppBasePath, ESearchTypeResultsExpected ); + error = doSearchL( searchString, KAppBasePath, ESearchTypeResultsExpected ); } filePlugin->CreateContentIndexItemL( filePathName, ECPixRemoveAction ); } @@ -323,7 +364,7 @@ TPtrC searchString; while( aItem.GetNextString ( searchString ) == KErrNone && error == KErrNone ) { - error = doSearch( searchString, KAppBasePath, ESearchTypeNoResultsExpected ); + error = doSearchL( searchString, KAppBasePath, ESearchTypeNoResultsExpected ); } } } @@ -337,7 +378,7 @@ TPtrC searchString; while( aItem.GetNextString ( searchString ) == KErrNone && error == KErrNone ) { - error = doSearch( searchString, KAppBasePath, ESearchTypeResultsExpected ); + error = doSearchL( searchString, KAppBasePath, ESearchTypeResultsExpected ); } } } @@ -358,7 +399,7 @@ _LIT( KDirectoryToCreate, "C:\\data\\TestFolder\\" ); RFs fs; - fs.Connect(); + User::LeaveIfError( fs.Connect() ); TBool folderExists = BaflUtils::FolderExists(fs, KDirectoryToCreate); if(!folderExists) { @@ -368,12 +409,13 @@ if(error == KErrNone) { - error = doSearch( _L("TestFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected ); + error = doSearchL( _L("TestFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected ); fs.RmDir(KDirectoryToCreate); } fs.Close(); delete filePlugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, error, _L("Error: TestFolderCreateL") ); return error; @@ -383,7 +425,7 @@ { TInt error = KErrNone; RFs fs; - fs.Connect(); + User::LeaveIfError( fs.Connect() ); CFilePlugin* filePlugin = CFilePlugin::NewL(); CFolderRenamedHarvester* iFolderRenameHarvester = CFolderRenamedHarvester::NewL( *filePlugin, fs); @@ -407,7 +449,7 @@ } iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. - error = doSearch( _L("TestRenameFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected ); + error = doSearchL( _L("TestRenameFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected ); if(error == KErrNone) { @@ -418,13 +460,15 @@ User::After( (TTimeIntervalMicroSeconds32)35000000 ); //Search for the renamed directory - error = doSearch( _L("TestFolderRenamed"), KAppBaseFolderFilePath, ESearchTypeNoResultsExpected ); + error = doSearchL( _L("TestFolderRenamed"), KAppBaseFolderFilePath, ESearchTypeNoResultsExpected ); fs.RmDir(KDirectoryRenamed); delete filePlugin; delete iFolderRenameHarvester; + iFolderRenameHarvester = NULL; delete iPluginTester; + iPluginTester = NULL; fs.Close(); doLog( iLog, error, _L("Error: TestFolderRenameL") ); @@ -461,6 +505,7 @@ delete plugin; delete iPluginTester; + iPluginTester = NULL; delete sessionobserver; delete msgSession; doLog(iLog,KErrNone,KNoErrorString); @@ -502,6 +547,7 @@ delete plugin; delete iPluginTester; + iPluginTester = NULL; delete sessionobserver; delete msgSession; doLog(iLog,error,_L("Error in TestMessageHarvesterWithMessageL")); @@ -552,12 +598,231 @@ delete plugin; delete iPluginTester; + iPluginTester = NULL; delete sessionobserver; delete msgSession; doLog(iLog,error,_L("Error in TestMessageHarvesterChangeDriveL")); return error; } +//Only for coverage. +TInt CHarvesterPluginTester::TestMessageRunErrorL( CStifItemParser& /*aItem */) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + plugin->iMessageMonitor->RunError( KErrNone ); + delete plugin; + return KErrNone; + } +TInt CHarvesterPluginTester::TestQualifiedBaseAppClassL( CStifItemParser& ) + { + //For coverage + TDriveNumber drive ( EDriveA ); + _LIT( appcls1 ,"@c:root media image" ); + _LIT( appcls2 ,"@*:root media image" ); + _LIT( appcls3 ,"d:root media image" ); + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); + plugin->MountL( EDriveC ); + TRAPD(err, plugin->StartHarvestingL(appcls1)); + delete plugin->iIndexer[EDriveC]; + plugin->iIndexer[EDriveC] = NULL; + TRAP(err, plugin->StartHarvestingL(appcls1)); + TRAP(err, plugin->StartHarvestingL(appcls2)); + TRAP(err, plugin->StartHarvestingL(appcls3)); + delete plugin; + delete iPluginTester; + return err; + } +TInt CHarvesterPluginTester::TestMsgUnMountL( CStifItemParser& ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); + plugin->MountL(EDriveC); + plugin->UnMount( EDriveC ); + plugin->MountL(EDriveC); + plugin->UnMount( EDriveC , EFalse); + delete plugin; + delete iPluginTester; + return KErrNone; + } + +TAny CHarvesterPluginTester::TestHandleMsgMovedL( CStifItemParser& ) + { + const TMsvId id1 = 1; + CMsvEntrySelection* selection = new( ELeave ) CMsvEntrySelection; + // Current entry will be the one to send + selection->AppendL( id1 ); +// CMsvEntrySelection entry; + const long int ref = 2; + + const TMsvId id2 = 2; +// entry.AppendL(id1); + CMessagePlugin* plugin = CMessagePlugin::NewL(); + plugin->iMessageMonitor->HandleMsgMovedL(id1, id2, *selection); + selection->Reset(); + delete plugin; + } + +TAny CHarvesterPluginTester::TestMessageDataHandlerL( CStifItemParser& ) + { + CMessagePlugin* plugin3 = CMessagePlugin::NewL(); + _LIT8(Des1, "0xFFFFF"); + _LIT8(Des2, "0xF"); + _LIT8(Des3, "FFx0"); + _LIT8(Des4, "F"); + _LIT8(Des5, "0xFEFF"); + _LIT8(Des6, "0xFFFE"); + const TMsvId id1 = 1; + const TMsvId id2 = 2; + CMessageDataHandler* idatahandler = CMessageDataHandler::NewL( *plugin3, *(plugin3->iMsvSession) ); + idatahandler->CreateMessageIndexItemL(id1,ECPixAddAction,id1); + idatahandler->IsTextUcs2(Des1); + idatahandler->IsTextUcs2(Des2); + idatahandler->IsTextUcs2(Des3); + idatahandler->IsTextUcs2(Des4); + idatahandler->IsTextUcs2(Des5); + idatahandler->IsTextUcs2(Des6); + const TInt KUtf8BomLength = 3; + const TUint8 KUtf8Bom[KUtf8BomLength] = {0xEF, 0xBB, 0xBF}; + const TUint8 KUtf8Bom1[KUtf8BomLength+1] = {0xEF, 0x5, 0xF, 0xE}; + TPtrC8 ptr(KUtf8Bom, KUtf8BomLength); + TPtrC8 ptr1(KUtf8Bom1, KUtf8BomLength+1); + idatahandler->TextContainsUtf8Bom(ptr); + idatahandler->TextContainsUtf8Bom(ptr1); + idatahandler->DoCancel(); + idatahandler->RunError(0); + delete plugin3; + + } +TInt CHarvesterPluginTester::TestMessageMountNoIndexerL( CStifItemParser& ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + RSearchServerSession session; + User::LeaveIfError( session.Connect() ); + plugin->iIndexer[EDriveA] = CCPixIndexer::NewL( session ); + TRAPD( err, plugin->MountL( EDriveA, EFalse ) ); + TRAP( err, plugin->MountL( EDriveA, EFalse ) ); //For coverage + delete plugin->iIndexer[EDriveA]; + plugin->iIndexer[EDriveA] = NULL; + delete plugin; + return err; + } + +TInt CHarvesterPluginTester::TestMessageIsMediaRemovableL( CStifItemParser& aItem ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + TInt error; + TInt driveNumber = 0; + //TODO add a while loop. + while( aItem.GetNextInt( driveNumber ) == KErrNone ) + { + error = 0; + TDriveNumber number(static_cast(driveNumber) ); + TRAP( error, plugin->IsMediaRemovableL( number ) ); + if( error ) break; + } + delete plugin; + return error; + } + +TInt CHarvesterPluginTester::TestFormFormBaseAppClassL( CStifItemParser& /*aItem*/ ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + TBuf<20> appclass; + //To test proper case + plugin->FormBaseAppClass( EDriveA , appclass); + //To test failure case + plugin->FormBaseAppClass( (TDriveNumber)29 , appclass); + //cleanup + delete plugin; + return KErrNone; + } + +TInt CHarvesterPluginTester::TestMsgDeleteL( CStifItemParser& /*aItem*/ ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CMessageDataHandler* idatahandler = CMessageDataHandler::NewL( *plugin, *(plugin->iMsvSession) ); + const TMsvId id1 = 1; + RSearchServerSession session; + User::LeaveIfError( session.Connect() ); + plugin->iIndexer[plugin->iCurrentDrive] = CCPixIndexer::NewL( session ); + idatahandler->CreateMessageIndexItemL( id1, ECPixRemoveAction, id1 ); + delete idatahandler; + delete plugin; + session.Close(); + return KErrNone; + } + +TInt CHarvesterPluginTester::TestMsgHandlesessionL( CStifItemParser& /*aItem*/ ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); + plugin->StartPluginL(); + TMsvId id = 1; + TDriveNumber drive1 = EDriveB; + TDriveNumber drive2 = EDriveC; + CMsvEntrySelection* selection = new( ELeave ) CMsvEntrySelection; + // Current entry will be the one to send + selection->AppendL( id ); + TRAPD(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvEntriesDeleted , (TAny*)selection ,NULL , NULL)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvEntriesMoved , (TAny*)selection ,NULL , NULL)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvEntriesMoved , (TAny*)selection ,(TAny*)selection , NULL)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvEntriesMoved , (TAny*)selection ,(TAny*)selection , (TAny*)selection)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvEntriesMoved , NULL ,(TAny*)selection , (TAny*)selection)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvMediaChanged , (TAny*)&drive1 ,(TAny*)&drive2 , NULL)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvMediaUnavailable , (TAny*)&drive2 ,NULL , NULL)); + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvMediaAvailable , (TAny*)&drive1 ,NULL , NULL)); + selection->Reset(); + delete plugin; + delete iPluginTester; + return err; + } + +TInt CHarvesterPluginTester::TestMsgHandlesessionPanicL( CStifItemParser& aItem ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); + plugin->StartPluginL(); + TInt num = 0; + TInt err = KErrNone; + aItem.GetNextInt( num ); + if ( num == 0) + { + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvServerFailedToStart , NULL ,NULL , NULL)); + } + else if ( num ==1 ) + { + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvCloseSession , NULL ,NULL , NULL)); + } + else + TRAP(err , plugin->HandleSessionEventL(MMsvSessionObserver::EMsvServerTerminated , NULL ,NULL , NULL)); + + delete plugin; + delete iPluginTester; + return err; + } + +TInt CHarvesterPluginTester::TestMsgOverwriteOrAddToQuereL( CStifItemParser& /*aItem*/ ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + plugin->iMessageMonitor->OverwriteOrAddToQuereL( 1 , ECPixAddAction , 1 ); + plugin->iMessageMonitor->OverwriteOrAddToQuereL( 1 , ECPixAddAction , 1 ); + plugin->iMessageMonitor->RunL(); + delete plugin; + return KErrNone; + } + +TInt CHarvesterPluginTester::TestMsgMessageHarvesterL( CStifItemParser& /*aItem*/ ) + { + CMessagePlugin* plugin = CMessagePlugin::NewL(); + CMessageHarvester* messageHarvester = CMessageHarvester::NewL( *plugin, *(plugin->iMsvSession) ); + messageHarvester->RunError(KErrNone); + messageHarvester->HandleNextRequest(); + delete messageHarvester; + delete plugin; + return KErrNone; + } + TInt CHarvesterPluginTester::SearchForTextL(const TDesC& aQueryString, const TDesC& aBaseAppclass,const TDesC& aDefaultField) { TInt DocumentCount(KErrNotFound); @@ -582,6 +847,7 @@ iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -627,12 +893,12 @@ { error = aItem.GetNextString( string ); if( KErrNone == error ) - error = doSearch( string , _L( BOOKMARK_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( string , _L( BOOKMARK_QBASEAPPCLASS ), ESearchTypeResultsExpected ); } delete plugin; delete iPluginTester; - + iPluginTester = NULL; favoritesDb.Close(); favSession.Close(); @@ -670,6 +936,7 @@ iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete appsPlugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -686,6 +953,7 @@ delete appsPlugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -698,7 +966,8 @@ plugin->StartHarvestingL( _L(NOTES_QBASEAPPCLASS) ); iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete plugin; - delete iPluginTester; + delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -762,7 +1031,7 @@ session->AddNoteL(memo->Des()); plugin->StartHarvestingL( _L(NOTES_QBASEAPPCLASS) ); iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. - error = doSearch( aString2, _L(NOTES_QBASEAPPCLASS), ESearchTypeResultsExpected ); + error = doSearchL( aString2, _L(NOTES_QBASEAPPCLASS), ESearchTypeResultsExpected ); delete session; doLog( iLog, error, KNoErrorString ); @@ -770,6 +1039,7 @@ delete memo; delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -792,14 +1062,14 @@ session->AddNoteL( buf8->Des()); User::After( (TTimeIntervalMicroSeconds32)35000000 ); delete buf8; - error = doSearch( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); doLog( iLog, error, KSearchError ); if( error == KErrNone) { session->DeleteNoteEntryL(); User::After( (TTimeIntervalMicroSeconds32)35000000 ); //Delete the Note entry added previously and search for result - error = doSearch( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); //If the entery is succesfully deleted, make error to KErrNone.To show testcase success if(error == KErrNotFound) error = KErrNone; @@ -807,6 +1077,7 @@ delete session; delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, error, KSearchError ); return KErrNone; } @@ -831,7 +1102,7 @@ TBuf<20> oldsearchstring; oldsearchstring.Copy( oldString ); iPluginTester->iWaitForHarvester->Start(); - error = doSearch( oldsearchstring, _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( oldsearchstring, _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); doLog( iLog, error, KSearchError ); TBuf<20> newsearchstring; @@ -842,14 +1113,15 @@ session->UpdateNoteEntryL( oldbuf8->Des(), newbuf8->Des() ); plugin->StartHarvestingL( _L(NOTES_QBASEAPPCLASS) ); iPluginTester->iWaitForHarvester->Start(); - error = doSearch( newsearchstring, _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( newsearchstring, _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected ); doLog( iLog, error, KSearchError ); delete newbuf8; delete oldbuf8; delete session; delete plugin; - delete iPluginTester; + delete iPluginTester; + iPluginTester = NULL; return error; } @@ -862,6 +1134,7 @@ iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -890,6 +1163,70 @@ return contactId; } +TInt CHarvesterPluginTester::TestContactDelayedCallbackNoIContactsL( CStifItemParser& /*aItem*/ ) + { + CContactsPlugin* plugin = CContactsPlugin::NewL(); + //for coverage + delete plugin->iContacts; + plugin->iContacts = NULL; + TRAPD( err, plugin->DelayedCallbackL( KErrNone ) ); + delete plugin; + return err; + } + +TInt CHarvesterPluginTester::TestContactDelayedCallbackNoIObserverL( CStifItemParser& /*aItem*/ ) + { + CContactsPlugin* plugin = CContactsPlugin::NewL(); + //for coverage + delete plugin->iObserver; + plugin->iObserver = NULL; + TRAPD( err, plugin->DelayedCallbackL( KErrNone ) ); + delete plugin; + return err; + } + +TInt CHarvesterPluginTester::TestContactDelayedCallbackWrongCountL( CStifItemParser& /*aItem*/ ) + { + //This case can happen if a contact was deleted while harvesting is going on. + CContactsPlugin* plugin = CContactsPlugin::NewL(); + plugin->iCurrentIndex = plugin->iContacts->Count()+1; + TRAPD( err, plugin->DelayedCallbackL( KErrNone ) ); + delete plugin; + return err; + } + +TInt CHarvesterPluginTester::TestContactDelayedErrorL(CStifItemParser& /*aItem*/) + { + CContactsPlugin* plugin = CContactsPlugin::NewL(); + plugin->DelayedError( KErrGeneral ); + delete plugin; + return KErrNone; + } + +TInt CHarvesterPluginTester::TestContactGetDateL( CStifItemParser& aItem ) + { + CContactsPlugin* plugin = CContactsPlugin::NewL(); + + TPtrC dateString; + TInt error = 0; + if( aItem.GetNextString ( dateString ) == KErrNone ) + { + TBuf<30> date; //Picked up 30 from contactsplugin.cpp file. + TRAP(error, plugin->GetDateL(dateString, date) ); + } + delete plugin; + return error; + } + +TInt CHarvesterPluginTester::TestCreateContactIndexItemNoIndexerL( CStifItemParser& /*aItem*/ ) + { + //Create contact plugin, call CreateContactIndexItemL without creating indexer. + CContactsPlugin* plugin = CContactsPlugin::NewL(); + TRAPD(err, plugin->CreateContactIndexItemL(0, ECPixUpdateAction) ); + delete plugin; + return err; + } + TInt CHarvesterPluginTester::TestCreateContactIndexItemL( CStifItemParser& aItem ) { TInt error = KErrNone; @@ -917,7 +1254,7 @@ aContactId = CreateNewContactL( *db, ContactName, _L("1234") ); iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. - error = doSearch( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); db->DeleteContactL(aContactId); } } @@ -953,27 +1290,8 @@ CleanupStack::PopAndDestroy(contactItem); CleanupStack::PopAndDestroy(newCard); - error = doSearch( NewContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( NewContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); } - /*CContactItem* contactItem = db->OpenContactL( aContactId ); - CleanupStack::PushL( contactItem ); - // First get the item's field set - CContactItemFieldSet& fieldSet=contactItem->CardFields(); - // Search the field set for the given name field - TInt index = fieldSet.Find( KUidContactFieldGivenName ); - CContactItemField &field= fieldSet[index]; - if( aItem.GetNextString ( NewContactName ) == KErrNone ) - { - field.TextStorage()->SetTextL( NewContactName ); - // Commit the change back to database and clean up - db->CommitContactL( *contactItem ); - } - CleanupStack::PopAndDestroy(contactItem)*/; - - /*plugin->StartHarvestingL( _L(CONTACT_QBASEAPPCLASS) ); - iPluginTester->iWaitForHarvester->Start(); - error = doSearch( NewContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); - db->DeleteContactL( aContactId );*/ } } if( IndexAction.Compare( KActionDelete ) == 0 ) @@ -985,25 +1303,98 @@ //Add a contact to contactdatabase and later delete it aContactId = CreateNewContactL( *db, ContactName, _L("123455")); iPluginTester->iWaitForHarvester->Start(); - error = doSearch( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); if(error == KErrNone) { plugin->StartHarvestingL( _L(CONTACT_QBASEAPPCLASS)); db->DeleteContactL(aContactId); iPluginTester->iWaitForHarvester->Start(); - error = doSearch( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeNoResultsExpected ); + error = doSearchL( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeNoResultsExpected ); } } } - } - + } delete db; delete plugin; delete iPluginTester; - + iPluginTester = NULL; doLog( iLog, error, KSearchError ); return KErrNone; } + +TInt CHarvesterPluginTester::TestCreateAllContactFieldsL( CStifItemParser& aItem ) + { + TInt error = KErrNone; + TPtrC ContactName; + _LIT( KBirthDate, "19970107:"); + _LIT( KSearchError, "Search Failed" ); + + CContactsPlugin* plugin = CContactsPlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); + plugin->StartPluginL(); + CContactDatabase* db = CContactDatabase::OpenL(); + if( aItem.GetNextString ( ContactName ) == KErrNone ) + { + plugin->StartHarvestingL( _L(CONTACT_QBASEAPPCLASS) ); + CContactCard* newCard = CContactCard::NewLC(); + + // Create the firstName field and add the data to it + CContactItemField* firstName = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldGivenName ); + firstName->TextStorage()->SetTextL(ContactName); + newCard->AddFieldL(*firstName); + CleanupStack::Pop(firstName); + + CContactItemField* suffix = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSuffixName ); + suffix->TextStorage()->SetTextL(_L("Mr")); + newCard->AddFieldL(*suffix); + CleanupStack::Pop(suffix); + + CContactItemField* assistant = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldAssistant ); + assistant->TextStorage()->SetTextL(_L("Jane")); + newCard->AddFieldL(*assistant); + CleanupStack::Pop(assistant); + + CContactItemField* department = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldDepartmentName ); + department->TextStorage()->SetTextL(_L("Services")); + newCard->AddFieldL(*department); + CleanupStack::Pop(department); + + CContactItemField* birthday = CContactItemField::NewLC( KStorageTypeDateTime, KUidContactFieldBirthday ); + TTime time(KBirthDate); + birthday->DateTimeStorage()->SetTime(time); + newCard->AddFieldL(*birthday); + CleanupStack::Pop(birthday); + + CContactItemField* anniversary = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldAnniversary ); + anniversary->TextStorage()->SetTextL(_L("2002-10-10")); + newCard->AddFieldL(*anniversary); + CleanupStack::Pop(anniversary); + + // Create the phoneNo field and add the data to it + CContactItemField* phoneNumber = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldPhoneNumber ); + phoneNumber->TextStorage()->SetTextL(_L("1234")); + newCard->AddFieldL(*phoneNumber); + CleanupStack::Pop(phoneNumber); + + // Add newCard to the database + const TContactItemId contactId = db->AddNewContactL(*newCard); + CleanupStack::PopAndDestroy(newCard); + + iPluginTester->iWaitForHarvester->Start(); + + error = doSearchL( ContactName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + if( error == KErrNone ) + { + error = doSearchL( _L("jan"), _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + } + } + delete db; + delete plugin; + delete iPluginTester; + iPluginTester = NULL; + doLog( iLog, error, KSearchError ); + return error; + } TInt CHarvesterPluginTester::TestCreateContactGroupL( CStifItemParser& aItem ) { TInt error = KErrNone; @@ -1021,7 +1412,7 @@ CContactItem* newitem = db->CreateContactGroupL( _L("TestGroup") ); db->AddContactToGroupL( aContactId, newitem->Id() ); iPluginTester->iWaitForHarvester->Start(); - error = doSearch( GroupName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( GroupName, _L( CONTACT_QBASEAPPCLASS ), ESearchTypeResultsExpected ); //update the group by adding a new contact, to get update event CContactGroup* group = static_cast(db->OpenContactLX(newitem->Id())); @@ -1043,6 +1434,7 @@ delete plugin; delete iPluginTester; + iPluginTester = NULL; delete db; doLog( iLog, error, KSearchError ); return KErrNone; @@ -1057,6 +1449,7 @@ iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, KErrNone, KNoErrorString ); return KErrNone; } @@ -1075,7 +1468,7 @@ session->AddEntryL(); iPluginTester->iWaitForHarvester->Start(); User::After((TTimeIntervalMicroSeconds32)30000000); - error = doSearch( _L("Meeting"), _L( CALENDAR_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( _L("Meeting"), _L( CALENDAR_QBASEAPPCLASS ), ESearchTypeResultsExpected ); doLog( iLog, error, KSearchError ); // For update event @@ -1087,7 +1480,7 @@ session->DeleteEntryL(); iPluginTester->iWaitForHarvester->Start(); //Delete the calender entry added previously and search for result - error = doSearch( _L("scheduled"), _L( CALENDAR_QBASEAPPCLASS ), ESearchTypeResultsExpected ); + error = doSearchL( _L("scheduled"), _L( CALENDAR_QBASEAPPCLASS ), ESearchTypeResultsExpected ); //If the entery is succesfully deleted, make error to KErrNone.To show testcase success if(error == KErrNotFound) @@ -1096,6 +1489,7 @@ delete session; delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, error, KSearchError ); return KErrNone; } @@ -1133,6 +1527,7 @@ MessagingUtils::RemoveMmsEntryL( msgSession, msgid ); delete plugin; delete iPluginTester; + iPluginTester = NULL; delete sessionobserver; delete msgSession; doLog(iLog,error,KSearchError); @@ -1164,6 +1559,7 @@ MessagingUtils::RemoveMmsEntryL( msgSession, msgid ); delete plugin; delete iPluginTester; + iPluginTester = NULL; delete sessionobserver; delete msgSession; doLog(iLog,error,KSearchError); @@ -1183,7 +1579,7 @@ plugin->StartPluginL(); //Initialize the Plugin //Copy file path RFs fileSession; - fileSession.Connect(); + User::LeaveIfError( fileSession.Connect() ); _LIT(KPathToMusic,"c:\\data\\music\\"); fileSession.Delete(_L("c:\\data\\music\\Eagle_Landed.mp3")); //Delete if already exist //pause harvester while copy @@ -1208,6 +1604,7 @@ doLog(iLog,error,_L("Error in TestAudioHarvestingL")); delete plugin; delete iPluginTester; + iPluginTester = NULL; fileSession.Close(); //End search return error; @@ -1225,7 +1622,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1263,6 +1660,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1276,7 +1674,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1310,6 +1708,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1416,7 +1815,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1450,6 +1849,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; doLog( iLog, error, _L("Error in TestVideoHarvestingIndexL") ); return error; } @@ -1467,7 +1867,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1505,6 +1905,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1518,7 +1919,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1552,6 +1953,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1565,7 +1967,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1599,6 +2001,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1615,7 +2018,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect()); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1652,6 +2055,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1665,7 +2069,7 @@ CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin ); plugin->StartPluginL(); RFs fSession; - fSession.Connect(); + User::LeaveIfError( fSession.Connect() ); CleanupClosePushL( fSession ); if((aItem.GetNextString(filepath)==KErrNone) && (aItem.GetNextString(filename) == KErrNone)) { @@ -1699,6 +2103,7 @@ CleanupStack::PopAndDestroy(); delete plugin; delete iPluginTester; + iPluginTester = NULL; return error; } @@ -1716,7 +2121,8 @@ //iPluginTester->iWaitForHarvester->Start(); //Start Wait AO and let it complete doLog(iLog,error,_L("Error in TestAudioMMCEventL")); delete plugin; - delete iPluginTester; + delete iPluginTester; + iPluginTester = NULL; //End search return err; } @@ -1735,7 +2141,8 @@ //iPluginTester->iWaitForHarvester->Start(); //Start Wait AO and let it complete doLog(iLog,error,_L("Error in TestVideoMMCEventL")); delete plugin; - delete iPluginTester; + delete iPluginTester; + iPluginTester = NULL; //End search return err; } @@ -1754,9 +2161,47 @@ //iPluginTester->iWaitForHarvester->Start(); //Start Wait AO and let it complete doLog(iLog,error,_L("Error in TestImageMMCEventL")); delete plugin; - delete iPluginTester; + delete iPluginTester; + iPluginTester = NULL; //End search return err; } +TInt CHarvesterPluginTester::TestStartEmailPluginL( CStifItemParser& /*aItem*/ ) + { + _LIT( KHarvesterPluginTester, "HarvesterPluginTester: %S" ); + _LIT( KExample, "In TestStartEmailPluginL" ); + TestModuleIf().Printf( 0, KHarvesterPluginTester, KExample ); + + // Print to log file + iLog->Log( KExample ); + CEmailPlugin* emailPlugin = CEmailPlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( emailPlugin ); + emailPlugin->StartPluginL(); //Calls Add + emailPlugin->StartHarvestingL( KEmailAppBasePath ); + delete emailPlugin; + delete iPluginTester; + doLog( iLog, KErrNone, KNoErrorString ); + return KErrNone; + } + +TInt CHarvesterPluginTester::TestHandleEmailDocL( CStifItemParser& /*aItem*/ ) + { + _LIT( KHarvesterPluginTester, "HarvesterPluginTester: %S" ); + _LIT( KExample, "In TestHandleEmailDocL" ); + TestModuleIf().Printf( 0, KHarvesterPluginTester, KExample ); + + // Print to log file + iLog->Log( KExample ); + CEmailPlugin* emailPlugin = CEmailPlugin::NewL(); + CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( emailPlugin ); + CSearchDocument* doc = prepareemaildocument(); + TRAPD(err , emailPlugin->HandleDocumentL( doc , ECPixAddAction)); + iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete. + delete emailPlugin; + delete iPluginTester; + doLog( iLog, err, KNoErrorString ); + return err; + } + // [End of File] - Do not remove diff -r 2f67eb14d003 -r 4a2987baf8f7 layers.sysdef.xml --- a/layers.sysdef.xml Wed Jun 23 17:22:18 2010 +0100 +++ b/layers.sysdef.xml Mon Jun 28 11:03:15 2010 +0530 @@ -6,8 +6,9 @@ - - + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/bwins/isengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/bwins/isengineu.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,19 @@ +EXPORTS + ?qt_metacall@IsEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1 NONAME ; int IsEngine::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacast@IsEngine@@UAEPAXPBD@Z @ 2 NONAME ; void * IsEngine::qt_metacast(char const *) + ?trUtf8@IsEngine@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString IsEngine::trUtf8(char const *, char const *, int) + ?trUtf8@IsEngine@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString IsEngine::trUtf8(char const *, char const *) + ?SelectedProvider@IsEngine@@QAEPAVServiceProvider@@XZ @ 5 NONAME ; class ServiceProvider * IsEngine::SelectedProvider(void) + ??0IsEngine@@QAE@PAVQObject@@@Z @ 6 NONAME ; IsEngine::IsEngine(class QObject *) + ??_EIsEngine@@UAE@I@Z @ 7 NONAME ; IsEngine::~IsEngine(unsigned int) + ?tr@IsEngine@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString IsEngine::tr(char const *, char const *) + ??1IsEngine@@UAE@XZ @ 9 NONAME ; IsEngine::~IsEngine(void) + ?getStaticMetaObject@IsEngine@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & IsEngine::getStaticMetaObject(void) + ?staticMetaObject@IsEngine@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const IsEngine::staticMetaObject + ?PerformWebSearch@IsEngine@@QAEXABVQString@@@Z @ 12 NONAME ; void IsEngine::PerformWebSearch(class QString const &) + ?Providers@IsEngine@@QAE_NAAV?$QList@VServiceProvider@@@@@Z @ 13 NONAME ; bool IsEngine::Providers(class QList &) + ?SetSelectedProvider@IsEngine@@QAE_NH@Z @ 14 NONAME ; bool IsEngine::SetSelectedProvider(int) + ?metaObject@IsEngine@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * IsEngine::metaObject(void) const + ?PerformInDeviceSearch@IsEngine@@QBEXABVQString@@@Z @ 16 NONAME ; void IsEngine::PerformInDeviceSearch(class QString const &) const + ?tr@IsEngine@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString IsEngine::tr(char const *, char const *, int) + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/bwins/isproviderdbmanageru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/bwins/isproviderdbmanageru.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,21 @@ +EXPORTS + ?getStaticMetaObject@IsProviderDBManager@@SAABUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const & IsProviderDBManager::getStaticMetaObject(void) + ??_EIsProviderDBManager@@UAE@I@Z @ 2 NONAME ; IsProviderDBManager::~IsProviderDBManager(unsigned int) + ?GetCountryList@IsProviderDBManager@@QAE_NAAVQStringList@@@Z @ 3 NONAME ; bool IsProviderDBManager::GetCountryList(class QStringList &) + ?SelectedProvider@IsProviderDBManager@@QAEPAVServiceProvider@@XZ @ 4 NONAME ; class ServiceProvider * IsProviderDBManager::SelectedProvider(void) + ?SetSelectedProvider@IsProviderDBManager@@QAE_NH@Z @ 5 NONAME ; bool IsProviderDBManager::SetSelectedProvider(int) + ?OpenDatabase@IsProviderDBManager@@AAE_NXZ @ 6 NONAME ; bool IsProviderDBManager::OpenDatabase(void) + ?GetCountryCode@IsProviderDBManager@@AAE?AVQString@@XZ @ 7 NONAME ; class QString IsProviderDBManager::GetCountryCode(void) + ?GetProviders@IsProviderDBManager@@QAE_NAAV?$QList@VServiceProvider@@@@@Z @ 8 NONAME ; bool IsProviderDBManager::GetProviders(class QList &) + ??0IsProviderDBManager@@QAE@PAVQObject@@@Z @ 9 NONAME ; IsProviderDBManager::IsProviderDBManager(class QObject *) + ?qt_metacast@IsProviderDBManager@@UAEPAXPBD@Z @ 10 NONAME ; void * IsProviderDBManager::qt_metacast(char const *) + ?metaObject@IsProviderDBManager@@UBEPBUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const * IsProviderDBManager::metaObject(void) const + ?trUtf8@IsProviderDBManager@@SA?AVQString@@PBD0@Z @ 12 NONAME ; class QString IsProviderDBManager::trUtf8(char const *, char const *) + ??1IsProviderDBManager@@UAE@XZ @ 13 NONAME ; IsProviderDBManager::~IsProviderDBManager(void) + ?staticMetaObject@IsProviderDBManager@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const IsProviderDBManager::staticMetaObject + ?CloseDatabase@IsProviderDBManager@@AAEXXZ @ 15 NONAME ; void IsProviderDBManager::CloseDatabase(void) + ?qt_metacall@IsProviderDBManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 16 NONAME ; int IsProviderDBManager::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@IsProviderDBManager@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString IsProviderDBManager::trUtf8(char const *, char const *, int) + ?tr@IsProviderDBManager@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString IsProviderDBManager::tr(char const *, char const *, int) + ?tr@IsProviderDBManager@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString IsProviderDBManager::tr(char const *, char const *) + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/inc/serviceprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/inc/serviceprovider.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef SERVICEPROVIDER_H +#define SERVICEPROVIDER_H + +#include +#include +#include + + +class ServiceProvider +{ +public: + ServiceProvider() {} + virtual ~ServiceProvider() {} + QString Name() const {return m_name;} + void SetName(const QString& aName) { m_name = aName; } + int Id() const {return m_providerId;} + void SetId(const int providerId) { m_providerId = providerId; } + HbIcon Icon() const {return m_icon;} + void SetIcon(const HbIcon& icon) { m_icon = icon; } + QString Description() const {return m_description;} + void SetDescription(const QString& description) { m_description = description; } + QString ProviderUrl() const {return m_providerUrl;} + void SetProviderUrl(const QString& providerUrl) { m_providerUrl = providerUrl; } + QString PluginName() const {return m_pluginName;} + void SetPluginName(const QString& pluginName) { m_pluginName = pluginName; } + +private: + int m_providerId; + QString m_name; + HbIcon m_icon; + QString m_description; + QString m_providerUrl; + QString m_pluginName; +}; + +#endif // SERVICEPROVIDER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/resources/baidu_logo.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/resources/baidu_logo.svg Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,353 @@ + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + 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 +gn5k/gDcvvNy6Nv/AfM48J4= + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/resources/bing_logo.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/resources/bing_logo.svg Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,906 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + 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 + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/resources/google_logo.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/resources/google_logo.svg Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,24 @@ + + + + + + +]> + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/resources/issearch_icons.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/resources/issearch_icons.qrc Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,8 @@ + + + google_logo.svg + bing_logo.svg + baidu_logo.svg + yandex_logo.svg + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/common/resources/yandex_logo.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/common/resources/yandex_logo.svg Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,13 @@ + + + + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/eabi/isengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/eabi/isengineu.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,19 @@ +EXPORTS + _ZN8IsEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN8IsEngine11qt_metacastEPKc @ 2 NONAME + _ZN8IsEngine16PerformWebSearchERK7QString @ 3 NONAME + _ZN8IsEngine16SelectedProviderEv @ 4 NONAME + _ZN8IsEngine16staticMetaObjectE @ 5 NONAME DATA 16 + _ZN8IsEngine19SetSelectedProviderEi @ 6 NONAME + _ZN8IsEngine19getStaticMetaObjectEv @ 7 NONAME + _ZN8IsEngine9ProvidersER5QListI15ServiceProviderE @ 8 NONAME + _ZN8IsEngineC1EP7QObject @ 9 NONAME + _ZN8IsEngineC2EP7QObject @ 10 NONAME + _ZN8IsEngineD0Ev @ 11 NONAME + _ZN8IsEngineD1Ev @ 12 NONAME + _ZN8IsEngineD2Ev @ 13 NONAME + _ZNK8IsEngine10metaObjectEv @ 14 NONAME + _ZNK8IsEngine21PerformInDeviceSearchERK7QString @ 15 NONAME + _ZTI8IsEngine @ 16 NONAME + _ZTV8IsEngine @ 17 NONAME + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/eabi/isproviderdbmanageru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/eabi/isproviderdbmanageru.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,21 @@ +EXPORTS + _ZN19IsProviderDBManager11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN19IsProviderDBManager11qt_metacastEPKc @ 2 NONAME + _ZN19IsProviderDBManager12GetProvidersER5QListI15ServiceProviderE @ 3 NONAME + _ZN19IsProviderDBManager12OpenDatabaseEv @ 4 NONAME + _ZN19IsProviderDBManager13CloseDatabaseEv @ 5 NONAME + _ZN19IsProviderDBManager14GetCountryCodeEv @ 6 NONAME + _ZN19IsProviderDBManager14GetCountryListER11QStringList @ 7 NONAME + _ZN19IsProviderDBManager16SelectedProviderEv @ 8 NONAME + _ZN19IsProviderDBManager16staticMetaObjectE @ 9 NONAME DATA 16 + _ZN19IsProviderDBManager19SetSelectedProviderEi @ 10 NONAME + _ZN19IsProviderDBManager19getStaticMetaObjectEv @ 11 NONAME + _ZN19IsProviderDBManagerC1EP7QObject @ 12 NONAME + _ZN19IsProviderDBManagerC2EP7QObject @ 13 NONAME + _ZN19IsProviderDBManagerD0Ev @ 14 NONAME + _ZN19IsProviderDBManagerD1Ev @ 15 NONAME + _ZN19IsProviderDBManagerD2Ev @ 16 NONAME + _ZNK19IsProviderDBManager10metaObjectEv @ 17 NONAME + _ZTI19IsProviderDBManager @ 18 NONAME + _ZTV19IsProviderDBManager @ 19 NONAME + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isengine/inc/isengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isengine/inc/isengine.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISENGINE_H +#define ISENGINE_H + +#include +#include +#include + +#if defined(ISENGINESERVICES_LIB) +# define ISENGINELIB_EXPORT Q_DECL_EXPORT +#else +# define ISENGINELIB_EXPORT Q_DECL_IMPORT +#endif + +class ServiceProvider; +class IsProviderDBManager; + +/*! + * Internet Search Engine + * + */ +class ISENGINELIB_EXPORT IsEngine : public QObject +{ + Q_OBJECT + + +public: + IsEngine( QObject *parent = 0 ); + ~IsEngine(); + + ServiceProvider* SelectedProvider(); + bool SetSelectedProvider(const int providerId); + bool Providers(QList& providers); + void PerformWebSearch(const QString& searchParam); + void PerformInDeviceSearch(const QString& searchParam) const; + +private: + /*!< Provider database handler*/ + IsProviderDBManager* m_dbHandler; + /*!< Activity manager*/ + QObject *m_activityManager; + +}; + +#endif // ISENGINE_H diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isengine/isengine.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isengine/isengine.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,56 @@ +# +# Copyright (c) 2009 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: +# +# + + +TEMPLATE = lib +TARGET = isengine +TARGET.EPOCALLOWDLLDATA = 1 +TARGET.CAPABILITY = CAP_GENERAL_DLL +CONFIG += hb mobility +MOBILITY = serviceframework + +DEFINES += ISENGINESERVICES_LIB + +#INCLUDEPATH += . ../inc + +QT += sql + +symbian { + TARGET.UID3 = 0x2000F875 + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + + defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock +} + + + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp + + +LIBS += -lxqutils -lisproviderdbmanager + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isengine/src/isengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isengine/src/isengine.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2009 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 +#include +#include +#include +#include "isengine.h" +#include "isproviderdbmanager.h" +QTM_USE_NAMESPACE +const QString KAppUid = "0x2002C377"; + +IsEngine::IsEngine(QObject *parent) : + QObject(parent), m_activityManager(0) + { + QServiceManager serviceManager; + m_activityManager = serviceManager.loadInterface( + "com.nokia.qt.activities.ActivityManager"); + + m_dbHandler = new IsProviderDBManager; + } + +IsEngine::~IsEngine() + { + if (m_activityManager) + { + delete m_activityManager; + } + + delete m_dbHandler; + } + +/*! + * \brief Sets selected provider + * Returns false if something goes wrong with the database access + */ +bool IsEngine::SetSelectedProvider(const int providerId) + { + return m_dbHandler->SetSelectedProvider(providerId); + } + +/*! + * \brief Gets selected provider + */ +ServiceProvider* IsEngine::SelectedProvider() + { + return m_dbHandler->SelectedProvider(); + } + +/*! + * \brief Gets list of providers allowed in the current country. + * Returns false if something goes wrong with the database access + */ +bool IsEngine::Providers(QList& providers) + { + return m_dbHandler->GetProviders(providers); + } + +/*! + * \brief Performs internet search by creating search url and opening the browser + * with it. + */ +void IsEngine::PerformWebSearch(const QString &searchParam) + { + ServiceProvider* provider = SelectedProvider(); + + if (provider) + { + QString url; + if ( searchParam.length() ) + { + // add search param to url + url.append((provider->ProviderUrl().arg(searchParam))); + } + else + { + // search with empty param + url.append((provider->ProviderUrl().arg(""))); + } + + + // Launch the browser + QDesktopServices::openUrl(QUrl(url)); + } + } + +/*! + * \brief Performs in device search + * + * \param searchParam a const QString & argument. + */ +void IsEngine::PerformInDeviceSearch(const QString &searchParam) const + { + QUrl url; + url.setScheme("appto"); + url.setHost(KAppUid); + url.addQueryItem("activityname", "SearchDeviceQueryView"); + + url.addQueryItem("query", searchParam); + + QString debugString = url.toString(); + bool ok = QMetaObject::invokeMethod(m_activityManager, "launchActivity", + Q_ARG(QUrl, url)); + + } diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isproviderdbmanager/inc/isproviderdbconstants.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isproviderdbmanager/inc/isproviderdbconstants.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISPROVIDERDBCONSTANTS_H_ +#define ISPROVIDERDBCONSTANTS_H_ + +// Database info +#ifdef __WINSCW__ +const QString databaseName = "c:\\private\\20022f35\\providerdatabase.sq"; +#else +const QString databaseName = "z:\\private\\20022f35\\providerdatabase.sq"; +#endif +const QString connectionName = "providerdatabase.sq"; +const QString databaseType = "QSQLITE"; + +// SQL Queries +const QString providerQuery = "SELECT p.ProviderId, Name, Description, Iconpath FROM Providers p INNER JOIN CountryProviderMap map ON p.ProviderId = map.ProviderId JOIN Countries ON map.CountryId = Countries.CountryId WHERE Countries.CountryCode = \'"; +const QString selectedProviderQuery = "SELECT ProviderId, Name, Description, Iconpath, ProviderUrl FROM Providers WHERE Selected = 1"; +const QString resetProviderSelection = "UPDATE Providers SET Selected = 0"; +const QString setSelectedProvider = "UPDATE Providers SET Selected = 1 WHERE ProviderId = "; +const QString countryQuery = "SELECT Country FROM Countries"; + + +#endif /* ISPROVIDERDBCONSTANTS_H_ */ diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isproviderdbmanager/inc/isproviderdbmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isproviderdbmanager/inc/isproviderdbmanager.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISPROVIDERDBMANAGER_H +#define ISPROVIDERDBMANAGER_H + +#include +#include +#include +#include +#include "serviceprovider.h" + +#if defined(ISPROVIDERDBSERVICES_LIB) +#define ISPROVIDERDBLIB_EXPORT Q_DECL_EXPORT +#else +#define ISPROVIDERDBLIB_EXPORT Q_DECL_IMPORT +#endif + + + +class QSqlDatabase; + +/*! + * + * + */ +class ISPROVIDERDBLIB_EXPORT IsProviderDBManager : public QObject +{ + Q_OBJECT + +public: + IsProviderDBManager( QObject *parent = 0 ); + ~IsProviderDBManager(); + + bool GetProviders(QList& providers); + bool GetCountryList(QStringList& countryList); + ServiceProvider* SelectedProvider(); + bool SetSelectedProvider(int providerId); + +private: + bool OpenDatabase(); + void CloseDatabase(); + QString GetCountryCode(); + +private: + QSqlDatabase m_db; +}; + +#endif // ISPROVIDERDBMANAGER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isproviderdbmanager/isproviderdbmanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isproviderdbmanager/isproviderdbmanager.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2009 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: +# +# + +TEMPLATE = lib +TARGET = isproviderdbmanager +TARGET.CAPABILITY = CAP_GENERAL_DLL +TARGET.EPOCALLOWDLLDATA = 1 +DEPENDPATH += . inc src +INCLUDEPATH += . ../common/inc +CONFIG += hb mobility +MOBILITY = systeminfo +DEFINES += ISPROVIDERDBSERVICES_LIB + +QT += sql network + +RESOURCES += ../common/resources/issearch_icons.qrc + +# Input +HEADERS += inc/isproviderdbmanager.h inc/isproviderdbconstants.h +SOURCES += src/isproviderdbmanager.cpp + +symbian: { + + TARGET.UID3 = 0xE47ae51a + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + +defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock +} \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/isproviderdbmanager/src/isproviderdbmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/isproviderdbmanager/src/isproviderdbmanager.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2009 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 +#include +#include +using namespace QtMobility; +#include +#include + +#include "isproviderdbmanager.h" +#include "isproviderdbconstants.h" + + +/*! + * \brief Constructor + */ +IsProviderDBManager::IsProviderDBManager( QObject *parent ) : QObject(parent) + { + } + +/*! + * \brief Destructor + */ +IsProviderDBManager::~IsProviderDBManager() + { + } + +/*! + * \brief Opens the database + */ +bool IsProviderDBManager::OpenDatabase() + { + m_db = QSqlDatabase::addDatabase(databaseType, connectionName); + m_db.setDatabaseName(databaseName); + + if ( !m_db.isValid()) + { + CloseDatabase(); + return false; + } + + if (!m_db.isOpen()) + { + if (!m_db.open()) + { + CloseDatabase(); + return false; + } + } + return true; + } + +/*! + * \brief Closes the database + */ +void IsProviderDBManager::CloseDatabase() + { + // if (m_db.isValid() && m_db.isOpen()) + // { + m_db.close(); + // } + } + +/*! + * \brief Reads providers allowed in the current country + */ +bool IsProviderDBManager::GetProviders(QList& providers) + { + bool ok = OpenDatabase(); + + if (ok) + { + // Create query that gets providers allowed this country + QString queryString(providerQuery); + // get country code and append to query + queryString.append(GetCountryCode()); + queryString.append("\'"); + + QSqlQuery query(QSqlDatabase::database(connectionName)); + query.prepare(queryString); + query.exec(); + // read all found providers + while (query.next()) + { + ServiceProvider* provider = new ServiceProvider(); + + int providerId = query.value(0).toInt(); + provider->SetId(providerId); + + QString providerName = query.value(1).toString(); + provider->SetName(providerName); + + QString providerDescription = query.value(2).toString(); + provider->SetDescription(providerDescription); + + HbIcon icon(query.value(3).toString()); + provider->SetIcon(icon); + + QString pluginName = query.value(10).toString(); + provider->SetPluginName(pluginName); + providers.append(*provider); + } + } + + CloseDatabase(); + + return ok; + } + +/*! + * \brief Gets selected provider + */ +ServiceProvider* IsProviderDBManager::SelectedProvider() + { + ServiceProvider* provider = NULL; + + bool ok = OpenDatabase(); + if (ok) + { + // Create query that gets providers allowed this country + QSqlQuery query(QSqlDatabase::database(connectionName)); + query.prepare(selectedProviderQuery); + query.exec(); + + // read all found providers + while (query.next()) + { + provider = new ServiceProvider(); + + int providerId = query.value(0).toInt(); + provider->SetId(providerId); + + QString providerName = query.value(1).toString(); + provider->SetName(providerName); + + QString providerDescription = query.value(2).toString(); + provider->SetDescription(providerDescription); + + HbIcon icon(query.value(3).toString()); + provider->SetIcon(icon); + + QString providerUrl = query.value(4).toString(); + provider->SetProviderUrl(providerUrl); + } + } + + CloseDatabase(); + + return provider; + } + +/*! + * \brief Sets selected provider + */ +bool IsProviderDBManager::SetSelectedProvider(int providerId) + { + bool ok = OpenDatabase(); + if (ok) + { + // Clear selection status from all providers + QSqlQuery query(QSqlDatabase::database(connectionName)); + query.prepare(resetProviderSelection); + ok = query.exec(); + + if (ok) + { + // Set selection status to selected provider + QString queryString(setSelectedProvider); + queryString.append( QString::number(providerId)); + + query.clear(); + query.prepare(queryString); + ok = query.exec(); + } + } + + CloseDatabase(); + + return ok; + } + +/*! + * \brief Reads country list from database + */ +bool IsProviderDBManager::GetCountryList(QStringList& countryList) + { + bool ok = OpenDatabase(); + if (ok) + { + // Create query that gets country list + QSqlQuery query(QSqlDatabase::database(connectionName)); + query.prepare(countryQuery); + ok = query.exec(); + + // read all found providers + while (query.next()) + { + countryList << query.value(0).toString(); + } + } + + CloseDatabase(); + + return ok; + } + +/*! + * \brief Return current country code retrieved from system + */ +QString IsProviderDBManager::GetCountryCode() + { + QSystemInfo *sysInfo = new QSystemInfo(this); + return "FI";//sysInfo->currentCountryCode(); + } diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/onlinesearchproviders.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/onlinesearchproviders.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,26 @@ +# +# Copyright (c) 2009 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: +# + +TEMPLATE = subdirs + +SUBDIRS = isproviderdbmanager \ + isengine + +CONFIG += ordered + +symbian: { + BLD_INF_RULES.prj_exports += "rom/issearch.iby CORE_APP_LAYER_IBY_EXPORT_PATH(issearch.iby)" + } \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 onlinesearchproviders/rom/issearch.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/onlinesearchproviders/rom/issearch.iby Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISSEARCH_IBY +#define ISSEARCH_IBY +#ifdef FF_SEARCH_SW +#include + +//ENGINE +file = ABI_DIR\BUILD_DIR\isengine.dll SHARED_LIB_DIR\isengine.dll +file = ABI_DIR\BUILD_DIR\isproviderdbmanager.dll SHARED_LIB_DIR\isproviderdbmanager.dll +data=ZPRIVATE\20022F35\providerdatabase.sq private\20022F35\providerdatabase.sq +data=ZPRIVATE\20022F35\providerdatabase.sq c:\private\20022F35\providerdatabase.sq + +#endif //FF_SEARCH_SW +#endif // ISSEARCH_IBY diff -r 2f67eb14d003 -r 4a2987baf8f7 rom/cpix_app.iby --- a/rom/cpix_app.iby Wed Jun 23 17:22:18 2010 +0100 +++ b/rom/cpix_app.iby Mon Jun 28 11:03:15 2010 +0530 @@ -52,6 +52,11 @@ // Notes plugin ECOM_PLUGIN( cpixnotesplugin.dll, cpixnotesplugin.rsc) +// Email plugin +ECOM_PLUGIN( cpixemailplugin.dll, cpixemailplugin.rsc) +file=ABI_DIR\BUILD_DIR\qtemailfetcher.dll SHARED_LIB_DIR\qtemailfetcher.dll + + data=DATAZ_\private\10202be9\20029ac7.cre private\10202be9\20029ac7.cre data=ZSYSTEM\install\cpixsearchapp_stub.sis System\Install\cpixsearchapp_stub.sis diff -r 2f67eb14d003 -r 4a2987baf8f7 search.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,25 @@ +# +# Copyright (c) 2009 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: SEARCH project file +# +TEMPLATE = subdirs + +SUBDIRS += search_plat \ + onlinesearchproviders \ + searchui \ + harvesterplugins/messaging/email/qtemailfetcher + + +CONFIG += ordered + diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchplugin_api/inc/onlinesearchplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchplugin_api/inc/onlinesearchplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,121 @@ + /* + * Copyright (c) 2009 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: OnlineSearchPlugin class definition + * + */ + +#ifndef ONLINESEARCHPLUGIN_H +#define ONLINESEARCHPLUGIN_H + +#include + +/** + * @ingroup group_onlinesearchpluginmodel + * @brief Represents a plugin plugin in the framework. + * + * OnlineSearchPlugin is an interface through which setting plugin plugin can be + * executed in the search handlers. + * + * @lib ?library + * @since S60 ?S60_version + */ + +class OnlineSearchPlugin : public QObject + { +Q_OBJECT +public: + + /** + * Destructor. + * @since S60 ?S60_version. + */ + virtual ~OnlineSearchPlugin() + { + } + + /** + * Called by the search handlers during initialize cycle of the plugin, it is during + * this phase the plugin widget + * usually creates its initial view. + * Once the initialization is done, pluginInitialized signal must be + * emitted. + * @since S60 ?S60_version. + */ + virtual void initializePlugin() = 0; + + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin() = 0; + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin(const QString &searchQuery) = 0; + + /** + * Called by the search handlers when the plugin is no longer being displayed. + */ + virtual void deactivatePlugin() = 0; + + /** + * Called by the search handlers before the plugin destructor is called. + * @param reason The reason why the search handlers is being killed. + */ + virtual void shutdownPlugin() = 0; + +protected: + + /** + * Constructor. + * @since S60 ?S60_version. + */ + OnlineSearchPlugin() + { + } + +signals: + + /** + * Emit this signal when changing the view inside the plugin. + * @param caller The calling plugin plugin instance. + * @param viewWidget The new plugin view widget to be shown. + */ + void viewChanged(); + + /** + * Emit this signal to indicate initialization is done. + * @param caller The calling plugin plugin instance. + * @param success True if succeeded, false otherwise. + */ + void pluginInitialized(bool success); + + /** + * Emit this signal to indicate that the plugin plugin can be deleted. + * Note that this signal does not need to be emitted if true is returned + * from shutdownPlugin. + * @param caller The calling plugin plugin instance. + */ + void shutdownCompleted(bool success); + + /** + * Called by search handlers when back button is clicked in the plugin view. + * In this method the plugin plugin can implement internally showing and + * hiding GUI elements if the plugin has multiple 'views'. + */ + void handleBackEvent(); + }; + +#endif // ONLINESEARCHPLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchplugin_api/inc/onlinesearchpluginfactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchplugin_api/inc/onlinesearchpluginfactory.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2009 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: OnlineSearchPluginFactory class definition + * + */ + +#ifndef ONLINESEARCHPLUGINFACTORY_H +#define ONLINESEARCHPLUGINFACTORY_H + + +class OnlineSearchPlugin; + +/** + * @ingroup group_onlinesearchpluginmodel + * @brief A factory class through which the wizard plugin can be instantiated. + * + * OnlineSearchPluginFactory contains a factory method to create a wizard plugin instance. + * + * @lib ?library + * @since S60 ?S60_version + */ + +class OnlineSearchPluginFactory +{ +public: + /** + * Instantiates a wizard plugin object. + * @return The constructed wizard plugin object. + * @since S60 ?S60_version. + */ + virtual OnlineSearchPlugin* createPlugin() const = 0; +}; + +Q_DECLARE_INTERFACE(OnlineSearchPluginFactory, "com.nokia.search.OnlineSearchPluginFactory/1.0"); + +#endif // ONLINESEARCHPLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchplugin_api/onlinesearchplugin_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchplugin_api/onlinesearchplugin_api.metaxml Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,13 @@ + + +onlinesearchplugin_api +Online search plugin API for search framework. This is UI plugin for in device search application to launch the user chosen internet search provider. This exposes API based on qt plugin mechanism. +c++ +search + + + +no +no + + diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchplugin_api/onlinesearchplugin_api.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchplugin_api/onlinesearchplugin_api.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,18 @@ +# +# Copyright (c) 2009 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: +# + +PLATFORM_HEADERS += onlinesearchplugin_api/inc/onlinesearchplugin.h \ + onlinesearchplugin_api/inc/onlinesearchpluginfactory.h diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchproviders_api/inc/isengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchproviders_api/inc/isengine.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISENGINE_H +#define ISENGINE_H + +#include +#include +#include + +#if defined(ISENGINESERVICES_LIB) +# define ISENGINELIB_EXPORT Q_DECL_EXPORT +#else +# define ISENGINELIB_EXPORT Q_DECL_IMPORT +#endif + +class ServiceProvider; +class IsProviderDBManager; + +/*! + * Internet Search Engine + * + */ +class ISENGINELIB_EXPORT IsEngine : public QObject +{ + Q_OBJECT + + +public: + IsEngine( QObject *parent = 0 ); + ~IsEngine(); + + ServiceProvider* SelectedProvider(); + bool SetSelectedProvider(const int providerId); + bool Providers(QList& providers); + void PerformWebSearch(const QString& searchParam); + void PerformInDeviceSearch(const QString& searchParam) const; + +private: + /*!< Provider database handler*/ + IsProviderDBManager* m_dbHandler; + /*!< Activity manager*/ + QObject *m_activityManager; + +}; + +#endif // ISENGINE_H diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchproviders_api/inc/isproviderdbmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchproviders_api/inc/isproviderdbmanager.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef ISPROVIDERDBMANAGER_H +#define ISPROVIDERDBMANAGER_H + +#include +#include +#include +#include +#include "serviceprovider.h" + +#if defined(ISPROVIDERDBSERVICES_LIB) +#define ISPROVIDERDBLIB_EXPORT Q_DECL_EXPORT +#else +#define ISPROVIDERDBLIB_EXPORT Q_DECL_IMPORT +#endif + + + +class QSqlDatabase; + +/*! + * + * + */ +class ISPROVIDERDBLIB_EXPORT IsProviderDBManager : public QObject +{ + Q_OBJECT + +public: + IsProviderDBManager( QObject *parent = 0 ); + ~IsProviderDBManager(); + + bool GetProviders(QList& providers); + bool GetCountryList(QStringList& countryList); + ServiceProvider* SelectedProvider(); + bool SetSelectedProvider(int providerId); + +private: + bool OpenDatabase(); + void CloseDatabase(); + QString GetCountryCode(); + +private: + QSqlDatabase m_db; +}; + +#endif // ISPROVIDERDBMANAGER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchproviders_api/inc/serviceprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchproviders_api/inc/serviceprovider.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef SERVICEPROVIDER_H +#define SERVICEPROVIDER_H + +#include +#include +#include + + +class ServiceProvider +{ +public: + ServiceProvider() {} + virtual ~ServiceProvider() {} + QString Name() const {return m_name;} + void SetName(const QString& aName) { m_name = aName; } + int Id() const {return m_providerId;} + void SetId(const int providerId) { m_providerId = providerId; } + HbIcon Icon() const {return m_icon;} + void SetIcon(const HbIcon& icon) { m_icon = icon; } + QString Description() const {return m_description;} + void SetDescription(const QString& description) { m_description = description; } + QString ProviderUrl() const {return m_providerUrl;} + void SetProviderUrl(const QString& providerUrl) { m_providerUrl = providerUrl; } + QString PluginName() const {return m_pluginName;} + void SetPluginName(const QString& pluginName) { m_pluginName = pluginName; } + +private: + int m_providerId; + QString m_name; + HbIcon m_icon; + QString m_description; + QString m_providerUrl; + QString m_pluginName; +}; + +#endif // SERVICEPROVIDER_H diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchproviders_api/onlinesearchproviders_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchproviders_api/onlinesearchproviders_api.metaxml Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,15 @@ + + + onlinesearchproviders_api + This API provides interface to read the internet search providers and a way to set the default user selected internet search provider. The backend implementation uses SQL db to store the list. Each provider entity provide the name, description and suitable icon for display. + c++ + onlinesearchproviders + + + + + + no + no + + diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/onlinesearchproviders_api/onlinesearchproviders_api.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/onlinesearchproviders_api/onlinesearchproviders_api.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,19 @@ +# +# Copyright (c) 2009 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: +# + +PLATFORM_HEADERS += onlinesearchproviders_api/inc/serviceprovider.h \ + onlinesearchproviders_api/inc/isengine.h \ + onlinesearchproviders_api/inc/isproviderdbmanager.h diff -r 2f67eb14d003 -r 4a2987baf8f7 search_plat/search_plat.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/search_plat/search_plat.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,25 @@ +# +# Copyright (c) 2009 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: +# + +TEMPLATE = subdirs +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " + +include(onlinesearchplugin_api/onlinesearchplugin_api.pri) +include(onlinesearchproviders_api/onlinesearchproviders_api.pri) + +for(filename,PLATFORM_HEADERS){ + BLD_INF_RULES.prj_exports *= "$$filename APP_LAYER_PLATFORM_EXPORT_PATH($$basename(filename))" + } \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/Searchapplication.pri --- a/searchui/Searchapplication/Searchapplication.pri Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -# -# Copyright (c) 2009 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: Search application list of files -# - -HEADERS += ./inc/*.h -SOURCES += ./src/*.cpp - diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/Searchapplication.pro --- a/searchui/Searchapplication/Searchapplication.pro Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -# -# Copyright (c) 2009 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: `Search application project file -# - -TEMPLATE = app - -TARGET = Searchapplication - -win32 { - LIBS += -L$$PWD/../../bin/debug - - CONFIG(debug, debug|release) { - SUBDIRPART = debug - } else { - SUBDIRPART = release - } - DESTDIR = $$PWD/../../bin/$$SUBDIRPART -} - -LIBS += -lsearchruntimeprovider - -QT += xml - -CONFIG += hb -CONFIG += console - -TRANSLATIONS += searchsw.ts -nft:DEFINES += NFT - -DEPENDPATH += . \ - ./inc \ - ./src - -INCLUDEPATH += . \ - ./inc \ - ../inc \ - ../runtimeproviders/searchruntimeprovider/inc - -symbian { - TARGET.UID2 = 0x100039CE - TARGET.UID3 = 0x2002C377 - TARGET.CAPABILITY = CAP_APPLICATION AllFiles TrustedUI - TARGET.EPOCSTACKSIZE = 0x14000 // 80kB - TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB - rom:DEFINES += ROM - SKINICON = qtg_large_search -} - -win32 { -include(searchapplication_installs_win32.pri) -} - -include(searchapplication.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/Searchapplication_installs_symbian.pri --- a/searchui/Searchapplication/Searchapplication_installs_symbian.pri Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -# -# Copyright (c) 2009 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: -# - - -#deploy.path = z: - -#exports1.path = /private/20026F95 - -#exports1.sources += resource/ftudb - -#for(export1, exports1.sources):BLD_INF_RULES.prj_exports += "./$$export1 $$deploy.path$$exports1.path/$$basename(export1)" - - - diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/Searchapplication_installs_unix.pri --- a/searchui/Searchapplication/Searchapplication_installs_unix.pri Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -# -# Copyright (c) 2009 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: -# -# - -# Release -# - -r01.path = ../../bin/release/ -r01.files = ./release/Searchapplication - -INSTALLS += r01 - -# -# Debug -# - -d01.path = ../../bin/debug/ -d01.files = ./debug/Searchapplication - -INSTALLS += d01 \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/Searchapplication_installs_win32.pri --- a/searchui/Searchapplication/Searchapplication_installs_win32.pri Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -# -# Copyright (c) 2009 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: -# -# -# Release -# - -r01.path = $$PWD/../../bin/release/ -r01.files = ./release/*.* - -INSTALLS += r01 - -# -# Debug -# - -d01.path = $$PWD/../../bin/debug/ -d01.files = ./debug/*.* - -INSTALLS += d01 diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/inc/Search.h --- a/searchui/Searchapplication/inc/Search.h Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2009 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: search application main class. - * - */ - -#ifndef SEARCHAPPLICATION_H -#define SEARCHAPPLICATION_H - -#include "search_global.h" - -#include - -class QStateMachine; - -/** - * @ingroup group_searchsearchlication - * @brief Search application main class. - * - * Loads a runtime from a runtime provider plugin. Manages - * the runtime execution. - * - * @lib ?library - * @since S60 ?S60_version - */ -class Search : public QObject - { -Q_OBJECT - -public: - - /** - * Constructor. - * @since S60 ?S60_version. - * @param aParent Parent object. - */ - Search(QObject* aParent = 0); - - /** - * Destructor. - * @since S60 ?S60_version. - */ - virtual ~Search(); - -private: - - Q_DISABLE_COPY(Search) - -signals: - - /** - * Emitted when the search application needs to exit. - * @since S60 ?S60_version. - */ - void exit(); - -public slots: - - /** - * Starts the runtime. - * @since S60 ?S60_version. - */ - void start(); - - /** - * Stops the runtime. - * @since S60 ?S60_version. - */ - void stop(); - -private slots: - - /** - * Called after the runtime has started. - * @since S60 ?S60_version. - */ - void handleRuntimeStarted(); - - /** - * Called after the runtime has stopped. - * @since S60 ?S60_version. - */ - void handleRuntimeStopped(); - - /** - * Called after the runtime has faulted. - * @since S60 ?S60_version. - */ - void handleRuntimeFaulted(); - -private: - - /** - * Runtime. - */ - QStateMachine* mRuntime; - }; - -#endif//SEARCHAPPLICATION_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/resources/search_app_icon.svg --- a/searchui/Searchapplication/resources/search_app_icon.svg Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/src/Search.cpp --- a/searchui/Searchapplication/src/Search.cpp Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2009 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: Search application main class. - * - */ - -#include "search.h" -#include -#include -#include - -// --------------------------------------------------------------------------- -// Search::Search -// --------------------------------------------------------------------------- -// -Search::Search(QObject* aParent) : - QObject(aParent), mRuntime(NULL) - { - SEARCH_FUNC_ENTRY("SEARCH::Search::Search"); - - SearchRuntimeProvider *interface = new SearchRuntimeProvider(); - mRuntime = interface->createPlugin(); - if (mRuntime) - { - mRuntime->setParent(this); - connect(mRuntime, SIGNAL(started()), SLOT(handleRuntimeStarted())); - connect(mRuntime, SIGNAL(stopped()), SLOT(handleRuntimeStopped())); - connect(mRuntime, SIGNAL(faulted()), SLOT(handleRuntimeFaulted())); - } - SEARCH_FUNC_EXIT("SEARCH::Search::Search"); - } - -// --------------------------------------------------------------------------- -// Search::~Search() -// --------------------------------------------------------------------------- -// -Search::~Search() - { - if (mRuntime) - { - disconnect(mRuntime, SIGNAL(started()), this, - SLOT(handleRuntimeStarted())); - disconnect(mRuntime, SIGNAL(stopped()), this, - SLOT(handleRuntimeStopped())); - disconnect(mRuntime, SIGNAL(faulted()), this, - SLOT(handleRuntimeFaulted())); - - delete mRuntime; - } - } - -// --------------------------------------------------------------------------- -// Search::start() -// --------------------------------------------------------------------------- -// -void Search::start() - { - SEARCH_FUNC_ENTRY("SEARCH::Search::start"); - - if (mRuntime) - { - mRuntime->start(); - } - else - { - emit exit(); - } - - SEARCH_FUNC_EXIT("SEARCH::Search::start"); - } - -// --------------------------------------------------------------------------- -// Search::stop() -// --------------------------------------------------------------------------- -// -void Search::stop() - { - SEARCH_FUNC_ENTRY("SEARCH::Search::stop"); - if (mRuntime) - { - mRuntime->stop(); - } - - SEARCH_FUNC_EXIT("SEARCH::Search::stop"); - } - -// --------------------------------------------------------------------------- -// Search::handleRuntimeStarted() -// --------------------------------------------------------------------------- -// -void Search::handleRuntimeStarted() - { - } - -// --------------------------------------------------------------------------- -// Search::handleRuntimeStopped() -// --------------------------------------------------------------------------- -// -void Search::handleRuntimeStopped() - { - emit exit(); - } - -// --------------------------------------------------------------------------- -// Search::handleRuntimeFaulted() -// --------------------------------------------------------------------------- -// -void Search::handleRuntimeFaulted() - { - emit exit(); - } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/Searchapplication/src/main.cpp --- a/searchui/Searchapplication/src/main.cpp Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2009 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: Search application main implementation. - * - */ - -#include "search.h" -#include "search_global.h" - -#include -#include -#include -#include - -// --------------------------------------------------------------------------- -// main -// --------------------------------------------------------------------------- -// -int main(int argc, char *argv[]) - { - SEARCH_FUNC_ENTRY("SEARCH::Search::main"); - - HbApplication app(argc, argv); - - QTranslator translator; - QString lang = QLocale::system().name(); - QString path = "Z:/resource/qt/translations/"; - translator.load("searchsw_" + lang, path); - app.installTranslator(&translator); - - QTranslator commonTranslator; - commonTranslator.load("common_" + lang, path); - app.installTranslator(&commonTranslator); - - QTranslator musicTranslator; - musicTranslator.load("musicplayer_" + lang, path); - app.installTranslator(&musicTranslator); - - QTranslator contactsTranslator; - contactsTranslator.load("contacts_" + lang, path); - app.installTranslator(&contactsTranslator); - - QTranslator calenderTranslator; - calenderTranslator.load("calendar_" + lang, path); - app.installTranslator(&calenderTranslator); - - QTranslator notesTranslator; - notesTranslator.load("notes_" + lang, path); - app.installTranslator(¬esTranslator); - - Search search; -#ifdef ROM - QDir::setCurrent("Z:/"); -#else - QDir::setCurrent("C:/"); - SEARCHDEBUG("main() - SearchApplication's current dir set to C:/"); -#endif //ROM - QObject::connect(&app, SIGNAL(aboutToQuit()), &search, SLOT(stop())); - QObject::connect(&search, SIGNAL(exit()), &app, SLOT(quit()), - Qt::QueuedConnection); - search.start(); - int ret = app.exec(); - SEARCH_FUNC_EXIT("SEARCH::Search::main"); - return ret; - } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/bwins/searchonlinehandleru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/bwins/searchonlinehandleru.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,32 @@ +EXPORTS + ?getStaticMetaObject@OnlineHandler@@SAABUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const & OnlineHandler::getStaticMetaObject(void) + ?backEventTriggered@OnlineHandler@@IAEXXZ @ 2 NONAME ; void OnlineHandler::backEventTriggered(void) + ?metaObject@OnlineHandler@@UBEPBUQMetaObject@@XZ @ 3 NONAME ; struct QMetaObject const * OnlineHandler::metaObject(void) const + ?qt_metacast@OnlineHandler@@UAEPAXPBD@Z @ 4 NONAME ; void * OnlineHandler::qt_metacast(char const *) + ?pluginShutdown@OnlineHandler@@IAEX_N@Z @ 5 NONAME ; void OnlineHandler::pluginShutdown(bool) + ?activatePlugin@OnlineHandler@@QAE_NXZ @ 6 NONAME ; bool OnlineHandler::activatePlugin(void) + ??1OnlineHandler@@UAE@XZ @ 7 NONAME ; OnlineHandler::~OnlineHandler(void) + ?isShutdownCompleted@OnlineHandler@@QAEX_N@Z @ 8 NONAME ; void OnlineHandler::isShutdownCompleted(bool) + ??0OnlineHandler@@QAE@PAVQObject@@@Z @ 9 NONAME ; OnlineHandler::OnlineHandler(class QObject *) + ?loadSearchPlugin@OnlineHandler@@AAEPAVOnlineSearchPlugin@@ABVQString@@@Z @ 10 NONAME ; class OnlineSearchPlugin * OnlineHandler::loadSearchPlugin(class QString const &) + ?setDefaultProvider@OnlineHandler@@QAEXH@Z @ 11 NONAME ; void OnlineHandler::setDefaultProvider(int) + ?pluginIntialized@OnlineHandler@@IAEX_N@Z @ 12 NONAME ; void OnlineHandler::pluginIntialized(bool) + ?defaultProvider@OnlineHandler@@IAEXH@Z @ 13 NONAME ; void OnlineHandler::defaultProvider(int) + ?backEvent@OnlineHandler@@QAEXXZ @ 14 NONAME ; void OnlineHandler::backEvent(void) + ?providerDetails@OnlineHandler@@IAEXVQString@@VHbIcon@@H@Z @ 15 NONAME ; void OnlineHandler::providerDetails(class QString, class HbIcon, int) + ?initializePlugin@OnlineHandler@@QAEXXZ @ 16 NONAME ; void OnlineHandler::initializePlugin(void) + ?staticMetaObject@OnlineHandler@@2UQMetaObject@@B @ 17 NONAME ; struct QMetaObject const OnlineHandler::staticMetaObject + ?trUtf8@OnlineHandler@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString OnlineHandler::trUtf8(char const *, char const *) + ?trUtf8@OnlineHandler@@SA?AVQString@@PBD0H@Z @ 19 NONAME ; class QString OnlineHandler::trUtf8(char const *, char const *, int) + ?readSettings@OnlineHandler@@QAEXXZ @ 20 NONAME ; void OnlineHandler::readSettings(void) + ?writeSettings@OnlineHandler@@QAEXH@Z @ 21 NONAME ; void OnlineHandler::writeSettings(int) + ??_EOnlineHandler@@UAE@I@Z @ 22 NONAME ; OnlineHandler::~OnlineHandler(unsigned int) + ?isPluginIntialized@OnlineHandler@@QAEX_N@Z @ 23 NONAME ; void OnlineHandler::isPluginIntialized(bool) + ?unloadPluginandExit@OnlineHandler@@QAEXXZ @ 24 NONAME ; void OnlineHandler::unloadPluginandExit(void) + ?unloadPlugin@OnlineHandler@@QAEXXZ @ 25 NONAME ; void OnlineHandler::unloadPlugin(void) + ?tr@OnlineHandler@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString OnlineHandler::tr(char const *, char const *, int) + ?qt_metacall@OnlineHandler@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 27 NONAME ; int OnlineHandler::qt_metacall(enum QMetaObject::Call, int, void * *) + ?loadISPlugin@OnlineHandler@@QAEXHVQString@@@Z @ 28 NONAME ; void OnlineHandler::loadISPlugin(int, class QString) + ?tr@OnlineHandler@@SA?AVQString@@PBD0@Z @ 29 NONAME ; class QString OnlineHandler::tr(char const *, char const *) + ?activatePlugin@OnlineHandler@@QAE_NABVQString@@@Z @ 30 NONAME ; bool OnlineHandler::activatePlugin(class QString const &) + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/eabi/searchonlinehandleru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/eabi/searchonlinehandleru.def Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,32 @@ +EXPORTS + _ZN13OnlineHandler11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN13OnlineHandler11qt_metacastEPKc @ 2 NONAME + _ZN13OnlineHandler12loadISPluginEi7QString @ 3 NONAME + _ZN13OnlineHandler12readSettingsEv @ 4 NONAME + _ZN13OnlineHandler12unloadPluginEv @ 5 NONAME + _ZN13OnlineHandler13writeSettingsEi @ 6 NONAME + _ZN13OnlineHandler14activatePluginERK7QString @ 7 NONAME + _ZN13OnlineHandler14activatePluginEv @ 8 NONAME + _ZN13OnlineHandler14pluginShutdownEb @ 9 NONAME + _ZN13OnlineHandler15defaultProviderEi @ 10 NONAME + _ZN13OnlineHandler15providerDetailsE7QString6HbIconi @ 11 NONAME + _ZN13OnlineHandler16initializePluginEv @ 12 NONAME + _ZN13OnlineHandler16loadSearchPluginERK7QString @ 13 NONAME + _ZN13OnlineHandler16pluginIntializedEb @ 14 NONAME + _ZN13OnlineHandler16staticMetaObjectE @ 15 NONAME DATA 16 + _ZN13OnlineHandler18backEventTriggeredEv @ 16 NONAME + _ZN13OnlineHandler18isPluginIntializedEb @ 17 NONAME + _ZN13OnlineHandler18setDefaultProviderEi @ 18 NONAME + _ZN13OnlineHandler19getStaticMetaObjectEv @ 19 NONAME + _ZN13OnlineHandler19isShutdownCompletedEb @ 20 NONAME + _ZN13OnlineHandler19unloadPluginandExitEv @ 21 NONAME + _ZN13OnlineHandler9backEventEv @ 22 NONAME + _ZN13OnlineHandlerC1EP7QObject @ 23 NONAME + _ZN13OnlineHandlerC2EP7QObject @ 24 NONAME + _ZN13OnlineHandlerD0Ev @ 25 NONAME + _ZN13OnlineHandlerD1Ev @ 26 NONAME + _ZN13OnlineHandlerD2Ev @ 27 NONAME + _ZNK13OnlineHandler10metaObjectEv @ 28 NONAME + _ZTI13OnlineHandler @ 29 NONAME + _ZTV13OnlineHandler @ 30 NONAME + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/inc/Search_global.h --- a/searchui/inc/Search_global.h Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -* Copyright (c) 2009 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: The dll header file. -* -*/ - - -#ifndef SEARCH_GLOBAL_H -#define SEARCH_GLOBAL_H - -#include - -#ifdef NFT -#ifdef Q_OS_SYMBIAN -#include -#endif -#endif - -#ifndef SEARCH_UNITTESTING - #define SEARCH_CLASS(aClassName) -#else - #define SEARCH_CLASS(aClassName) class aClassName; -#endif - -#ifndef SEARCH_UNITTESTING - #define SEARCH_FRIEND_CLASS(aClassName) -#else - #define SEARCH_FRIEND_CLASS(aClassName) friend class aClassName; -#endif - -#define SEARCHCATCHDEBUG qDebug("Catched in: %s on line: %d",__FILE__,__LINE__); -#define SEARCHDEBUG(a) qDebug("%s in: %s on line: %d", (a), __FILE__,__LINE__); - -#ifdef NFT - #define SEARCHTEST(aText) qDebug() << QString(aText) -#ifdef Q_OS_SYMBIAN - inline void SEARCHFreeRam(const QString &aFunction) - { - TMemoryInfoV1Buf meminfo; - UserHal::MemoryInfo(meminfo); - int memSize = meminfo().iTotalRamInBytes >> 10; - int memFree = meminfo().iFreeRamInBytes >> 10; - - RHeap& ownHeap = User::Heap(); - TInt biggestBlock = 0; - int heapFree = ownHeap.Available(biggestBlock) >> 10; - int heapSize = ownHeap.Size() >> 10; - qDebug()<< aFunction << "memFree" << memFree << "kb memSize" << memSize << "kb heapFree" << heapFree << "kb heapSize" << heapSize; - } - - #define SEARCH_FUNC_ENTRY(aFunction) SEARCHFreeRam(QString(aFunction)+" entry") - #define SEARCH_FUNC_EXIT(aFunction) SEARCHFreeRam(QString(aFunction)+" exit") -#else - #define SEARCH_FUNC_ENTRY(aFunction) qDebug()<< aFunction << " entry"; - #define SEARCH_FUNC_EXIT(aFunction) qDebug()<< aFunction << " exit"; -#endif - -#else - #define SEARCHTEST(aText) - #define SEARCH_FUNC_ENTRY(aFunction) - #define SEARCH_FUNC_EXIT(aFunction) -#endif - -#endif // SEARCH_GLOBAL_H - diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/inc/search_global.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/inc/search_global.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2009 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: The dll header file. +* +*/ + + +#ifndef SEARCH_GLOBAL_H +#define SEARCH_GLOBAL_H + +#include + +#ifdef NFT +#ifdef Q_OS_SYMBIAN +#include +#endif +#endif +//#define OST_TRACE_COMPILER_IN_USE //Uncomment to enable performance measurements. + +#ifdef OST_TRACE_COMPILER_IN_USE +#define PERF_APP_LAUNCH_END(str) qDebug() << "Search_App_Launch :"<> 10; + int memFree = meminfo().iFreeRamInBytes >> 10; + + RHeap& ownHeap = User::Heap(); + TInt biggestBlock = 0; + int heapFree = ownHeap.Available(biggestBlock) >> 10; + int heapSize = ownHeap.Size() >> 10; + qDebug()<< aFunction << "memFree" << memFree << "kb memSize" << memSize << "kb heapFree" << heapFree << "kb heapSize" << heapSize; + } + + #define SEARCH_FUNC_ENTRY(aFunction) SEARCHFreeRam(QString(aFunction)+" entry") + #define SEARCH_FUNC_EXIT(aFunction) SEARCHFreeRam(QString(aFunction)+" exit") +#else + #define SEARCH_FUNC_ENTRY(aFunction) qDebug()<< aFunction << " entry"; + #define SEARCH_FUNC_EXIT(aFunction) qDebug()<< aFunction << " exit"; +#endif + +#else + #define SEARCHTEST(aText) + #define SEARCH_FUNC_ENTRY(aFunction) + #define SEARCH_FUNC_EXIT(aFunction) +#endif + +#endif // SEARCH_GLOBAL_H + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/indevicehandler/indevicehandler.pro --- a/searchui/indevicehandler/indevicehandler.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/indevicehandler/indevicehandler.pro Mon Jun 28 11:03:15 2010 +0530 @@ -38,8 +38,17 @@ TARGET.EPOCALLOWDLLDATA=1 TARGET.CAPABILITY = ALL -TCB -DRM INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE - - + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + + defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/indevicehandler/tsrc/t_indevicehandler/t_indevicehandler.pro --- a/searchui/indevicehandler/tsrc/t_indevicehandler/t_indevicehandler.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/indevicehandler/tsrc/t_indevicehandler/t_indevicehandler.pro Mon Jun 28 11:03:15 2010 +0530 @@ -37,8 +37,9 @@ TARGET.UID3 = 0x20026F8A TARGET.CAPABILITY = ALL -TCB -DRM TARGET.EPOCSTACKSIZE = 0x14000 // 80kB -TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB +TARGET.EPOCHEAPSIZE = 0x20000 0x800000 // 128kB - 16MB INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE } include(t_indevicehandler.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/indevicehandler/tsrc/t_src.pro --- a/searchui/indevicehandler/tsrc/t_src.pro Wed Jun 23 17:22:18 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -# -# Copyright (c) 2009 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: -# - -TEMPLATE = subdirs - -SUBDIRS = t_indevicehandler - -CONFIG += ordered \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/indevicehandler/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/indevicehandler/tsrc/tsrc.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,21 @@ +# +# Copyright (c) 2009 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: +# + +TEMPLATE = subdirs + +SUBDIRS = t_indevicehandler + +CONFIG += ordered \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/inc/onlinehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/inc/onlinehandler.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2009 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: Onlinehandler. + * + */ + +#ifndef ONLINEHANDLER_H +#define ONLINEHANDLER_H + +#include +#include +#include +#include +#include "search_global.h" +class HbMainWindow; +class HbView; +class OnlineSearchPlugin; +class IsEngine; +class ServiceProvider; +class HbIcon; + +#ifdef SEARCHONLINEHANDLER_LIB +#define ONLINEHANDLER_EXPORT Q_DECL_EXPORT +#else +#define ONLINEHANDLER_EXPORT Q_DECL_IMPORT +#endif + +SEARCH_CLASS(SearchOnlineHandlerTest) +/** + * @ingroup group_OnlineHandler + * @brief Loads and connects onlinesearchprovider plugins + * + * This service is responsible for loading onlinesearchprovider plugins. + * + * @since S60 ?S60_version. + */ +class ONLINEHANDLER_EXPORT OnlineHandler : public QObject + { +Q_OBJECT + +public: + /** + * Default constructor. + * + * @since S60 ?S60_version. + */ + OnlineHandler(QObject* = 0); + + /** + * Destructor. + * + * @since S60 ?S60_version. + */ + virtual ~OnlineHandler(); + void setDefaultProvider(const int); + + void isProvidersAvailable(); + void initializePlugin(); + bool activatePlugin(); + bool activatePlugin(const QString &str); + + void readSettings(); + void writeSettings(const int); + + void loadISPlugin(int id, QString query); + + void unloadPlugin(); + void unloadPluginandExit(); +public slots: + void isPluginIntialized(bool); + void isShutdownCompleted(bool); + void backEvent(); + +signals: + void providerDetails(QString, HbIcon, int); + void defaultProvider(const int); + void pluginIntialized(bool); + void pluginShutdown(bool); + void backEventTriggered(); +private: + OnlineSearchPlugin *loadSearchPlugin(const QString &pluginFile); + +private: + QString mDefaultPluginName; + OnlineSearchPlugin *mOnlinePlugin; + IsEngine* mEng; + ServiceProvider* mCurrentProvider; + QList mAvailableProviders; + bool mLoadSuggestion; + QString mLoadSuggestionLink; +SEARCH_FRIEND_CLASS (SearchOnlineHandlerTest) + }; +#endif diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/inc/searchbasepath.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/inc/searchbasepath.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef SEARCHBASEPATH_H +#define SEARCHBASEPATH_H + +#ifdef Q_OS_SYMBIAN + #define SEARCH_PLUGIN_PATH QString("/resource/qt/plugins/onlinesearch") + #define SEARCH_PLUGIN_CONFIG_PATH QString("/resource/qt/plugins/onlinesearch/config") +#else + #ifdef _DEBUG + #define SEARCH_PLUGIN_PATH QString("/onlinesearch/debug/bin") + #define SEARCH_PLUGIN_CONFIG_PATH QString("/onlinesearch/debug/bin/config") + #else + #define SEARCH_PLUGIN_PATH QString("/onlinesearch/release/bin") + #define SEARCH_PLUGIN_CONFIG_PATH QString("/onlinesearch/release/bin/config") + #endif +#endif + +#endif /* SEARCHBASEPATH_H */ diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/inc/searchutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/inc/searchutility.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2009 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: + * + */ +#ifndef SEARCH_UTILITY_H +#define SEARCH_UTILITY_H + +#include + +class SearchUtility + { +public: + static QStringList drives(); + static QStringList pluginDirs(); + static QStringList SearchcfgDirs(); + +private: + SearchUtility(); + }; + +#endif //SEARCH_UTILITY_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/onlinehandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/onlinehandler.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2009 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: online handler list of files +# + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp + +RESOURCES += diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/onlinehandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/onlinehandler.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,56 @@ +# +# Copyright (c) 2009 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: SEARCH online handler project file +# + +TEMPLATE = lib +TARGET = searchonlinehandler + +CONFIG += hb +CONFIG += console + +LIBS += -lhbcore +LIBS += -lxqsettingsmanager +LIBS += -lisproviderdbmanager +LIBS += -lisengine + +QT -= webkit +QT += xml + +DEFINES += SEARCHONLINEHANDLER_LIB + +DEPENDPATH += ./inc \ + ./src + +INCLUDEPATH += ./inc \ + ../inc + +symbian { + TARGET.UID2 = 0x20004C45 + TARGET.UID3 = 0x2002C37C + TARGET.EPOCALLOWDLLDATA=1 + TARGET.CAPABILITY = ALL -TCB -DRM + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + +defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock +} +include(onlinehandler.pri) \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/src/onlinehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/src/onlinehandler.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2009 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: Online Handler. + * + */ +#include "onlinehandler.h" +#include "searchutility.h" +#include "onlinesearchplugin.h" // after export should be included as systeminc +#include "onlinesearchpluginfactory.h" // after export should be included as systeminc +#include +#include +#ifdef Q_OS_SYMBIAN +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 +#define PLUGINFILE_SUFFIX "dll" +#else +#define PLUGINFILE_SUFFIX "qtplugin" +#endif + +// --------------------------------------------------------------------------- +// OnlineHandler::OnlineHandler +// --------------------------------------------------------------------------- +// +OnlineHandler::OnlineHandler(QObject* parent) : + QObject(parent), mOnlinePlugin(NULL), mEng(NULL), mCurrentProvider(NULL) + { + } +// --------------------------------------------------------------------------- +// OnlineHandler::~OnlineHandler +// --------------------------------------------------------------------------- +// +OnlineHandler::~OnlineHandler() + { + if (mOnlinePlugin) + delete mOnlinePlugin; + if (mEng) + delete mEng; + if (mCurrentProvider) + delete mCurrentProvider; + } +void OnlineHandler::setDefaultProvider(const int id) + { + if (mEng) + mEng->SetSelectedProvider(id); + } +// --------------------------------------------------------------------------- +// OnlineHandler::readSettings +// --------------------------------------------------------------------------- +// +void OnlineHandler::readSettings() + { + if (!mEng) + mEng = new IsEngine(); + mAvailableProviders.clear(); + mEng->Providers(mAvailableProviders); + for (int i = 0; i < mAvailableProviders.count(); i++) + { + emit providerDetails(mAvailableProviders.at(i).Name(), + mAvailableProviders.at(i).Icon(), + mAvailableProviders.at(i).Id()); + } + mCurrentProvider = mEng->SelectedProvider(); // default provider + if (mCurrentProvider) + { + mDefaultPluginName = mCurrentProvider->Name(); + emit defaultProvider(mCurrentProvider->Id()); + } + else + { + mDefaultPluginName = QString(); + } + } +// --------------------------------------------------------------------------- +// OnlineHandler::writeSettings +// --------------------------------------------------------------------------- +// +void OnlineHandler::writeSettings(const int providerId) + { + if (mEng && mEng->SetSelectedProvider(providerId) && mCurrentProvider) + { + mCurrentProvider = mEng->SelectedProvider(); // default provider + emit defaultProvider(mCurrentProvider->Id()); + } + return; + } +// --------------------------------------------------------------------------- +// OnlineHandler::initializePlugin +// --------------------------------------------------------------------------- +// +void OnlineHandler::initializePlugin() + { + /* Below assumes, only default plugins are handled now. If user selects different plugin some more logic needed here. */ + + if (mOnlinePlugin) + { + delete mOnlinePlugin; + mOnlinePlugin = NULL; + } + mOnlinePlugin = loadSearchPlugin(mDefaultPluginName); + if (mOnlinePlugin) + { + connect(mOnlinePlugin, SIGNAL(pluginInitialized(bool)), this, + SLOT(isPluginIntialized(bool))); + + connect(mOnlinePlugin, SIGNAL(shutdownCompleted(bool)), this, + SLOT(isShutdownCompleted(bool))); + + connect(mOnlinePlugin, SIGNAL(handleBackEvent()), this, + SLOT(backEvent())); + + mOnlinePlugin->initializePlugin(); + } + } +void OnlineHandler::loadISPlugin(int id, QString query) + { + if (!mEng) + mEng = new IsEngine(); + mLoadSuggestion = true; + mLoadSuggestionLink = query; + QList iAvailableProviders; + mEng->Providers(iAvailableProviders); + for (int i = 0; i < iAvailableProviders.count(); i++) + { + if (iAvailableProviders.at(i).Id() == id) + { + mDefaultPluginName = iAvailableProviders.at(i).Name(); + break; + } + } + initializePlugin(); + } +// --------------------------------------------------------------------------- +// OnlineHandler::isPluginIntialized +// --------------------------------------------------------------------------- +// +void OnlineHandler::isPluginIntialized(bool success) + { + if (mLoadSuggestion) + { + activatePlugin(mLoadSuggestionLink); + mLoadSuggestion = false; + } + else + { + emit pluginIntialized(success); + } + } +// --------------------------------------------------------------------------- +// OnlineHandler::isShutdownCompleted +// --------------------------------------------------------------------------- +// +void OnlineHandler::isShutdownCompleted(bool success) + { + mOnlinePlugin->deleteLater(); + emit pluginShutdown(success); + } +// --------------------------------------------------------------------------- +// OnlineHandler::backEvent +// --------------------------------------------------------------------------- +// +void OnlineHandler::backEvent() + { + emit backEventTriggered(); + } +// --------------------------------------------------------------------------- +// OnlineHandler::activatePlugin +// --------------------------------------------------------------------------- +// +bool OnlineHandler::activatePlugin() + { + if (mOnlinePlugin) + mOnlinePlugin->activatePlugin(); + return true; + } +// --------------------------------------------------------------------------- +// OnlineHandler::activatePlugin +// --------------------------------------------------------------------------- +// +bool OnlineHandler::activatePlugin(const QString &str) + { + if (mOnlinePlugin) + mOnlinePlugin->activatePlugin(str); + return true; + } +// --------------------------------------------------------------------------- +// OnlineHandler::unloadPlugin +// --------------------------------------------------------------------------- +// +void OnlineHandler::unloadPlugin() + { + if (mOnlinePlugin) + { + disconnect(mOnlinePlugin, SIGNAL(pluginInitialized(bool)), this, + SLOT(isPluginIntialized(bool))); + + disconnect(mOnlinePlugin, SIGNAL(shutdownCompleted(bool)), this, + SLOT(isShutdownCompleted(bool))); + + disconnect(mOnlinePlugin, SIGNAL(handleBackEvent()), this, + SLOT(backEvent())); + + mOnlinePlugin->deactivatePlugin(); + } + } +// --------------------------------------------------------------------------- +// OnlineHandler::unloadPluginandExit +// --------------------------------------------------------------------------- +// +void OnlineHandler::unloadPluginandExit() + { + if (mOnlinePlugin) + { + disconnect(mOnlinePlugin, SIGNAL(pluginInitialized(bool)), this, + SLOT(isPluginIntialized(bool))); + + disconnect(mOnlinePlugin, SIGNAL(shutdownCompleted(bool)), this, + SLOT(isShutdownCompleted(bool))); + + disconnect(mOnlinePlugin, SIGNAL(handleBackEvent()), this, + SLOT(backEvent())); + + mOnlinePlugin->deactivatePlugin(); + mOnlinePlugin->shutdownPlugin(); + } + } +// --------------------------------------------------------------------------- +// OnlineHandler::loadSearchPlugin +// --------------------------------------------------------------------------- +// +OnlineSearchPlugin *OnlineHandler::loadSearchPlugin(const QString &pluginFile) + { + // CpLogger logger; + // logger << "loading plugin:" << pluginFile << "\r\n"; + + QFileInfo fileInfo(pluginFile); + + if (!fileInfo.isAbsolute()) + { + QString fileName = fileInfo.fileName(); + if (fileInfo.suffix().compare(PLUGINFILE_SUFFIX, Qt::CaseInsensitive)) + { + fileName = fileInfo.baseName() + '.' + PLUGINFILE_SUFFIX; + } + + QStringList pluginDirs = SearchUtility::pluginDirs(); + foreach(const QString &pluginDir,pluginDirs) + { + fileInfo.setFile(pluginDir + fileName); + if (fileInfo.exists() && QLibrary::isLibrary( + fileInfo.absoluteFilePath())) + { + break; + } + } + } + + QPluginLoader loader(fileInfo.absoluteFilePath()); + OnlineSearchPluginFactory *pluginFactory = qobject_cast< + OnlineSearchPluginFactory*> (loader.instance()); + OnlineSearchPlugin *plugin = pluginFactory->createPlugin(); + /* + * why unload? + if (!plugin) { + loader.unload(); + } + */ + // logger << (plugin ? "load plugin succeed." : "load plugin failed.") << "\r\n"; + return plugin; + } + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/src/searchutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/src/searchutility.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2009 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 "searchutility.h" +#include +#include +#include +#include "searchbasepath.h" + +#if 0 + +#include "Searchpluginloader.h" +#include +#include +#include "Searchcategorysettingformitemdata.h" +#include "Searchpluginconfigreader.h" + +void SearchUtility::buildConfigPluginItems(HbDataFormModelItem *parent, + const QString &configFile, + SearchItemDataHelper &itemDataHelper) +{ + if (!parent) { + return; + } + + QString configPath(configFile); + QFileInfo fi(configFile); + if (!fi.isAbsolute()) { + QStringList dirs = SearchUtility::SearchcfgDirs(); + foreach(const QString &dir,dirs) { + configPath = dir + fi.fileName(); + if (QFileInfo(configPath).exists()) { + break; + } + } + } + + QList SearchPluginConfigs = SearchPluginConfigReader(configPath).readSearchPluginConfigs(); + + foreach(const SearchPluginConfig &SearchPluginConfig, SearchPluginConfigs) { + SearchPluginPlatInterface *plugin = SearchPluginLoader().loadSearchPlugin(SearchPluginConfig.mPluginFile); + + if (plugin) { + SearchSettingFormItemData *itemData = plugin->createSettingFormItemData(itemDataHelper); + if (itemData) { + //append the new created setting form item to its parent item. + parent->appendChild(itemData); + + if (SearchCategorySettingFormItemData *categoryItemData + = qobject_cast(itemData)) { + categoryItemData->initialize(itemDataHelper); + } + + //set the description from config if it is empty. + if (SearchSettingFormEntryItemData *SearchEntryItemData + = qobject_cast(itemData)) { + if (SearchEntryItemData->text().isEmpty()) { + SearchEntryItemData->setText(SearchPluginConfig.mDisplayName); + } + if (SearchEntryItemData->description().isEmpty()) { + SearchEntryItemData->setDescription(SearchPluginConfig.mDescription); + } + } + + } + } + + } //end foreach +} + +#endif + +QStringList SearchUtility::drives() +{ + static QStringList drives; + + if (drives.empty()) { +#ifdef WIN32 + drives.append("C:"); +#else + QFileInfoList fileInfoList = QDir::drives(); + foreach(const QFileInfo &fileInfo,fileInfoList) { + QString str = fileInfo.filePath(); + if (str.length() > 2) { + str = str.left(2); + } + drives.append(str); + } +#endif + } + + return drives; +} + +static QStringList listDirs(const QString &baseDir) +{ + QStringList dirs; + + QStringList drives = SearchUtility::drives(); + foreach(const QString &drive,drives) { + QString dir = drive + baseDir + QDir::separator(); + if (QFileInfo(dir).exists()) { + dirs.append(dir); + } + } + + return dirs; +} + +QStringList SearchUtility::pluginDirs() +{ + static QStringList dirs; + if (dirs.empty()) { + dirs = listDirs(SEARCH_PLUGIN_PATH); + } + return dirs; +} + +QStringList SearchUtility::SearchcfgDirs() +{ + static QStringList dirs; + if (dirs.empty()) { + dirs = listDirs(SEARCH_PLUGIN_CONFIG_PATH); + } + return dirs; +} + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/resource/t_baiduplugin.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/resource/t_baiduplugin.manifest Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,5 @@ + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/src/t_baiduplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/src/t_baiduplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2009 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: t_baidplugin + * + */ + +#include "t_baiduplugin.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// --------------------------------------------------------------------------- +// baiduplugin::baiduplugin() +// --------------------------------------------------------------------------- +// +baiduplugin::baiduplugin() + { + // Set up plugin settings + } + +// --------------------------------------------------------------------------- +// baiduplugin::~baiduplugin() +// --------------------------------------------------------------------------- +// +baiduplugin::~baiduplugin() + { + } + +// --------------------------------------------------------------------------- +// baiduplugin::initialize() +// --------------------------------------------------------------------------- +// +void baiduplugin::initializePlugin() + { + emit pluginInitialized(true); + } + +// --------------------------------------------------------------------------- +// baiduplugin::activate() +// --------------------------------------------------------------------------- +// +void baiduplugin::activatePlugin() + { + } + +// --------------------------------------------------------------------------- +// baiduplugin::activate(const QString &) +// --------------------------------------------------------------------------- +// +void baiduplugin::activatePlugin(const QString &searchQuery) + { +#ifdef __WINSCW__ + HbDialog* popup = new HbDialog(); + popup->setDismissPolicy(HbDialog::NoDismiss); + popup->setTimeout(HbDialog::NoTimeout); + QString str("Baidu Search "); + str.append(searchQuery); + HbLabel *label = new HbLabel(str); + popup->setHeadingWidget(label); + HbAction * action = new HbAction(hbTrId("Back"), popup); + connect(action, SIGNAL(triggered()), this, SLOT(BackEvent())); + popup->setPrimaryAction(action); + popup->show(); +#else + QString url("http://www.baidu.com/s?wd="); + url.append(searchQuery); + QDesktopServices::openUrl(url); +#endif + } +void baiduplugin::BackEvent() + { + emit handleBackEvent(); + } +// --------------------------------------------------------------------------- +// baiduplugin::deactivate() +// --------------------------------------------------------------------------- +// +void baiduplugin::deactivatePlugin() + { + // Destroy everything but the initial view and data that takes a long time + // to reacquire when the plugin is deactivated + } + +// --------------------------------------------------------------------------- +// baiduplugin::shutdown() +// --------------------------------------------------------------------------- +// +void baiduplugin::shutdownPlugin() + { + // Destroy all views + emit shutdownCompleted(true); + + //return true; + } + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/src/t_baidupluginfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/src/t_baidupluginfactory.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009 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: Implementation of the search google online factory. + * + */ + +#include // For Q_EXPORT_PLUGIN2 + +#include "t_baidupluginfactory.h" +#include "t_baiduplugin.h" + + +OnlineSearchPlugin* baidupluginFactory::createPlugin() const +{ + return new baiduplugin(); +} + +Q_EXPORT_PLUGIN2(Baidu,baidupluginFactory) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,24 @@ +# +# Copyright (c) 2009 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: +# +# Template version: 4.2 +HEADERS += ./inc/*.h + + +SOURCES += ./src/*.cpp + +// HEADERS += onlinesearchplugin.h how to solve meta object problem? + +RESOURCES += diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,63 @@ +# +# Copyright (c) 2009 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: search test online project file +# + +TEMPLATE = lib +CONFIG += plugin hb +TARGET = Baidu + +plugin.sources = Baidu.dll +plugin.path = \resource\qt\plugins\onlinesearch + +DEPLOYMENT += plugin + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +win32 { + + LIBS += -L$$PWD/../../../../bin/debug +} + + + +CONFIG += plugin debug_and_release + +QT += xml sql webkit network + + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += ./inc \ + ./src + +INCLUDEPATH += ./inc/ \ + +symbian: { + TARGET.UID3 = 0x2002A532 + TARGET.EPOCALLOWDLLDATA=1 + TARGET.CAPABILITY = ALL -TCB -DRM + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +CONFIG += symbian_test +} + +include(t_baiduplugin.pri) +symbian:include(t_baiduplugin_installs_symbian.pri) +win32:include(t_baiduplugin_installs_win32.pri) +symbian:unix:include(t_baiduplugin_installs_unix.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_symbian.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_symbian.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,25 @@ +# +# Copyright (c) 2009 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: +# + + + +export.sources = resource/*.manifest +export.path = /searchresources/plugins/onlineproviders + +pluginstub.sources = Baidu.dll +pluginstub.path = /resource/qt/plugins/search + +DEPLOYMENT += export pluginstub diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_unix.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,40 @@ +# +# Copyright (c) 2009 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: +# +# + + + + + +# +# Release +# + +r01.path = ../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.so* \ + ./resource/*.manifest + +INSTALLS += r01 + +# +# Debug +# + +d01.path = ../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.so* \ + ./resource/*.manifest + +INSTALLS += d01 diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_baiduplugin/t_baiduplugin_installs_win32.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,37 @@ +# +# Copyright (c) 2009 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: +# +# +# Release +# +r01.path = $$PWD/../../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.dll + +r02.path = $$PWD/../../../../bin/release/searchresources/plugins/onlineproviders +r02.files = ./resource/*.manifest + +INSTALLS += r01 r02 + +# +# Debug +# + +d01.path = $$PWD/../../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.dll + +d02.path = $$PWD/../../../../bin/debug/searchresources/plugins/onlineproviders +d02.files = ./resource/*.manifest + +INSTALLS += d01 d02 \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/inc/onlinesearchplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/inc/onlinesearchplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2009 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: OnlineSearchPlugin class definition + * + */ + +#ifndef ONLINESEARCHPLUGIN_H +#define ONLINESEARCHPLUGIN_H + +#include + +/** + * @ingroup group_onlinesearchpluginmodel + * @brief Represents a plugin plugin in the framework. + * + * OnlineSearchPlugin is an interface through which setting plugin plugin can be + * executed in the search handlers. + * + * @lib ?library + * @since S60 ?S60_version + */ + +class OnlineSearchPlugin : public QObject + { +Q_OBJECT +public: + + /** + * Destructor. + * @since S60 ?S60_version. + */ + virtual ~OnlineSearchPlugin() + { + } + + /** + * Called by the search handlers during initialize cycle of the plugin, it is during + * this phase the plugin widget + * usually creates its initial view. + * Once the initialization is done, pluginInitialized signal must be + * emitted. + * @since S60 ?S60_version. + */ + virtual void initializePlugin() = 0; + + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin() = 0; + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin(const QString &searchQuery) = 0; + + /** + * Called by the search handlers when the plugin is no longer being displayed. + */ + virtual void deactivatePlugin() = 0; + + /** + * Called by the search handlers before the plugin destructor is called. + * @param reason The reason why the search handlers is being killed. + */ + virtual void shutdownPlugin() = 0; + +protected: + + /** + * Constructor. + * @since S60 ?S60_version. + */ + OnlineSearchPlugin() + { + } + +signals: + + /** + * Emit this signal when changing the view inside the plugin. + * @param caller The calling plugin plugin instance. + * @param viewWidget The new plugin view widget to be shown. + */ + void viewChanged(); + + /** + * Emit this signal to indicate initialization is done. + * @param caller The calling plugin plugin instance. + * @param success True if succeeded, false otherwise. + */ + void pluginInitialized(bool success); + + /** + * Emit this signal to indicate that the plugin plugin can be deleted. + * Note that this signal does not need to be emitted if true is returned + * from shutdownPlugin. + * @param caller The calling plugin plugin instance. + */ + void shutdownCompleted(bool success); + + /** + * Called by search handlers when back button is clicked in the plugin view. + * In this method the plugin plugin can implement internally showing and + * hiding GUI elements if the plugin has multiple 'views'. + */ + void handleBackEvent(); + }; + +#endif // ONLINESEARCHPLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/inc/t_bingplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/inc/t_bingplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2009 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: Declaration of the search google plugin. + * + */ + +#ifndef T_BINGLUGIN_H +#define T_BINGLUGIN_H + +#include + +#include +#include + +class bingplugin : public OnlineSearchPlugin + { +Q_OBJECT + +public: + + // Default Constructor + bingplugin(); + // Destructor + ~bingplugin(); + +protected: + + // Overrides from OnlineSearchPlugin + void initializePlugin(); + void activatePlugin(); + void activatePlugin(const QString &searchQuery); + void deactivatePlugin(); + void shutdownPlugin(); + +private slots: + void BackEvent(); +private: + }; + +#endif // T_BINGLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/inc/t_bingpluginfactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/inc/t_bingpluginfactory.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2009 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: Declaration of the search google online factory. + * + */ + +#ifndef BINGPLUGINFACTORY_H +#define BINGPLUGINFACTORY_H + +#include + +#include + +class OnlineSearchPlugin; + + +class bingpluginFactory : public QObject, public OnlineSearchPluginFactory +{ + Q_OBJECT + Q_INTERFACES(OnlineSearchPluginFactory) + +public: + + // Wizard factory + OnlineSearchPlugin* createPlugin() const; +}; + +#endif // BINGPLUGINFACTORY_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/resource/t_bingplugin.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/resource/t_bingplugin.manifest Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,5 @@ + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/src/t_bingplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/src/t_bingplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2009 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: bingplugin. + * + */ + +#include "t_bingplugin.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// --------------------------------------------------------------------------- +// bingplugin::bingplugin() +// --------------------------------------------------------------------------- +// +bingplugin::bingplugin() + { + // Set up plugin settings + } + +// --------------------------------------------------------------------------- +// bingplugin::~bingplugin() +// --------------------------------------------------------------------------- +// +bingplugin::~bingplugin() + { + } + +// --------------------------------------------------------------------------- +// bingplugin::initialize() +// --------------------------------------------------------------------------- +// +void bingplugin::initializePlugin() + { + emit pluginInitialized(true); + } + +// --------------------------------------------------------------------------- +// bingplugin::activate() +// --------------------------------------------------------------------------- +// +void bingplugin::activatePlugin() + { + } + +// --------------------------------------------------------------------------- +// bingplugin::activate(const QString &) +// --------------------------------------------------------------------------- +// +void bingplugin::activatePlugin(const QString &searchQuery) + { +#ifdef __WINSCW__ + HbDialog* popup = new HbDialog(); + popup->setDismissPolicy(HbDialog::NoDismiss); + popup->setTimeout(HbDialog::NoTimeout); + QString str; + str.append("bing Search "); + str.append(searchQuery); + HbLabel *label = new HbLabel(str); + popup->setHeadingWidget(label); + HbAction * action = new HbAction(hbTrId("Back"), popup); + connect(action, SIGNAL(triggered()), this, SLOT(BackEvent())); + popup->setPrimaryAction(action); + popup->show(); +#else + QString url("http://www.bing.com/search?q="); + url.append(searchQuery); + url.append("&form=QBLH&qs=n&sk="); + QDesktopServices::openUrl(url); +#endif + } +void bingplugin::BackEvent() + { + emit handleBackEvent(); + } +// --------------------------------------------------------------------------- +// bingplugin::deactivate() +// --------------------------------------------------------------------------- +// +void bingplugin::deactivatePlugin() + { + // Destroy everything but the initial view and data that takes a long time + // to reacquire when the plugin is deactivated + } + +// --------------------------------------------------------------------------- +// bingplugin::shutdown() +// --------------------------------------------------------------------------- +// +void bingplugin::shutdownPlugin() + { + // Destroy all views + emit shutdownCompleted(true); + } + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/src/t_bingpluginfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/src/t_bingpluginfactory.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009 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:Implementation of the search google online factory. + * + */ + +#include // For Q_EXPORT_PLUGIN2 + +#include "t_bingpluginfactory.h" +#include "t_bingplugin.h" + + +OnlineSearchPlugin* bingpluginFactory::createPlugin() const +{ + return new bingplugin(); +} + +Q_EXPORT_PLUGIN2(Bing,bingpluginFactory) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,24 @@ +# +# Copyright (c) 2009 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: search how-to verification online +# + +HEADERS += ./inc/*.h + + +SOURCES += ./src/*.cpp + +// HEADERS += onlinesearchplugin.h how to solve meta object problem? + +RESOURCES += diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,63 @@ +# +# Copyright (c) 2009 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: search test online project file +# + +TEMPLATE = lib +CONFIG += plugin hb +TARGET = Bing + +plugin.sources = Bing.dll +plugin.path = \resource\qt\plugins\onlinesearch + +DEPLOYMENT += plugin + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +win32 { + + LIBS += -L$$PWD/../../../../bin/debug +} + + + +CONFIG += plugin debug_and_release + +QT += xml sql webkit network + + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += ./inc \ + ./src + +INCLUDEPATH += ./inc/ \ + +symbian: { + TARGET.UID3 = 0x2002A532 + TARGET.EPOCALLOWDLLDATA=1 + TARGET.CAPABILITY = ALL -TCB -DRM + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +CONFIG += symbian_test +} + +include(t_bingplugin.pri) +symbian:include(t_bingplugin_installs_symbian.pri) +win32:include(t_bingplugin_installs_win32.pri) +symbian:unix:include(t_bingplugin_installs_unix.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_symbian.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_symbian.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,23 @@ + +# +# Copyright (c) 2009 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: +# +export.sources = resource/*.manifest +export.path = /searchresources/plugins/onlineproviders + +pluginstub.sources = Bing.dll +pluginstub.path = /resource/qt/plugins/search + +DEPLOYMENT += export pluginstub diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_unix.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,35 @@ +# +# Copyright (c) 2009 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: +# +# +# +# Release +# + +r01.path = ../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.so* \ + ./resource/*.manifest + +INSTALLS += r01 + +# +# Debug +# + +d01.path = ../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.so* \ + ./resource/*.manifest + +INSTALLS += d01 diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_bingplugin/t_bingplugin_installs_win32.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,37 @@ +# +# Copyright (c) 2009 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: +# +# +# Release +# +r01.path = $$PWD/../../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.dll + +r02.path = $$PWD/../../../../bin/release/searchresources/plugins/onlineproviders +r02.files = ./resource/*.manifest + +INSTALLS += r01 r02 + +# +# Debug +# + +d01.path = $$PWD/../../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.dll + +d02.path = $$PWD/../../../../bin/debug/searchresources/plugins/onlineproviders +d02.files = ./resource/*.manifest + +INSTALLS += d01 d02 \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/inc/onlinesearchplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/inc/onlinesearchplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2009 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: OnlineSearchPlugin class definition + * + */ + +#ifndef ONLINESEARCHPLUGIN_H +#define ONLINESEARCHPLUGIN_H + +#include + +/** + * @ingroup group_onlinesearchpluginmodel + * @brief Represents a plugin plugin in the framework. + * + * OnlineSearchPlugin is an interface through which setting plugin plugin can be + * executed in the search handlers. + * + * @lib ?library + * @since S60 ?S60_version + */ + +class OnlineSearchPlugin : public QObject + { +Q_OBJECT +public: + + /** + * Destructor. + * @since S60 ?S60_version. + */ + virtual ~OnlineSearchPlugin() + { + } + + /** + * Called by the search handlers during initialize cycle of the plugin, it is during + * this phase the plugin widget + * usually creates its initial view. + * Once the initialization is done, pluginInitialized signal must be + * emitted. + * @since S60 ?S60_version. + */ + virtual void initializePlugin() = 0; + + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin() = 0; + /** + * Called by the search handlers when the plugin becomes the current plugin. + * @since S60 ?S60_version. + */ + virtual void activatePlugin(const QString &searchQuery) = 0; + + /** + * Called by the search handlers when the plugin is no longer being displayed. + */ + virtual void deactivatePlugin() = 0; + + /** + * Called by the search handlers before the plugin destructor is called. + * @param reason The reason why the search handlers is being killed. + */ + virtual void shutdownPlugin() = 0; + +protected: + + /** + * Constructor. + * @since S60 ?S60_version. + */ + OnlineSearchPlugin() + { + } + +signals: + + /** + * Emit this signal when changing the view inside the plugin. + * @param caller The calling plugin plugin instance. + * @param viewWidget The new plugin view widget to be shown. + */ + void viewChanged(); + + /** + * Emit this signal to indicate initialization is done. + * @param caller The calling plugin plugin instance. + * @param success True if succeeded, false otherwise. + */ + void pluginInitialized(bool success); + + /** + * Emit this signal to indicate that the plugin plugin can be deleted. + * Note that this signal does not need to be emitted if true is returned + * from shutdownPlugin. + * @param caller The calling plugin plugin instance. + */ + void shutdownCompleted(bool success); + + /** + * Called by search handlers when back button is clicked in the plugin view. + * In this method the plugin plugin can implement internally showing and + * hiding GUI elements if the plugin has multiple 'views'. + */ + void handleBackEvent(); + }; + +#endif // ONLINESEARCHPLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/inc/t_googleplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/inc/t_googleplugin.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2009 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: Declaration of the search google plugin + * + */ + +#ifndef T_GOOGLEPLUGIN_H +#define T_GOOGLEPLUGIN_H + +#include + +#include +#include + + +class googleplugin : public OnlineSearchPlugin +{ + Q_OBJECT + +public: + + // Default Constructor + googleplugin(); + // Destructor + ~googleplugin(); + +protected: + + // Overrides from OnlineSearchPlugin + void initializePlugin(); + void activatePlugin(); + void activatePlugin(const QString &searchQuery); + void deactivatePlugin(); + void shutdownPlugin(); +private slots: + void BackEvent(); + + +private: +}; + +#endif // T_GOOGLEPLUGIN_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/inc/t_googlepluginfactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/inc/t_googlepluginfactory.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2009 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: Declaration of the search google online factory. + * + */ + +#ifndef GOOGLEPLUGINFACTORY_H +#define GOOGLEPLUGINFACTORY_H + +#include + +#include + +class OnlineSearchPlugin; + + +class googlepluginFactory : public QObject, public OnlineSearchPluginFactory +{ + Q_OBJECT + Q_INTERFACES(OnlineSearchPluginFactory) + +public: + + // Wizard factory + OnlineSearchPlugin* createPlugin() const; +}; + +#endif // GOOGLEPLUGINFACTORY_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/resource/t_googleplugin.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/resource/t_googleplugin.manifest Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,5 @@ + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/src/t_googleplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/src/t_googleplugin.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2009 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: googleplugin. + * + */ + +#include "t_googleplugin.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// --------------------------------------------------------------------------- +// googleplugin::googleplugin() +// --------------------------------------------------------------------------- +// +googleplugin::googleplugin() + { + qDebug() << "googleplugin"; + // Set up plugin settings + } + +// --------------------------------------------------------------------------- +// googleplugin::~googleplugin() +// --------------------------------------------------------------------------- +// +googleplugin::~googleplugin() + { + } + +// --------------------------------------------------------------------------- +// googleplugin::initialize() +// --------------------------------------------------------------------------- +// +void googleplugin::initializePlugin() + { + emit pluginInitialized(true); + } + +// --------------------------------------------------------------------------- +// googleplugin::activate() +// --------------------------------------------------------------------------- +// +void googleplugin::activatePlugin() + { + } + +// --------------------------------------------------------------------------- +// googleplugin::activate(const QString &) +// --------------------------------------------------------------------------- +// +void googleplugin::activatePlugin(const QString &searchQuery) + { + qDebug() << "search:activatePlugin" ; +#ifdef __WINSCW__ + qDebug() << "search:activatePlugin winscw" ; + HbDialog* popup = new HbDialog(); + popup->setDismissPolicy(HbDialog::NoDismiss); + popup->setTimeout(HbDialog::NoTimeout); + QString str; + str.append(QString("google Search ")); + str.append(searchQuery); + HbLabel *label = new HbLabel(str); + popup->setHeadingWidget(label); + HbAction * action = new HbAction(hbTrId("Back"), popup); + connect(action, SIGNAL(triggered()), this, SLOT(BackEvent())); + popup->setPrimaryAction(action); + popup->show(); +#else + qDebug() << "search:activatePlugin armvs" ; + QString url("http://www.google.co.in/search?hl=en&source=hp&q="); + url.append(searchQuery); + url.append("&meta=&aq=f&aqi=g10&aql=&oq=&gs_rfai="); + QDesktopServices::openUrl(url); +#endif + + } +void googleplugin::BackEvent() + { + emit handleBackEvent(); + } +// --------------------------------------------------------------------------- +// googleplugin::deactivate() +// --------------------------------------------------------------------------- +// +void googleplugin::deactivatePlugin() + { + // Destroy everything but the initial view and data that takes a long time + // to reacquire when the plugin is deactivated + } + +// --------------------------------------------------------------------------- +// googleplugin::shutdown() +// --------------------------------------------------------------------------- +// +void googleplugin::shutdownPlugin() + { + // Destroy all views + emit shutdownCompleted(true); + //return true; + } + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/src/t_googlepluginfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/src/t_googlepluginfactory.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2009 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: Implementation of the search google online factory. + * + */ + +#include // For Q_EXPORT_PLUGIN2 + +#include "t_googlepluginfactory.h" +#include "t_googleplugin.h" + + +OnlineSearchPlugin* googlepluginFactory::createPlugin() const +{ + qDebug() << "googlepluginFactory"; + return new googleplugin(); +} + +Q_EXPORT_PLUGIN2(Google,googlepluginFactory) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,25 @@ +# +# Copyright (c) 2009 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: search how-to verification online +# + + +HEADERS += ./inc/*.h + + +SOURCES += ./src/*.cpp + +// HEADERS += onlinesearchplugin.h how to solve meta object problem? + +RESOURCES += diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,64 @@ +# +# Copyright (c) 2009 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: search test online project file +# + + +TEMPLATE = lib +CONFIG += plugin hb +TARGET = Google + +plugin.sources = Google.dll +plugin.path = \resource\qt\plugins\onlinesearch + +DEPLOYMENT += plugin + +CONFIG(debug, debug|release) { + DESTDIR = debug +} else { + DESTDIR = release +} + +win32 { + + LIBS += -L$$PWD/../../../../bin/debug +} + + + +CONFIG += plugin debug_and_release + +QT += xml sql webkit network + + + +coverage:DEFINES += COVERAGE_MEASUREMENT + +DEPENDPATH += ./inc \ + ./src + +INCLUDEPATH += ./inc/ \ + +symbian: { + TARGET.UID3 = 0x2002A532 + TARGET.EPOCALLOWDLLDATA=1 + TARGET.CAPABILITY = ALL -TCB -DRM + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +CONFIG += symbian_test +} + +include(t_googleplugin.pri) +symbian:include(t_googleplugin_installs_symbian.pri) +win32:include(t_googleplugin_installs_win32.pri) +symbian:unix:include(t_googleplugin_installs_unix.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_symbian.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_symbian.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,22 @@ +# +# Copyright (c) 2009 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: +# +export.sources = resource/*.manifest +export.path = /searchresources/plugins/onlineproviders + +pluginstub.sources = Google.dll +pluginstub.path = /resource/qt/plugins/search + +DEPLOYMENT += export pluginstub diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_unix.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,35 @@ +# +# Copyright (c) 2009 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: +# +# +# +# Release +# + +r01.path = ../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.so* \ + ./resource/*.manifest + +INSTALLS += r01 + +# +# Debug +# + +d01.path = ../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.so* \ + ./resource/*.manifest + +INSTALLS += d01 diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_googleplugin/t_googleplugin_installs_win32.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,41 @@ +# +# Copyright (c) 2009 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: +# +# +# Release +# + +# +# Release +# +r01.path = $$PWD/../../../../bin/release/resource/qt/plugins/search +r01.files = ./release/*.dll + +r02.path = $$PWD/../../../../bin/release/searchresources/plugins/onlineproviders +r02.files = ./resource/*.manifest + +INSTALLS += r01 r02 + +# +# Debug +# + +d01.path = $$PWD/../../../../bin/debug/resource/qt/plugins/search +d01.files = ./debug/*.dll + +d02.path = $$PWD/../../../../bin/debug/searchresources/plugins/onlineproviders +d02.files = ./resource/*.manifest + +INSTALLS += d01 d02 \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_onlinehandler/inc/t_onlinehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_onlinehandler/inc/t_onlinehandler.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2009 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: Tests for Onlinehandler class. + * + */ + +#include +#include "onlinehandler.h" + +/** + * @test Test class for Onlinehandler modules. + */ +class SearchOnlineHandlerTest : public QObject + { +Q_OBJECT + +public: + SearchOnlineHandlerTest(); + ~SearchOnlineHandlerTest(); + +private slots: + void init(); + void initTestCase(); + void cleanupTestCase(); + void testsetDefaultProvider(); + void testinitializePlugin(); + void testactivatePlugin(); + void testactivatePlugin1(); + void testwriteSettings(); + void testloadISPlugin(); + void testunloadPlugin(); + void testunloadPluginandExit(); + void testbackEvent(); + + //IsEngine + /* + void testSelectedProvider(); + void testSetSelectedProvider(); + void testProviders();*///covered in above funtions + void testPerformWebSearch(); + void testPerformInDeviceSearch(); + + //IsProviderdbManager & serviceprovider + /* + void testGetProviders(); + void testGetCountryList(); + void testSelectedProvider(); + void testSetSelectedProvider();//covered in above funtions + */ + }; + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_onlinehandler/src/t_onlinehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_onlinehandler/src/t_onlinehandler.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2009 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: test searchonlinehandler. + * + */ +#include "t_onlinehandler.h" +#include "onlinehandler.h" +#include +#include "serviceprovider.h" +#include "isengine.h" +#include "isproviderdbmanager.h" + +SearchOnlineHandlerTest::SearchOnlineHandlerTest() + { + } +SearchOnlineHandlerTest::~SearchOnlineHandlerTest() + { + } +void SearchOnlineHandlerTest::init() + { + } +void SearchOnlineHandlerTest::initTestCase() + { + } +void SearchOnlineHandlerTest::cleanupTestCase() + { + } +void SearchOnlineHandlerTest::testsetDefaultProvider() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + if (onlinetestobj->mAvailableProviders.count()) + { + onlinetestobj->mAvailableProviders.at(0); + int i = onlinetestobj->mAvailableProviders.at(0).Id(); + onlinetestobj->setDefaultProvider(i); + onlinetestobj->mEng->SelectedProvider(); + QCOMPARE(i,onlinetestobj->mEng->SelectedProvider()->Id()); + } + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testinitializePlugin() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + QSignalSpy spy(onlinetestobj, SIGNAL(pluginIntialized(bool))); + onlinetestobj->initializePlugin(); + QCOMPARE(spy.count(), 1); + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testactivatePlugin() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + onlinetestobj->initializePlugin(); + onlinetestobj->activatePlugin(); + /* delete onlinetestobj->mOnlinePlugin; + onlinetestobj->mOnlinePlugin = NULL; + onlinetestobj->activatePlugin();*/ + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testactivatePlugin1() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + onlinetestobj->initializePlugin(); + onlinetestobj->activatePlugin("ab"); + /*delete onlinetestobj->mOnlinePlugin; + onlinetestobj->mOnlinePlugin = NULL; + onlinetestobj->activatePlugin("ab"); +*/ delete onlinetestobj; + } +void SearchOnlineHandlerTest::testwriteSettings() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + if (onlinetestobj->mAvailableProviders.count()) + { + onlinetestobj->writeSettings( + onlinetestobj->mAvailableProviders.at(0).Id()); + } + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testloadISPlugin() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + if (onlinetestobj->mAvailableProviders.count()) + { + QSignalSpy spy(onlinetestobj, SIGNAL(pluginIntialized(bool))); + onlinetestobj->loadISPlugin( + onlinetestobj->mAvailableProviders.at(0).Id(), "ab"); + QCOMPARE(spy.count(), 0); + } + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testunloadPlugin() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + onlinetestobj->initializePlugin(); + onlinetestobj->unloadPlugin(); + delete onlinetestobj; + } +void SearchOnlineHandlerTest::testunloadPluginandExit() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + onlinetestobj->initializePlugin(); + QSignalSpy spy(onlinetestobj, SIGNAL(pluginShutdown(bool))); + onlinetestobj->unloadPluginandExit(); + QCOMPARE(spy.count(), 1); + delete onlinetestobj; + } + +void SearchOnlineHandlerTest::testbackEvent() + { + OnlineHandler* onlinetestobj = new OnlineHandler(); + QSignalSpy spy(onlinetestobj, SIGNAL(backEventTriggered())); + onlinetestobj->backEvent(); + QCOMPARE(spy.count(), 1); + delete onlinetestobj; + } + +void SearchOnlineHandlerTest::testPerformWebSearch() + { + /* OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + if (onlinetestobj->mEng) + { + onlinetestobj->mEng->PerformWebSearch("string"); + } + delete onlinetestobj;*/ + } +void SearchOnlineHandlerTest::testPerformInDeviceSearch() + { + /*OnlineHandler* onlinetestobj = new OnlineHandler(); + onlinetestobj->readSettings(); + if (onlinetestobj->mEng) + { + onlinetestobj->mEng->PerformInDeviceSearch("string"); + } + delete onlinetestobj;*/ + } + +#ifdef Q_OS_SYMBIAN + +//QTEST_MAIN corrected since crashes if TRAP not in correct place. +//Will be corrected in later (estimate 4.6.0) Qt release for Symbian. +int main(int argc, char *argv[]) + { + QApplication app(argc, argv); + int error = 0; + TRAPD(err, + QTEST_DISABLE_KEYPAD_NAVIGATION + SearchOnlineHandlerTest tc; + error = QTest::qExec(&tc, argc, argv);); + Q_UNUSED(err); + return error; + } +#else //Q_OS_SYMBIAN +QTEST_MAIN(SearchOnlineHandlerTest) +#endif //Q_OS_SYMBIAN diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_onlinehandler/t_onlinehandler.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_onlinehandler/t_onlinehandler.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2009 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: +# +#Header files +HEADERS += ./inc/*.h + +#Source files +SOURCES += ./src/*.cpp \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/t_onlinehandler/t_onlinehandler.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/t_onlinehandler/t_onlinehandler.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,47 @@ +# +# Copyright (c) 2009 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: Search onlinehandler unit test project file +# + +TEMPLATE = app + + +LIBS += -lsearchonlinehandler +LIBS += -lisengine +LIBS += -lisproviderdbmanager + +INCLUDEPATH += . +INCLUDEPATH += ../../inc \ + ../../../inc + + +CONFIG += qtestlib +CONFIG += hb + +QT += xml \ + sql +DEFINES += SEARCH_UNITTESTING + +symbian { +CONFIG += symbian_test +TARGET.UID2 = 0x100039CE +TARGET.CAPABILITY = ALL -TCB -DRM +TARGET.EPOCSTACKSIZE = 0x14000 // 80kB +TARGET.EPOCHEAPSIZE = 0x20000 0x800000 // 128kB - 16MB +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +} + +include(t_onlinehandler.pri) + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/testdb/providerdatabase.sq Binary file searchui/onlinehandler/tsrc/testdb/providerdatabase.sq has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/onlinehandler/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/onlinehandler/tsrc/tsrc.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,30 @@ +# +# Copyright (c) 2009 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: +# + +TEMPLATE = subdirs + +SUBDIRS += t_onlinehandler \ +t_baiduplugin \ +t_bingplugin \ +t_googleplugin + +CONFIG += ordered + +symbian: { + CONFIG += symbian_test +BLD_INF_RULES.prj_exports += "testdb/providerdatabase.sq /epoc32/winscw/c/private/20022F35/providerdatabase.sq" \ + "testdb/providerdatabase.sq /epoc32/data/z/private/20022F35/providerdatabase.sq" +} diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/rom/search.iby --- a/searchui/rom/search.iby Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/rom/search.iby Mon Jun 28 11:03:15 2010 +0530 @@ -32,6 +32,9 @@ //SearchIndevice handler file=/epoc32/release/armv5/urel/searchindevicehandler.dll SHARED_LIB_DIR/searchindevicehandler.dll +//Searchonline handler +file=/epoc32/release/armv5/urel/searchonlinehandler.dll SHARED_LIB_DIR/searchonlinehandler.dll + //runtime provider dll diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro --- a/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro Mon Jun 28 11:03:15 2010 +0530 @@ -63,6 +63,16 @@ TARGET.CAPABILITY = ALL -TCB -DRM appkey:DEFINES += S60APP_KEY INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + + defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock #include(searchruntimeprovider_installs_symbian.pri) # BLD_INF_RULES.prj_exports += "./inc/searchruntimeprovider.h |../../inc/" \ # "./inc/searchruntime.h |../../inc/" diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp --- a/searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -23,23 +23,24 @@ #include #include #include - +#include #include - +#define hbApp qobject_cast(qApp) // states const char wizardProgressiveStateUri[] = "search.nokia.com/state/wizardprogressivestate"; const char wizardSettingStateUri[] = "search.nokia.com/state/wizardsettingstate"; - +const char wizardOnlineStateUri[] = + "search.nokia.com/state/wizardonlinestate"; // --------------------------------------------------------------------------- // searchRuntime::SearchRuntime // --------------------------------------------------------------------------- // SearchRuntime::SearchRuntime(QObject* aParent) : -QStateMachine(aParent),mWindow(0) + QStateMachine(aParent), mWindow(0) { createGuiServiceParts(); createStates(); @@ -52,7 +53,7 @@ SearchRuntime::~SearchRuntime() { delete mWindow; - // delete mStateMachine; + // delete mStateMachine; } // --------------------------------------------------------------------------- @@ -61,7 +62,7 @@ // void SearchRuntime::handleStateMachineStarted() { - // emit started(); + // emit started(); } // --------------------------------------------------------------------------- @@ -91,7 +92,7 @@ { SearchStateProvider stateProvider; - + QFinalState* finalState = new QFinalState(); this->addState(finalState); @@ -105,43 +106,88 @@ QState* searchRootState = new QState(guiRootState); - - QState* wizardProgressiveState = stateProvider.createState(wizardProgressiveStateUri); + QState* wizardProgressiveState = stateProvider.createState( + wizardProgressiveStateUri); // set state specific data wizardProgressiveState->setParent(searchRootState); wizardProgressiveState->setObjectName(wizardProgressiveStateUri); - - QState* wizardSettingState = stateProvider.createState(wizardSettingStateUri); + QState* wizardSettingState = stateProvider.createState( + wizardSettingStateUri); wizardSettingState->setParent(searchRootState); wizardSettingState->setObjectName(wizardSettingStateUri); + QState* wizardOnlineState = stateProvider.createState( + wizardOnlineStateUri); + wizardOnlineState->setParent(searchRootState); + wizardOnlineState->setObjectName(wizardOnlineStateUri); + + // progressive to settings wizardProgressiveState->addTransition(wizardProgressiveState, - SIGNAL(settingsState()), wizardSettingState); + SIGNAL(switchProToSettingsState()), wizardSettingState); - // From activated back to menu + // settings to progressive wizardSettingState->addTransition(wizardSettingState, - SIGNAL(backEventTriggered()), wizardProgressiveState); - + SIGNAL(switchToProState()), wizardProgressiveState); + + // online to settings + wizardOnlineState->addTransition(wizardOnlineState, + SIGNAL(switchOnlineToSettingsState()), wizardSettingState); + + // settings to online + wizardSettingState->addTransition(wizardSettingState, + SIGNAL(switchToOnlineState()), wizardOnlineState); + connect(wizardSettingState, SIGNAL(clickstatus(bool)), - wizardProgressiveState, SLOT(settingsaction(bool))); + wizardProgressiveState, SLOT(settingsaction(bool))); connect(wizardSettingState, SIGNAL(publishSelectedCategory(int,bool)), wizardProgressiveState, SLOT(getSettingCategory(int,bool))); + + connect(wizardSettingState, SIGNAL(publishISProviderIcon(int,HbIcon)), + wizardProgressiveState, SLOT(slotISProvidersIcon(int,HbIcon))); - connect(wizardSettingState, SIGNAL(customizeGoButton(bool)), - wizardProgressiveState, SLOT(_customizeGoButton(bool))); + connect(wizardProgressiveState, SIGNAL(inDeviceSearchQuery(QString)), + wizardOnlineState, SLOT(slotIndeviceQuery(QString))); + + connect(wizardProgressiveState, SIGNAL(launchLink(int,QString)), + wizardOnlineState, SLOT(slotlaunchLink(int,QString))); + + connect(wizardOnlineState, SIGNAL(onlineSearchQuery(QString)), + wizardProgressiveState, SLOT(slotOnlineQuery(QString))); // set initial state for statemachine - searchRootState->setInitialState(wizardProgressiveState); + if (hbApp->activateReason() == Hb::ActivationReasonActivity) + { + + QVariantHash params = hbApp->activateParams(); + QString var = params.value("activityname").toString(); + + if (var == "SearchView") + { + searchRootState->setInitialState(wizardProgressiveState); + } + else if (var == "SearchDeviceQueryView") + { + searchRootState->setInitialState(wizardProgressiveState); + + } + else if (var == "SearchWebQueryView") + { + searchRootState->setInitialState(wizardOnlineState); + } + } + else if (hbApp->activateReason() == Hb::ActivationReasonNormal) + { + + searchRootState->setInitialState(wizardProgressiveState); + + } guiRootState->setInitialState(searchRootState); this->setInitialState(parallel); - connect(this, SIGNAL(started()), - SLOT(handleStateMachineStarted())); - connect(this, SIGNAL(stopped()), - SLOT(handleStateMachineStopped())); - connect(this, SIGNAL(finished()), - SLOT(handleStateMachineStopped())); + connect(this, SIGNAL(started()), SLOT(handleStateMachineStarted())); + connect(this, SIGNAL(stopped()), SLOT(handleStateMachineStopped())); + connect(this, SIGNAL(finished()), SLOT(handleStateMachineStopped())); } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/inc/search.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/inc/search.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2009 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: search application main class. + * + */ + +#ifndef SEARCHAPPLICATION_H +#define SEARCHAPPLICATION_H + +#include "search_global.h" + +#include + +class QStateMachine; + +/** + * @ingroup group_searchsearchlication + * @brief Search application main class. + * + * Loads a runtime from a runtime provider plugin. Manages + * the runtime execution. + * + * @lib ?library + * @since S60 ?S60_version + */ +class Search : public QObject + { +Q_OBJECT + +public: + + /** + * Constructor. + * @since S60 ?S60_version. + * @param aParent Parent object. + */ + Search(QObject* aParent = 0); + + /** + * Destructor. + * @since S60 ?S60_version. + */ + virtual ~Search(); + +private: + + Q_DISABLE_COPY(Search) + +signals: + + /** + * Emitted when the search application needs to exit. + * @since S60 ?S60_version. + */ + void exit(); + +public slots: + + /** + * Starts the runtime. + * @since S60 ?S60_version. + */ + void start(); + + /** + * Stops the runtime. + * @since S60 ?S60_version. + */ + void stop(); + +private slots: + + /** + * Called after the runtime has started. + * @since S60 ?S60_version. + */ + void handleRuntimeStarted(); + + /** + * Called after the runtime has stopped. + * @since S60 ?S60_version. + */ + void handleRuntimeStopped(); + + /** + * Called after the runtime has faulted. + * @since S60 ?S60_version. + */ + void handleRuntimeFaulted(); + +private: + + /** + * Runtime. + */ + QStateMachine* mRuntime; + }; + +#endif//SEARCHAPPLICATION_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/resources/search_app_icon.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/resources/search_app_icon.svg Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/searchapplication.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/searchapplication.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,19 @@ +# +# Copyright (c) 2009 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: Search application list of files +# + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/searchapplication.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/searchapplication.pro Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,68 @@ +# +# Copyright (c) 2009 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: `Search application project file +# + +TEMPLATE = app + +TARGET = Searchapplication + +win32 { + LIBS += -L$$PWD/../../bin/debug + + CONFIG(debug, debug|release) { + SUBDIRPART = debug + } else { + SUBDIRPART = release + } + DESTDIR = $$PWD/../../bin/$$SUBDIRPART +} + +LIBS += -lsearchruntimeprovider + +QT += xml + +CONFIG += hb +CONFIG += console +CONFIG += hb console mobility + +TRANSLATIONS += searchsw.ts +nft:DEFINES += NFT + +DEPENDPATH += . \ + ./inc \ + ./src + +INCLUDEPATH += . \ + ./inc \ + ../inc \ + ../runtimeproviders/searchruntimeprovider/inc + +symbian { + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0x2002C377 + TARGET.CAPABILITY = CAP_APPLICATION AllFiles TrustedUI + TARGET.EPOCSTACKSIZE = 0x14000 // 80kB + TARGET.EPOCHEAPSIZE = 0x20000 0x800000 // 128kB - 16MB + rom:DEFINES += ROM + SKINICON = qtg_large_search + INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +} + +win32 { +include(searchapplication_installs_win32.pri) +} + +include(searchapplication.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/searchapplication_installs_symbian.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/searchapplication_installs_symbian.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2009 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: +# + + +#deploy.path = z: + +#exports1.path = /private/20026F95 + +#exports1.sources += resource/ftudb + +#for(export1, exports1.sources):BLD_INF_RULES.prj_exports += "./$$export1 $$deploy.path$$exports1.path/$$basename(export1)" + + + diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/searchapplication_installs_unix.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/searchapplication_installs_unix.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,33 @@ +# +# Copyright (c) 2009 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: +# +# + +# Release +# + +r01.path = ../../bin/release/ +r01.files = ./release/Searchapplication + +INSTALLS += r01 + +# +# Debug +# + +d01.path = ../../bin/debug/ +d01.files = ./debug/Searchapplication + +INSTALLS += d01 \ No newline at end of file diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/searchapplication_installs_win32.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/searchapplication_installs_win32.pri Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,32 @@ +# +# Copyright (c) 2009 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: +# +# +# Release +# + +r01.path = $$PWD/../../bin/release/ +r01.files = ./release/*.* + +INSTALLS += r01 + +# +# Debug +# + +d01.path = $$PWD/../../bin/debug/ +d01.files = ./debug/*.* + +INSTALLS += d01 diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/src/main.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2009 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: Search application main implementation. + * + */ + +#include "search.h" +#include "search_global.h" + +#include +#include +#include +#include + +// --------------------------------------------------------------------------- +// main +// --------------------------------------------------------------------------- +// +int main(int argc, char *argv[]) + { + SEARCH_FUNC_ENTRY("SEARCH::Search::main"); + PERF_APP_LAUNCH_END("SearchApplication Main Called"); + HbApplication app(argc, argv); + + QTranslator translator; + QString lang = QLocale::system().name(); + QString path = "Z:/resource/qt/translations/"; + translator.load("searchsw_" + lang, path); + app.installTranslator(&translator); + + QTranslator commonTranslator; + commonTranslator.load("common_" + lang, path); + app.installTranslator(&commonTranslator); + + QTranslator musicTranslator; + musicTranslator.load("musicplayer_" + lang, path); + app.installTranslator(&musicTranslator); + + QTranslator contactsTranslator; + contactsTranslator.load("contacts_" + lang, path); + app.installTranslator(&contactsTranslator); + + QTranslator calenderTranslator; + calenderTranslator.load("calendar_" + lang, path); + app.installTranslator(&calenderTranslator); + + QTranslator notesTranslator; + notesTranslator.load("notes_" + lang, path); + app.installTranslator(¬esTranslator); + PERF_APP_LAUNCH_END("Search Component Cunstructions starts"); + Search search; + PERF_APP_LAUNCH_END("Search Component Cunstructions Ends"); +#ifdef ROM + QDir::setCurrent("Z:/"); +#else + QDir::setCurrent("C:/"); + SEARCHDEBUG("main() - SearchApplication's current dir set to C:/"); +#endif //ROM + QObject::connect(&app, SIGNAL(aboutToQuit()), &search, SLOT(stop())); + QObject::connect(&search, SIGNAL(exit()), &app, SLOT(quit()), + Qt::QueuedConnection); + search.start(); + PERF_APP_LAUNCH_END("SearchApplication Ends, Main Event Loop"); + int ret = app.exec(); + SEARCH_FUNC_EXIT("SEARCH::Search::main"); + return ret; + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchapplication/src/search.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/searchapplication/src/search.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2009 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: Search application main class. + * + */ + +#include "search.h" +#include +#include +#include + +// --------------------------------------------------------------------------- +// Search::Search +// --------------------------------------------------------------------------- +// +Search::Search(QObject* aParent) : + QObject(aParent), mRuntime(NULL) + { + SEARCH_FUNC_ENTRY("SEARCH::Search::Search"); + + SearchRuntimeProvider *interface = new SearchRuntimeProvider(); + mRuntime = interface->createPlugin(); + if (mRuntime) + { + mRuntime->setParent(this); + connect(mRuntime, SIGNAL(started()),this, SLOT(handleRuntimeStarted())); + connect(mRuntime, SIGNAL(stopped()),this, SLOT(handleRuntimeStopped())); + connect(mRuntime, SIGNAL(faulted()),this, SLOT(handleRuntimeFaulted())); + } + SEARCH_FUNC_EXIT("SEARCH::Search::Search"); + } + +// --------------------------------------------------------------------------- +// Search::~Search() +// --------------------------------------------------------------------------- +// +Search::~Search() + { + if (mRuntime) + { + disconnect(mRuntime, SIGNAL(started()), this, + SLOT(handleRuntimeStarted())); + disconnect(mRuntime, SIGNAL(stopped()), this, + SLOT(handleRuntimeStopped())); + disconnect(mRuntime, SIGNAL(faulted()), this, + SLOT(handleRuntimeFaulted())); + + delete mRuntime; + } + } + +// --------------------------------------------------------------------------- +// Search::start() +// --------------------------------------------------------------------------- +// +void Search::start() + { + SEARCH_FUNC_ENTRY("SEARCH::Search::start"); + + if (mRuntime) + { + mRuntime->start(); + } + else + { + emit exit(); + } + + SEARCH_FUNC_EXIT("SEARCH::Search::start"); + } + +// --------------------------------------------------------------------------- +// Search::stop() +// --------------------------------------------------------------------------- +// +void Search::stop() + { + SEARCH_FUNC_ENTRY("SEARCH::Search::stop"); + if (mRuntime) + { + mRuntime->stop(); + } + + SEARCH_FUNC_EXIT("SEARCH::Search::stop"); + } + +// --------------------------------------------------------------------------- +// Search::handleRuntimeStarted() +// --------------------------------------------------------------------------- +// +void Search::handleRuntimeStarted() + { + } + +// --------------------------------------------------------------------------- +// Search::handleRuntimeStopped() +// --------------------------------------------------------------------------- +// +void Search::handleRuntimeStopped() + { + emit exit(); + } + +// --------------------------------------------------------------------------- +// Search::handleRuntimeFaulted() +// --------------------------------------------------------------------------- +// +void Search::handleRuntimeFaulted() + { + emit exit(); + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/searchui.pro --- a/searchui/searchui.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/searchui.pro Mon Jun 28 11:03:15 2010 +0530 @@ -11,11 +11,12 @@ # # Contributors: # -# Description: SEARCH project file +# Description: SEARCHUI project file # TEMPLATE = subdirs -SUBDIRS += indevicehandler \ +SUBDIRS += onlinehandler \ + indevicehandler \ stateproviders \ runtimeproviders \ searchapplication diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/inc/searchonlinestate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/stateproviders/searchstateprovider/inc/searchonlinestate.h Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2009 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: + * + */ +#ifndef SEARCH_STATES_ONLINE_H +#define SEARCH_STATES_ONLINE_H +#include +#include "search_global.h" +#include +SEARCH_CLASS( SearchStateProviderTest) + +class HbDocumentLoader; +class HbView; +class HbSearchPanel; +class HbMainWindow; +class OnlineHandler; +/** @ingroup group_searchonlinestate + * @brief The state handles wizard activation and interaction. + * + * @see StateMachine + * + * @lib ?library + * @since S60 ?S60_version + */ +class SearchOnlineState : public QState + { +Q_OBJECT +public: + +public: + + /** + * Constructor. + * @since S60 ?S60_version. + * @param aParent Owner. + */ + SearchOnlineState(QState *aParent = 0); + + /** + * Destructor. + * @since S60 ?S60_version. + */ + virtual ~SearchOnlineState(); + +protected: + + /** + * @copydoc QState::onEntry() + */ + void onEntry(QEvent *event); + + /** + * @copydoc QState::onExit() + */ + void onExit(QEvent *event); + +private: + /** + * deactivates the signals . + * @since S60 ?S60_version. + */ + void deActivateSignals(); + + /** + * activates the signals . + * @since S60 ?S60_version. + */ + void activateSignals(); + + void createui(); +public slots: + + /** + * slot connects to search panel to initiate the online search + * @since S60 ?S60_version. + * @param aKeyword search keyword. + */ + void startOnlineSearch(const QString &aKeyword); + + /** + * slot connects to search panel to launch the settings delimiter + * @since S60 ?S60_version. + */ + void setSettings(); + + /** + * slot connects to search panel to cancel the outstanding search + * @since S60 ?S60_version. + */ + void cancelSearch(); + + /** + * slot connects to online handler to get notified when plugin is intialized + * @since S60 ?S60_version. + */ + void slotpluginIntialized(bool); + + /** + * slot connects to online handler to get notified when plugin is shutdown + * @since S60 ?S60_version. + */ + void slotpluginShutdown(bool); + + /** + * slot connects to online handler to get notified when view changed + * @since S60 ?S60_version. + */ + void slotbackEventTriggered(); + + /** + * slot connects to progressive search state to get notified criteria in search panel + * @since S60 ?S60_version. + * @param aKeyword search keyword. + */ + void slotIndeviceQuery(QString); + + /** + * slot connects to progressive search state to launch the suggestion links + * @since S60 ?S60_version. + * @param aKeyword search keyword. + * @param id search provider id. + */ + void slotlaunchLink(int, QString); + + /** + * slot connects to main window to get notify when view is ready + * @since S60 ?S60_version. + */ + void slotviewReady(); + +signals: + + /** + * Signalled when user selects an to switch the settings state + * setting state will be activated. + */ + void switchOnlineToSettingsState(); + + /** + * Signalled when user change the state to progressive state + * setting state will be activated. + */ + void onlineSearchQuery(QString); + +private: + HbMainWindow* mMainWindow; + /** + * main view. + * Own. + */ + HbView* mView; + + /** + * The searchpanel widget. + * Own. + */ + HbSearchPanel* mSearchPanel; + + /** + * HbDocumentLoader instance. + */ + HbDocumentLoader* mDocumentLoader; + + /** + * OnlineHandler instance. + */ + OnlineHandler* mInternetHandler; + + /** + * search keyword. + */ + QString mSearchQuery; + bool mSearchReady; + bool mIndeviceQueryAvailable; + bool mIsUICreated; + /** + * friend class for unit testing + */ + SEARCH_FRIEND_CLASS (SearchStateProviderTest) + }; + +#endif //SEARCH_STATES_ONLINE_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h --- a/searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h Mon Jun 28 11:03:15 2010 +0530 @@ -18,7 +18,6 @@ #ifndef PROGRESSIVE_SEARCH_STATE_H #define PROGRESSIVE_SEARCH_STATE_H -#include #include #include #include @@ -30,11 +29,7 @@ #include "search_global.h" #include -//Uncomment to enable performance measurements. -//#define OST_TRACE_COMPILER_IN_USE - -#ifdef OST_TRACE_COMPILER_IN_USE - +#ifdef OST_TRACE_COMPILER_IN_USE //defined in Search_global.h #define PERF_CAT_API_TIME_RESTART m_categorySearchApiTime.restart(); #define PERF_CAT_UI_TIME_RESTART m_categorySearchUiTime.restart(); #define PERF_CAT_TOTAL_TIME_RESTART m_totalSearchUiTime.restart(); @@ -46,7 +41,9 @@ #define PERF_CAT_GETDOC_TIME_ACCUMULATE m_getDocumentCatergoryTimeAccumulator += m_categoryGetDocumentApiTime.elapsed(); #define PERF_CAT_GETDOC_ACCUMULATOR_RESET m_getDocumentCatergoryTimeAccumulator = 0; #define PERF_CAT_GETDOC_ACCUMULATOR_ENDLOG qDebug() << "Get Doc on category (API): " << mTemplist.at( mDatabasecount-1 ) << "took " << m_getDocumentCatergoryTimeAccumulator << "msec"; - +#define PERF_RESULT_ITEM_LAUNCH_TIME_RESTART m_resultItemLaunchTime.restart(); +#define PERF_RESULT_ITEM_FOR_LAUNCHING(string) qDebug() <<"Result_Item_Launching: Launching "< mISprovidersIcon; + + bool mOnlineQueryAvailable; private: /** @@ -462,11 +472,12 @@ QTime m_categorySearchUiTime; QTime m_categorySearchApiTime; QTime m_categoryGetDocumentApiTime; + QTime m_resultItemLaunchTime; //use long to safeguard overflow from long running operations. - long m_getDocumentCatergoryTimeAccumulator; + long m_getDocumentCatergoryTimeAccumulator; #endif -SEARCH_FRIEND_CLASS (SearchStateProviderTest) + SEARCH_FRIEND_CLASS (SearchStateProviderTest) }; diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h --- a/searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h Mon Jun 28 11:03:15 2010 +0530 @@ -14,14 +14,12 @@ * Description: * */ - #ifndef SEARCH_STATES_SETTINGS_H #define SEARCH_STATES_SETTINGS_H - #include #include #include "search_global.h" - +#include SEARCH_CLASS( SearchStateProviderTest) class QGraphicsWidget; @@ -85,7 +83,6 @@ private: - /** * checking whether internet search is selected * @since S60 ?S60_version. @@ -93,10 +90,10 @@ void isInternetOn(); public slots: - /** - * Called when it receive the selected category information from the settingwidget class - * @since S60 ?S60_version. - */ + /** + * Called when it receive the selected category information from the settingwidget class + * @since S60 ?S60_version. + */ void getItemCategory(int, bool); @@ -106,14 +103,19 @@ */ void handleBackEvent(bool); + void slotISProvidersIcon(HbIcon icon, int id); + signals: /** * Emitted when the menu state is to be activated. * @since S60 ?S60_version. */ - void backEventTriggered(); - + + void switchToProState(); + + void settingslaunched(); + /** * Emitted when ok/cancel clicked on settings page * @since S60 ?S60_version. @@ -130,7 +132,9 @@ * Emitted when internet search is selectead * @since S60 ?S60_version. */ - void customizeGoButton(bool); + void switchToOnlineState(); + + void publishISProviderIcon(int, HbIcon); private: @@ -154,7 +158,7 @@ /** * friend class for unit testing */ -SEARCH_FRIEND_CLASS (SearchStateProviderTest) + SEARCH_FRIEND_CLASS (SearchStateProviderTest) }; #endif //SEARCH_STATES_SETTINGS_H diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/inc/settingswidget.h --- a/searchui/stateproviders/searchstateprovider/inc/settingswidget.h Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/inc/settingswidget.h Mon Jun 28 11:03:15 2010 +0530 @@ -21,6 +21,8 @@ #include #include #include +#include +class OnlineHandler; class HbCheckBox; class HbDialog; class QSignalMapper; @@ -73,7 +75,7 @@ * */ void loadDeviceSettings(); - + /** * Load default settings for search categories to ini file * @@ -91,27 +93,30 @@ * */ void storeDefaultSettings(); - + /** * setting up gui for the settings widget */ void createGui(); - + /** * Filter out categories from the sql database provided by the engine * for only those categories that have been successfully harvested */ void preparecategories(); - - + /** - * initilize the settings wizard while entering to the setting state - */ + * initilize the settings wizard while entering to the setting state + */ void initialize(); - + + void setSettingsFilePath(); + + void loadIS(); + public slots: /** * will be called when settings OK is clicked @@ -126,10 +131,16 @@ */ void itemChecked(int); /** - * slot called while clicking items added to the combobox - */ + * slot called while clicking items added to the combobox + */ void q_currentIndexChanged(int); + + void slotproviderDetails(QString, HbIcon, int); + + void slotdefaultProvider(const int); + + void slotitemSelected(int); signals: /** * Emitted when setting closed @@ -146,6 +157,8 @@ * */ void selectedItemCategory(int, bool); + + void ISProvidersIcon(HbIcon,int); private: /** @@ -177,30 +190,30 @@ QStringList mDeviceListDisplay; /** - * list of hardcoded device categories:cretaed to - * set up default category values to the ini file - */ + * list of hardcoded device categories:cretaed to + * set up default category values to the ini file + */ QStringList mDeviceCategoryRefList; /** - * intermediate variable to store selected category values - */ + * intermediate variable to store selected category values + */ QList mDeviceMapping; /** * list of hardcoded service providers */ - QStringList internetCategoryList; + //QStringList internetCategoryList; /** * for unit testing */ QStringList mCategoryList; /** - * DocumentLoader variable for the setting widget - */ + * DocumentLoader variable for the setting widget + */ HbDocumentLoader* mDocumentLoader; - + /** * Dataform for the settingwidget */ @@ -208,12 +221,12 @@ HbDataForm* dataform; /** - * Dataform model - */ + * Dataform model + */ HbDataFormModel* mModel; /** - * variable for customizing each item the in the dataform - */ + * variable for customizing each item the in the dataform + */ QList mModelItemList; @@ -223,18 +236,24 @@ int mSelectedProvider; /** - * Radio buttion list for internet search categories - */ + * Radio buttion list for internet search categories + */ HbRadioButtonList* mradiolist; - + /** * combobox items - */ - HbComboBox *comboBox ; + */ + HbComboBox *comboBox; bool mInstialize; bool mchangestate; + + OnlineHandler *mInternetHandler; + // QStringList mServiceProviders; + QMap mServiceProviders; + + QString mSettingFileName; SEARCH_FRIEND_CLASS (SearchStateProviderTest) }; #endif diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/resources/searchstateprovider.docml --- a/searchui/stateproviders/searchstateprovider/resources/searchstateprovider.docml Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/resources/searchstateprovider.docml Mon Jun 28 11:03:15 2010 +0530 @@ -2,16 +2,10 @@ - - - - - - - + @@ -21,6 +15,5 @@ - diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/searchstateprovider.pro --- a/searchui/stateproviders/searchstateprovider/searchstateprovider.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/searchstateprovider.pro Mon Jun 28 11:03:15 2010 +0530 @@ -36,8 +36,6 @@ LIBS += -L$$PWD/../../../bin/debug } - -LIBS += -lstatemodel LIBS += -lsearchindevicehandler LIBS += -lxqservice LIBS += -lqcpixsearchclient @@ -46,9 +44,14 @@ LIBS += -laknicon LIBS += -lapgrfx LIBS += -lbitgdi -LIBS += -lnoteseditor +#LIBS += -lnoteseditor LIBS += -lxqutils - +LIBS += -lsearchonlinehandler +LIBS += -lapparc +LIBS += -lefsrv +LIBS += -lapgrfx +LIBS += -lws32 +LIBS += -lavkon coverage:DEFINES += COVERAGE_MEASUREMENT @@ -64,8 +67,9 @@ INCLUDEPATH += ./inc \ ../../inc \ - ../../indevicehandler/inc - + ../../onlinehandler/inc \ + ../../indevicehandler/inc + symbian { @@ -74,6 +78,16 @@ TARGET.EPOCALLOWDLLDATA=1 TARGET.CAPABILITY = ALL -TCB -DRM INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + + defBlock = \ + "$${LITERAL_HASH}if defined(EABI)" \ + "DEFFILE ../eabi/" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../bwins/" \ + "$${LITERAL_HASH}endif" + + MMP_RULES += defBlock #include(searchstateprovider_installs_symbian.pri) # BLD_INF_RULES.prj_exports += "./inc/searchstateprovider.h |../../inc/" diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/src/searchonlinestate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchui/stateproviders/searchstateprovider/src/searchonlinestate.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2009 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: Implements the wizard activation and interactions. + * + */ + +#include "searchonlinestate.h" +#include "onlinehandler.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define hbApp qobject_cast(qApp) +const char *SEARCHONLINESTATE_DOCML = ":/xml/searchstateprovider.docml"; +const char *ONLINE_TOC_VIEW = "tocView"; +const char *ONLINE_TUT_SEARCHPANEL_WIDGET = "searchPanel"; + +// --------------------------------------------------------------------------- +// SearchOnlineState::SearchOnlineState +// --------------------------------------------------------------------------- +// +SearchOnlineState::SearchOnlineState(QState *parent) : + QState(parent), mMainWindow(NULL), mView(NULL), mSearchPanel(NULL), + mDocumentLoader(NULL) + { + + mInternetHandler = new OnlineHandler(); + mSearchReady = true; + mIndeviceQueryAvailable = false; + mIsUICreated = false; + //activateSignals(); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::~SearchOnlineState +// --------------------------------------------------------------------------- +// +SearchOnlineState::~SearchOnlineState() + { + delete mDocumentLoader; + delete mInternetHandler; + } +void SearchOnlineState::createui() + { + mMainWindow = hbInstance->allMainWindows().at(0); + mDocumentLoader = new HbDocumentLoader(); + bool ok = false; + mDocumentLoader->load(SEARCHONLINESTATE_DOCML, &ok); + + QGraphicsWidget *widget = mDocumentLoader->findWidget(ONLINE_TOC_VIEW); + Q_ASSERT_X(ok && (widget != 0), "ONLINE_TOC_VIEW", "invalid view"); + + mView = qobject_cast (widget); + if (mView) + { + mView->setTitle(hbTrId("txt_search_title_search")); + } + + mSearchPanel = qobject_cast ( + mDocumentLoader->findWidget(ONLINE_TUT_SEARCHPANEL_WIDGET)); + if (mSearchPanel) + { + mSearchPanel->setSearchOptionsEnabled(true); + + mSearchPanel->setProgressive(false); + + mSearchPanel->setPlaceholderText(hbTrId( + "txt_search_dialog_search_internet")); + + mSearchPanel->setCancelEnabled(false); + } + if (mView && mMainWindow) + { + mMainWindow->addView(mView); + mMainWindow->setCurrentView(mView); + } + } +// --------------------------------------------------------------------------- +// SearchOnlineState::onEntry +// --------------------------------------------------------------------------- +// +void SearchOnlineState::onEntry(QEvent *event) + { + qDebug() << "search:SearchOnlineState::onEntry"; + QState::onEntry(event); + if (!mIsUICreated) + { + createui(); + mIsUICreated = true; + } + + activateSignals(); + // If this is not the current view, we're getting back from plugin view + if (mMainWindow) + { + if (mMainWindow->currentView() != mView) + { + mMainWindow->setCurrentView(mView, true); + } + mMainWindow->show(); + } + if (mIndeviceQueryAvailable) + { + mSearchPanel->setCriteria(mSearchQuery); + mIndeviceQueryAvailable = false; + } + + } +// --------------------------------------------------------------------------- +// SearchOnlineState::onExit +// --------------------------------------------------------------------------- +// +void SearchOnlineState::onExit(QEvent *event) + { + QState::onExit(event); + deActivateSignals(); + } +// --------------------------------------------------------------------------- +// SearchProgressiveState::activateSignals +// --------------------------------------------------------------------------- +void SearchOnlineState::activateSignals() + { + if (mSearchPanel) + { + connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), this, + SLOT(startOnlineSearch(QString))); + connect(mSearchPanel, SIGNAL(searchOptionsClicked()), this, + SLOT(setSettings())); + connect(mSearchPanel, SIGNAL(exitClicked()), this, + SLOT(cancelSearch())); + } + if (mInternetHandler) + { + + connect(mInternetHandler, SIGNAL(pluginIntialized(bool)), this, + SLOT(slotpluginIntialized(bool))); + connect(mInternetHandler, SIGNAL(pluginShutdown(bool)), this, + SLOT(slotpluginShutdown(bool))); + connect(mInternetHandler, SIGNAL(backEventTriggered()), this, + SLOT(slotbackEventTriggered())); + } + connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(slotviewReady())); + } +// --------------------------------------------------------------------------- +// SearchProgressiveState::deActivateSignals +// --------------------------------------------------------------------------- +void SearchOnlineState::deActivateSignals() + { + if (mSearchPanel) + { + disconnect(mSearchPanel, SIGNAL(criteriaChanged(QString)), this, + SLOT(startOnlineSearch(QString))); + disconnect(mSearchPanel, SIGNAL(searchOptionsClicked()), this, + SLOT(setSettings())); + disconnect(mSearchPanel, SIGNAL(exitClicked()), this, + SLOT(cancelSearch())); + } + if (mInternetHandler) + { + disconnect(mInternetHandler, SIGNAL(pluginIntialized(bool)), this, + SLOT(slotpluginIntialized(bool))); + disconnect(mInternetHandler, SIGNAL(pluginShutdown(bool)), this, + SLOT(slotpluginShutdown(bool))); + disconnect(mInternetHandler, SIGNAL(backEventTriggered()), this, + SLOT(slotbackEventTriggered())); + } + disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(slotviewReady())); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::startOnlineSearch +// --------------------------------------------------------------------------- +void SearchOnlineState::startOnlineSearch(const QString &query) + { + mSearchQuery = query; + // if (mSearchReady) + { + mInternetHandler->readSettings(); + mInternetHandler->initializePlugin(); + } + // load online handlers + } +// --------------------------------------------------------------------------- +// SearchOnlineState::setSettings +// --------------------------------------------------------------------------- +void SearchOnlineState::setSettings() + { + if (mSearchQuery.length()) + emit onlineSearchQuery(mSearchQuery); + emit switchOnlineToSettingsState(); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::cancelSearch +// --------------------------------------------------------------------------- +void SearchOnlineState::cancelSearch() + { + // unload handlers + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotpluginIntialized +// --------------------------------------------------------------------------- +void SearchOnlineState::slotpluginIntialized(bool status) + { + if (status) + mInternetHandler->activatePlugin(mSearchQuery); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotpluginShutdown +// --------------------------------------------------------------------------- +void SearchOnlineState::slotpluginShutdown(bool status) + { + mSearchReady = status; + if (!mSearchReady) + mInternetHandler->unloadPluginandExit(); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotbackEventTriggered +// --------------------------------------------------------------------------- +void SearchOnlineState::slotbackEventTriggered() + { + mInternetHandler->unloadPluginandExit(); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotIndeviceQuery +// --------------------------------------------------------------------------- +void SearchOnlineState::slotIndeviceQuery(QString str) + { + mSearchQuery = str; + mIndeviceQueryAvailable = true; + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotlaunchLink +// --------------------------------------------------------------------------- +void SearchOnlineState::slotlaunchLink(int id, QString query) + { + mInternetHandler->loadISPlugin(id, query); + } +// --------------------------------------------------------------------------- +// SearchOnlineState::slotviewReady +// --------------------------------------------------------------------------- +void SearchOnlineState::slotviewReady() + { + if (hbApp) + { + if (hbApp->activateReason() == Hb::ActivationReasonActivity) + { + QVariantHash params = hbApp->activateParams(); + QString searchKey = params.value("query").toString(); + if (searchKey.length() > 0) + { + mSearchPanel->setCriteria(searchKey); + startOnlineSearch(searchKey); + } + } + }//PERF_APP_LAUNCH_END("SearchAppplication View is ready"); + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp --- a/searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -24,15 +24,10 @@ #include #include #include -#include #include #include #include -#include #include -#include -#include -#include #include #include #include @@ -45,7 +40,7 @@ #include #include #include -#include +#include #include #include #include @@ -53,6 +48,12 @@ #include #include #include +#include +#include +#include +#include +#include +#define hbApp qobject_cast(qApp) const char *SEARCHSTATEPROVIDER_DOCML = ":/xml/searchstateprovider.docml"; const char *TOC_VIEW = "tocView"; const char *TUT_SEARCHPANEL_WIDGET = "searchPanel"; @@ -63,12 +64,11 @@ // --------------------------------------------------------------------------- SearchProgressiveState::SearchProgressiveState(QState *parent) : QState(parent), mMainWindow(NULL), mView(NULL), mListView(NULL), - mDocumentLoader(NULL), mModel(NULL), mSearchHandler(NULL), - notesEditor(0), mAiwMgr(0), mRequest(0) + mDocumentLoader(NULL), mSearchHandler(NULL), mNotesEditor(0), + mAiwMgr(0), mRequest(0) { mMainWindow = hbInstance->allMainWindows().at(0); - mModel = new QStandardItemModel(this); mAiwMgr = new XQApplicationManager; @@ -85,7 +85,7 @@ mView->setTitle(hbTrId("txt_search_title_search")); } - mListView = qobject_cast (mDocumentLoader->findWidget( + mListView = qobject_cast (mDocumentLoader->findWidget( TUT_LIST_VIEW)); Q_ASSERT_X(ok && (mListView != 0), "TUT_LIST_VIEW", "invalid viewocML file"); @@ -99,6 +99,7 @@ HbListViewItem *prototypeListView = qobject_cast ( prototype); + prototypeListView->setGraphicsSize(HbListViewItem::LargeIcon); if (prototypeListView) { HbStyle style; @@ -108,7 +109,6 @@ mListViewIconSize = size.toSize(); prototypeListView->setTextFormat(Qt::RichText); } - mListView->setModel(mModel, prototype); HbAbstractItemView::ItemAnimations noCreationAndRemovalAnimations = HbAbstractItemView::All; @@ -122,10 +122,12 @@ if (mSearchPanel) { mSearchPanel->setSearchOptionsEnabled(true); - - mSearchPanel->setPlaceholderText("Search device"); + + mSearchPanel->setPlaceholderText(hbTrId( + "txt_search_dialog_search_device")); mSearchPanel->setCancelEnabled(false); + mSearchPanel->setFocus(); } constructHandlers(); @@ -167,6 +169,25 @@ m_categoryGetDocumentApiTime.start(); m_getDocumentCatergoryTimeAccumulator = 0; #endif + + //Notes Editor Interface loading + QDir dir(NOTES_EDITOR_PLUGIN_PATH); + QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME); + + // Create plugin loader. + mNotespluginLoader = new QPluginLoader(pluginName); + + if (mNotespluginLoader) + { + // Load the plugin. + mNotespluginLoader->load(); + + QObject *plugin = qobject_cast ( + mNotespluginLoader->instance()); + mNotesEditor = qobject_cast (plugin); + } + + mOnlineQueryAvailable = false; } // --------------------------------------------------------------------------- // SearchProgressiveState::~SearchProgressiveState @@ -177,10 +198,6 @@ { delete mAiwMgr; } - if (mModel) - { - delete mModel; - } if (mDocumentLoader) { delete mDocumentLoader; @@ -189,9 +206,10 @@ { delete mSearchHandlerList.at(i); } - if(notesEditor) + if (mNotespluginLoader) { - delete notesEditor; + mNotespluginLoader->unload(); + delete mNotespluginLoader; } } // --------------------------------------------------------------------------- @@ -227,7 +245,7 @@ } case 4: { - handler->setCategory("email"); + handler->setCategory("msg email"); break; } case 5: @@ -279,10 +297,15 @@ } if (loadSettings) { - emit settingsState(); + emit switchProToSettingsState(); loadSettings = false; } setSelectedCategories(); + if (mOnlineQueryAvailable) + { + mSearchPanel->setCriteria(mOriginalString); + mOnlineQueryAvailable = false; + } } // --------------------------------------------------------------------------- // SearchProgressiveState::onExit @@ -308,8 +331,8 @@ } if (mListView) { - connect(mListView, SIGNAL(activated(const QModelIndex)), this, - SLOT(openResultitem(const QModelIndex))); + connect(mListView, SIGNAL(activated(HbListWidgetItem *)), this, + SLOT(openResultitem(HbListWidgetItem *))); } if (mSearchPanel) { @@ -319,6 +342,8 @@ SLOT(setSettings())); } + connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(viewReady())); + } // --------------------------------------------------------------------------- // SearchProgressiveState::deActivateSignals @@ -336,8 +361,8 @@ } if (mListView) { - disconnect(mListView, SIGNAL(activated(const QModelIndex)), this, - SLOT(openResultitem(const QModelIndex))); + disconnect(mListView, SIGNAL(activated(HbListWidgetItem *)), this, + SLOT(openResultitem(HbListWidgetItem *))); } if (mSearchPanel) { @@ -346,6 +371,7 @@ disconnect(mSearchPanel, SIGNAL(searchOptionsClicked()), this, SLOT(setSettings())); } + disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(viewReady())); } // --------------------------------------------------------------------------- // SearchProgressiveState::onAsyncSearchComplete @@ -386,7 +412,7 @@ QStringList liststr; QString secondrow = aDoc->excerpt(); QString firstrow; - QStandardItem* listitem = new QStandardItem(); + HbListWidgetItem* listitem = new HbListWidgetItem(); if (aDoc->baseAppClass().contains("contact")) { @@ -428,7 +454,7 @@ } else if (aDoc->baseAppClass().contains("video")) { - QStringList videoList = filterDoc(aDoc, "Title", "MediaId","Name"); + QStringList videoList = filterDoc(aDoc, "Title", "MediaId", "Name"); if (videoList.value(0, "").length()) { firstrow.append(videoList.at(0)); @@ -458,6 +484,20 @@ listitem->setData(imageList.at(1), Qt::UserRole + 2); } } + else if (aDoc->baseAppClass().contains("msg email")) + { + qDebug() << "searchui:on Get doc email"; + QStringList emailList = filterDoc(aDoc, "Sender", "MailBoxId", + "FolderId"); + + qDebug() << "searchui:recipients" << emailList.at(0) << emailList.at( + 1) << emailList.at(2); + firstrow.append(emailList.at(0)); + listitem->setData(emailList.at(1), Qt::UserRole + 2); + listitem->setData(emailList.at(2), Qt::UserRole + 3); + liststr << firstrow << secondrow; + listitem->setData(mIconArray.at(5), Qt::DecorationRole); + } else if (aDoc->baseAppClass().contains("msg")) { QStringList msgList = filterDoc(aDoc, "Subject", "Body"); @@ -476,13 +516,7 @@ } liststr << firstrow << secondrow; listitem->setData(mIconArray.at(4), Qt::DecorationRole); - } - else if (aDoc->baseAppClass().contains("email")) - { - firstrow.append(filterDoc(aDoc, "Subject")); - liststr << firstrow << secondrow; - listitem->setData(mIconArray.at(5), Qt::DecorationRole); - } + } else if (aDoc->baseAppClass().contains("calendar")) { firstrow.append(filterDoc(aDoc, "Summary")); @@ -520,6 +554,7 @@ firstrow = "UnKnown"; } liststr << firstrow << secondrow; + listitem->setData(secondrow, Qt::UserRole + 2); listitem->setData(mIconArray.at(8), Qt::DecorationRole); } else if (aDoc->baseAppClass().contains("file")) @@ -530,10 +565,11 @@ liststr << firstrow << secondrow; listitem->setData(mIconArray.at(9), Qt::DecorationRole); } - listitem->setData(liststr, Qt::DisplayRole); + listitem->setText(firstrow); + listitem->setSecondaryText(secondrow); listitem->setData(aDoc->docId(), Qt::UserRole); listitem->setData(aDoc->baseAppClass(), Qt::UserRole + 1); - mModel->appendRow(listitem); + mListView->addItem(listitem); mResultparser++; if (mResultparser < mResultcount) @@ -558,16 +594,16 @@ // --------------------------------------------------------------------------- // SearchProgressiveState::openResultitem // --------------------------------------------------------------------------- -void SearchProgressiveState::openResultitem(QModelIndex index) +void SearchProgressiveState::openResultitem(HbListWidgetItem * item) { - QStandardItem* item = mModel->itemFromIndex(index); if (item == NULL) - return; + return;PERF_RESULT_ITEM_LAUNCH_TIME_RESTART QList args; bool t; mRequest = NULL; if (item->data(Qt::UserRole + 1).toString().contains("contact")) { + PERF_RESULT_ITEM_FOR_LAUNCHING("contact") mRequest = mAiwMgr->create("com.nokia.services.phonebookservices", "Fetch", "open(int)", false); @@ -576,6 +612,9 @@ } else if (item->data(Qt::UserRole + 1).toString().contains("bookmark")) { + PERF_RESULT_ITEM_FOR_LAUNCHING("bookmark") + QDesktopServices::openUrl(item->data(Qt::UserRole + 2).toString()); +PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG ("") } else if (item->data(Qt::UserRole + 1).toString().contains("calendar")) @@ -583,10 +622,10 @@ QDir pluginDir = QDir(QString("z:/resource/qt/plugins/calendar")); QPluginLoader *calAgandaViewerPluginLoader = new QPluginLoader( pluginDir.absoluteFilePath(QString( - "agendaeventviewerplugin.qtplugin"))); + "agendaeventviewerplugin.qtplugin"))); calAgandaViewerPluginInstance = qobject_cast< - EventViewerPluginInterface *> ( + EventViewerPluginInterface *> ( calAgandaViewerPluginLoader->instance()); connect(calAgandaViewerPluginInstance, SIGNAL(viewingCompleted()), @@ -598,10 +637,13 @@ } else if (item->data(Qt::UserRole + 1).toString().contains("applications")) { + PERF_RESULT_ITEM_FOR_LAUNCHING("applications") TRAP_IGNORE(LaunchApplicationL(TUid::Uid((item->data(Qt::UserRole)).toString().toInt(&t, 16)))); + PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG("") } else if (item->data(Qt::UserRole + 1).toString().contains("file")) { + PERF_RESULT_ITEM_FOR_LAUNCHING("file") QString uid = item->data(Qt::UserRole).toString(); QFile file(uid); mRequest = mAiwMgr->create(file, false); @@ -611,6 +653,7 @@ || (item->data(Qt::UserRole + 1).toString().contains("audio")) || (item->data(Qt::UserRole + 1).toString().contains("image"))) { + PERF_RESULT_ITEM_FOR_LAUNCHING("media") QString uid = getDrivefromMediaId( item->data(Qt::UserRole + 2).toString()); uid.append(':'); @@ -622,20 +665,36 @@ else if (item->data(Qt::UserRole + 1).toString().contains("notes")) { - if (!notesEditor) + PERF_RESULT_ITEM_FOR_LAUNCHING("notes") + if(mNotesEditor) { - notesEditor = new NotesEditor(this); + mNotesEditor->edit(item->data(Qt::UserRole).toInt()); } - notesEditor->edit(item->data(Qt::UserRole).toInt()); + PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG("") + } + else if (item->data(Qt::UserRole + 1).toString().contains("msg email")) + { + + mRequest = mAiwMgr->create("nmail", + "com.nokia.symbian.IEmailMessageView", + "viewMessage(QVariant,QVariant,QVariant)", false); + + args << item->data(Qt::UserRole + 2).toULongLong(&t) << item->data( + Qt::UserRole + 3).toULongLong(&t) << item->data(Qt::UserRole).toULongLong(&t); } else if (item->data(Qt::UserRole + 1).toString().contains("msg")) { + PERF_RESULT_ITEM_FOR_LAUNCHING("msg") mRequest = mAiwMgr->create("com.nokia.services.hbserviceprovider", "conversationview", "view(int)", false); int uid = (item->data(Qt::UserRole)).toInt(&t); args << uid; } + else if(item->data(Qt::UserRole + 1).toString().contains("links")) + { + emit launchLink((item->data(Qt::UserRole)).toInt(&t),mOriginalString); + } if (mRequest) { connect(mRequest, SIGNAL(requestOk(const QVariant&)), this, @@ -644,6 +703,7 @@ SLOT(handleError(int,const QString&)));// Connect error handling signal or apply lastError function instead. mRequest->setArguments(args); if (!mRequest->send())// Make the request + { qDebug() << "AIW-ERROR: Send failed" << mRequest->lastError(); } @@ -665,6 +725,7 @@ void SearchProgressiveState::handleOk(const QVariant& var) { Q_UNUSED(var); +PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG ("") } // --------------------------------------------------------------------------- // SearchProgressiveState::handleError @@ -677,15 +738,20 @@ // --------------------------------------------------------------------------- // SearchProgressiveState::createSuggestionLink // --------------------------------------------------------------------------- -void SearchProgressiveState::createSuggestionLink(bool aFlag) +void SearchProgressiveState::createSuggestionLink() { - QStandardItem* listitem = new QStandardItem(); - if (!aFlag) + QString linkString = QString(hbTrId("txt_search_list_search_for_1").arg( + mOriginalString)); + QMapIterator i(mISprovidersIcon); + while (i.hasNext()) { - QString linkString = QString(hbTrId("txt_search_list_search_for_1").arg(mOriginalString)); - mLinkindex = mModel->rowCount(); - listitem->setData(linkString, Qt::DisplayRole); - mModel->appendRow(listitem); + i.next(); + HbListWidgetItem* listitem = new HbListWidgetItem(); + listitem->setText(linkString); + listitem->setData(i.key(), Qt::UserRole); + listitem->setData(i.value(), Qt::DecorationRole); + listitem->setData("links", Qt::UserRole + 1); + mListView->addItem(listitem); } } // --------------------------------------------------------------------------- @@ -695,11 +761,12 @@ { if (aKeyword.length()) { - QStandardItem* listitem = new QStandardItem(); + HbListWidgetItem* listitem = new HbListWidgetItem(); QString noResultMsg = QString("" + hbTrId( "txt_search_list_no_match_found")); - listitem->setData(noResultMsg, Qt::DisplayRole); - mModel->appendRow(listitem); + listitem->setText(noResultMsg); + mListView->addItem(listitem); + } } // --------------------------------------------------------------------------- @@ -707,10 +774,7 @@ // --------------------------------------------------------------------------- void SearchProgressiveState::clear() { - if (mModel) - { - mModel->clear(); - } + mListView->clear(); } // --------------------------------------------------------------------------- // SearchProgressiveState::searchOnCategory @@ -774,7 +838,7 @@ { PERF_CAT_API_TIME_RESTART mSearchHandler->searchAsync(aKeyword, "_aggregate"); - + } else { @@ -784,10 +848,10 @@ else if (mDatabasecount >= mTemplist.count()) { PERF_TOTAL_UI_ENDLOG - if (mModel->rowCount() == 0 && aKeyword.length() != 0) + if (mListView->count() == 0 && aKeyword.length() != 0) { noResultsFound(mOriginalString); - createSuggestionLink(0); + createSuggestionLink(); } return; } @@ -803,7 +867,7 @@ { mSearchHandlerList.at(i)->cancelLastSearch(); } - if (mModel->rowCount() != 0) + if (mListView->count() != 0) { clear(); } @@ -826,24 +890,9 @@ void SearchProgressiveState::setSettings() { mTempSelectedCategory = mSelectedCategory; - emit settingsState(); - } -// --------------------------------------------------------------------------- -// SearchProgressiveState::_customizeGoButton -// --------------------------------------------------------------------------- -void SearchProgressiveState::_customizeGoButton(bool avalue) - { - if (mSearchPanel) - { - if (avalue) - { - mSearchPanel->setProgressive(false); - } - else - { - mSearchPanel->setProgressive(true); - } - } + if (mOriginalString.length()) + emit inDeviceSearchQuery(mOriginalString); + emit switchProToSettingsState(); } // --------------------------------------------------------------------------- // SearchProgressiveState::settingsaction @@ -900,7 +949,7 @@ case 3://Messages& emails { mTemplist.append("msg"); - //mTemplist.append("email"); + mTemplist.append("email"); break; } case 4://Calender& notes @@ -927,7 +976,7 @@ } } } - if (mTemplist.count() == 8) + if (mTemplist.count() == 9) isrootsearch = true; if (isrootsearch) { @@ -997,9 +1046,9 @@ CleanupStack::PopAndDestroy(apaMaskedBitmap); } CleanupStack::PopAndDestroy(&apaLsSession); - - if (icon.isNull() || !(icon.size().isValid())) - icon = HbIcon("qtg_large_application"); + + if (icon.isNull() || !(icon.size().isValid())) + icon = HbIcon("qtg_large_application"); return icon; } // --------------------------------------------------------------------------- @@ -1269,6 +1318,7 @@ CleanupStack::PopAndDestroy(&appArcSession); } CleanupStack::PopAndDestroy(&wsSession); +PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG ("") } // --------------------------------------------------------------------------- // SearchProgressiveState::_viewingCompleted @@ -1277,4 +1327,30 @@ { if (calAgandaViewerPluginInstance) calAgandaViewerPluginInstance->deleteLater(); +PERF_RESULT_ITEM_LAUNCH_TIME_ENDLOG ("") } +// --------------------------------------------------------------------------- +// SearchProgressiveState::viewReady +// --------------------------------------------------------------------------- +void SearchProgressiveState::viewReady() + { + if (hbApp) + { + if (hbApp->activateReason() == Hb::ActivationReasonActivity) + { + QVariantHash params = hbApp->activateParams(); + QString searchKey = params.value("query").toString(); + if (searchKey.length() > 0) + mSearchPanel->setCriteria(searchKey); + } + }PERF_APP_LAUNCH_END("SearchAppplication View is ready"); + } +void SearchProgressiveState::slotOnlineQuery(QString str) + { + mOriginalString = str; + mOnlineQueryAvailable = true; + } +void SearchProgressiveState::slotISProvidersIcon(int id, HbIcon icon) + { + mISprovidersIcon.insert(id, icon); + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp --- a/searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -46,6 +46,9 @@ connect(mWidget, SIGNAL(selectedItemCategory(int, bool)), this, SLOT(getItemCategory(int, bool))); + + connect(mWidget, SIGNAL(ISProvidersIcon(HbIcon, int)), this, + SLOT(slotISProvidersIcon(HbIcon, int))); } // --------------------------------------------------------------------------- @@ -59,6 +62,15 @@ } // --------------------------------------------------------------------------- +// SearchSettingsState::slotISProvidersIcon +// --------------------------------------------------------------------------- +// +void SearchSettingsState::slotISProvidersIcon(HbIcon icon, int id) + { + emit publishISProviderIcon(id,icon); + } + +// --------------------------------------------------------------------------- // SearchSettingsState::getItemCategory // --------------------------------------------------------------------------- // @@ -74,19 +86,21 @@ { qDebug() << "search:SearchSettingsState::onEntry"; QState::onEntry(event); + emit settingslaunched(); if (minitialCount) { mWidget->loadBaseSettings(); mWidget->loadDeviceSettings(); + mWidget->loadIS(); isInternetOn(); minitialCount = false; - emit backEventTriggered(); + // isInternetOn(); + //emit backEventTriggered(); } else { - mWidget->launchSettingWidget(); - } + } } // --------------------------------------------------------------------------- // SearchSettingsState::onExit @@ -103,7 +117,6 @@ // void SearchSettingsState::handleBackEvent(bool aStatus) { - emit backEventTriggered(); if (mWidget) { isInternetOn(); @@ -118,10 +131,10 @@ { if (mWidget->isInternetSearchOptionSelected()) { - emit customizeGoButton(true); + emit switchToOnlineState(); } else { - emit customizeGoButton(false); + emit switchToProState(); } } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp --- a/searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -19,6 +19,7 @@ #include "searchprogressivestate.h" #include "searchinitstate.h" #include "searchsettingsstate.h" +#include "searchonlinestate.h" #include #include @@ -31,6 +32,8 @@ "search.nokia.com/state/wizardprogressivestate"; const char wizardSettingStateUri[] = "search.nokia.com/state/wizardsettingstate"; +const char wizardOnlineStateUri[] = + "search.nokia.com/state/wizardonlinestate"; // --------------------------------------------------------------------------- // searchStateProvider::searchStateProvider() @@ -59,6 +62,10 @@ { return new SearchInitState(); } + else if (uri == wizardOnlineStateUri) + { + return new SearchOnlineState(); + } qDebug() << "SEARCH: No state found for mUri: " << uri; return NULL; diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/src/settingswidget.cpp --- a/searchui/stateproviders/searchstateprovider/src/settingswidget.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/src/settingswidget.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -38,6 +38,7 @@ #include #include #include +#include "onlinehandler.h" const char *DELIMETER_DOCML = ":/xml/delimeterscreen.docml"; const char *DIALOG = "dialog"; const char *DATAFORM = "dataForm"; @@ -48,8 +49,10 @@ //---------------------------------------------------------------------------------------------------------------------------- SettingsWidget::SettingsWidget() : signalMapper(NULL), popup(NULL), mDocumentLoader(NULL), dataform(NULL), - mModel(NULL),mSelectedScope(0),mSelectedProvider(0),comboBox(NULL) + mModel(NULL), mSelectedScope(0), mSelectedProvider(0), comboBox( + NULL), mInternetHandler(NULL) { + setSettingsFilePath(); for (int i = 0; i < 8; i++) { mDeviceMapping.append(false); @@ -61,6 +64,7 @@ mchangestate = true; mInstialize = true; isInternetSelected = false; + storeDefaultSettings(); } //---------------------------------------------------------------------------------------------------------------------------- @@ -72,7 +76,7 @@ bool ok = false; if (!mDocumentLoader) { - mDocumentLoader = new HbDocumentLoader(); + mDocumentLoader = new HbDocumentLoader(); mDocumentLoader->load(DELIMETER_DOCML, &ok); } QGraphicsWidget *widget = NULL; @@ -132,17 +136,16 @@ HbDataFormModelItem::ComboBoxItem, hbTrId( "txt_search_info_select_search_scope")); - themeComboGeneral->setContentWidgetData(QString("items"), mCategoryList); + themeComboGeneral->setContentWidgetData("items", mCategoryList); - themeComboGeneral->setContentWidgetData(QString("currentIndex"), - mSelectedScope); + themeComboGeneral->setContentWidgetData("currentIndex", mSelectedScope); QModelIndex index = mModel->indexFromItem(themeComboGeneral); - HbDataFormViewItem *formItem = static_cast (dataform->itemByIndex(index)); + HbDataFormViewItem *formItem = + static_cast (dataform->itemByIndex(index)); - comboBox = - static_cast (formItem->dataItemContentWidget()); + comboBox = static_cast (formItem->dataItemContentWidget()); q_currentIndexChanged(mSelectedScope); @@ -161,7 +164,7 @@ mModel->removeItem(mModelItemList.at(i)); } mModelItemList.clear(); - // int ret = mModel->rowCount(); + // int ret = mModel->rowCount(); if (!avalue) //device category creation { isInternetSelected = false; @@ -175,7 +178,9 @@ mModelItemList.append(mModelItem); QModelIndex index = mModel->indexFromItem(mModelItem); - HbDataFormViewItem *formItem = static_cast (dataform->itemByIndex(index)); + HbDataFormViewItem *formItem = + static_cast (dataform->itemByIndex( + index)); checkboxitem = static_cast (formItem->dataItemContentWidget()); @@ -201,25 +206,36 @@ HbDataFormModelItem* mModelItem = mModel->appendDataFormItem( HbDataFormModelItem::RadioButtonListItem); mModelItemList.append(mModelItem); + QStringList internetCategoryList; + QMapIterator i(mServiceProviders); + int selectedindex = 0; + int Iterator = 0; + while (i.hasNext()) + { + i.next(); + if (i.key() == mSelectedProvider) + selectedindex = Iterator; + Iterator++; + internetCategoryList.append(i.value()); + qDebug() << i.value(); + } mModelItem->setContentWidgetData("items", internetCategoryList); + mModelItem->setContentWidgetData("previewMode", + HbRadioButtonList::NoPreview); + + mModelItem->setContentWidgetData("selected", selectedindex); + QModelIndex index = mModel->indexFromItem(mModelItem); - HbDataFormViewItem *formItem = static_cast (dataform->itemByIndex(index)); - + HbDataFormViewItem *formItem = + static_cast (dataform->itemByIndex( + index)); mradiolist = static_cast (formItem->dataItemContentWidget()); - mradiolist->setPreviewMode(HbRadioButtonList::NoPreview); - - mradiolist->setSelected(mSelectedProvider); connect(mradiolist, SIGNAL(itemSelected(int)), this, - SLOT(q_itemSelected(int))); - - for (int i = 0; i < mActions.count(); i++) - popup->removeAction(mActions.at(i)); - popup->addActions(mActions); - popup->removeAction(mActions.at(0)); + SLOT(slotitemSelected(int))); } } //---------------------------------------------------------------------------------------------------------------------------- @@ -229,8 +245,6 @@ void SettingsWidget::preparecategories() { // read form database - - QString mConnectionName("cpixcontentinfo.sq"); QString mDatabaseName("c:\\Private\\2001f6fb\\cpixcontentinfo.sq"); @@ -254,24 +268,24 @@ { mCategoryDbMapping.insert(category_name, true); } - qDebug() <<"string db= "<removeAction(mActions.at(i)); - popup->addActions(mActions); - if (noItemSelected) + if (!isInternetSelected) { - popup->removeAction(mActions.at(0)); + for (int i = 0; i < mActions.count(); i++) + popup->removeAction(mActions.at(i)); + popup->addActions(mActions); + if (noItemSelected) + { + popup->removeAction(mActions.at(0)); + } } } //---------------------------------------------------------------------------------------------------------------------------- @@ -465,7 +489,8 @@ void SettingsWidget::storeSettingsToiniFile() { - QSettings appSettings("search.ini", QSettings::IniFormat); + QSettings appSettings(mSettingFileName, QSettings::IniFormat); + isInternetSelected ? (mSelectedScope = 1) : (mSelectedScope = 0); appSettings.setValue("selectedcategory", mSelectedScope); appSettings.setValue("devicecount", mDeviceCategoryRefList.count()); if (!isInternetSelected) @@ -495,8 +520,7 @@ } } - appSettings.setValue("internetcount", internetCategoryList.count()); - appSettings.setValue("selectedprovider", mSelectedProvider); + } //---------------------------------------------------------------------------------------------------------------------------- //void SettingsWidget::loadBaseSettings() @@ -504,26 +528,10 @@ //---------------------------------------------------------------------------------------------------------------------------- void SettingsWidget::loadBaseSettings() { - QSettings appSettings("search.ini", QSettings::IniFormat); - int value; - if (!(appSettings.contains("selectedcategory"))) - { - value = 0; - } - else - { - value = appSettings.value("selectedcategory").toInt(); - } - mSelectedScope = value; - if (mSelectedScope) - { - isInternetSelected = true; - } - else - { - isInternetSelected = false; - } - mSelectedProvider = appSettings.value("selectedprovider").toInt(); + QSettings appSettings(mSettingFileName, QSettings::IniFormat); + mSelectedScope = appSettings.value("selectedcategory", 0).toInt(); + mSelectedScope ? (isInternetSelected = true) : (isInternetSelected + = false); } //---------------------------------------------------------------------------------------------------------------------------- @@ -532,22 +540,16 @@ //---------------------------------------------------------------------------------------------------------------------------- void SettingsWidget::loadDeviceSettings() { - QSettings appSettings("search.ini", QSettings::IniFormat); + QSettings appSettings(mSettingFileName, QSettings::IniFormat); int value; if (!isInternetSelected) { int j = 0; for (int i = 0; i < mDeviceCategoryRefList.count(); i++) { - if (!(appSettings.contains(mDeviceCategoryRefList.at(i)))) - { - value = 1; - } - else - { - value - = appSettings.value(mDeviceCategoryRefList.at(i)).toInt(); - } + value + = appSettings.value(mDeviceCategoryRefList.at(i), 1).toInt(); + if (mDeviceMapping.count() && mDeviceCheckBoxList.count() && mDeviceMapping.at(i)) { @@ -561,14 +563,10 @@ } j++; } - if (value) // get the setting before ui preparation - { - emit selectedItemCategory(i, true); - } - else - { - emit selectedItemCategory(i, false); - } + value + ? (emit selectedItemCategory(i, true)) + : (emit selectedItemCategory(i, false)); + } } } @@ -588,16 +586,56 @@ //---------------------------------------------------------------------------------------------------------------------------- void SettingsWidget::storeDefaultSettings() { - QSettings appSettings("search.ini", QSettings::IniFormat); + QSettings appSettings(mSettingFileName, QSettings::IniFormat); if (!appSettings.contains("selectedcategory")) // change the settings for the first time only { mSelectedScope = 0; - mSelectedProvider = 0; appSettings.setValue("selectedcategory", mSelectedScope); appSettings.setValue("devicecount", mDeviceCategoryRefList.count()); for (int i = 0; i < mDeviceCategoryRefList.count(); i++) appSettings.setValue(mDeviceCategoryRefList.at(i), 1); - appSettings.setValue("internetcount", internetCategoryList.count()); - appSettings.setValue("selectedprovider", mSelectedProvider); } } +void SettingsWidget::slotproviderDetails(QString name, HbIcon icon, int id) + { + mServiceProviders.insert(id, name); + emit ISProvidersIcon(icon, id); + } +void SettingsWidget::slotdefaultProvider(const int value) + { + mSelectedProvider = value; + } +void SettingsWidget::slotitemSelected(int value) + { + QMapIterator i(mServiceProviders); + int selectedindex = 0; + while (i.hasNext()) + { + i.next(); + if (selectedindex == value) + { + mInternetHandler->setDefaultProvider(i.key()); + break; + } + selectedindex++; + } + } +void SettingsWidget::setSettingsFilePath() + { + mSettingFileName.append(QDir::currentPath()); + mSettingFileName.append(QString("/searchsettings.ini")); + } +void SettingsWidget::loadIS() + { + if (!mInternetHandler) + { + mInternetHandler = new OnlineHandler(); + connect(mInternetHandler, + SIGNAL(providerDetails(QString, HbIcon, int)), this, + SLOT(slotproviderDetails(QString, HbIcon, int))); + + connect(mInternetHandler, SIGNAL(defaultProvider(const int)), this, + SLOT(slotdefaultProvider(const int))); + mInternetHandler->readSettings(); + } + } diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h --- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h Mon Jun 28 11:03:15 2010 +0530 @@ -17,7 +17,6 @@ #include #include "searchstateprovider.h" -#include "hsistateprovider.h" class HbMainWindow; class HbAbstractViewItem; @@ -58,8 +57,7 @@ void testopenResultitem(); void testgetSettingCategory(); void testsetSettings(); - void teststartNewSearch(); - void test_customizeGoButton(); + void teststartNewSearch(); void testsettingsaction(); void testcancelSearch(); void testhandleOkError(); @@ -123,27 +121,12 @@ * @return True if state was created successfully, false otherwise. * @since S60 ?S60_version. */ - bool verifyStateCreation(const QString& uri); - - /** - * Helper method testing existence of state - * - * @param states List of states. - * @param library Name of the library/plugin that contains the state. - * @param uri Unique state identificator. - * - * @return True if state was found, false otherwise. - * @since S60 ?S60_version. - */ - bool findStateInStateList(const QList& states, - const QString& library, const QString& uri); - - //void setContentServiceProperty(QState* state); + bool verifyStateCreation(const QString& uri); HbMainWindow* mainWindow(); private: - // FtuContentService* mFtuContentService; + HbMainWindow *mMainWindow; }; diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp --- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -2,7 +2,8 @@ #include "searchprogressivestate.h" #include #include "indevicehandler.h" -#include +#include +#include #include #include #include @@ -29,7 +30,6 @@ QVERIFY(progressiveState->mListView); QVERIFY(progressiveState->mDocumentLoader); QVERIFY(progressiveState->mSearchPanel); - QVERIFY(progressiveState->mModel); //QVERIFY(progressiveState->mSearchHandler); delete progressiveState; @@ -130,14 +130,14 @@ progressiveState->onEntry(event); // progressiveState->mSearchHandler = progressiveState->mSearchHandlerList.at(1); progressiveState->onGetDocumentComplete(0, NULL); - QCOMPARE(progressiveState->mModel->rowCount(),0); + QCOMPARE(progressiveState->mListView->count(),0); progressiveState->onGetDocumentComplete(-1, NULL); - QCOMPARE(progressiveState->mModel->rowCount(),0); + QCOMPARE(progressiveState->mListView->count(),0); progressiveState->startNewSearch("contact"); QTest::qWait(2000); - int i = progressiveState->mModel->rowCount(); - QVERIFY(progressiveState->mModel->rowCount()); + int i = progressiveState->mListView->count(); + QVERIFY(progressiveState->mListView->count()); delete progressiveState; // delete wind; } @@ -225,7 +225,7 @@ { SearchProgressiveState* progressiveState = new SearchProgressiveState(); QEvent *event = new QEvent(QEvent::None); - + progressiveState->onEntry(event); progressiveState->getSettingCategory(0, true); progressiveState->getSettingCategory(1, true); progressiveState->getSettingCategory(2, true); @@ -234,21 +234,10 @@ progressiveState->getSettingCategory(5, true); progressiveState->getSettingCategory(6, true); progressiveState->getSettingCategory(7, true); - progressiveState->onEntry(event); + progressiveState->startNewSearch("jpg"); QTest::qWait(2000); - QVERIFY(progressiveState->mModel->rowCount()); - delete progressiveState; - } -void SearchStateProviderTest::test_customizeGoButton() - { - SearchProgressiveState* progressiveState = new SearchProgressiveState(); - QEvent *event = new QEvent(QEvent::None); - progressiveState->onEntry(event); - progressiveState->_customizeGoButton(true); - QVERIFY(!(progressiveState->mSearchPanel->isProgressive())); - progressiveState->_customizeGoButton(false); - QVERIFY(progressiveState->mSearchPanel->isProgressive()); + QVERIFY(progressiveState->mListView->count()); delete progressiveState; } // --------------------------------------------------------------------------- @@ -305,9 +294,9 @@ progressiveState->onEntry(event); progressiveState->noResultsFound("aaa"); - QCOMPARE(progressiveState->mModel->rowCount(),1); + QCOMPARE(progressiveState->mListView->count(),1); progressiveState->clear(); - QCOMPARE(progressiveState->mModel->rowCount(),0); + QCOMPARE(progressiveState->mListView->count(),0); delete progressiveState; } @@ -322,10 +311,10 @@ progressiveState->onEntry(event); progressiveState->noResultsFound(NULL); - QCOMPARE(progressiveState->mModel->rowCount(),0); + QCOMPARE(progressiveState->mListView->count(),0); progressiveState->noResultsFound("aaa"); - QCOMPARE(progressiveState->mModel->rowCount(),1); + QCOMPARE(progressiveState->mListView->count(),1); delete progressiveState; } @@ -337,12 +326,9 @@ { SearchProgressiveState* progressiveState = new SearchProgressiveState(); QEvent *event = new QEvent(QEvent::None); - progressiveState->onEntry(event); - - progressiveState->createSuggestionLink(true); - QCOMPARE(progressiveState->mModel->rowCount(), 0); - progressiveState->createSuggestionLink(false); - QCOMPARE(progressiveState->mModel->rowCount(), 1); + progressiveState->onEntry(event); + progressiveState->createSuggestionLink(); + QCOMPARE(progressiveState->mListView->count(), 1); delete progressiveState; } void SearchStateProviderTest::testTDisplayMode2Format() @@ -391,9 +377,10 @@ progressiveState->mSelectedCategory.insert(2, true); progressiveState->onEntry(event); progressiveState->startNewSearch("3gpp"); - QTest::qWait(200); - QModelIndex index = progressiveState->mModel->index(1, 0); - QStandardItem* item = progressiveState->mModel->itemFromIndex(index); + QTest::qWait(200); + + HbListWidgetItem* item = progressiveState->mListView->item(0); + if(item) QString uid = progressiveState->getDrivefromMediaId(item->data( Qt::UserRole + 2).toString()); //QVERIFY(uid.length()); diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp --- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp Mon Jun 28 11:03:15 2010 +0530 @@ -19,8 +19,6 @@ //#include "searchruntimeprovider.h" #include "searchstateprovider.h" -#include - #include #include @@ -51,8 +49,8 @@ // void SearchStateProviderTest::init() { - - // delete mMainWindow; + + // delete mMainWindow; } // --------------------------------------------------------------------------- @@ -68,7 +66,7 @@ // void SearchStateProviderTest::cleanupTestCase() { - + } // --------------------------------------------------------------------------- @@ -78,15 +76,15 @@ { SearchStateProvider provider; - /* QVERIFY(provider.mWizardMenuStateToken.mLibrary == "searchstateprovider.dll"); - QVERIFY(provider.mWizardMenuStateToken.mUri == "search.nokia.com/state/wizardprogressivestate"); + /* QVERIFY(provider.mWizardMenuStateToken.mLibrary == "searchstateprovider.dll"); + QVERIFY(provider.mWizardMenuStateToken.mUri == "search.nokia.com/state/wizardprogressivestate"); - QVERIFY(provider.mWizardActivatedStateToken.mLibrary == "searchstateprovider.dll"); - QVERIFY(provider.mWizardActivatedStateToken.mUri == "search.nokia.com/state/wizardsettingstate"); + QVERIFY(provider.mWizardActivatedStateToken.mLibrary == "searchstateprovider.dll"); + QVERIFY(provider.mWizardActivatedStateToken.mUri == "search.nokia.com/state/wizardsettingstate"); - QVERIFY(provider.mInitStateToken.mLibrary == "searchstateprovider.dll"); - QVERIFY(provider.mInitStateToken.mUri == "search.nokia.com/state/initstate"); - */ } + QVERIFY(provider.mInitStateToken.mLibrary == "searchstateprovider.dll"); + QVERIFY(provider.mInitStateToken.mUri == "search.nokia.com/state/initstate"); + */} // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- @@ -94,23 +92,19 @@ void SearchStateProviderTest::testStates() { /* SearchStateProvider provider; - QList states = provider.states(); - - QCOMPARE(states.count(), 3); + + QCOMPARE(states.count(), 3); - QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/wizardprogressivestate")); - QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/wizardsettingstate")); - QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/initstate")); - */ } + */} // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // void SearchStateProviderTest::testCreateProgressiveState() { - + QVERIFY(verifyStateCreation("search.nokia.com/state/wizardprogressivestate")); - // delete wind; + // delete wind; } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- @@ -119,7 +113,7 @@ { //HbMainWindow* wind = mainWindow(); QVERIFY(verifyStateCreation("search.nokia.com/state/wizardsettingstate")); - // delete wind; + // delete wind; } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- @@ -128,16 +122,15 @@ { //HbMainWindow* wind = mainWindow(); QVERIFY(verifyStateCreation("search.nokia.com/state/initstate")); - // delete wind; + // delete wind; } - // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // bool SearchStateProviderTest::verifyStateCreation(const QString& uri) { - SearchStateProvider provider; + SearchStateProvider provider; QState* state = provider.createState(uri); bool result = (state != NULL); if (state) @@ -150,23 +143,6 @@ // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -bool SearchStateProviderTest::findStateInStateList( - const QList& states, const QString& library, - const QString& uri) - { - foreach(HsStateToken token, states) - { - if (token.mLibrary == library && token.mUri == uri) - { - return true; - } - } - return false; - } - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// HbMainWindow* SearchStateProviderTest::mainWindow() { int count = HbInstance::instance()->allMainWindows().count(); @@ -185,7 +161,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - int error =0; + int error = 0; TRAPD(err, QTEST_DISABLE_KEYPAD_NAVIGATION SearchStateProviderTest tc; diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro --- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro Mon Jun 28 11:03:15 2010 +0530 @@ -33,10 +33,6 @@ DESTDIR = $$PWD/../../../../../bin/debug/ } -#LIBS += -lappservices -LIBS += -lstatemodel -#LIBS += -searchstateprovider.dll -#LIBS += -searchruntimeprovider.dll LIBS += -lsearchindevicehandler LIBS += -lxqservice LIBS += -lqcpixsearchclient @@ -45,8 +41,14 @@ LIBS += -laknicon LIBS += -lapgrfx LIBS += -lbitgdi -LIBS += -lnoteseditor -LIBS += -lxqutils +LIBS += -lsearchonlinehandler +LIBS += -lxqutils +LIBS += -lapparc +LIBS += -lefsrv +LIBS += -lapgrfx +LIBS += -lws32 +LIBS += -lavkon + CONFIG += qtestlib \ symbian_test \ debug_and_release \ @@ -67,15 +69,17 @@ ./inc \ ../../inc \ ../../../../inc \ - ../../../../indevicehandler/inc + ../../../../indevicehandler/inc \ + ../../../../onlinehandler/inc symbian { CONFIG += symbian_test TARGET.UID2 = 0x100039CE TARGET.UID3 = 0x20026F9A TARGET.CAPABILITY = CAP_APPLICATION AllFiles TARGET.EPOCSTACKSIZE = 0x14000 // 80kB -TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB +TARGET.EPOCHEAPSIZE = 0x20000 0x800000 // 128kB - 16MB INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE } include(t_searchstateprovider.pri) diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/bluesky.jpg Binary file searchui/tsrc/indexdb/data/bluesky.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/jungle.jpg Binary file searchui/tsrc/indexdb/data/jungle.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/mountain.jpg Binary file searchui/tsrc/indexdb/data/mountain.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/rock.jpg Binary file searchui/tsrc/indexdb/data/rock.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/sea.jpg Binary file searchui/tsrc/indexdb/data/sea.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/snow.jpg Binary file searchui/tsrc/indexdb/data/snow.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/tree.jpg Binary file searchui/tsrc/indexdb/data/tree.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/data/water.jpg Binary file searchui/tsrc/indexdb/data/water.jpg has changed diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/indexdb/indexdb.pro --- a/searchui/tsrc/indexdb/indexdb.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/tsrc/indexdb/indexdb.pro Mon Jun 28 11:03:15 2010 +0530 @@ -1,42 +1,27 @@ +# +# Copyright (c) 2009 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: indexdb +# TEMPLATE = subdirs symbian{ - BLD_INF_RULES.prj_exports += "data/applications/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\applications\_1\_0.cfs" \ - "data/applications/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\applications\_1\deletable" \ - "data/applications/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\applications\_1\segments" \ - "data/bookmark/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\bookmark\_1\_0.cfs" \ - "data/bookmark/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\bookmark\_1\deletable" \ - "data/bookmark/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\bookmark\_1\segments" \ - "data/calendar/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\calendar\_1\_0.cfs" \ - "data/calendar/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\calendar\_1\deletable" \ - "data/calendar/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\calendar\_1\segments" \ - "data/contact/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\contact\_1\_0.cfs" \ - "data/contact/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\contact\_1\deletable" \ - "data/contact/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\contact\_1\segments" \ - "data/file/content/_0/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\content\_0\_0.cfs" \ - "data/file/content/_0/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\content\_0\deletable" \ - "data/file/content/_0/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\content\_0\segments" \ - "data/file/folder/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\folder\_1\_0.cfs" \ - "data/file/folder/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\folder\_1\deletable" \ - "data/file/folder/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\file\folder\_1\segments" \ - "data/media/audio/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\audio\_1\_0.cfs" \ - "data/media/audio/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\audio\_1\deletable" \ - "data/media/audio/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\audio\_1\segments" \ - "data/media/image/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\image\_1\_0.cfs" \ - "data/media/image/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\image\_1\deletable" \ - "data/media/image/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\image\_1\segments" \ - "data/media/video/_0/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\video\_0\_0.cfs" \ - "data/media/video/_0/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\video\_0\deletable" \ - "data/media/video/_0/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\media\video\_0\segments" \ - "data/msg/smsmms/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\msg\smsmms\_1\_0.cfs" \ - "data/msg/smsmms/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\msg\smsmms\_1\deletable" \ - "data/msg/smsmms/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\msg\smsmms\_1\segments" \ - "data/notes/_1/_0.cfs \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\notes\_1\_0.cfs" \ - "data/notes/_1/deletable \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\notes\_1\deletable" \ - "data/notes/_1/segments \epoc32\winscw\c\private\2001f6f7\indexing\indexdb\root\notes\_1\segments" \ - "data/cpixreg.txt \epoc32\winscw\c\private\2001f6f7\cpixreg.txt" \ - "data/cpixreg.txt \epoc32\winscw\c\private\2001f6f7\clucenelockdir\1.txt" \ - "data/cpixcontentinfo.sq \epoc32\winscw\c\private\2001f6fb\cpixcontentinfo.sq" - + BLD_INF_RULES.prj_exports += "data/water.jpg \epoc32\winscw\c\data\water.jpg" \ + "data/sea.jpg \epoc32\winscw\c\data\sea.jpg" \ + "data/rock.jpg \epoc32\winscw\c\data\tree.jpg" \ + "data/bluesky.jpg \epoc32\winscw\c\data\bluesky.jpg" \ + "data/jungle.jpg \epoc32\winscw\c\data\jungle.jpg" \ + "data/snow.jpg \epoc32\winscw\c\data\snow.jpg" \ + "data/mountain.jpg \epoc32\winscw\c\data\mountain.jpg " diff -r 2f67eb14d003 -r 4a2987baf8f7 searchui/tsrc/tsrc.pro --- a/searchui/tsrc/tsrc.pro Wed Jun 23 17:22:18 2010 +0100 +++ b/searchui/tsrc/tsrc.pro Mon Jun 28 11:03:15 2010 +0530 @@ -17,8 +17,10 @@ TEMPLATE = subdirs SUBDIRS += indexdb \ -../indevicehandler/tsrc/t_indevicehandler \ - ../stateproviders/searchstateprovider/tsrc/t_searchstateprovider +../indevicehandler/tsrc \ + ../stateproviders/searchstateprovider/tsrc \ +../onlinehandler/tsrc + CONFIG += ordered