Merge with lars' fixes
authorteknolog
Wed, 31 Mar 2010 16:09:11 +0100
changeset 96 a8538f50e2ba
parent 95 c06c2a75bb57 (current diff)
parent 94 8d36b7608232 (diff)
child 99 41d00e97e2f7
Merge with lars' fixes
application/inc/PodcastFeedView.h
application/inc/PodcastShowsView.h
application/src/PodcastFeedView.cpp
application/src/PodcastShowsView.cpp
engine/group/engine.mmp
engine/inc/ConnectionEngine.h
engine/inc/FeedEngine.h
engine/inc/PodcastModel.h
engine/src/ConnectionEngine.cpp
engine/src/FeedEngine.cpp
engine/src/PodcastModel.cpp
engine/src/SettingsEngine.cpp
--- a/application/inc/PodcastFeedView.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/application/inc/PodcastFeedView.h	Wed Mar 31 16:09:11 2010 +0100
@@ -96,7 +96,7 @@
 		void DialogDismissedL(TInt aButtonId); 
 
 		// from MImageHandlerCallback
-		void ImageOperationCompleteL(TInt aError, TUint aHandle);
+		void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel);
 		
 		void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation);
 
@@ -119,6 +119,7 @@
 		TBool iFirstActivateAfterLaunch;
 		TOpmlState iOpmlState;
 		TBool iViewingShows;
+		RArray<TInt> iFeedIdForIconArray;
 };
 
 #endif // PODCASTFEEDVIEWH
--- a/application/inc/PodcastShowsView.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/application/inc/PodcastShowsView.h	Wed Mar 31 16:09:11 2010 +0100
@@ -103,6 +103,9 @@
 	void DisplayShowInfoDialogL();
 	void HandleSetShowPlayedL(TBool aPlayed);
 	void HandleDeleteShowL();
+	void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel) {}
+	void HandleSetShowPlayed(TBool aPlayed);
+	void HandleDeleteShow();
 	void UpdateViewTitleL();
 	void CreateIconsL();
 	void GetShowErrorText(TDes &aErrorMessage, TInt aErrorCode);
@@ -111,6 +114,8 @@
 	
 	CPodcastModel& iPodcastModel;
 	TBool iProgressAdded;	
+	TInt iLastImageHandlerError;
+	TBool iSetTitlebarImage;
 	};
 
 #endif // PODCASTSHOWSVIEWH
--- a/application/src/PodcastFeedView.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/application/src/PodcastFeedView.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -105,7 +105,6 @@
 	// Append the feed icon to icon array
 	icons->AppendL( CGulIcon::NewL( bitmap, mask ) );
 	CleanupStack::Pop(2); // bitmap, mask
-	
 	iListContainer->Listbox()->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
 	CleanupStack::Pop(icons); // icons
 
@@ -128,6 +127,7 @@
 	delete iNeverUpdated;
 	delete iStylusPopupMenu;
 	delete iUpdater;
+	iFeedIdForIconArray.Close();
     }
 
 void CPodcastFeedView::UpdateItemL(TInt aIndex)
@@ -369,33 +369,26 @@
 			}
 		}
 	CArrayPtr<CGulIcon>* icons = iListContainer->Listbox()->ItemDrawer()->FormattedCellData()->IconArray();
-	
-	if (aFeedInfo.FeedIconIndex() != -1) {
-		iconIndex = aFeedInfo.FeedIconIndex();
-	} else {
-		if(aFeedInfo.FeedIcon() != NULL && 
-				aFeedInfo.FeedIcon()->SizeInPixels().iHeight > 0 &&
-				aFeedInfo.FeedIcon()->SizeInPixels().iWidth > 0)
-			{
-			// Hopefully temporary haxx to prevent double delete. I would prefer if
-			// this could be solved with a little better design.
-			CFbsBitmap* bmpCopy = new (ELeave) CFbsBitmap;
-			CleanupStack::PushL(bmpCopy);
-			bmpCopy->Duplicate(aFeedInfo.FeedIcon()->Handle());
-			icons->AppendL( CGulIcon::NewL(bmpCopy, NULL));
-			CleanupStack::Pop(bmpCopy);
-			iconIndex = icons->Count()-1;
-			aFeedInfo.SetFeedIconIndex(iconIndex);
-			}
-		else {
-			if(BaflUtils::FileExists(iPodcastModel.FsSession(), aFeedInfo.ImageFileName()))
-			{
-			// If this fails, no reason to worry
-			TRAP_IGNORE(iPodcastModel.ImageHandler().LoadFileAndScaleL(aFeedInfo.FeedIcon(), aFeedInfo.ImageFileName(), TSize(64,56), *this, aFeedInfo.Uid()));
-			}
-		}
-	}
-	
+	iconIndex = iFeedIdForIconArray.Find(aFeedInfo.Uid());
+	if(iconIndex == KErrNotFound && aFeedInfo.FeedIcon() != NULL && 
+			aFeedInfo.FeedIcon()->SizeInPixels().iHeight > 0 &&
+			aFeedInfo.FeedIcon()->SizeInPixels().iWidth > 0)
+		{
+		// Hopefully temporary haxx to prevent double delete. I would prefer if
+		// this could be solved with a little better design.
+		CFbsBitmap* bmpCopy = new (ELeave) CFbsBitmap;
+		CleanupStack::PushL(bmpCopy);
+		bmpCopy->Duplicate(aFeedInfo.FeedIcon()->Handle());
+		icons->AppendL( CGulIcon::NewL(bmpCopy, NULL));
+		iFeedIdForIconArray.Append(aFeedInfo.Uid());
+		CleanupStack::Pop(bmpCopy);			
+		iconIndex = icons->Count()-1;
+		}	
+	else 
+		{
+		iconIndex++;
+		}	
+
 	if (unplayedShows.Length() > 0) {
 		unplayedShows.Insert(0,_L(", "));
 	}
@@ -403,11 +396,11 @@
 	iListboxFormatbuffer.Format(KFeedFormat(), iconIndex, &(aFeedInfo.Title()), &updatedDate,  &unplayedShows);
 	}
 
-void CPodcastFeedView::ImageOperationCompleteL(TInt aError, TUint aHandle)
+void CPodcastFeedView::ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& /*aPodcastModel*/)
 	{
 	if (aError == KErrNone) {
-	UpdateFeedInfoStatusL(aHandle, EFalse);
-	}
+		UpdateFeedInfoStatusL(aHandle, EFalse);
+		}
 	}
 
 void CPodcastFeedView::UpdateFeedInfoDataL(CFeedInfo* aFeedInfo, TInt aIndex, TBool aIsUpdating )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine/BWINS/podcastengineu.def	Wed Mar 31 16:09:11 2010 +0100
