--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbcommonutil.h Wed Sep 01 12:32:02 2010 +0100
@@ -0,0 +1,444 @@
+/*
+* Copyright (c) 2006 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: The class MPXDbCommonUtil which contains utilities functions
+*
+*/
+
+
+#ifndef MPXDBCOMMONUTIL_H
+#define MPXDBCOMMONUTIL_H
+
+// INCLUDES
+#include <apmstd.h>
+#include <f32file.h>
+#include <badesca.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmessagegeneraldefs.h>
+#include <mpxcollectionmessagedefs.h>
+#include <mpxmessage2.h>
+#include <mpxcollectionpath.h>
+
+#include "mpxdbcommonstd.h"
+
+
+// FORWARD DECLARATIONS
+class CMPXRowSet;
+class CMPXDatabase;
+class CMPXMedia;
+class CMPXMediaArray;
+class RSqlStatement;
+
+// CLASS DECLARATION
+
+/**
+* This static class contains utilities functions used by MPX Collection DB Plugins
+*/
+class MPXDbCommonUtil
+ {
+
+ public:
+
+ /**
+ * Set HBufC data member.
+ * Free the memory and set the aBuf to the new location.
+ * @param aBuf, the buf to be set
+ * @param aSource, source descriptor
+ * @param aMaxLen, max length allowed in aBuf, -1 is unlimited.
+ * @return KErrOverflow if the length of source is greater than MaxLen
+ */
+ IMPORT_C static TInt SetHBuf(HBufC*& aBuf,
+ const TDesC* aSource,
+ TInt aMaxLen = -1);
+
+ /**
+ * Replace the single quote in the SQL string
+ * @param aSrc source descriptor
+ * @param aTrg target descriptor
+ */
+ IMPORT_C static void FindAndReplaceSingleQuote(const TDesC& aSrc, TDes& aTrg);
+
+ /**
+ * Delete from file system (includes read-only files)
+ * @param aFs File server session handle
+ * @param aFile File path to be deleted
+ * @return KErrNone if file deleted successfully
+ * System-wide error code otherwise
+ */
+ IMPORT_C static TInt DeleteFile(RFs& aFs, const TDesC& aFile);
+
+ /**
+ * Get the drive Id with a given volume unique Id
+ * @param aFs File server session handle
+ * @param aVolumeId volume ID to match
+ * @return drive Id. If volume Id not found, return KErrNotFound
+ */
+ IMPORT_C static TInt GetDriveIdMatchVolIdL(RFs& aFs, TUint aVolumeId);
+
+ /**
+ * Get the volume Id with a given drive Id
+ * @param aFs File server session handle
+ * @param aDriveId: a drive ID to match
+ * @return volume Id. If no correspending media is found for given
+ * aDriveId, 0 will return
+ */
+ IMPORT_C static TUint GetVolIdMatchDriveIdL(RFs& aFs, TInt aDriveId);
+
+ /**
+ * Generate a 32bits Unique Id with MD5
+ * If the input is a filename, only the path part will be hashed
+ * The drive part of the path will be replaced by the corresponding
+ * volume Id in order to maintain uniquenss as one media may mount as
+ * different drive letter in different devices
+ * @param aFs File server session handle
+ * @param aTableId Use category as table Id
+ * @param aName Category name or file name as input to encoder
+ * @param aCaseSensitve ETrue if case sensitivity should be taken
+ * into account when generating unique ID
+ * @return unique Id
+ * NOTE If aName given is a path and the drive/media doesn't
+ * exist (e.g. MMC not inserted), full path will be hashed
+ */
+ IMPORT_C static TUint32 GenerateUniqueIdL(RFs& aFs, TMPXGeneralCategory aTableId,
+ const TDesC& aName, TBool aCaseSensitive);
+
+ /**
+ * Create a media object with title, type, category and ID and append it to the media array
+ * @param aArray media array
+ * @param aTitle title
+ * @param aType attribute type
+ * @param aCat attribute category
+ * @param aId unique ID
+ * @param aNonPermissibleActions bitmask specifying the non-permissible actions for the entry
+ * @param aDbflag Dbflag value for the new media entry
+ */
+ IMPORT_C static void AppendMediaL(CMPXMediaArray& aArray, const TDesC& aTitle, TMPXGeneralType aType,
+ TMPXGeneralCategory aCat, TMPXItemId aId = 0, TInt aNonPermissibleActions = 0,
+ TUint aDbflag = 0);
+
+ /**
+ * Create a media object with title, type, category and ID and prepend it to the media array
+ * @param aArray media array
+ * @param aTitle title
+ * @param aType attribute type
+ * @param aCat attribute category
+ * @param aId unique ID
+ * @param aNonPermissibleActions bitmask specifying the non-permissible actions for the entry
+ * @param aDbflag Dbflag value for the new media entry
+ * @param aPos postion of the new item, 0 is the first item
+ */
+ IMPORT_C static void PrependMediaL(CMPXMediaArray& aArray, const TDesC& aTitle, TMPXGeneralType aType,
+ TMPXGeneralCategory aCat, TMPXItemId aId = 0, TInt aNonPermissibleActions = 0,
+ TUint aDbflag = 0,
+ TInt aPos = 0);
+
+ /**
+ * Fill in the supported UID array based on what is requested in the attribute array
+ * @param aAttrs requested attributes
+ * @param aSupportedIds supported UID array
+ */
+ IMPORT_C static void FillInSupportedUIDsL(const TArray<TMPXAttribute>& aAttrs, RArray<TInt>& aSupportedIds);
+
+ /**
+ * Fill in the message with item changed information
+ * @param aMessage a message to be filled with the supplied information
+ * @param aId item id
+ * @param aChangeType change type
+ * @param aCategory category of the item changed
+ * @param aUid plugin UID
+ * @param aDeprecatedId deprecated id of the item after it's been moved/renamed
+ */
+ IMPORT_C static void FillItemChangedMessageL(CMPXMessage& aMessage, TMPXItemId aId,
+ TMPXChangeEventType aChangeType, TMPXGeneralCategory aCategory, TUint aUid,
+ TMPXItemId aDeprecatedId = 0);
+
+ /**
+ * Constructs an item changed message and adds it to the array
+ * @param aMessageArray array to add the message to
+ * @param aId item ID
+ * @param aChangeType change type
+ * @param aCategory category of the item changed
+ * @param aUid plugin UID
+ * @param aDeprecatedId deprecated id of the item after it's been moved/renamed
+ */
+ IMPORT_C static void AddItemChangedMessageL(CMPXMessageArray& aMessageArray, TMPXItemId aId,
+ TMPXChangeEventType aChangeType, TMPXGeneralCategory aCategory, TUint aUid,
+ TMPXItemId aDeprecatedId = 0);
+
+ /**
+ * Find the matching item changed message from the array
+ * @param aMessageArray array containing item changed messages
+ * @param aMessage the message to search for in the array.
+ * @return KErrNotFound if the message cannot be found in the array; otherwise,
+ * the index of the 1st matching message in the array.
+ */
+ IMPORT_C static TInt FindItemChangedMessageL(const CMPXMessageArray& aMessageArray,
+ const CMPXMessage& aMessage);
+
+ /**
+ * Get the DRM protection type of the file
+ * @param aFile the file to retrieve the DRM type
+ * @return DRM protection type of the file
+ */
+ IMPORT_C static TMCDrmType GetDRMTypeL(const TDesC& aFile);
+
+ /**
+ * Processes the string for single quotes
+ * @param aString source string
+ * @return processed string
+ */
+ IMPORT_C static HBufC* ProcessSingleQuotesLC(const TDesC& aString);
+
+ /**
+ * Processes the string for pattern characters so that they will be treated
+ * as normal characters.
+ * @param aString source string
+ * @return processed string where those pattern characters will no longer be
+ * treated as special characters, they will be treated as regular
+ * characters.
+ */
+ IMPORT_C static HBufC* ProcessPatternCharsLC(const TDesC& aString);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue value
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterionLC(
+ const TDesC& aCriterion, TInt aValue);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue value
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterion64LC(
+ const TDesC& aCriterion, TInt64 aValue);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue1 value1
+ * @param aValue2 value2
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterionLC(
+ const TDesC& aCriterion, TInt aValue1, TInt aValue2);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue1 TInt64 value1
+ * @param aValue2 TInt64 value2
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterion64LC(
+ const TDesC& aCriterion, TInt64 aValue1, TInt64 aValue2);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue value string
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterionLC(
+ const TDesC& aCriterion, const TDesC& aValue);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue1 value1
+ * @param aValue2 value2
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterionLC(
+ const TDesC& aCriterion, const TDesC& aValue1, const TDesC& aValue2);
+
+ /**
+ * Constructs an SQL criterion (name = value)
+ * @param aCriterion name string
+ * @param aValue1 value1
+ * @param aValue2 value2
+ * @param aValue3 value3
+ * @param aValue4 value4
+ * @return criterion string on the CS
+ */
+ IMPORT_C static HBufC* SqlCriterionLC(
+ const TDesC& aCriterion, const TDesC& aValue1, TInt aValue2,
+ const TDesC& aValue3, TInt aValue4);
+
+ /**
+ * Constructs an SQL criterion (name = value) and adds it to the array
+ * @param aCriteriaArray array to add the criterion to
+ * @param aCriterion name
+ * @param aValue value
+ * @return number of characters in the criterion string
+ */
+ IMPORT_C static TInt AddSqlCriterionL(CDesCArray& aCriteriaArray, const TDesC& aCriterion,
+ TInt aValue);
+
+ /**
+ * Constructs an SQL criterion (name = value) and adds it to the array
+ * @param aCriteriaArray array to add the criterion to
+ * @param aCriterion name
+ * @param aValue value
+ * @return number of characters in the criterion string
+ */
+ IMPORT_C static TInt AddSqlCriterionL(CDesCArray& aCriteriaArray, const TDesC& aCriterion,
+ const TDesC& aValue);
+
+ /**
+ * Create a full path with input drive Id and path
+ * @param aDriveId a drive Id to added in front of path
+ * @param aPath path contains path and filename
+ * @return created full path, ownership transferred to client
+ */
+ IMPORT_C static HBufC* CreateFullPathL(TInt aDriveId, const TDesC& aPath);
+
+ /**
+ * Appends a name and a string value to the parameter arrays.
+ * @param aFields field names array to append to
+ * @param aValues field values array to append to
+ * @param aField field name
+ * @param aValue field value
+ */
+ IMPORT_C static void AppendValueL(CDesCArray& aFields, CDesCArray& aValues,
+ const TDesC& aField, const TDesC& aValue);
+
+ /**
+ * Appends a name and an int value to the parameter arrays.
+ * @param aFields field names array to append to
+ * @param aValues field values array to append to
+ * @param aField field name
+ * @param aValue field value
+ */
+ IMPORT_C static void AppendValueL(CDesCArray& aFields, CDesCArray& aValues,
+ const TDesC& aField, TUint32 aValue);
+
+ /**
+ * Returns the MIME type for a given URI
+ * @param aUri URI
+ * @return the MIME type
+ */
+ IMPORT_C static TDataType GetMimeTypeForUriL(const TDesC& aUri);
+
+ /**
+ * Constructs a string from the specified array like:
+ * <item1>aSeparator<item2>aSeparator...<itemN>
+ * @param aArray source array
+ * @param aSeparator separator string
+ * @return constructed string on the CS
+ */
+ IMPORT_C static HBufC* StringFromArrayLC(const CDesCArray& aArray, const TDesC& aSeparator);
+
+ /**
+ * Constructs a string from two arrays like:
+ * <aNameArray.item1>aValueSeparator<aValueArray.item1>aEntitySeparator...
+ * @param aNameArray array containing the names
+ * @param aValueArray array containing the values
+ * @param aValueSeparator value separator
+ * @param aEntitySeparator entity separator
+ * @return constructed string on the CS
+ */
+ IMPORT_C static HBufC* StringFromArraysLC(const CDesCArray& aNameArray,
+ const CDesCArray& aValueArray, const TDesC& aValueSeparator,
+ const TDesC& aEntitySeparator);
+
+ /**
+ * Converts TTime to a datetime string representation.
+ * @param aTime TTime object
+ * @return string containing date and time on the CS
+ */
+ IMPORT_C static HBufC* TTimeToDesLC(const TTime& aTime);
+
+ /**
+ * Converts string representation of datetime into TTime.
+ * @param aDateTime string, containing date and time
+ * @return aTime TTime object
+ */
+ IMPORT_C static TTime DesToTTimeL(const TDesC& aDateTime);
+
+ /**
+ * Returns the current time in the string format used by the database.
+ * @return string containing current date and time on the CS
+ */
+ IMPORT_C static HBufC* CurrentTimeDesLC();
+
+ /**
+ * Returns the current date in the string format used by the database.
+ * @return string containing current date on the CS
+ */
+ IMPORT_C static HBufC* CurrentDateDesLC();
+
+ /**
+ * Fills the drive from the URI. if the URI does not include a drive letter
+ * the method does not modify aDrive and returns KErrNotFound
+ * @param aUri URI to be analysed
+ * @param aDrive returns the drive
+ * @return system error code
+ */
+ IMPORT_C static TInt GetDriveL(const TDesC& aUri, TDriveUnit& aDrive);
+
+ /**
+ * Checks if a specified attribute exists in the attribute array
+ * @param aAttrs attribute array
+ * @param aAttribute attribute to be checked
+ * @return ETrue if the attribute exists, Efalse otherwise
+ */
+ IMPORT_C static TBool AttributeExists(const TArray<TMPXAttribute>& aAttrs,
+ const TMPXAttribute& aAttribute);
+
+ /**
+ * Reads the value of a text field. This method is required because on ARMv5
+ * the RSqlStatement::ColumnTextL method does not return KNullDesC for empty
+ * text fields.
+ * @param aStatement recordset to read the field from
+ * @param aField field index
+ * @return Text field value or KNullDesC if empty
+ */
+ IMPORT_C static TPtrC GetColumnTextL(RSqlStatement& aStatement, TInt aField);
+
+ /**
+ * Constructs an item changed message and adds it to the array
+ * @param aMessageArray array to add the message to
+ * @param aId item ID
+ * @param aChangeType change type
+ * @param aCategory category of the item changed
+ * @param aUid plugin UID
+ * @param aAlbumArt is the flag for album art changed
+ * @param aDeprecatedId deprecated id of the item after it's been moved/renamed
+ */
+ IMPORT_C static void AddItemAlbumChangedMessageL(CMPXMessageArray& aMessageArray, TMPXItemId aId,
+ TMPXChangeEventType aChangeType, TMPXGeneralCategory aCategory, TUint aUid,
+ TBool aAlbumArt, TMPXItemId aDeprecatedId = 0 );
+ private:
+ /**
+ * Create a media object with title, type, category and ID and push onto the CS.
+ * @param aTitle title
+ * @param aType attribute type
+ * @param aCat attribute category
+ * @param aId unique ID
+ * @param aNonPermissibleActions bitmask specifying the non-permissible actions for the entry
+ * @param aDbflag Dbflag value for the new media entry
+ */
+ static CMPXMedia* ConstructMediaLC(const TDesC& aTitle, TMPXGeneralType aType,
+ TMPXGeneralCategory aCat, TMPXItemId aId, TInt aNonPermissibleActions,
+ TUint aDbflag);
+ };
+
+#endif // MPXDBCOMMONUTIL_H
+
+// End of File
+