engine/src/ShowEngine.cpp
branchRCL_3
changeset 368 b131f7696342
parent 332 88a24b8b97d8
child 369 c683165bec63
--- a/engine/src/ShowEngine.cpp	Sun Nov 14 13:05:37 2010 +0000
+++ b/engine/src/ShowEngine.cpp	Tue Nov 16 10:26:34 2010 +0000
@@ -43,6 +43,7 @@
 
 EXPORT_C CShowEngine::~CShowEngine()
 	{	
+	DP("CShowEngine::~CShowEngine BEGIN");
 	delete iShowClient;
 	iObservers.Close();
 	delete iShowDownloading;
@@ -54,6 +55,7 @@
 		iCollectionHelper->Close();
 		}
 #endif
+	DP("CShowEngine::~CShowEngine END");
 	}
 
 EXPORT_C CShowEngine* CShowEngine::NewL(CPodcastModel& aPodcastModel)
@@ -395,11 +397,12 @@
 	{
 	return DBGetShowByUidL(aShowUid);
 	}
+
 CShowInfo* CShowEngine::DBGetShowByUidL(TUint aUid)
 	{
 	DP("CShowEngine::DBGetShowByUid");
 	CShowInfo *showInfo = NULL;
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype from shows where uid=%u");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, deletedate from shows where uid=%u");
 	iSqlBuffer.Format(KSqlStatement, aUid);
 
 	sqlite3_stmt *st;
@@ -429,7 +432,7 @@
 	{
 	DP("CShowEngine::DBGetShowByUid");
 	CShowInfo *showInfo = NULL;
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype from shows where filename=\"%S\"");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from shows where filename=\"%S\"");
 	iSqlBuffer.Format(KSqlStatement, &aFileName);
 
 	sqlite3_stmt *st;
@@ -456,7 +459,7 @@
 void CShowEngine::DBGetAllShowsL(RShowInfoArray& aShowArray)
 	{
 	DP("CShowEngine::DBGetAllShows");
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype from shows");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from shows");
 	iSqlBuffer.Format(KSqlStatement);
 
 	sqlite3_stmt *st;
@@ -484,7 +487,7 @@
 void CShowEngine::DBGetAllDownloadsL(RShowInfoArray& aShowArray)
 	{
 	DP("CShowEngine::DBGetAllDownloads");
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, shows.uid, showsize, trackno, pubdate, showtype, lasterror from downloads, shows where downloads.uid=shows.uid");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, shows.uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from downloads, shows where downloads.uid=shows.uid");
 	iSqlBuffer.Format(KSqlStatement);
 
 #ifndef DONT_SORT_SQL
@@ -534,11 +537,52 @@
 		}
 	}
 
+void CShowEngine::DBGetOldShowsL(RShowInfoArray& aShowArray)
+	{
+	DP("CShowEngine::DBGetOldShowsL BEGIN");
+	TTime now;
+	now.HomeTime();
+//	TTimeIntervalYears years(5);
+//	now += years;
+	
+	_LIT(KSqlStatement, "select filename from shows where downloadstate=%d and deletedate < \"%Ld\"");
+	iSqlBuffer.Format(KSqlStatement, EDownloaded, now.Int64());
+
+	sqlite3_stmt *st;
+
+	int rc = sqlite3_prepare16_v2(&iDB, (const void*) iSqlBuffer.PtrZ(), -1,
+			&st, (const void**) NULL);
+
+	if (rc == SQLITE_OK)
+		{
+		rc = sqlite3_step(st);
+		Cleanup_sqlite3_finalize_PushL(st);
+		while (rc == SQLITE_ROW)
+			{
+			CShowInfo* showInfo = CShowInfo::NewLC();
+
+			const void *filez = sqlite3_column_text16(st, 0);
+			TPtrC16 file((const TUint16*) filez);
+			showInfo->SetFileNameL(file);
+
+			aShowArray.Append(showInfo);
+			CleanupStack::Pop(showInfo);
+			rc = sqlite3_step(st);
+			}
+		CleanupStack::PopAndDestroy();//st
+		}
+	else
+		{
+		User::Leave(KErrCorrupt);
+		}
+	DP("CShowEngine::DBGetOldShowsL END");
+	}
+
 CShowInfo* CShowEngine::DBGetNextDownloadL()
 	{
 	DP("CShowEngine::DBGetNextDownload");
 	CShowInfo *showInfo = NULL;
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, shows.uid, showsize, trackno, pubdate, showtype, lasterror from downloads, shows where downloads.uid=shows.uid");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, shows.uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from downloads, shows where downloads.uid=shows.uid");
 	iSqlBuffer.Format(KSqlStatement);
 
 #ifdef DONT_SORT_SQL