@@ -0,0 +1,174 @@
+EXPORTS
+	??0CShowInfo@@QAE@PAV0@@Z @ 1 NONAME ; CShowInfo::CShowInfo(class CShowInfo *)
+	??1CFeedInfo@@UAE@XZ @ 2 NONAME ; CFeedInfo::~CFeedInfo(void)
+	??1CImageHandler@@UAE@XZ @ 3 NONAME ; CImageHandler::~CImageHandler(void)
+	??1CPodcastModel@@UAE@XZ @ 4 NONAME ; CPodcastModel::~CPodcastModel(void)
+	??1CShowEngine@@UAE@XZ @ 5 NONAME ; CShowEngine::~CShowEngine(void)
+	??1CShowInfo@@UAE@XZ @ 6 NONAME ; CShowInfo::~CShowInfo(void)
+	?ActiveClientUid@CFeedEngine@@QAEIXZ @ 7 NONAME ; unsigned int CFeedEngine::ActiveClientUid(void)
+	?ActiveFeedInfo@CPodcastModel@@QAEPAVCFeedInfo@@XZ @ 8 NONAME ; class CFeedInfo * CPodcastModel::ActiveFeedInfo(void)
+	?ActiveShowList@CPodcastModel@@QAEAAV?$RPointerArray@VCShowInfo@@@@XZ @ 9 NONAME ; class RPointerArray<class CShowInfo> & CPodcastModel::ActiveShowList(void)
+	?AddDownloadL@CShowEngine@@QAEXAAVCShowInfo@@@Z @ 10 NONAME ; void CShowEngine::AddDownloadL(class CShowInfo &)
+	?AddFeedL@CFeedEngine@@QAEHABVCFeedInfo@@@Z @ 11 NONAME ; int CFeedEngine::AddFeedL(class CFeedInfo const &)
+	?AddObserver@CFeedEngine@@QAEXPAVMFeedEngineObserver@@@Z @ 12 NONAME ; void CFeedEngine::AddObserver(class MFeedEngineObserver *)
+	?AddObserver@CShowEngine@@QAEXPAVMShowEngineObserver@@@Z @ 13 NONAME ; void CShowEngine::AddObserver(class MShowEngineObserver *)
+	?AddObserver@CSoundEngine@@QAEXPAVMSoundEngineObserver@@@Z @ 14 NONAME ; void CSoundEngine::AddObserver(class MSoundEngineObserver *)
+	?AddSearchResultL@CFeedEngine@@QAEXPAVCFeedInfo@@@Z @ 15 NONAME ; void CFeedEngine::AddSearchResultL(class CFeedInfo *)
+	?AddShowL@CShowEngine@@QAEHABVCShowInfo@@@Z @ 16 NONAME ; int CShowEngine::AddShowL(class CShowInfo const &)
+	?BaseDir@CSettingsEngine@@QAEAAV?$TBuf@$0BAA@@@XZ @ 17 NONAME ; class TBuf<256> & CSettingsEngine::BaseDir(void)
+	?BuildDate@CFeedInfo@@QBE?AVTTime@@XZ @ 18 NONAME ; class TTime CFeedInfo::BuildDate(void) const
+	?CancelUpdateAllFeeds@CFeedEngine@@QAEXXZ @ 19 NONAME ; void CFeedEngine::CancelUpdateAllFeeds(void)
+	?CleanHtmlL@PodcastUtils@@SAXAAVTDes16@@@Z @ 20 NONAME ; void PodcastUtils::CleanHtmlL(class TDes16 &)
+	?ClientState@CFeedEngine@@QAE?AW4TClientState@@XZ @ 21 NONAME ; enum TClientState CFeedEngine::ClientState(void)
+	?ConnectionEngine@CPodcastModel@@QAEAAVCConnectionEngine@@XZ @ 22 NONAME ; class CConnectionEngine & CPodcastModel::ConnectionEngine(void)
+	?CopyL@CFeedInfo@@QBEPAV1@XZ @ 23 NONAME ; class CFeedInfo * CFeedInfo::CopyL(void) const
+	?CustomTitle@CFeedInfo@@QBEHXZ @ 24 NONAME ; int CFeedInfo::CustomTitle(void) const
+	?DBGetShowByFileNameL@CShowEngine@@QAEPAVCShowInfo@@V?$TBuf@$0BAA@@@@Z @ 25 NONAME ; class CShowInfo * CShowEngine::DBGetShowByFileNameL(class TBuf<256>)
+	?DeleteAllShowsByFeedL@CShowEngine@@QAEXIH@Z @ 26 NONAME ; void CShowEngine::DeleteAllShowsByFeedL(unsigned int, int)
+	?DeleteOldShowsByFeed@CShowEngine@@QAEXI@Z @ 27 NONAME ; void CShowEngine::DeleteOldShowsByFeed(unsigned int)
+	?DeletePlayedShows@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@@Z @ 28 NONAME ; void CShowEngine::DeletePlayedShows(class RPointerArray<class CShowInfo> &)
+	?DeleteShowL@CShowEngine@@QAEXIH@Z @ 29 NONAME ; void CShowEngine::DeleteShowL(unsigned int, int)
+	?Description@CFeedInfo@@QBEABVTDesC16@@XZ @ 30 NONAME ; class TDesC16 const & CFeedInfo::Description(void) const
+	?Description@CShowInfo@@QBEABVTDesC16@@XZ @ 31 NONAME ; class TDesC16 const & CShowInfo::Description(void) const
+	?DownloadAutomatically@CSettingsEngine@@QAEHXZ @ 32 NONAME ; int CSettingsEngine::DownloadAutomatically(void)
+	?DownloadState@CShowInfo@@QBE?AW4TDownloadState@@XZ @ 33 NONAME ; enum TDownloadState CShowInfo::DownloadState(void) const
+	?DownloadSuspended@CSettingsEngine@@QAEHXZ @ 34 NONAME ; int CSettingsEngine::DownloadSuspended(void)
+	?EnsureProperPathName@PodcastUtils@@SAXAAV?$TBuf@$0BAA@@@@Z @ 35 NONAME ; void PodcastUtils::EnsureProperPathName(class TBuf<256> &)
+	?ExportFeedsL@CFeedEngine@@QAEHAAV?$TBuf@$0BAA@@@@Z @ 36 NONAME ; int CFeedEngine::ExportFeedsL(class TBuf<256> &)
+	?FeedEngine@CPodcastModel@@QAEAAVCFeedEngine@@XZ @ 37 NONAME ; class CFeedEngine & CPodcastModel::FeedEngine(void)
+	?FeedIcon@CFeedInfo@@QBEPAVCFbsBitmap@@XZ @ 38 NONAME ; class CFbsBitmap * CFeedInfo::FeedIcon(void) const
+	?AddObserver@CConnectionEngine@@QAEXPAVMConnectionObserver@@@Z @ 39 NONAME ; void CConnectionEngine::AddObserver(class MConnectionObserver *)
+	?FeedUid@CShowInfo@@QBEIXZ @ 40 NONAME ; unsigned int CShowInfo::FeedUid(void) const
+	?FileName@CShowInfo@@QBEABVTDesC16@@XZ @ 41 NONAME ; class TDesC16 const & CShowInfo::FileName(void) const
+	?FileNameFromUrl@PodcastUtils@@SAXABVTDesC16@@AAV?$TBuf@$0BAA@@@@Z @ 42 NONAME ; void PodcastUtils::FileNameFromUrl(class TDesC16 const &, class TBuf<256> &)
+	?FixProtocolsL@PodcastUtils@@SAXAAVTDes16@@@Z @ 43 NONAME ; void PodcastUtils::FixProtocolsL(class TDes16 &)
+	?GetAllShowsL@CPodcastModel@@QAEXXZ @ 44 NONAME ; void CPodcastModel::GetAllShowsL(void)
+	?GetAllShowsL@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@@Z @ 45 NONAME ; void CShowEngine::GetAllShowsL(class RPointerArray<class CShowInfo> &)
+	?GetDownloadedStats@CFeedEngine@@QAEXAAI0@Z @ 46 NONAME ; void CFeedEngine::GetDownloadedStats(unsigned int &, unsigned int &)
+	?GetFeedInfoByUid@CFeedEngine@@QAEPAVCFeedInfo@@I@Z @ 47 NONAME ; class CFeedInfo * CFeedEngine::GetFeedInfoByUid(unsigned int)
+	?GetMimeType@CShowEngine@@QAEXABVTDesC16@@AAVTDes16@@@Z @ 48 NONAME ; void CShowEngine::GetMimeType(class TDesC16 const &, class TDes16 &)
+	?GetNewShowsL@CPodcastModel@@QAEXXZ @ 49 NONAME ; void CPodcastModel::GetNewShowsL(void)
+	?GetNewShowsL@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@@Z @ 50 NONAME ; void CShowEngine::GetNewShowsL(class RPointerArray<class CShowInfo> &)
+	?GetNextShowByTrackL@CShowEngine@@QAEPAVCShowInfo@@PAV2@@Z @ 51 NONAME ; class CShowInfo * CShowEngine::GetNextShowByTrackL(class CShowInfo *)
+	?GetNumDownloadingShows@CShowEngine@@QAEHXZ @ 52 NONAME ; int CShowEngine::GetNumDownloadingShows(void)
+	?GetSearchResults@CFeedEngine@@QAEABV?$RPointerArray@VCFeedInfo@@@@XZ @ 53 NONAME ; class RPointerArray<class CFeedInfo> const & CFeedEngine::GetSearchResults(void)
+	?GetShowByUidL@CShowEngine@@QAEPAVCShowInfo@@I@Z @ 54 NONAME ; class CShowInfo * CShowEngine::GetShowByUidL(unsigned int)
+	?GetShowsByFeedL@CPodcastModel@@QAEXI@Z @ 55 NONAME ; void CPodcastModel::GetShowsByFeedL(unsigned int)
+	?GetShowsByFeedL@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@I@Z @ 56 NONAME ; void CShowEngine::GetShowsByFeedL(class RPointerArray<class CShowInfo> &, unsigned int)
+	?GetShowsDownloadedL@CPodcastModel@@QAEXXZ @ 57 NONAME ; void CPodcastModel::GetShowsDownloadedL(void)
+	?GetShowsDownloadedL@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@@Z @ 58 NONAME ; void CShowEngine::GetShowsDownloadedL(class RPointerArray<class CShowInfo> &)
+	?GetShowsDownloadingL@CPodcastModel@@QAEXXZ @ 59 NONAME ; void CPodcastModel::GetShowsDownloadingL(void)
+	?GetShowsDownloadingL@CShowEngine@@QAEXAAV?$RPointerArray@VCShowInfo@@@@@Z @ 60 NONAME ; void CShowEngine::GetShowsDownloadingL(class RPointerArray<class CShowInfo> &)
+	?GetSortedFeeds@CFeedEngine@@QAEABV?$RPointerArray@VCFeedInfo@@@@XZ @ 61 NONAME ; class RPointerArray<class CFeedInfo> const & CFeedEngine::GetSortedFeeds(void)
+	?GetStatsByFeed@CFeedEngine@@QAEXIAAI0@Z @ 62 NONAME ; void CFeedEngine::GetStatsByFeed(unsigned int, unsigned int &, unsigned int &)
+	?IAPIds@CPodcastModel@@QAEAAV?$RArray@VTPodcastIAPItem@@@@XZ @ 63 NONAME ; class RArray<class TPodcastIAPItem> & CPodcastModel::IAPIds(void)
+	?IAPNames@CPodcastModel@@QAEPAVCDesC16ArrayFlat@@XZ @ 64 NONAME ; class CDesC16ArrayFlat * CPodcastModel::IAPNames(void)
+	?ImageFileName@CFeedInfo@@QBEABVTDesC16@@XZ @ 65 NONAME ; class TDesC16 const & CFeedInfo::ImageFileName(void) const
+	?ImageHandler@CPodcastModel@@QAEAAVCImageHandler@@XZ @ 66 NONAME ; class CImageHandler & CPodcastModel::ImageHandler(void)
+	?ImageUrl@CFeedInfo@@QBEABVTDesC16@@XZ @ 67 NONAME ; class TDesC16 const & CFeedInfo::ImageUrl(void) const
+	?ImportFeedsL@CFeedEngine@@QAEXABVTDesC16@@@Z @ 68 NONAME ; void CFeedEngine::ImportFeedsL(class TDesC16 const &)
+	?IsFirstStartup@CPodcastModel@@QAEHXZ @ 69 NONAME ; int CPodcastModel::IsFirstStartup(void)
+	?LastError@CFeedInfo@@QBEHXZ @ 70 NONAME ; int CFeedInfo::LastError(void) const
+	?LastError@CShowInfo@@QBEHXZ @ 71 NONAME ; int CShowInfo::LastError(void) const
+	?LastUpdated@CFeedInfo@@QBE?AVTTime@@XZ @ 72 NONAME ; class TTime CFeedInfo::LastUpdated(void) const
+	?Link@CFeedInfo@@QBEABVTDesC16@@XZ @ 73 NONAME ; class TDesC16 const & CFeedInfo::Link(void) const
+	?LoadFileAndScaleL@CImageHandler@@QAEXPAVCFbsBitmap@@ABV?$TBuf@$0BAA@@@ABVTSize@@AAVMImageHandlerCallback@@IH@Z @ 74 NONAME ; void CImageHandler::LoadFileAndScaleL(class CFbsBitmap *, class TBuf<256> const &, class TSize const &, class MImageHandlerCallback &, unsigned int, int)
+	?MarkSelectionPlayed@CPodcastModel@@QAEXXZ @ 75 NONAME ; void CPodcastModel::MarkSelectionPlayed(void)
+	?MetaDataReader@CShowEngine@@QAEAAVCMetaDataReader@@XZ @ 76 NONAME ; class CMetaDataReader & CShowEngine::MetaDataReader(void)
+	?NewL@CFeedInfo@@SAPAV1@XZ @ 77 NONAME ; class CFeedInfo * CFeedInfo::NewL(void)
+	?Url@CShowInfo@@QBEABVTDesC16@@XZ @ 78 NONAME ; class TDesC16 const & CShowInfo::Url(void) const	
+	?NewL@CPodcastModel@@SAPAV1@XZ @ 79 NONAME ; class CPodcastModel * CPodcastModel::NewL(void)
+	?NewL@CShowEngine@@SAPAV1@AAVCPodcastModel@@@Z @ 80 NONAME ; class CShowEngine * CShowEngine::NewL(class CPodcastModel &)
+	?NewL@CShowInfo@@SAPAV1@I@Z @ 81 NONAME ; class CShowInfo * CShowInfo::NewL(unsigned int)
+	?NewLC@CFeedInfo@@SAPAV1@XZ @ 82 NONAME ; class CFeedInfo * CFeedInfo::NewLC(void)
+	?XMLEncode@PodcastUtils@@SAXAAVTDes16@@@Z @ 83 NONAME ; void PodcastUtils::XMLEncode(class TDes16 &)
+	?NewLC@CShowInfo@@SAPAV1@I@Z @ 84 NONAME ; class CShowInfo * CShowInfo::NewLC(unsigned int)
+	?NotifyShowListUpdatedL@CShowEngine@@QAEXXZ @ 85 NONAME ; void CShowEngine::NotifyShowListUpdatedL(void)
+	?OpmlParsingComplete@CFeedEngine@@QAEXHI@Z @ 86 NONAME ; void CFeedEngine::OpmlParsingComplete(int, unsigned int)
+	?Pause@CSoundEngine@@QAEXH@Z @ 87 NONAME ; void CSoundEngine::Pause(int)
+	?Play@CSoundEngine@@QAEXXZ @ 88 NONAME ; void CSoundEngine::Play(void)
+	?PlayPausePodcastL@CPodcastModel@@QAEXPAVCShowInfo@@H@Z @ 89 NONAME ; void CPodcastModel::PlayPausePodcastL(class CShowInfo *, int)
+	?PlayState@CShowInfo@@QBE?AW4TPlayState@@XZ @ 90 NONAME ; enum TPlayState CShowInfo::PlayState(void) const
+	?PlayTime@CShowInfo@@QBEIXZ @ 91 NONAME ; unsigned int CShowInfo::PlayTime(void) const
+	?PlayingPodcast@CPodcastModel@@QAEPAVCShowInfo@@XZ @ 92 NONAME ; class CShowInfo * CPodcastModel::PlayingPodcast(void)
+	?Position@CShowInfo@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 93 NONAME ; class TTimeIntervalMicroSeconds CShowInfo::Position(void) const
+	?Position@CSoundEngine@@QAE?AVTTimeIntervalMicroSeconds@@XZ @ 94 NONAME ; class TTimeIntervalMicroSeconds CSoundEngine::Position(void)
+	?PubDate@CShowInfo@@QBE?BVTTime@@XZ @ 95 NONAME ; class TTime const CShowInfo::PubDate(void) const
+	?RemoveAllDownloads@CShowEngine@@QAEXXZ @ 96 NONAME ; void CShowEngine::RemoveAllDownloads(void)
+	?RemoveAllFormatting@PodcastUtils@@SAXAAVTDes16@@@Z @ 97 NONAME ; void PodcastUtils::RemoveAllFormatting(class TDes16 &)
+	?RemoveDownloadL@CShowEngine@@QAEHI@Z @ 98 NONAME ; int CShowEngine::RemoveDownloadL(unsigned int)
+	?RemoveFeedL@CFeedEngine@@QAEXI@Z @ 99 NONAME ; void CFeedEngine::RemoveFeedL(unsigned int)
+	?RemoveObserver@CFeedEngine@@QAEXPAVMFeedEngineObserver@@@Z @ 100 NONAME ; void CFeedEngine::RemoveObserver(class MFeedEngineObserver *)
+	?RemoveObserver@CShowEngine@@QAEXPAVMShowEngineObserver@@@Z @ 101 NONAME ; void CShowEngine::RemoveObserver(class MShowEngineObserver *)
+	?ReplaceChar@PodcastUtils@@SAXAAVTDes16@@II@Z @ 102 NONAME ; void PodcastUtils::ReplaceChar(class TDes16 &, unsigned int, unsigned int)
+	?ReplaceString@PodcastUtils@@SAXAAVTDes16@@ABVTDesC16@@1@Z @ 103 NONAME ; void PodcastUtils::ReplaceString(class TDes16 &, class TDesC16 const &, class TDesC16 const &)
+	?ResumeDownloadsL@CShowEngine@@QAEXXZ @ 104 NONAME ; void CShowEngine::ResumeDownloadsL(void)
+	?SNAPIds@CPodcastModel@@QAEAAV?$RArray@VTPodcastIAPItem@@@@XZ @ 105 NONAME ; class RArray<class TPodcastIAPItem> & CPodcastModel::SNAPIds(void)
+	?SNAPNames@CPodcastModel@@QAEPAVCDesC16ArrayFlat@@XZ @ 106 NONAME ; class CDesC16ArrayFlat * CPodcastModel::SNAPNames(void)
+	?SQLEncode@PodcastUtils@@SAXAAVTDes16@@@Z @ 107 NONAME ; void PodcastUtils::SQLEncode(class TDes16 &)
+	?SaveSettingsL@CSettingsEngine@@QAEXXZ @ 108 NONAME ; void CSettingsEngine::SaveSettingsL(void)
+	?ScaledBitmap@CImageHandler@@QAEPAVCFbsBitmap@@XZ @ 109 NONAME ; class CFbsBitmap * CImageHandler::ScaledBitmap(void)
+	?SearchForFeedL@CFeedEngine@@QAEXAAVTDesC16@@@Z @ 110 NONAME ; void CFeedEngine::SearchForFeedL(class TDesC16 &)
+	?SetActiveFeedInfo@CPodcastModel@@QAEXPAVCFeedInfo@@@Z @ 111 NONAME ; void CPodcastModel::SetActiveFeedInfo(class CFeedInfo *)
+	?SetBaseDir@CSettingsEngine@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 112 NONAME ; void CSettingsEngine::SetBaseDir(class TBuf<256> &)
+	?SetBuildDate@CFeedInfo@@QAEXVTTime@@@Z @ 113 NONAME ; void CFeedInfo::SetBuildDate(class TTime)
+	?SetCustomTitle@CFeedInfo@@QAEXXZ @ 114 NONAME ; void CFeedInfo::SetCustomTitle(void)
+	?SetDescriptionL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 115 NONAME ; void CFeedInfo::SetDescriptionL(class TDesC16 const &)
+	?SetDescriptionL@CShowInfo@@QAEXABVTDesC16@@@Z @ 116 NONAME ; void CShowInfo::SetDescriptionL(class TDesC16 const &)
+	?SetDownloadAutomatically@CSettingsEngine@@QAEXH@Z @ 117 NONAME ; void CSettingsEngine::SetDownloadAutomatically(int)
+	?SetDownloadState@CShowInfo@@QAEXW4TDownloadState@@@Z @ 118 NONAME ; void CShowInfo::SetDownloadState(enum TDownloadState)
+	?SetDownloadSuspended@CSettingsEngine@@QAEXH@Z @ 119 NONAME ; void CSettingsEngine::SetDownloadSuspended(int)
+	?SetFeedIcon@CFeedInfo@@QAEXPAVCFbsBitmap@@@Z @ 120 NONAME ; void CFeedInfo::SetFeedIcon(class CFbsBitmap *)
+	?SetFeedUid@CShowInfo@@QAEXI@Z @ 121 NONAME ; void CShowInfo::SetFeedUid(unsigned int)
+	?SetFileNameL@CShowInfo@@QAEXABVTDesC16@@@Z @ 122 NONAME ; void CShowInfo::SetFileNameL(class TDesC16 const &)
+	?SetImageFileNameL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 123 NONAME ; void CFeedInfo::SetImageFileNameL(class TDesC16 const &)
+	?SetImageUrlL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 124 NONAME ; void CFeedInfo::SetImageUrlL(class TDesC16 const &)
+	?SetLastError@CFeedInfo@@QAEXH@Z @ 125 NONAME ; void CFeedInfo::SetLastError(int)
+	?SetLastError@CShowInfo@@QAEXH@Z @ 126 NONAME ; void CShowInfo::SetLastError(int)
+	?SetLastUpdated@CFeedInfo@@QAEXVTTime@@@Z @ 127 NONAME ; void CFeedInfo::SetLastUpdated(class TTime)
+	?SetLinkL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 128 NONAME ; void CFeedInfo::SetLinkL(class TDesC16 const &)
+	?SetPlayState@CShowInfo@@QAEXW4TPlayState@@@Z @ 129 NONAME ; void CShowInfo::SetPlayState(enum TPlayState)
+	?SetPlayTime@CShowInfo@@QAEXI@Z @ 130 NONAME ; void CShowInfo::SetPlayTime(unsigned int)
+	?SetPlayingPodcast@CPodcastModel@@QAEXPAVCShowInfo@@@Z @ 131 NONAME ; void CPodcastModel::SetPlayingPodcast(class CShowInfo *)
+	?SetPosition@CShowInfo@@QAEXVTTimeIntervalMicroSeconds@@@Z @ 132 NONAME ; void CShowInfo::SetPosition(class TTimeIntervalMicroSeconds)
+	?SetPosition@CSoundEngine@@QAEXI@Z @ 133 NONAME ; void CSoundEngine::SetPosition(unsigned int)
+	?SetPubDate@CShowInfo@@QAEXVTTime@@@Z @ 134 NONAME ; void CShowInfo::SetPubDate(class TTime)
+	?SetShowSize@CShowInfo@@QAEXI@Z @ 135 NONAME ; void CShowInfo::SetShowSize(unsigned int)
+	?SetShowType@CShowInfo@@QAEXW4TShowType@@@Z @ 136 NONAME ; void CShowInfo::SetShowType(enum TShowType)
+	?SetSpecificIAP@CSettingsEngine@@QAEXH@Z @ 137 NONAME ; void CSettingsEngine::SetSpecificIAP(int)
+	?SetTitleL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 138 NONAME ; void CFeedInfo::SetTitleL(class TDesC16 const &)
+	?SetTitleL@CShowInfo@@QAEXABVTDesC16@@@Z @ 139 NONAME ; void CShowInfo::SetTitleL(class TDesC16 const &)
+	?SetTrackNo@CShowInfo@@QAEXI@Z @ 140 NONAME ; void CShowInfo::SetTrackNo(unsigned int)
+	?SetUid@CShowInfo@@QAEXI@Z @ 141 NONAME ; void CShowInfo::SetUid(unsigned int)
+	?SetUpdateAutomatically@CSettingsEngine@@QAEXW4TAutoUpdateSetting@@@Z @ 142 NONAME ; void CSettingsEngine::SetUpdateAutomatically(enum TAutoUpdateSetting)
+	?SetUpdateFeedInterval@CSettingsEngine@@QAEXH@Z @ 143 NONAME ; void CSettingsEngine::SetUpdateFeedInterval(int)
+	?SetUpdateFeedTime@CSettingsEngine@@QAEXVTTime@@@Z @ 144 NONAME ; void CSettingsEngine::SetUpdateFeedTime(class TTime)
+	?SetUrlL@CFeedInfo@@QAEXABVTDesC16@@@Z @ 145 NONAME ; void CFeedInfo::SetUrlL(class TDesC16 const &)
+	?SetUrlL@CShowInfo@@QAEXABVTDesC16@@@Z @ 146 NONAME ; void CShowInfo::SetUrlL(class TDesC16 const &)
+	?SettingsEngine@CPodcastModel@@QAEAAVCSettingsEngine@@XZ @ 147 NONAME ; class CSettingsEngine & CPodcastModel::SettingsEngine(void)
+	?ShowDownloading@CShowEngine@@QAEPAVCShowInfo@@XZ @ 148 NONAME ; class CShowInfo * CShowEngine::ShowDownloading(void)
+	?ShowEngine@CPodcastModel@@QAEAAVCShowEngine@@XZ @ 149 NONAME ; class CShowEngine & CPodcastModel::ShowEngine(void)
+	?ShowSize@CShowInfo@@QBEIXZ @ 150 NONAME ; unsigned int CShowInfo::ShowSize(void) const
+	?ShowType@CShowInfo@@QBE?AW4TShowType@@XZ @ 151 NONAME ; enum TShowType CShowInfo::ShowType(void) const
+	?SoundEngine@CPodcastModel@@QAEAAVCSoundEngine@@XZ @ 152 NONAME ; class CSoundEngine & CPodcastModel::SoundEngine(void)
+	?SpecificIAP@CSettingsEngine@@QAEHXZ @ 153 NONAME ; int CSettingsEngine::SpecificIAP(void)
+	?State@CSoundEngine@@QAE?AW4TSoundEngineState@@XZ @ 154 NONAME ; enum TSoundEngineState CSoundEngine::State(void)
+	?Stop@CSoundEngine@@QAEXH@Z @ 155 NONAME ; void CSoundEngine::Stop(int)
+	?SuspendDownloads@CShowEngine@@QAEXXZ @ 156 NONAME ; void CShowEngine::SuspendDownloads(void)
+	?Title@CFeedInfo@@QBEABVTDesC16@@XZ @ 157 NONAME ; class TDesC16 const & CFeedInfo::Title(void) const
+	?Title@CShowInfo@@QBEABVTDesC16@@XZ @ 158 NONAME ; class TDesC16 const & CShowInfo::Title(void) const
+	?TrackNo@CShowInfo@@QBEIXZ @ 159 NONAME ; unsigned int CShowInfo::TrackNo(void) const
+	?Uid@CFeedInfo@@QBEIXZ @ 160 NONAME ; unsigned int CFeedInfo::Uid(void) const
+	?Uid@CShowInfo@@QBEIXZ @ 161 NONAME ; unsigned int CShowInfo::Uid(void) const
+	?UpdateAllFeedsL@CFeedEngine@@QAEXH@Z @ 162 NONAME ; void CFeedEngine::UpdateAllFeedsL(int)
+	?UpdateAutomatically@CSettingsEngine@@QAE?AW4TAutoUpdateSetting@@XZ @ 163 NONAME ; enum TAutoUpdateSetting CSettingsEngine::UpdateAutomatically(void)
+	?UpdateFeed@CFeedEngine@@QAEXPAVCFeedInfo@@@Z @ 164 NONAME ; void CFeedEngine::UpdateFeed(class CFeedInfo *)
+	?UpdateFeedInterval@CSettingsEngine@@QAEHXZ @ 165 NONAME ; int CSettingsEngine::UpdateFeedInterval(void)
+	?UpdateFeedL@CFeedEngine@@QAEHI@Z @ 166 NONAME ; int CFeedEngine::UpdateFeedL(unsigned int)
+	?UpdateFeedTime@CSettingsEngine@@QAE?AVTTime@@XZ @ 167 NONAME ; class TTime CSettingsEngine::UpdateFeedTime(void)
+	?UpdateIAPListL@CPodcastModel@@QAEXXZ @ 168 NONAME ; void CPodcastModel::UpdateIAPListL(void)
+	?UpdateSNAPListL@CPodcastModel@@QAEXXZ @ 169 NONAME ; void CPodcastModel::UpdateSNAPListL(void)
+	?UpdateShow@CShowEngine@@QAEXAAVCShowInfo@@@Z @ 170 NONAME ; void CShowEngine::UpdateShow(class CShowInfo &)
+	?Url@CFeedInfo@@QBEABVTDesC16@@XZ @ 171 NONAME ; class TDesC16 const & CFeedInfo::Url(void) const
+	?NewL@CImageHandler@@SAPAV1@AAVRFs@@AAVCPodcastModel@@@Z @ 172 NONAME ; class CImageHandler * CImageHandler::NewL(class RFs &, class CPodcastModel &)
+	?NewLC@CImageHandler@@SAPAV1@AAVRFs@@AAVCPodcastModel@@@Z @ 173 NONAME ; class CImageHandler * CImageHandler::NewLC(class RFs &, class CPodcastModel &)
--- a/engine/group/engine.mmp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/group/engine.mmp	Wed Mar 31 16:09:11 2010 +0100
@@ -74,3 +74,5 @@
 LIBRARY fbscli.lib
 LIBRARY imageconversion.lib 
 LIBRARY bitmaptransforms.lib 
