/*
* 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