browserutilities/feedsengine/FeedsUI/FeedsApp/src/FeedsDocument.cpp
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/feedsengine/FeedsUI/FeedsApp/src/FeedsDocument.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2005 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:  Feeds application's document instance.
+*
+*/
+
+
+#include <AiwGenericParam.h>
+#include <StringLoader.h>
+
+#include <FeedsApp.rsg>
+
+#include "FeedsAppUi.h"
+#include "FeedsDocument.h"
+#include "LeakTracker.h"
+#include "Logger.h"
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::CFeedsDocument()
+//
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CFeedsDocument::CFeedsDocument(CEikApplication& aApp):
+        CAiwGenericParamConsumer(aApp)
+    {
+    LEAK_TRACKER_INCREMENT(CLeakTracker::EFeedsDocument);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::NewL()
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsDocument* CFeedsDocument::NewL(CEikApplication& aApp)
+    {
+    CFeedsDocument* self = NewLC(aApp);
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::NewLC()
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsDocument* CFeedsDocument::NewLC(CEikApplication& aApp)
+    {
+    CFeedsDocument* self = new (ELeave) CFeedsDocument(aApp);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::ConstructL()
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFeedsDocument::ConstructL()
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::~CFeedsDocument()
+//
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsDocument::~CFeedsDocument()
+    {
+    LEAK_TRACKER_DECREMENT(CLeakTracker::EFeedsDocument);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::CreateAppUiL()
+//
+// Create the application user interface, and return a pointer to it
+// -----------------------------------------------------------------------------
+//
+CEikAppUi* CFeedsDocument::CreateAppUiL()
+    {
+    return(static_cast<CEikAppUi*>(new (ELeave) CFeedsAppUi));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsDocument::OpenFileL()
+//
+// Opens a given file from the app-framework.
+// -----------------------------------------------------------------------------
+//
+void CFeedsDocument::OpenFileL(CFileStore*& /*aFileStore*/, RFile& /*aFile*/)
+    {
+ #if 0       
+    const CAiwGenericParamList* params = GetInputParameters();
+    const TAiwGenericParam*     param;
+    TPtrC                       url(KNullDesC);
+    TPtrC                       contentType(KNullDesC);
+    TPtrC                       charSet(KNullDesC);
+    TBool                       urlSet = EFalse;
+//    TInt                        size;
+    HBufC8*                     buffer = NULL;    
+    
+    // Get the url from the parms.
+    if (params)
+        {
+        TInt index;
+
+        // Source URL.
+        index = 0;
+        param = params->FindFirst(index, EGenericParamURL, EVariantTypeDesC);
+        if (param != NULL)
+            {
+            url.Set(param->Value().AsDes());
+            urlSet = ETrue;
+            }
+
+        // Content-type.
+        index = 0;
+        param = params->FindFirst(index, EGenericParamMIMEType, EVariantTypeDesC);
+        if (param != NULL)
+            {
+            contentType.Set(param->Value().AsDes());
+            }
+
+        // Charset.
+        index = 0;
+        param = params->FindFirst(index, EGenericParamCharSet, EVariantTypeDesC);
+        if (param != NULL)
+            {
+            charSet.Set(param->Value().AsDes());
+            }
+        }
+
+    // Read the buffer from the file.
+    User::LeaveIfError(aFile.Size(size));
+    buffer = HBufC8::NewLC(size);
+    TPtr8 bufferPtr(buffer->Des());
+    
+    User::LeaveIfError(aFile.Read(bufferPtr, size));
+
+    // If the url was set then subscribe to the Feed.
+    if (urlSet)
+        {
+        SubscribeToL(url, contentType, charSet, *buffer);
+        }
+            
+    // In any case, show the feed using the downloaded buffer.
+    iUpdateTopicViewTask = CUpdateTopicViewTask::NewL(buffer, *this);
+    iUpdateTopicViewTask->StartTaskL();
+    iUpdateTopicViewTask->EnableAutoDeleteL();
+
+    CleanupStack::Pop(buffer);
+#endif
+    }
+    
+#if 0    
+// -----------------------------------------------------------------------------
+// CFeedDocument::SubscribeToL
+// 
+// Subscribes to a feed, provided via OpenFileL (from an external app).
+// -----------------------------------------------------------------------------
+//
+void CFeedsDocument::SubscribeToL(const TDesC& aUrl, const TDesC& aContentType, 
+        const TDesC& aCharSet, HBufC8& aFeedBuffer)
+    {   
+    TPtr8          bufferPtr(aFeedBuffer.Des());
+    CFeedHandler*  feedHandler = NULL;
+    CFeed*         feed = NULL;
+    const TDesC*   feedName = NULL;
+    HBufC*         noName = NULL;
+
+    // TODO: This may also be used with an empty aFile -> via an html link element.
+
+    // Parse the buffer.
+    if (bufferPtr.Length() > 0)
+        {
+        // TODO: could avoid this if we waited until the topic-view is updated.
+        feedHandler = (CFeedHandler*) Singletons::Get(Singletons::EFeedHandler);
+        
+        TRAPD(err, feed = feedHandler->ParseL(&bufferPtr, aContentType, aCharSet));
+        if (err == KErrNone)
+            {
+            CleanupStack::PushL(feed);
+            }
+        }
+    
+    // If possible use the feed's name.
+    if (feed != NULL)
+        {
+        feedName = feed->Get(CFeed::ETitle);
+        }
+       
+    // Otherwise use the default name.        
+    if (feedName == NULL)
+        {
+        noName = StringLoader::LoadLC(R_FEEDS_NEW_FEED_ITEM);
+        feedName = *noName;
+        }
+    
+    // Subscribe to the feed. 
+    SubscribeToL(*feedName, aUrl);
+    
+    // Cleanup
+    if (noName != NULL)
+        {
+        CleanupStack::PopAndDestroy(noName);
+        }
+        
+    if (feed != NULL)
+        {
+        CleanupStack::PopAndDestroy(feed);        
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedDocument::SubscribeToL
+// 
+// Subscribes to a feed.
+// -----------------------------------------------------------------------------
+//
+void CFeedsDocument::SubscribeToL(const TDesC& aName, const TDesC& aUrl)
+    {   
+    CFolderView*  folderView = NULL;
+    
+    // Subscribe to the feed. 
+    folderView = (CFolderView*) Singletons::Get(Singletons::EFolderView);    
+    folderView->ImportFeedL(aName, aUrl);
+    }
+#endif