+LIBRARY eikcore.lib 
+//staticlibrary sqlite_podcatcher.lib
\ No newline at end of file
--- a/engine/inc/ConnectionEngine.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/inc/ConnectionEngine.h	Wed Mar 31 16:09:11 2010 +0100
@@ -67,7 +67,7 @@
 	void StartL(TConnectionType aConnectionType);
 	RConnection& Connection();
 	TConnectionState ConnectionState();
-	void AddObserver(MConnectionObserver* aObserver);
+	IMPORT_C void AddObserver(MConnectionObserver* aObserver);
 	RSocketServ& SockServ();
 private: // Methods
 	CConnectionEngine(CPodcastModel& aPodcastModel);
--- a/engine/inc/FeedEngine.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/inc/FeedEngine.h	Wed Mar 31 16:09:11 2010 +0100
@@ -95,6 +95,7 @@
 	IMPORT_C const RFeedInfoArray& GetSearchResults();
 
 	IMPORT_C void OpmlParsingCompleteL(TInt aError, TUint aNumFeedsAdded);
+	void NotifyFeedUpdateComplete(TInt aFeedUid, TInt aError);
 protected:
 	
 	static TInt CompareFeedsByTitle(const CFeedInfo &a, const CFeedInfo &b);
@@ -117,7 +118,6 @@
 	void GetFeedImageL(CFeedInfo *aFeedInfo);
 	
 	void UpdateNextFeedL();
