diff -r 675a964f4eb5 -r 35751d3474b7 contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp --- a/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,343 +1,347 @@ -/* -* Copyright (c) 2004-2009 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: -* -*/ - - -#include -#include -#include "f32agentcontent.h" -#include "f32defaultattributes.h" -#include "f32agentui.h" - -using namespace ContentAccess; - -CF32AgentContent* CF32AgentContent::NewL(const TDesC& aURI, TContentShareMode aShareMode) - { - CF32AgentContent* self = new (ELeave) CF32AgentContent; - CleanupStack::PushL(self); - self->ConstructL(aURI, aShareMode); - CleanupStack::Pop(self); - return self; - } - -CF32AgentContent* CF32AgentContent::NewL(RFile& aFile) - { - CF32AgentContent* self = new (ELeave) CF32AgentContent; - CleanupStack::PushL(self); - self->ConstructL(aFile); - CleanupStack::Pop(self); - return self; - } - -CF32AgentContent::CF32AgentContent() - { - } - -CF32AgentContent::~CF32AgentContent() - { - iFile.Close(); - if(iURI) - { - // file session only created when file is opened by name - iFs.Close(); - } - delete iURI; - } - -void CF32AgentContent::ConstructL(const TDesC& aURI, TContentShareMode aShareMode) - { - iURI = aURI.AllocL(); - iShareMode = aShareMode; - - // Test that the file exists and hold it open so nobody deletes it etc - TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iFile.Open(iFs, *iURI, mode)); - } - -void CF32AgentContent::ConstructL(RFile& aFile) - { - User::LeaveIfError(iFile.Duplicate(aFile)); - } - -TInt CF32AgentContent::OpenContainer(const TDesC&) - { - return KErrNotFound; - } - -TInt CF32AgentContent::CloseContainer() - { - return KErrNotFound; - } - -void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray& aArray) - { - TBuf8 mimeType; - CEmbeddedObject *embeddedObject = NULL; - - // the only embedded object is the file itself - // Try to get the mime type - mimeType.SetLength(0); - if(iURI) - { - TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType); - } - else - { - TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType); - } - embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject); - CleanupStack::PushL(embeddedObject); - aArray.AppendL(embeddedObject); - - // Now owned by the array so do not destroy - CleanupStack::Pop(embeddedObject); - } - -void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray& aArray, TEmbeddedType aType) - { - // the only embedded object is the file itself - if(aType == EContentObject) - { - // just get the default object since there is only one content object - GetEmbeddedObjectsL(aArray); - } - } - -void CF32AgentContent::SearchL(RStreamablePtrArray& aArray, const TDesC8& aMimeType, TBool /* aRecurse */) - { - TBuf8 mimeType; - - CEmbeddedObject *embeddedObject = NULL; - - // the only embedded object is the file itself - if(iURI) - { - TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType); - } - else - { - TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType); - } - - // Check the file has the correct mime type - if(aMimeType == mimeType) - { - embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject); - CleanupStack::PushL(embeddedObject); - aArray.AppendL(embeddedObject); - - // Now owned by the array so do not destroy - CleanupStack::Pop(embeddedObject); - } - else - { - // Mime type was incorrect. Set error to indicate no content object - // of the desired type was found in the file. - User::Leave(KErrNotFound); - } - } - -TInt CF32AgentContent::Search(RStreamablePtrArray& aArray, const TDesC8& aMimeType, TBool aRecurse) - { - TRAPD( err, SearchL(aArray, aMimeType, aRecurse) ); - return err; - } - -TInt CF32AgentContent::GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& aUniqueId) - { - // check that the unique Id exists - if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) - { - return KErrNotFound; - } - - TInt err = KErrNone; - if(iURI) - { - err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, *iURI); - } - else - { - err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile); - } - return err; - } - -TInt CF32AgentContent::GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUniqueId) - { - // check that the unique Id exists - if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) - { - return KErrNotFound; - } - - TInt err = KErrNone; - if(iURI) - { - err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, *iURI); - } - else - { - err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile); - } - return err; - } - -TInt CF32AgentContent::GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUniqueId) - { - // check that the unique Id exists - if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) - { - return KErrNotFound; - } - - TInt err = KErrNone; - if(iURI) - { - err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, *iURI); - } - else - { - err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile); - } - return err; - } - -TInt CF32AgentContent::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUniqueId) - { - // check that the unique Id exists - if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) - { - return KErrNotFound; - } - - TInt err = KErrNone; - if(iURI) - { - err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, *iURI); - } - else - { - err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile); - } - return err; - } - -TInt CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& ) - { - return KErrCANotSupported; - } - -void CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& , TRequestStatus& aStatus) - { - TRequestStatus* ptr = &aStatus; - User::RequestComplete(ptr, KErrCANotSupported); - } - -void CF32AgentContent::NotifyStatusChange(TEventMask , TRequestStatus& aStatus, const TDesC& ) - { - TRequestStatus* ptr = &aStatus; - User::RequestComplete(ptr, KErrCANotSupported); - } - -TInt CF32AgentContent::CancelNotifyStatusChange(TRequestStatus& , const TDesC& ) - { - return KErrCANotSupported; - } - -void CF32AgentContent::RequestRights(TRequestStatus& aStatus, const TDesC& ) - { - TRequestStatus* ptr = &aStatus; - User::RequestComplete(ptr, KErrCANotSupported); - } - -TInt CF32AgentContent::CancelRequestRights(TRequestStatus& , const TDesC& ) - { - return KErrCANotSupported; - } - -void CF32AgentContent::DisplayInfoL(TDisplayInfo aInfo, const TDesC& aUniqueId) - { - // Check that the client hasn't specified some incorrect UniqueId - User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId)); - - - if(iURI) - { - // Open the file handle in order to pass it to the Agent UI - RFs fs; - RFile file; - - // default share mode of EFileShareReadersOnly - TUint mode = EFileShareReadersOnly | EFileStream | EFileRead; - - if(iShareMode == EContentShareReadWrite) - { - mode = EFileShareAny | EFileStream | EFileRead; - } - else if(iShareMode == EContentShareExclusive) - { - mode = EFileShareExclusive | EFileStream | EFileRead; - } - - - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - User::LeaveIfError(file.Open(fs, *iURI, mode)); - CleanupClosePushL(file); - AgentUiL().DisplayInfoL(aInfo, file); - CleanupStack::PopAndDestroy(2, &fs); // file, fs - } - else - { - // just pass existing file handle - AgentUiL().DisplayInfoL(aInfo, iFile); - } - } - -TInt CF32AgentContent::SetProperty(TAgentProperty aProperty, TInt aValue) - { - if(aProperty==EAgentPropertyAgentUI) - // should only pass type EAgentPropertyAgentUI - { - - CF32AgentUi* ui = NULL; - - // get a pointer to the UI - TRAPD(err, ui = &AgentUiL()); - if(err) - { - return err; - } - return ui->SetProperty(aProperty, aValue); - } - else - { - return KErrCANotSupported; - } - } - - -CF32AgentUi& CF32AgentContent::AgentUiL() - { - if(!iAgentUi) - { - // load agent UI from f32AgentUi.dll - iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL(); - } - return *iAgentUi; - } +/* +* Copyright (c) 2004-2009 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: +* +*/ + + +#include +#include +#include "f32agentcontent.h" +#include "f32defaultattributes.h" +#include + +using namespace ContentAccess; + +CF32AgentContent* CF32AgentContent::NewL(const TDesC& aURI, TContentShareMode aShareMode) + { + CF32AgentContent* self = new (ELeave) CF32AgentContent; + CleanupStack::PushL(self); + self->ConstructL(aURI, aShareMode); + CleanupStack::Pop(self); + return self; + } + +CF32AgentContent* CF32AgentContent::NewL(RFile& aFile) + { + CF32AgentContent* self = new (ELeave) CF32AgentContent; + CleanupStack::PushL(self); + self->ConstructL(aFile); + CleanupStack::Pop(self); + return self; + } + +CF32AgentContent::CF32AgentContent() + { + } + +CF32AgentContent::~CF32AgentContent() + { + iFile.Close(); + if(iURI) + { + // file session only created when file is opened by name + iFs.Close(); + } + delete iURI; + } + +void CF32AgentContent::ConstructL(const TDesC& aURI, TContentShareMode aShareMode) + { + iURI = aURI.AllocL(); + iShareMode = aShareMode; + + // Test that the file exists and hold it open so nobody deletes it etc + TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode); + User::LeaveIfError(iFs.Connect()); + User::LeaveIfError(iFile.Open(iFs, *iURI, mode)); + } + +void CF32AgentContent::ConstructL(RFile& aFile) + { + User::LeaveIfError(iFile.Duplicate(aFile)); + } + +TInt CF32AgentContent::OpenContainer(const TDesC&) + { + return KErrNotFound; + } + +TInt CF32AgentContent::CloseContainer() + { + return KErrNotFound; + } + +void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray& aArray) + { + TBuf8 mimeType; + CEmbeddedObject *embeddedObject = NULL; + + // the only embedded object is the file itself + // Try to get the mime type + mimeType.SetLength(0); + if(iURI) + { + TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType); + } + else + { + TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType); + } + embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject); + CleanupStack::PushL(embeddedObject); + aArray.AppendL(embeddedObject); + + // Now owned by the array so do not destroy + CleanupStack::Pop(embeddedObject); + } + +void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray& aArray, TEmbeddedType aType) + { + // the only embedded object is the file itself + if(aType == EContentObject) + { + // just get the default object since there is only one content object + GetEmbeddedObjectsL(aArray); + } + } + +void CF32AgentContent::SearchL(RStreamablePtrArray& aArray, const TDesC8& aMimeType, TBool /* aRecurse */) + { + TBuf8 mimeType; + + CEmbeddedObject *embeddedObject = NULL; + + // the only embedded object is the file itself + if(iURI) + { + TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType); + } + else + { + TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType); + } + + // Check the file has the correct mime type + if(aMimeType == mimeType) + { + embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject); + CleanupStack::PushL(embeddedObject); + aArray.AppendL(embeddedObject); + + // Now owned by the array so do not destroy + CleanupStack::Pop(embeddedObject); + } + else + { + // Mime type was incorrect. Set error to indicate no content object + // of the desired type was found in the file. + User::Leave(KErrNotFound); + } + } + +TInt CF32AgentContent::Search(RStreamablePtrArray& aArray, const TDesC8& aMimeType, TBool aRecurse) + { + TRAPD( err, SearchL(aArray, aMimeType, aRecurse) ); + return err; + } + +TInt CF32AgentContent::GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& aUniqueId) + { + // check that the unique Id exists + if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) + { + return KErrNotFound; + } + + TInt err = KErrNone; + if(iURI) + { + err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, *iURI); + } + else + { + err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile); + } + return err; + } + +TInt CF32AgentContent::GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUniqueId) + { + // check that the unique Id exists + if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) + { + return KErrNotFound; + } + + TInt err = KErrNone; + if(iURI) + { + err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, *iURI); + } + else + { + err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile); + } + return err; + } + +TInt CF32AgentContent::GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUniqueId) + { + // check that the unique Id exists + if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) + { + return KErrNotFound; + } + + TInt err = KErrNone; + if(iURI) + { + err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, *iURI); + } + else + { + err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile); + } + return err; + } + +TInt CF32AgentContent::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUniqueId) + { + // check that the unique Id exists + if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone) + { + return KErrNotFound; + } + + TInt err = KErrNone; + if(iURI) + { + err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, *iURI); + } + else + { + err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile); + } + return err; + } + +TInt CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& ) + { + return KErrCANotSupported; + } + +void CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& , TRequestStatus& aStatus) + { + TRequestStatus* ptr = &aStatus; + User::RequestComplete(ptr, KErrCANotSupported); + } + +void CF32AgentContent::NotifyStatusChange(TEventMask , TRequestStatus& aStatus, const TDesC& ) + { + TRequestStatus* ptr = &aStatus; + User::RequestComplete(ptr, KErrCANotSupported); + } + +TInt CF32AgentContent::CancelNotifyStatusChange(TRequestStatus& , const TDesC& ) + { + return KErrCANotSupported; + } + +void CF32AgentContent::RequestRights(TRequestStatus& aStatus, const TDesC& ) + { + TRequestStatus* ptr = &aStatus; + User::RequestComplete(ptr, KErrCANotSupported); + } + +TInt CF32AgentContent::CancelRequestRights(TRequestStatus& , const TDesC& ) + { + return KErrCANotSupported; + } + +void CF32AgentContent::DisplayInfoL(TDisplayInfo aInfo, const TDesC& aUniqueId) + { + // Check that the client hasn't specified some incorrect UniqueId + User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId)); + + + if(iURI) + { + // Open the file handle in order to pass it to the Agent UI + RFs fs; +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + RFile64 file; +#else + RFile file; +#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + // default share mode of EFileShareReadersOnly + TUint mode = EFileShareReadersOnly | EFileStream | EFileRead; + + if(iShareMode == EContentShareReadWrite) + { + mode = EFileShareAny | EFileStream | EFileRead; + } + else if(iShareMode == EContentShareExclusive) + { + mode = EFileShareExclusive | EFileStream | EFileRead; + } + + + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + User::LeaveIfError(file.Open(fs, *iURI, mode)); + CleanupClosePushL(file); + AgentUiL().DisplayInfoL(aInfo, file); + CleanupStack::PopAndDestroy(2, &fs); // file, fs + } + else + { + // just pass existing file handle + AgentUiL().DisplayInfoL(aInfo, iFile); + } + } + +TInt CF32AgentContent::SetProperty(TAgentProperty aProperty, TInt aValue) + { + if(aProperty==EAgentPropertyAgentUI) + // should only pass type EAgentPropertyAgentUI + { + + CF32AgentUi* ui = NULL; + + // get a pointer to the UI + TRAPD(err, ui = &AgentUiL()); + if(err) + { + return err; + } + return ui->SetProperty(aProperty, aValue); + } + else + { + return KErrCANotSupported; + } + } + + +CF32AgentUi& CF32AgentContent::AgentUiL() + { + if(!iAgentUi) + { + // load agent UI from f32AgentUi.dll + iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL(); + } + return *iAgentUi; + }