mmfenh/enhancedmediaclient/Client/src/Components/ClientFileSource/ClientFileSource.cpp
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/enhancedmediaclient/Client/src/Components/ClientFileSource/ClientFileSource.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,289 @@
+/*
+* 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:  Definition of the ClientFileSource class.
+*
+*/
+
+
+#include <MCustomCommand.h>
+#include <SourceControlObserver.h>
+#include "ClientFileSource.h"
+#include "EventNotifier.h"
+#include "ErrorCode.h"
+
+
+#define RETURN_IF_ERROR(x) if(x != KErrNone) return x
+
+using namespace multimedia;
+
+CClientFileSource::CClientFileSource()
+:iMimeType(NULL),
+iFileName(NULL)
+    {
+    // No Impl
+    }
+
+CClientFileSource::~CClientFileSource()
+    {
+    delete iMimeType;
+    delete iFileName;
+    delete iAsyncEventAO;
+    delete iEventNotifier;
+    }
+
+TInt CClientFileSource::PostConstructor()
+    {
+    TInt status(KErrNone);
+    TRAP(status, iAsyncEventAO = CAsyncAO::NewL(*this));
+    RETURN_IF_ERROR( status );
+    
+    if ( !iEventNotifier )
+        {
+        TRAP(status, iEventNotifier = CEventNotifier::NewL());
+        }
+
+    return status;
+    }
+
+// From MControl begins
+TInt CClientFileSource::AddObserver( MControlObserver& aObserver )
+    {
+    return iEventNotifier->AddObserver( aObserver );
+    }
+
+TInt CClientFileSource::RemoveObserver( MControlObserver& aObserver )
+    {
+    return iEventNotifier->RemoveObserver( aObserver );
+    }
+
+TUid CClientFileSource::Type()
+    {
+    return KFileSourceControl;
+    }
+
+TControlType CClientFileSource::ControlType()
+    {
+    return ESourceControl;
+    }
+// From MControl ends
+
+// From MSourceControl begins
+TInt CClientFileSource::GetSize( TUint& aSize )
+    {
+    TInt status(KErrUnknown);
+    
+    if(iServerSourceExists)
+        {
+        if(!iFileSize)
+            {
+            iEventPckg().iType = EFileSize;
+            iCustomCommand->CustomCommandSync( iSourceHandle, EGetFileSourceEvent, iEventPckg, KNullDesC8, iEventPckg );
+            aSize = iFileSize = iEventPckg().iFileSize;
+            status = KErrNone;
+            }
+        else
+            {
+            aSize = iFileSize;
+            status = KErrNone;    
+            }
+        }
+     else
+        {
+        aSize = 0;
+        status = KErrUnknown;
+        }   
+    
+    return status;
+    }
+
+TInt CClientFileSource::GetMimeType( TDes8& aMimeType )
+    {
+    TInt status(KErrUnknown);
+    if ( iMimeType )
+        {
+        aMimeType.Copy(*iMimeType);
+        status = KErrNone;
+        }
+    return status;
+    }
+
+TInt CClientFileSource::Close()
+    {
+    delete iMimeType;
+    iMimeType = NULL;
+    delete iFileName;
+    iFileName = NULL;
+    iBitRate = 0;
+    iFileSize = 0;
+    return KErrNone;
+    }
+
+// From MSourceControl ends
+
+// From MFileSource begins
+TInt CClientFileSource::Open( TDesC& aFileName, TDesC8& aMimeType  )
+    {
+    TInt status(KErrAlreadyExists);
+    Close();
+    if ( aFileName.Ptr() != NULL )
+        {
+        if(aMimeType.Size())
+            {
+            TRAP( status, iMimeType = aMimeType.AllocL() );
+            RETURN_IF_ERROR( status );
+            }
+        
+        TRAPD(status,iFileName = HBufC::NewL(aFileName.Size()));
+        
+        if(!status)
+            {
+            TPtr des = iFileName->Des();
+            des.Copy(aFileName);
+            }
+        else
+            return status;   
+
+        }
+    return status;
+    }
+
+TInt CClientFileSource::GetBitRate( TUint& aRate )
+    {
+    TInt status(KErrNone);
+    
+    if(iServerSourceExists)
+        {
+        if(!iBitRate)
+            {
+            iEventPckg().iType = EFileBitRateChanged;
+            iCustomCommand->CustomCommandSync( iSourceHandle, EGetFileSourceEvent, iEventPckg, KNullDesC8, iEventPckg );
+            aRate = iBitRate = iEventPckg().iBitRate;
+            status = KErrNone;
+            }
+        else
+            {
+            aRate = iBitRate;
+            status = KErrNone;    
+            }
+        }
+     else
+        {
+        aRate = 0;
+        status = KErrUnknown;
+        }   
+    
+    return status;
+    }
+
+TInt CClientFileSource::GetFileName(TPtr& aFileName)
+    {
+    TInt status(KErrNone);
+    aFileName.Set(iFileName->Des());
+    return status;
+    }
+
+// From MFileSource ends
+
+// From CSourceBase begins
+void CClientFileSource::ServerSourceCreated( MCustomCommand& aCustomCommand,
+                            TMMFMessageDestination& aSourceHandle )
+    {
+    iServerSourceExists = ETrue;
+    iCustomCommand = &aCustomCommand;
+    iSourceHandle = aSourceHandle;
+
+    
+
+    
+    // Subcribe for source event notifications
+    iEventPckg().iType = EFileSourceStateChanged;
+    iAsyncEventAO->SetActive();
+    iCustomCommand->CustomCommandAsync( iSourceHandle,
+                                        EGetFileSourceEvent,
+                                        iEventPckg,
+                                        KNullDesC8,
+                                        iEventPckg,
+                                        iAsyncEventAO->iStatus );
+    }
+
+void CClientFileSource::ServerSourceDeleted()
+    {
+    iServerSourceExists = EFalse;
+    iCustomCommand = NULL;
+    }
+
+TBool CClientFileSource::IsEncrypted()
+    {
+    return EFalse;
+    }
+
+TUid CClientFileSource::GetSourceUid()
+    {
+    return KFileDataSourcePlugin;
+    }
+
+TInt CClientFileSource::GetHeaderData( TPtr& /*aPtr*/ )
+    {
+    return KErrNotSupported;
+    }
+
+// From CSourceBase ends
+
+// From MAsyncAOObserver begins
+void CClientFileSource::Event( TInt aError )
+    {
+    if ( aError == KErrNone )
+        {
+#ifdef _DEBUG
+        RDebug::Print(_L("CClientFileSource::Event() Client State[%d] Type[%d]"), iEventPckg().iState, iEventPckg().iType);
+#endif        
+        switch (iEventPckg().iType)
+            {
+            case EFileBitRateChanged:
+                DoBitRateChanged(iEventPckg().iBitRate);                
+                break;
+            case EFileSourceStateChanged:
+                iState = iEventPckg().iState;
+                break;
+
+            default:
+                break;
+            };
+        }
+
+    // Subcribe for more source event notifications
+    iEventPckg().iState = iState;
+    
+    if(iServerSourceExists)
+        {
+        iAsyncEventAO->SetActive();
+        iCustomCommand->CustomCommandAsync( iSourceHandle,
+                                            EGetFileSourceEvent,
+                                            iEventPckg,
+                                            KNullDesC8,
+                                            iEventPckg,
+                                            iAsyncEventAO->iStatus );
+        }
+    }
+
+// From MAsyncAOObserver ends
+
+void CClientFileSource::DoBitRateChanged( TUint aBitRate )
+    {
+    iBitRate = aBitRate;
+    CErrorCode* event1 = new CErrorCode( KErrNone );       
+    iEventNotifier->Event(this,MSourceControlObserver::KBitRateChangedEvent,event1);
+    }
+
+// End of file