diff -r 000000000000 -r 2c201484c85f contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,343 @@ +/* +* 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; + }