diff -r 000000000000 -r c53acadfccc6 harvester/composerplugins/imagecomposer/inc/imagecomposerao.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/harvester/composerplugins/imagecomposer/inc/imagecomposerao.h Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,272 @@ +/* +* Copyright (c) 2006-2009 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: Composer image active object +* +*/ + + +#include + +#include "mdeobject.h" +#include "mdeobjectquery.h" +#include "harvesterexifutil.h" +#include "mdeharvestersession.h" + +#ifndef __CIMAGECOMPOSERAO_H__ +#define __CIMAGECOMPOSERAO_H__ + +_LIT( KImageComposerPanic, "CImageComposerAO" ); + +class CMdERelationQuery; + +class CImageComposerAO : public CActive, public MMdEQueryObserver + { + public: + + enum TRequestType + { + ERequestReady = 0, + ERequestGetObject, + ERequestCompose + }; + + /** + * Construction + */ + static CImageComposerAO* NewL(); + + /** + * Destruction + */ + virtual ~CImageComposerAO(); + + /** + * Adds new item to composing queue. + * @param aItems Items to add to the queue. + * @param aForce Force composing to items in aItems array + */ + void AddToQueue( const RArray& aItems, TBool aForce ); + + /** + * Checks if composing is completed. + * @return ETrue, if complete. + */ + TBool IsComposingComplete(); + + /** + * Sets mde client session to be used by this composer. + * @param aSession Mde client session. + */ + void SetSession( CMdESession* aSession ); + + /** + * Remove MdE client session used by this composer. + */ + void RemoveSession(); + + /** + * Writes location data to Exif. + * @param aMdeObject Mde object of the image. + * @param aLocationObject Related mde location object. + */ + void DoWriteExifL( CMdEObject* aMdEObject, CMdEObject* aLocationObject ); + + + + + + public: // from MMdEQueryObserver + + /** + * Callback to handle new results received from a query. + * From MMdEQueryObserver. + */ + virtual void HandleQueryNewResults( CMdEQuery& aQuery, TInt aFirstNewItemIndex, + TInt aNewItemCount ); + + /** + * Callback to handle new results received from a query. + * From MMdEQueryObserver. + */ + virtual void HandleQueryNewResults( CMdEQuery& aQuery, TInt aNewObjectItemCount, + TInt aNewRelationItemCount, TInt aNewEventItemCount ); + + /** + * Callback to handle all results of a completed query. + * From MMdEQueryObserver. + * @param aQuery Completed query + * @param aError Error code, KErrNone on success. + */ + virtual void HandleQueryCompleted( CMdEQuery& aQuery, TInt aError ); + + protected: + + /** + * RunL + * From CActive. + */ + virtual void RunL(); + + /** + * DoCancel + * From CActive. + */ + virtual void DoCancel(); + + /** + * RunError. Error handler in case RunL() leaves. + * From CActive. + * @param aError Leave code from RunL. + * @return Error code. KErrNone if error was handled. + */ + virtual TInt RunError( TInt aError ); + + private: + + /** + * Private constructor + */ + CImageComposerAO(); + + /** + * 2nd phase construction + */ + void ConstructL(); // second-phase constructor + + /** + * Gets an object from MdE DB. + * Leave on queue errors. + * Leaves with KErrNotFound, if object is not found. + * + * @param Returned value of current composing request's object ID. + * Value is changed when item is read from composing queue. + */ + void GetObjectFromMdeL(TItemId& aMdEObjectId); + + /** + * Writes (=composes) new metadata to a image file. + */ + void ComposeL(); + + /** + * SetNextRequest + * Sets next state for this active object's RunL. + * @param aNextRequest State to set. + */ + void SetNextRequest( TRequestType aNextRequest ); + + /** + * @brief Starts the write of GPS tags to a image file. + * + * Starts a query to search for related location data in mde. + * If found, HandleQueryCompleted will start adding found info + * to image file. + * + * @param aObjectId Object to whichs add GPS tags. + * + * @see HandleQueryCompleted + * @see StartWritingGPSTagsL + * @see DoWriteExifL + */ + void WriteGPSTagsL( TItemId aObjectId ); + + /** + * Checks if given mime type is JPEG image. + * @param aMimeType a mime type string. + * @return ETrue if mime type is image/jpeg. + */ + static TBool IsJpeg( const TDesC& aMimeType ); + + + /** + * Starts writing GPS tags to image file. + * @param aQuery Mde query which contains results for related + * location object query. + */ + void StartWritingGPSTagsL( CMdEQuery& aQuery ); + + /** + * Converts a TDateTime object's date to a Exif GPS date string. + * + * @param aTime TDateTime object to extract the date from. + * @param aTgtDes Target descriptor for the string. + */ + void TimeToGpsDateStringL( TTime aTime, TDes& aTgtDes ); + + /** + * Converts a TTime object's time to a Exif GPS time string. + * + * @param aTime TDateTime object to extract the time from. + * @param aTgtDes Target descriptor for the string. + */ + void TimeToGpsTimeStringL( TDateTime aTime, TDes8& aTgtDes ); + + + /** + * CompareItemIds + */ + static TInt CompareTItemIds( const TItemId& aLeft, const TItemId& aRight ) + { + return aLeft - aRight; + } + + private: + + /** Pointer to a mde object */ + CMdEObject* iMdeObject; + + /** Pointer to mde session to use */ + CMdESession* iSession; + + CMdEHarvesterSession* iMdEHarvesterSession; + + /** Next state of this active object's RunL() */ + TRequestType iNextRequest; + + /** Queue of items to compose */ + RArray iItemQueue; + + /** A relation query used to seach for related location objects */ + CMdERelationQuery* iRelationQuery; + + /** Mde default namespace. NOT OWN. */ + CMdENamespaceDef* iDefaultNamespace; + + /** Image Object Def. NOT OWN. */ + CMdEObjectDef* iImageObjectDef; + + /** "Base" Object Def. NOT OWN. */ + CMdEObjectDef* iObjectDef; + + /** Location Object Def. NOT OWN. */ + CMdEObjectDef* iLocationObjectDef; + + /** + * Array used to skip new coming id after explicit change of + * MdE object in composer. + */ + RArray iNextItemsSkip; + + /** + * Array of item id's which will be forced to be composed + * No timestamp checking will be done for these objects + */ + RArray iForceObjectIds; + + CHarvesterExifUtil* iExifUtil; + + RFs iFs; + }; + +#endif // __CIMAGECOMPOSERAO_H__