harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp
changeset 0 ccd0fd43f247
child 2 208a4ba3894c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp	Mon Apr 19 14:40:05 2010 +0300
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  MDS to CPIX Document fetcher 
+ *
+*/
+
+
+#include "cpixdocfetcher.h"
+#include "csearchdocument.h"
+#include <mdeobject.h>
+#include <mdccommon.h>
+#include <mdeitem.h>
+#include <mdeconstants.h>
+#include <mdeobjectdef.h>
+#include "harvesterserverlogger.h"
+
+#define CPIX_MIMETYPE_FIELD      L"_mimetype"
+#define LCPIX_MIMETYPE_FIELD     L"_mimetype"
+const TInt KStartPosition = 2; //Start position of absolute path
+const TInt KDrivePosition = 0; //Drive position in object Uri
+const TInt KMaxMediaLength = 14;
+const TInt KMaxExtLength = 5;
+//To unsigned decimal representation as UIds are out of range for signed decimal
+_LIT(KFormat, "%u");
+_LIT(KNameField, "Name");
+_LIT(KMediaIdField, "MediaId");
+_LIT(KExtensionField, "Extension");
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::NewL()
+// -----------------------------------------------------------------------------
+//
+CCPIXDocFetcher* CCPIXDocFetcher::NewL()
+    {
+    CCPIXDocFetcher* self = CCPIXDocFetcher::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::NewLC()
+// -----------------------------------------------------------------------------
+//
+CCPIXDocFetcher* CCPIXDocFetcher::NewLC()
+    {
+    CCPIXDocFetcher* self = new (ELeave) CCPIXDocFetcher();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::~CCPIXDocFetcher()
+// -----------------------------------------------------------------------------
+//
+CCPIXDocFetcher::~CCPIXDocFetcher()
+    {
+    iFs.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::~ConstructL() 
+// -----------------------------------------------------------------------------
+//
+void CCPIXDocFetcher::ConstructL()
+    {
+    //Heap variables if any
+    User::LeaveIfError(iFs.Connect());
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::CCPIXDocFetcher() 
+// -----------------------------------------------------------------------------
+//
+CCPIXDocFetcher::CCPIXDocFetcher()
+    {
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::GetCpixDocumentL() 
+// -----------------------------------------------------------------------------
+//
+CSearchDocument* CCPIXDocFetcher::GetCpixDocumentL(const CMdEObject& aObject,
+                                                   const TDesC& aAppClass,
+                                                   CMdEObjectDef& aObjectDef)
+    {
+    CPIXLOGSTRING("START CCPIXDocFetcher::GetCpixDocumentL");
+    CSearchDocument* index_item = NULL;
+    if(aObject.Uri() != KNullDesC) //Uri is must have property we will store items which has URI
+        {
+        SetAbsoluteURI(aObject.Uri());//Convert URI to absolute path 
+        index_item = CSearchDocument::NewLC(GetUri(), aAppClass);
+        //Uri is our Document ID
+        AddFiledtoDocumentL(*index_item,
+                               KNameField, //URI as Name field
+                               GetUri());
+        //Store media ID for client to generate path and launch corresponding Item
+        TBuf<KMaxMediaLength> mediaBuf;        
+        
+        //As the MDS database is storing incorrect MediaIds, fetch the uniqueid from the 
+        //file system.If the issue is fixed in 10.1 then Ids from MDS can be directly used
+        
+        //GetMediaIdDescriptor(aObject.MediaId(),mediaBuf);
+        GetMediaIdDescriptorFromFsL(aObject.Uri(),mediaBuf);
+        //Uri is our Document ID
+        AddFiledtoDocumentL(*index_item, KMediaIdField, mediaBuf,
+                             CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);
+        CPIXLOGSTRING("CCPIXDocFetcher::GetCpixDocumentL Standard Property URI, Media ID Added");
+        
+        //Get the media file extension and store
+        TBuf<KMaxExtLength> extension;        
+        GetExtension(aObject.Uri(),extension);
+        AddFiledtoDocumentL( *index_item, KExtensionField, extension );
+        
+        CMdEProperty* property(NULL);
+        CMdEPropertyDef& titlePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty );
+        if(aObject.Property( titlePropDef, property ) != KErrNotFound)
+           {
+           //Add field to document
+           CMdETextProperty* textProperty = ( CMdETextProperty* ) property;
+           if(textProperty->Value() != KNullDesC)
+               {
+               AddFiledtoDocumentL(*index_item,
+                                     MdeConstants::Object::KTitleProperty,
+                                     textProperty->Value());
+               index_item->AddExcerptL(textProperty->Value());
+               }
+           else
+               {
+               index_item->AddExcerptL(aObject.Uri());
+               }
+           }
+        else
+           {
+           //No property title
+           index_item->AddExcerptL(aObject.Uri());
+           }
+        //Item type as MIME type
+        CMdEPropertyDef& mimeTypePropDef = aObjectDef.GetPropertyDefL(MdeConstants::Object::KItemTypeProperty);
+        if(aObject.Property( mimeTypePropDef, property )!= KErrNotFound)
+           {
+           //Add field to document
+           CMdETextProperty* textProperty = ( CMdETextProperty* ) property;
+           AddFiledtoDocumentL(*index_item,
+                               _L(CPIX_MIMETYPE_FIELD),
+                               textProperty->Value(),
+                               CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);
+           }
+        CleanupStack::Pop(index_item);//pop up
+        }    
+    CPIXLOGSTRING("END CCPIXDocFetcher::GetCpixDocumentL");
+    return index_item;
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::GetUri() 
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCPIXDocFetcher::GetUri()
+    {
+    return iUri;
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::GetMediaIdDescriptor() 
+// -----------------------------------------------------------------------------
+//
+void CCPIXDocFetcher::GetMediaIdDescriptor(const TUint32& aMediaId,
+                                           TDes& aMediaIDBuf)
+    {
+    aMediaIDBuf.Format(_L("%d"),aMediaId);
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::GetMediaIdDescriptorFromFs() 
+// -----------------------------------------------------------------------------
+//
+void CCPIXDocFetcher::GetMediaIdDescriptorFromFsL(const TDesC& aUri,
+                                           TDes& aMediaIDBuf)
+    {
+    TVolumeInfo volumeInfo;
+    TInt driveNumber;
+    TChar driveLetter;
+    driveLetter = aUri[KDrivePosition];    
+    User::LeaveIfError(iFs.CharToDrive(driveLetter,driveNumber));
+    User::LeaveIfError(iFs.Volume(volumeInfo,driveNumber));
+    aMediaIDBuf.Format(KFormat, volumeInfo.iUniqueID);    
+    }
+
+void CCPIXDocFetcher::GetExtension(const TDesC& aUri,
+                              TDes& aExtension)
+    {
+    TInt pos = aUri.LocateReverse('.');
+    if(pos > 0)
+        {
+         aExtension.Copy(aUri.Mid(pos+1));
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::SetAbsoluteURI() 
+// -----------------------------------------------------------------------------
+//
+void CCPIXDocFetcher::SetAbsoluteURI(const TDesC& aUri)
+    {
+    iUri.Copy(aUri.Mid(KStartPosition));
+    }
+
+// -----------------------------------------------------------------------------
+// CCPIXDocFetcher::AddFiledtoDocumentL() 
+// -----------------------------------------------------------------------------
+//
+void CCPIXDocFetcher::AddFiledtoDocumentL(CSearchDocument& aSearchDoc,
+                                          const TDesC& aFiledName,
+                                          const TDesC& aValue,
+                                          TInt aConfig)
+    {
+    if(aValue != KNullDesC)
+        aSearchDoc.AddFieldL(aFiledName, aValue, aConfig);
+    else
+        aSearchDoc.AddFieldL(aFiledName, KNullDesC, aConfig);    
+    }
+//End of life