@@ -581,9 +625,9 @@
 void CShowEngine::DBGetShowsByFeedL(RShowInfoArray& aShowArray, TUint aFeedUid)
 	{
 	DP1("CShowEngine::DBGetShowsByFeed BEGIN, feedUid=%u", aFeedUid);
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror from shows where feeduid=%u");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from shows where feeduid=%u");
 	iSqlBuffer.Format(KSqlStatement, aFeedUid);
-
+	
 #ifndef DONT_SORT_SQL	
 	_LIT(KSqlOrderByDate, " order by pubdate desc");
 	iSqlBuffer.Append(KSqlOrderByDate);
@@ -654,7 +698,7 @@
 void CShowEngine::DBGetDownloadedShowsL(RShowInfoArray& aShowArray)
 	{
 	DP("CShowEngine::DBGetDownloadedShows");
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror from shows where downloadstate=%u");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror, deletedate from shows where downloadstate=%u");
 	iSqlBuffer.Format(KSqlStatement, EDownloaded);
 
 #ifndef DONT_SORT_SQL
@@ -690,7 +734,8 @@
 void CShowEngine::DBGetNewShowsL(RShowInfoArray& aShowArray)
 	{
 	DP("CShowEngine::DBGetNewShows");
-	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror from shows where playstate=%u");
+	_LIT(KSqlStatement, "select url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, lasterror from shows where playstate=%u order by pubdate desc");
+
 	iSqlBuffer.Format(KSqlStatement, ENeverPlayed);
 
 	sqlite3_stmt *st;
@@ -813,6 +858,10 @@
 	
 	TInt lasterror = sqlite3_column_int(st, 14);
 	showInfo->SetLastError(lasterror);
+
+	sqlite3_int64 deletedate = sqlite3_column_int64(st, 15);
+	TTime timedeletedate(deletedate);
+	showInfo->SetDeleteDate(timedeletedate);
 	}
 
 void CShowEngine::DBAddShowL(const CShowInfo& aItem)
@@ -829,13 +878,13 @@
 	descPtr.Copy(aItem.Description());
 	PodcastUtils::SQLEncode(descPtr);
 	
-	_LIT(KSqlStatement, "insert into shows (url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype) values (\"%S\",\"%S\", \"%S\", \"%S\", \"%Lu\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%Lu\", \"%d\")");
+	_LIT(KSqlStatement, "insert into shows (url, title, description, filename, position, playtime, playstate, downloadstate, feeduid, uid, showsize, trackno, pubdate, showtype, deletedate) values (\"%S\",\"%S\", \"%S\", \"%S\", \"%Lu\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%u\", \"%Lu\", \"%d\", \"%Lu\")");
 	
 	iSqlBuffer.Format(KSqlStatement, &aItem.Url(), &titlePtr, &descPtr,
 			&aItem.FileName(), aItem.Position().Int64(), aItem.PlayTime(),
 			aItem.PlayState(), aItem.DownloadState(), aItem.FeedUid(),
 			aItem.Uid(), aItem.ShowSize(), aItem.TrackNo(),
-			aItem.PubDate().Int64(), aItem.ShowType());
+			aItem.PubDate().Int64(), aItem.ShowType(), aItem.DeleteDate().Int64());
 
 	CleanupStack::PopAndDestroy(descBuf);
 	CleanupStack::PopAndDestroy(titleBuf);
