application/src/PodcastFeedViewUpdater.cpp
changeset 2 29cda98b007e
child 81 27f6f5827e5d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/application/src/PodcastFeedViewUpdater.cpp	Thu Feb 25 14:29:19 2010 +0000
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 Anders Fridlund, EmbedDev AB
+*
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* EmbedDev AB - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "PodcastFeedViewUpdater.h"
+#include "PodcastFeedView.h"
+
+CPodcastFeedViewUpdater* CPodcastFeedViewUpdater::NewL(CPodcastFeedView& aPodcastFeedView)
+	{
+	CPodcastFeedViewUpdater* self = new (ELeave) CPodcastFeedViewUpdater(aPodcastFeedView);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CPodcastFeedViewUpdater::StartUpdate(TInt aNbrItems)
+	{
+	// If there is an update in progress, stop it.
+	StopUpdate();
+	// Reset values to start an update from the beginning
+	iNbrItems = aNbrItems;
+	iNextItem = 0;
+	// Queue this active object to be run once
+	Call();
+	}
+
+void CPodcastFeedViewUpdater::StopUpdate()
+	{
+	// Cancel any outstanding request
+	Cancel();
+	// Reset values to zero. Not really necessary, but made for robustness
+	iNbrItems = 0;
+	iNextItem = 0;
+	}
+
+CPodcastFeedViewUpdater::~CPodcastFeedViewUpdater()
+	{
+	StopUpdate();
+	Deque();
+	}
+        
+CPodcastFeedViewUpdater::CPodcastFeedViewUpdater(CPodcastFeedView& aPodcastFeedView)
+	: CAsyncOneShot(EPriorityNormal), iPodcastFeedView(aPodcastFeedView)
+	{
+	}
+
+void CPodcastFeedViewUpdater::ConstructL()
+	{
+	}
+
+void CPodcastFeedViewUpdater::RunL()
+	{
+	_LIT(KPanicCategory, "CPodcastFeedViewUpdater::RunL");
+	__ASSERT_DEBUG(iNextItem < iNbrItems, User::Panic(KPanicCategory, 0));
+	iPodcastFeedView.UpdateItemL(iNextItem++);
+	if (iNextItem < iNbrItems)
+		{
+		Call();
+		}
+	else
+		{
+		StopUpdate();
+		}
+	}
+
+TInt CPodcastFeedViewUpdater::RunError(TInt aError)
+	{
+	return aError;
+	}
+