/*
* Copyright (c) 2007-2010 Sebastian Brannstrom, Lars Persson, 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 "ShowInfo.h"
#include <e32hashtab.h>

EXPORT_C CShowInfo* CShowInfo::NewL(TUint aVersion)
	{
	CShowInfo* self = CShowInfo::NewLC(aVersion);
	CleanupStack::Pop(self);
	return self;
	}

EXPORT_C CShowInfo* CShowInfo::NewLC(TUint /*aVersion*/) {
	CShowInfo* self = new (ELeave) CShowInfo();
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}

void CShowInfo::ConstructL()
	{
	iDownloadState = ENotDownloaded;
	iDelete = EFalse;
	iShowType = EAudioPodcast;
	}

CShowInfo::CShowInfo()
	{
	iTrackNo = KMaxTUint; 
	}

EXPORT_C CShowInfo::~CShowInfo()
	{
	delete iTitle;
	delete iUrl;
	delete iDescription;
	delete iFileName;
	}

EXPORT_C const TDesC& CShowInfo::Title() const
	{
	return iTitle ? *iTitle : KNullDesC();
	}

EXPORT_C void CShowInfo::SetTitleL(const TDesC &aTitle)
	{
	if (iTitle)
		{
		delete iTitle;
		iTitle = NULL;
		}
	iTitle = aTitle.AllocL();
	}

EXPORT_C const TDesC& CShowInfo::Url() const
	{
	return iUrl ? *iUrl : KNullDesC();
	}

EXPORT_C void CShowInfo::SetUrlL(const TDesC &aUrl)
	{
	if (iUrl)
		{
		delete iUrl;
		iUrl = NULL;
		}
	iUrl = aUrl.AllocL();
	iUid = DefaultHash::Des16(Url());
	}

EXPORT_C const TDesC& CShowInfo::Description() const
	{
	return iDescription ? *iDescription : KNullDesC();
	}

EXPORT_C void CShowInfo::SetDescriptionL(const TDesC &aDescription)
	{
	if (iDescription)
		{
		delete iDescription;
		iDescription = NULL;
		}

	iDescription = aDescription.AllocL();
	}

EXPORT_C TTimeIntervalMicroSeconds CShowInfo::Position() const
	{
	return iPosition;
	}

EXPORT_C void CShowInfo::SetPosition(TTimeIntervalMicroSeconds aPosition)
	{
	iPosition = aPosition;
	}

EXPORT_C TUint CShowInfo::PlayTime() const
	{
	return iPlayTime;
	}

EXPORT_C void CShowInfo::SetPlayTime(TUint aPlayTime)
	{
	iPlayTime = aPlayTime;
	}

EXPORT_C TPlayState CShowInfo::PlayState() const
	{
	return iPlayState;
	}

EXPORT_C void CShowInfo::SetPlayState(TPlayState aPlayState)
	{
	iPlayState = aPlayState;
	}

EXPORT_C TDownloadState CShowInfo::DownloadState() const
	{
	return iDownloadState;
	}

EXPORT_C void CShowInfo::SetDownloadState(TDownloadState aDownloadState)
	{
	iDownloadState = aDownloadState;
	}

EXPORT_C TUint CShowInfo::FeedUid() const
	{
	return iFeedUid;
	}

EXPORT_C void CShowInfo::SetFeedUid(TUint aFeedUid)
	{
	iFeedUid = aFeedUid;
	}

EXPORT_C void CShowInfo::SetUid(TUint aUid)
	{
	iUid = aUid;
	}
		
EXPORT_C TUint CShowInfo::Uid() const
	{
	return iUid;
	}

EXPORT_C TUint CShowInfo::ShowSize() const
	{
	return iShowSize;
	}

EXPORT_C void CShowInfo::SetShowSize(TUint aShowSize)
	{
	iShowSize = aShowSize;
	}

EXPORT_C const TTime CShowInfo::PubDate() const
	{
	return iPubDate;
	}

EXPORT_C void CShowInfo::SetPubDate(TTime aPubDate)
	{
	iPubDate = aPubDate;
	}

EXPORT_C const TDesC& CShowInfo::FileName() const
	{
	return iFileName ? *iFileName : KNullDesC();
	}

EXPORT_C void CShowInfo::SetFileNameL(const TDesC &aFileName)
	{
	if (iFileName)
		{
		delete iFileName;
		iFileName = NULL;
		}
	iFileName = aFileName.AllocL();
	}

EXPORT_C void CShowInfo::SetShowType(TShowType aShowType)
	{
	iShowType = aShowType;
	}

EXPORT_C TShowType CShowInfo::ShowType() const
	{
	return iShowType;
	}

EXPORT_C void CShowInfo::SetTrackNo(TUint aTrackId)
	{
	iTrackNo = aTrackId;
	}

EXPORT_C TUint CShowInfo::TrackNo() const
	{
	return iTrackNo;
	}

EXPORT_C CShowInfo::CShowInfo(CShowInfo *aInfo)
	{
	if (iTitle)
		delete iTitle;
	iTitle = aInfo->Title().Alloc();
	
	if(iUrl)
		delete iUrl;
	iUrl = aInfo->Url().Alloc();
	
	if (iDescription)
		delete iDescription;
	iDescription = aInfo->Description().Alloc();
	
	if (iFileName)
		delete iFileName;
	iFileName = aInfo->FileName().Alloc();
	
	iPosition = aInfo->Position();
	iPlayTime = aInfo->PlayTime();
	iPlayState = aInfo->PlayState();
	iDownloadState = aInfo->DownloadState();
	iFeedUid = aInfo->FeedUid();
	iUid = aInfo->Uid();
	iShowSize = aInfo->ShowSize();
	iTrackNo = aInfo->TrackNo();
	iPubDate = aInfo->PubDate();
	iShowType = aInfo->ShowType();
	iLastError = aInfo->LastError();
	}

EXPORT_C void CShowInfo::SetLastError(TInt aLastError)
	{
	iLastError = aLastError;
	}

EXPORT_C TInt CShowInfo::LastError() const
	{
	return iLastError;
	}