@@ -902,12 +951,12 @@
 	descPtr.Copy(aItem.Description());
 	PodcastUtils::SQLEncode(descPtr);
 
-	_LIT(KSqlStatement, "update shows set url=\"%S\", title=\"%S\", description=\"%S\", filename=\"%S\", position=\"%Lu\", playtime=\"%u\", playstate=\"%u\", downloadstate=\"%u\", feeduid=\"%u\", showsize=\"%u\", trackno=\"%u\",pubdate=\"%Lu\", showtype=\"%d\", lasterror=\"%d\" where uid=\"%u\"");
+	_LIT(KSqlStatement, "update shows set url=\"%S\", title=\"%S\", description=\"%S\", filename=\"%S\", position=\"%Lu\", playtime=\"%u\", playstate=\"%u\", downloadstate=\"%u\", feeduid=\"%u\", showsize=\"%u\", trackno=\"%u\",pubdate=\"%Lu\", showtype=\"%d\", lasterror=\"%d\", deletedate=\"%Lu\" where uid=\"%u\"");
 	iSqlBuffer.Format(KSqlStatement, &aItem.Url(), &titlePtr, &descPtr,
 			&aItem.FileName(), aItem.Position().Int64(), aItem.PlayTime(),
 			aItem.PlayState(), aItem.DownloadState(), aItem.FeedUid(),
 			aItem.ShowSize(), aItem.TrackNo(), aItem.PubDate().Int64(),
-			aItem.ShowType(), aItem.LastError(), aItem.Uid());
+			aItem.ShowType(), aItem.LastError(), aItem.DeleteDate().Int64(), aItem.Uid());
 
 	CleanupStack::PopAndDestroy(descBuf);
 	CleanupStack::PopAndDestroy(titleBuf);
@@ -1444,6 +1493,24 @@
 	iDownloadErrors = KMaxDownloadErrors;
 	}
 
+EXPORT_C void CShowEngine::ExpireOldShows()
+	{
+	DP("CShowEngine::ExpireOldShows BEGIN");
+	RShowInfoArray oldShowsArray;
+	
+	TRAPD(err, DBGetOldShowsL(oldShowsArray));
+	
+	if (err == KErrNone)
+		{
+		for (int i=0;i<oldShowsArray.Count();i++)
+			{
+			DP1("    deleting %S", &oldShowsArray[i]->FileName());
+			BaflUtils::DeleteFile(iPodcastModel.FsSession(), oldShowsArray[i]->FileName());
+			}
+		}
+	DP("CShowEngine::ExpireOldShows END");
+	}
+
 EXPORT_C void CShowEngine::CheckForDeletedShows(TUint aFeedUid)
 	{
 	RShowInfoArray shows;
@@ -1598,3 +1665,35 @@
 		User::Leave(KErrCorrupt);
 		}
 	}
+
+EXPORT_C void CShowEngine::PostPlayHandling(CShowInfo *aShow)
+	{
+	DP("CShowEngine::PostPlayHandling BEGIN");
+	if (!aShow)
+		return;
+		
+	aShow->SetPlayState(EPlayed);
+	
+	TAutoDeleteSetting deleteSetting = iPodcastModel.SettingsEngine().DeleteAutomatically();
+	TTimeIntervalDays daysAhead;
+	
+	switch (deleteSetting)
+		{
+		case EAutoDeleteOff:
+			break;
+		case EAutoDeleteAfter1Day:
+			daysAhead = 1;
+			break;
+		case EAutoDeleteAfter7Days:
+			daysAhead = 7;
+			break;
+		}
+	
+	TTime deleteDate;
+	deleteDate.HomeTime();
+	deleteDate += daysAhead;
+	aShow->SetDeleteDate(deleteDate);
+	
+	UpdateShowL(*aShow);
+	DP("CShowEngine::PostPlayHandling END");
+	}