-	void NotifyFeedUpdateCompleteL(TInt aError);
 	void NotifyOpmlParsingCompleteL(TInt aError, TUint aNumFeedsAdded);
 
 	
--- a/engine/inc/FeedInfo.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/inc/FeedInfo.h	Wed Mar 31 16:09:11 2010 +0100
@@ -71,12 +71,12 @@
 		IMPORT_C CFbsBitmap* FeedIcon() const;
 		IMPORT_C void SetFeedIcon(CFbsBitmap* aBitmapToClone);
 		
-		IMPORT_C TInt FeedIconIndex() const;
-		IMPORT_C void SetFeedIconIndex(TInt aIndex);
+	//	IMPORT_C TInt FeedIconIndex() const;
+//		IMPORT_C void SetFeedIconIndex(TInt aIndex);
 	private:
 		CFeedInfo();
 		void ConstructL();
-		void ImageOperationCompleteL(TInt aError, TUint aHandle);
+		void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel);
 	private:
 		HBufC* iUrl;
 		HBufC* iTitle;
@@ -90,7 +90,6 @@
 		TBool iCustomTitle;
 		TInt   iLastError;
 		CFbsBitmap* iFeedIcon;	
-		TInt iFeedIconIndex;
 	};
 
 typedef RPointerArray<CFeedInfo> RFeedInfoArray;
