browserutilities/feedsengine/FeedsServer/Reconizer/src/FeedsRec.cpp
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/feedsengine/FeedsServer/Reconizer/src/FeedsRec.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,205 @@
+/*
+* 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:  Recognizer for the bowser supported MIME types.
+*
+*/
+
+
+#include "FeedsRec.h"
+
+#include <ImplementationProxy.h>
+
+
+// Constants
+_LIT8(KMimeTypeRss,   "application/rss+xml");
+//_LIT8(KMimeTypeAtom,  "application/atom+xml");
+_LIT8(KMimeTypeXml1,  "application/xml");
+_LIT8(KMimeTypeXml2,  "text/xml");
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::CFeedsRec
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsRec::CFeedsRec()
+        :CApaDataRecognizerType(KUidMimeFeedsRec, CApaDataRecognizerType::EHigh)
+	{
+	iCountDataTypes = KSupportedMimetypes;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::PreferredBufSize
+//
+// Returns the preferred buffer size.
+// -----------------------------------------------------------------------------
+//
+TUint CFeedsRec::PreferredBufSize()
+	{
+	return 0x100;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::SupportedDataTypeL
+//
+// Returns the index'ed supported mime-type.
+// -----------------------------------------------------------------------------
+//
+TDataType CFeedsRec::SupportedDataTypeL(TInt aIndex) const
+	{
+	__ASSERT_DEBUG((aIndex >= 0) && (aIndex < KSupportedMimetypes), User::Invariant());
+
+	switch (aIndex)
+		{
+        case 0:
+            return TDataType(KMimeTypeRss);
+
+        default:
+            return TDataType();
+        }
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::DoRecognizeL
+//
+// Given the buffer it examines the buffer and sets the inherited
+// member variable, iConfidence.
+// -----------------------------------------------------------------------------
+//
+void CFeedsRec::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
+    {
+    TInt  confidence;
+
+    iConfidence = ENotRecognized;
+
+    // Examine the buffer for RSS.
+    if ((confidence = RecognizeRss(aName, aBuffer)) != ENotRecognized)
+        {
+        iDataType = TDataType(KMimeTypeRss);
+        iConfidence = confidence;
+        }
+
+    // Examine the buffer for Atom.
+    // TODO: in 3.1
+
+    // Examine the buffer for Opml 1.0.
+    // TODO: in 3.1
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::DoRecognizeRss
+//
+// Given the buffer it examines the buffer and returns the confidence level that
+// this document is rss.
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsRec::RecognizeRss(const TDesC& /*aName*/, const TDesC8& aBuffer)
+    {
+    _LIT8(KRss, "<rss");
+    _LIT8(KRdf, "<rdf:RDF");
+    _LIT8(KChannel, "<channel");
+    _LIT8(KRss1, "xmlns=\"http://purl.org/rss/1.0/\"");
+    _LIT8(KXml, "<?xml");
+    _LIT8(KDtd, "//DTD RSS");
+    _LIT8(KOPML,  "<opml");
+
+    TInt  confidence = ENotRecognized;
+    TInt  count = 0;
+
+    // TODO: Determine if there are common dot-extensions used for 
+    //       this mime-type.  If so, add code to check for them in aName.
+    //       If found set iConfidence to ECertain.
+
+    if (aBuffer.FindF(KRss) != KErrNotFound)
+        {
+        count++;
+        }
+    if (aBuffer.FindF(KRdf) != KErrNotFound)
+        {
+        count++;
+        }
+    if (aBuffer.FindF(KChannel) != KErrNotFound)
+        {
+        count++;
+        }
+    if (aBuffer.FindF(KRss1) != KErrNotFound)
+        {
+        count++;
+        }
+    if (aBuffer.FindF(KXml) != KErrNotFound)
+        {
+        if (aBuffer.FindF(KOPML) == KErrNotFound)
+        	{        	
+	        count++;
+        	}
+        }
+    if (aBuffer.FindF(KDtd) != KErrNotFound)
+        {
+        count++;
+        }
+    
+    if (count == 0)
+        {
+        confidence = ENotRecognized;
+        }
+    else if (count <= 2)
+        {
+        confidence = EProbable;
+        }
+    else
+        {
+        confidence = ECertain;
+        }
+
+    return confidence;
+    }
+
+
+// Constants
+const TImplementationProxy ImplementationTable[] = 
+	{
+    IMPLEMENTATION_PROXY_ENTRY(KFeedsRecImplUIDValue, CFeedsRec::CreateRecognizerL)
+	};
+
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+//
+// Returns the proxy.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable; 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsRec::CreateRecognizerL
+//
+// Creates an recognizer instance.
+// -----------------------------------------------------------------------------
+//
+CApaDataRecognizerType* CFeedsRec::CreateRecognizerL()
+	{
+	return new (ELeave) CFeedsRec();
+	}
+