videofeeds/mrssplugin/inc/CIptvRssDownload.h
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/mrssplugin/inc/CIptvRssDownload.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
+* 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:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#ifndef CIPTVRSSDOWNLOAD_H
+#define CIPTVRSSDOWNLOAD_H
+
+#include <e32std.h>
+#include <DownloadMgrClient.h>
+#include "CIptvUtil.h"
+#include "MIptvTimerObserver.h"
+
+class CIptvEpgService;
+class CIptvRssPlugin;
+class CIptvTimer;
+class CIptvXmlContentHandler;
+
+/**
+ *  Download client.
+ *
+ *  Controls feed and thumbnail download.
+ *
+ *  @lib IptvRssPlugin.dll
+ *  @since S60 v3.1
+ */
+class CIptvRssDownload : public CBase,
+                         public MHttpDownloadMgrObserver,
+                         public MIptvTimerObserver
+    {
+
+public:
+
+    static CIptvRssDownload* NewL(
+        CIptvRssPlugin& aPlugin,
+        RFs& aFs,
+        CIptvXmlContentHandler& aXmlContentHandler );
+
+    ~CIptvRssDownload();
+
+public:
+
+    /**
+     * Initialize plugin.
+     */
+    void InitializeL();
+
+    /**
+     * Disconnect download manager session.
+     */
+    void Disconnect();
+
+    /**
+     * When either aETag or aLastUpdated is given, downloads only the headers
+     * from the server. If ETag or aModifiedSince do not match to the headers
+     * from the server the download is finished with
+     * TDownloadStatus::EDownloadNeeded and download will be restarted for
+     * actual content. Otherwise download is completed with
+     * TDownloadStatus::EDownloadNoNeed.
+     * When neither is given, actual download is performed.
+     *
+     * @param aUri          Download Url.
+     * @param aFileName     File to be downloaded
+     * @param aThumbnail    Enable thumbnail image download.
+     * @param aETag         Previous ETag
+     * @param aLastUpdated  Previous update time
+     */
+    void DownloadL(
+        const TDesC8& aUri,
+        const TDesC& aFileName,
+        TBool aThumbnail,
+        const TDesC& aETag = KIptvEmptyDes,
+        const TTime& aLastUpdated = TTime( 0LL ) );
+
+    /**
+     * From MHttpDownloadMgrObserver
+     *
+     * @param aDownload     Handle to download.
+     * @param aEvent        Download event.
+     */
+    void HandleDMgrEventL(
+        RHttpDownload& aDownload,
+        THttpDownloadEvent aEvent );
+
+    /**
+     * Set service information.
+     *
+     * @param aService      Epg service implementation.
+     */
+    void SetServiceInformation( CIptvEpgService* aService );
+
+    /**
+     * Set failed.
+     */
+    void SetFailed();
+
+    /**
+     * No need for current download.
+     */
+    void SkipCurrentDownloadAsyncL();
+
+    /**
+     * Getter for ETag
+     */
+    void GetETag( TDes& aETag ) const;
+
+    /**
+     * Getter for LastModifiedSince
+     */
+    void GetLastModifiedSince( TTime& aLastUpdated ) const;
+
+// From MIptvTimerObserver
+
+    /**
+     * Timer expired.
+     *
+     * @param aTimer        Not used here.
+     */
+    void TimerExpired( CIptvTimer* aTimer );
+
+private:
+
+    CIptvRssDownload(
+        CIptvRssPlugin& aPlugin,
+        RFs& aFs,
+        CIptvXmlContentHandler& aXmlContentHandler );
+
+    void ConstructL();
+
+    /**
+     * Restart previous download.
+     */
+    void DownloadL();
+
+    /**
+     * Set authentication information.
+     *
+     * @param aDownload     Handle to download.
+     */
+    void SetAuthenticationInformationL(
+        RHttpDownload& aDownload ) const;
+
+    /**
+     * Get download error code.
+     *
+     * @param aDownload     Handle to download.
+     * @param aError        Download error code
+     */
+    void GetDownloadErrorCode(
+        RHttpDownload& aDownload,
+        TIptvDlError& aError ) const;
+
+    /**
+     * Delete current download asynchronously.
+     */
+    void DeleteDownloadAsyncL();
+
+    /**
+     * Finish and delete current download.
+     */
+    void DeleteCurrentDownload();
+
+    /**
+     * Change the state of the download.
+     */
+    void ChangeState( TInt aState );
+
+private: // Data members
+
+    /**
+     * Download progress state.
+     */
+    enum TState
+        {
+        ENormal = 0,
+        EPause,
+        EThumbnail,
+        EWaiting,
+        EFinished,
+        ETimeout,
+        ENoDiskSpace
+        };
+
+    /**
+     * Download manager.
+     */
+    RHttpDownloadMgr iDownloadManager;
+
+    /**
+     * Epg service implementation.
+     * Not own.
+     */
+    CIptvEpgService* iService;
+
+    /**
+     * Pluging having started us.
+     */
+    CIptvRssPlugin& iPlugin;
+
+    /**
+     * Service username.
+     */
+    TBuf8<KIptvEpgServiceUserNameMaxLength> iUserName;
+
+    /**
+     * Service password.
+     */
+    TBuf8<KIptvEpgServicePasswordMaxLength> iPassword;
+
+    /**
+     * Thumbnail image download allowed.
+     */
+    TBool iThumbnail;
+
+    /**
+     * Identifies download.
+     */
+    TInt32 iDownloadId;
+
+    /**
+     * DownloadId above contains valid and existing value.
+     */
+    TBool iDownloadIdValid;
+
+    /**
+     * Pointer to CIptvTimer.
+     * Own.
+     */
+    CIptvTimer* iTimer;
+
+    /**
+     * Set when download manager is successfully connected.
+     */
+    TBool iConnected;
+
+    /**
+     * Download progress state.
+     */
+    TInt iState;
+
+    /**
+     * Download expires after no progress.
+     */
+    TInt iPauseCounter;
+
+    /**
+     * File server session.
+     */
+    RFs& iFs;
+
+    /**
+     * XML-parser callback class.
+     * Not own.
+     */
+    CIptvXmlContentHandler& iXmlContentHandler;
+
+    /**
+     * Pointer to CIptvTimer. Deletes download.
+     * Own.
+     */
+    CIptvTimer* iDlDeleteTimer;
+
+    /**
+     * Download error code is stored here to keep it in memory
+     * while iDlDeleteTimer is running.
+     */
+    TIptvDlError iDlError;
+
+    /**
+     * Download status code is stored here to keep it in memory
+     * while iDlDeleteTimer is running. See TDownloadStatus from CIptvRssPlugin.h
+     * for values.
+     */
+    TInt iDlStatus;
+
+    /**
+     * ETag
+     */
+    HBufC* iETag;
+
+    /**
+     * Last update of this download.
+     */
+    TTime iLastUpdated;
+
+    /**
+     * Header info is requested and we are waiting for it.
+     */
+    TBool iWaitingContentTypeCheck;
+
+    /**
+     * Header was not available, dont do further header check.
+     */
+    TBool iDisableLastModifiedCheck;
+
+    /**
+     * Header successfully downloaded and actual download is needed.
+     */
+    TBool iRestartDownload;
+
+    /**
+     * File name for dowload retained for restart.
+     * Own.
+     */
+    HBufC* iFileName;
+
+    /**
+     * Uri for dowload retained for restart.
+     */
+    HBufC8* iUri;
+
+    };
+
+#endif // CIPTVRSSDOWNLOAD_H