--- a/engine/inc/ImageHandler.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/inc/ImageHandler.h	Wed Mar 31 16:09:11 2010 +0100
@@ -22,6 +22,7 @@
 #include <f32file.h>
 #include <ImageConversion.h>
 #include <BitmapTransforms.h>
+class CPodcastModel;
 
 /**
  * Listener interface that can be used to listen for image loading operation
@@ -42,8 +43,10 @@
     * Called by CImageHandler when an image has been loaded.
     * @param aError Error code given by the CImageHandler or 0 (zero) if the
     *   image was loaded successfully.
+    * @param image handle
+    * @param reference to podcast model
     */
-    virtual void ImageOperationCompleteL(TInt aError, TUint aHandle) = 0;
+    virtual void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel) = 0;
     };
 
 // ============================================================================
@@ -65,27 +68,22 @@
     public: // Constructors and destructor
        /**
         * Factory method that constructs a CImageHandler by using the NewLC method
-        * and then cleans the cleanup stack.
-        * @param aBitmap Bitmap where the image data is loaded to.
-        * @param aScaledBitmap Bitmap where the scaled image data is loaded to.
+        * and then cleans the cleanup stack.               
         * @param aFs File server reference that is used to load the image data.
-        * @param aCallback Listener interface implementation that is notified
+        * @param Reference to podcast model
         *  when an image has been loaded.
         * @return pointer to created CImageHandler-object
         */
-        IMPORT_C static CImageHandler* NewL(RFs& aFs);
+        IMPORT_C static CImageHandler* NewL(RFs& aFs,CPodcastModel& aPodcastModel);
 
        /**
         * Factory method that constructs a CImageHandler and leaves it to the
         * cleanup stack.
-        * @param aBitmap Bitmap where the image data is loaded to.
-        * @param aScaledBitmap Bitmap where the scaled image data is loaded to.
         * @param aFs File server reference that is used to load the image data.
-        * @param aCallback Listener interface implementation that is notified
-        *  when an image has been loaded.
+        * @param Reference to podcast model
         * @return pointer to created CImageHandler-object
         */
-        IMPORT_C static CImageHandler* NewLC(RFs& aFs);
+        IMPORT_C static CImageHandler* NewLC(RFs& aFs,CPodcastModel& aPodcastModel);
        /**
         * Desctructor. Destroys the CImageDecoder used by the image handler.
         */
@@ -142,13 +140,12 @@
     protected:
         /**
          * C++ default constructor. Just stores the given parameters to
-         * corresponding attributes.      
-         * @param aScaledBitmap Bitmap where the scaled image data is loaded to.
+         * corresponding attributes.              
          * @param aFs File server reference that is used to load the image data.
-         * @param aCallback Listener interface implementation that is notified
+         * @param Reference to podcast model
          *  when an image has been loaded.
          */
-        CImageHandler(RFs& aFs);
+        CImageHandler(RFs& aFs, CPodcastModel& aPodcastModel);
         /**
          * 2nd phase constructor. Adds this object to the active scheduler.
          */
@@ -182,6 +179,9 @@
         
         /* Handle passed back to caller */
         TUint iHandle;
+        
+        /** Reference to the podcast model used for callbacks to be able to notify*/
+        CPodcastModel& iPodcastModel;
     };
 
 #endif
--- a/engine/inc/PodcastModel.h	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/inc/PodcastModel.h	Wed Mar 31 16:09:11 2010 +0100
@@ -100,7 +100,7 @@
 	CPodcastModel();
 	void ConstructL();
 	// From ImageHandler
-	void ImageOperationCompleteL(TInt aError, TUint aHandle);
+	void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel);
 private:	
    CShowInfo* iPlayingPodcast;
    
--- a/engine/src/ConnectionEngine.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/ConnectionEngine.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -261,7 +261,7 @@
 	return iConnectionState;
 	}
 
-void CConnectionEngine::AddObserver(MConnectionObserver* aObserver)
+EXPORT_C void CConnectionEngine::AddObserver(MConnectionObserver* aObserver)
 	{
 	iObserverArray.Append(aObserver);
 	}
--- a/engine/src/FeedEngine.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/FeedEngine.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -517,7 +517,7 @@
 				time.HomeTime();
 				iActiveFeed->SetLastUpdated(time);
 				iActiveFeed->SetLastError(aError);
-				NotifyFeedUpdateCompleteL(aError);
+				NotifyFeedUpdateComplete(iActiveFeed->Uid(), aError);
 				}
 			break;
 		case EUpdatingFeed: 
@@ -587,8 +587,8 @@
 				}break;
 			}
 		
-			NotifyFeedUpdateCompleteL(aError);
-	
+			NotifyFeedUpdateComplete(iActiveFeed->Uid(), aError);
+
 			// we will wait until the image has been downloaded to start the next feed update.
 			if (iClientState == EIdle)
 				{
@@ -599,8 +599,16 @@
 			{
 			// change client state to not updating
 			iClientState = EIdle;
-	
-			NotifyFeedUpdateCompleteL(aError);
+			if(aError == KErrNone)
+				{
+				if( BaflUtils::FileExists(CEikonEnv::Static()->FsSession(), iActiveFeed->ImageFileName() ))
+					{
+						// If this fails, no reason to worry
+					TRAP_IGNORE(iPodcastModel.ImageHandler().LoadFileAndScaleL(iActiveFeed->FeedIcon(), iActiveFeed->ImageFileName(), TSize(64,56), *iActiveFeed, iActiveFeed->Uid()));
+					}				
+				}
+			
+			NotifyFeedUpdateComplete(iActiveFeed->Uid(), aError);
 			UpdateNextFeedL();
 			}break;
 		case ESearching: 
@@ -629,13 +637,12 @@
 	DP("CFeedEngine::CompleteL END");
 	}
 
-void CFeedEngine::NotifyFeedUpdateCompleteL(TInt aError)
+void CFeedEngine::NotifyFeedUpdateComplete(TInt aFeedUid, TInt aError)
 	{
-	DP("CFeedEngine::NotifyFeedUpdateComplete");
-	DBUpdateFeedL(*iActiveFeed);
+	DP("CFeedEngine::NotifyFeedUpdateComplete");	
 	for (TInt i=0;i<iObservers.Count();i++) 
 		{
-		TRAP_IGNORE(iObservers[i]->FeedDownloadFinishedL(iAutoUpdatedInitiator?MFeedEngineObserver::EFeedAutoUpdate:MFeedEngineObserver::EFeedManualUpdate, iActiveFeed->Uid(), aError));
+		TRAP_IGNORE(iObservers[i]->FeedDownloadFinishedL(MFeedEngineObserver::EFeedAutoUpdate, aFeedUid, aError));
 		}
 	}
 
--- a/engine/src/FeedInfo.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/FeedInfo.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -17,8 +17,13 @@
 */
 
 #include "FeedInfo.h"
+#include "FeedEngine.h"
+#include "PodcastModel.h"
 #include <e32hashtab.h>
 #include <fbs.h>
+#include <bautils.h>
+#include <eikenv.h>
+_LIT(KMbmExtension, ".mbm");
 
 EXPORT_C CFeedInfo* CFeedInfo::NewL()
 	{
@@ -47,22 +52,21 @@
 	copy->SetLinkL(Link());
 	copy->SetBuildDate(BuildDate());
 	copy->SetLastUpdated(LastUpdated());
+	copy->iFeedIcon->Duplicate(iFeedIcon->Handle());
 	copy->SetImageFileNameL(ImageFileName());
-	copy->iFeedIcon->Duplicate(iFeedIcon->Handle());
 	if(CustomTitle())
 		{
 		copy->SetCustomTitle();
 		}
 	
 	copy->SetLastError(LastError());
-	copy->SetFeedIconIndex(FeedIconIndex());
+
 	CleanupStack::Pop(copy);
 	return copy;
 	}
 CFeedInfo::CFeedInfo()
 	{
 	iCustomTitle = EFalse;
-	iFeedIconIndex = -1;
 	}
 
 EXPORT_C CFeedInfo::~CFeedInfo()
@@ -191,13 +195,23 @@
 
 EXPORT_C void CFeedInfo::SetImageFileNameL(const TDesC& aFileName)
 	{
+	TFileName cacheFileName;
+	
 	if (iImageFileName)
 		{
 		delete iImageFileName;
 		iImageFileName = NULL;
 		}
-	iImageFileName = aFileName.AllocL();	
-	}
+	iImageFileName = aFileName.AllocL();
+	TParsePtrC parser(*iImageFileName);
+	cacheFileName = parser.DriveAndPath();
+	cacheFileName.Append(parser.Name());
+	cacheFileName.Append(KMbmExtension());
+	if( iFeedIcon->SizeInPixels() == TSize(0,0) && BaflUtils::FileExists(CEikonEnv::Static()->FsSession(), cacheFileName) )
+		{
+		iFeedIcon = CEikonEnv::Static()->CreateBitmapL(cacheFileName, 0);
+		}	
+	} 
 
 EXPORT_C TBool CFeedInfo::CustomTitle() const
 	{
@@ -229,17 +243,17 @@
 	iFeedIcon->Duplicate(aBitmapToClone->Handle());
 	}
 
-void CFeedInfo::ImageOperationCompleteL(TInt /*aError*/, TUint /*aHandle*/)
-	{
+void CFeedInfo::ImageOperationCompleteL(TInt aError, TUint /*aHandle*/, CPodcastModel& aPodcastModel)
+	{		
+	if (aError == KErrNone && iImageFileName && iFeedIcon)
+		{
+		TFileName cacheFileName;
 	
+		TParsePtrC parser(*iImageFileName);
+		cacheFileName = parser.DriveAndPath();
+		cacheFileName.Append(parser.Name());
+		cacheFileName.Append(KMbmExtension());		
+		iFeedIcon->Save(cacheFileName);					
+		aPodcastModel.FeedEngine().NotifyFeedUpdateComplete(this->iUid, KErrNone);
+		}
 	}
-
-EXPORT_C TInt CFeedInfo::FeedIconIndex() const
-	{
-	return iFeedIconIndex;
-	}
-
-EXPORT_C void CFeedInfo::SetFeedIconIndex(TInt aIndex)
-	{
-	iFeedIconIndex = aIndex;
-	}
--- a/engine/src/ImageHandler.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/ImageHandler.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -31,12 +31,13 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CImageHandler::CImageHandler( RFs& aFs )
+CImageHandler::CImageHandler( RFs& aFs, CPodcastModel& aPodcastModel )
     : CActive(CActive::EPriorityStandard)
     , iDecoder(NULL)
     , iScaler(NULL)
     , iFs(aFs)
     , iSize(0,0)
+    , iPodcastModel(aPodcastModel)
     {
     }
 
@@ -56,9 +57,9 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CImageHandler* CImageHandler::NewL(RFs& aFs)
+EXPORT_C CImageHandler* CImageHandler::NewL(RFs& aFs, CPodcastModel& aPodcastModel)
     {
-    CImageHandler* self = NewLC(aFs);
+    CImageHandler* self = NewLC(aFs, aPodcastModel);
     CleanupStack::Pop();
     return self;
     }
@@ -68,9 +69,9 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CImageHandler* CImageHandler::NewLC(RFs& aFs)
+EXPORT_C CImageHandler* CImageHandler::NewLC(RFs& aFs, CPodcastModel& aPodcastModel)
     {
-    CImageHandler* self = new (ELeave) CImageHandler(aFs);
+    CImageHandler* self = new (ELeave) CImageHandler(aFs, aPodcastModel);
     CleanupStack::PushL( self );
     self->ConstructL();
 
@@ -202,7 +203,7 @@
     else
         {
         // Invoke callback.
-        iCallback->ImageOperationCompleteL(iStatus.Int(), iHandle);        
+        iCallback->ImageOperationCompleteL(iStatus.Int(), iHandle, iPodcastModel);        
         if(iCallbackQue.Count())
         	{
         	TInt loaderror = KErrNotFound;
--- a/engine/src/PodcastModel.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/PodcastModel.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -76,7 +76,7 @@
 	iIapNameArray = new (ELeave) CDesCArrayFlat(KDefaultGranu);
 	iSNAPNameArray = new (ELeave) CDesCArrayFlat(KDefaultGranu);
 	iCmManager.OpenL();
-	iImageHandler = CImageHandler::NewL(FsSession());
+	iImageHandler = CImageHandler::NewL(FsSession(), *this);
 	
 	UpdateIAPListL();
 	UpdateSNAPListL();
@@ -242,13 +242,15 @@
 	DP("CPodcastModel::DB BEGIN");
 	if (iDB == NULL) {		
 		TFileName dbFileName;
-		iFsSession.PrivatePath(dbFileName);
+		dbFileName.Copy(iSettingsEngine->PrivatePath());
+		//iFsSession.PrivatePath(dbFileName);
 		dbFileName.Append(KDBFileName);
 		DP1("DB is at %S", &dbFileName);
 
 		if (!BaflUtils::FileExists(iFsSession, dbFileName)) {
 			TFileName dbTemplate;
-			iFsSession.PrivatePath(dbTemplate);
+			dbTemplate.Copy(iSettingsEngine->PrivatePath());
+			//iFsSession.PrivatePath(dbTemplate);
 			dbTemplate.Append(KDBTemplateFileName);
 			DP1("No DB found, copying template from %S", &dbTemplate);
 			BaflUtils::CopyFile(iFsSession, dbTemplate,dbFileName);
@@ -398,7 +400,7 @@
 	}
 
 
-void CPodcastModel::ImageOperationCompleteL(TInt /*aError*/, TUint /*aHandle*/)
+void CPodcastModel::ImageOperationCompleteL(TInt /*aError*/, TUint /*aHandle*/, CPodcastModel& /*aPodcastModel*/)
 	{
 	
 	}
--- a/engine/src/SettingsEngine.cpp	Wed Mar 31 15:36:43 2010 +0100
+++ b/engine/src/SettingsEngine.cpp	Wed Mar 31 16:09:11 2010 +0100
@@ -222,7 +222,11 @@
 TFileName CSettingsEngine::PrivatePath()
 	{
 	TFileName privatePath;
+#ifdef __WINS__
 	iPodcastModel.FsSession().PrivatePath(privatePath);
+#else	
+	privatePath = _L("e:\\pod\\");
+#endif
 	TRAP_IGNORE(BaflUtils::EnsurePathExistsL(iPodcastModel.FsSession(), privatePath));
 	return privatePath;
 	}
--- a/group/bld.inf	Wed Mar 31 15:36:43 2010 +0100
+++ b/group/bld.inf	Wed Mar 31 16:09:11 2010 +0100
@@ -22,9 +22,9 @@
 
 PRJ_MMPFILES
 
-#ifdef SQLITE_INCLUDED
+//#ifdef SQLITE_INCLUDED
 ..\engine\sqlite\group\sqlite.mmp
-#endif
+//#endif
 
 PRJ_MMPFILES
 ..\engine\group\engine.mmp