upnpharvester/common/cmlibrary/src/cmstorerule.cpp
changeset 0 7f85d04be362
child 30 5ec426854821
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpharvester/common/cmlibrary/src/cmstorerule.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,465 @@
+/*
+* Copyright (c) 2006-2007 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:      Capsulating store rule
+*
+*/
+
+
+
+
+
+
+// INCLUDES
+#include <e32std.h>
+#include <s32mem.h>
+#include "cmmediaserver.h"
+#include "cmstorerule.h"
+#include "msdebug.h"
+
+// CONSTANTS
+const TInt KArrayGranularity = 16;
+const TInt KArrayGranularityContainer = 8;
+
+// ======== LOCAL FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCmStoreRule* CCmStoreRule::NewL()
+    {    
+    CCmStoreRule* self = CCmStoreRule::NewLC();
+    CleanupStack::Pop( self ); 
+    return self;
+    }
+ 
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CCmStoreRule* CCmStoreRule::NewLC()
+    {    
+    CCmStoreRule* self = new ( ELeave ) CCmStoreRule();
+    CleanupStack::PushL( self );
+    self->ConstructL(); 
+    return self;  
+    }    
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCmStoreRule::~CCmStoreRule()
+    {
+    delete iName;
+
+    iRuleDefs.Reset();
+    iRuleDefs.Close();
+
+    iMediaServers.ResetAndDestroy();
+    iMediaServers.Close();
+    
+    iExcPlayLists->Reset();
+    iExcAlbums->Reset();
+
+    delete iExcPlayLists;
+    delete iExcAlbums;      
+    }
+
+// ---------------------------------------------------------------------------
+// Add new rule into StoreRule
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CCmStoreRule::AddStoreRuleL( TCmMediaType aMediaType )
+    {    
+    iRuleDefs.AppendL( aMediaType );
+    TInt index = iRuleDefs.Count() - 1;    
+    return index;
+    }
+
+// ---------------------------------------------------------------------------
+// Get rule
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::StoreRule( TInt aIndex, TCmMediaType* aMediaType )
+    {
+    *aMediaType = (TCmMediaType)iRuleDefs[aIndex];
+    }
+        
+// ---------------------------------------------------------------------------
+// Add new media server into FillRule
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C TInt CCmStoreRule::AddMediaServerL( const TDesC8& aUDN )
+    {
+    CCmMediaServer* server = CCmMediaServer::NewLC();
+    server->SetUDNL( aUDN );    
+    iMediaServers.Append( server );
+    CleanupStack::Pop( server );    
+    TInt index = iMediaServers.Count() - 1;    
+    return index;        
+    }
+
+// ---------------------------------------------------------------------------
+// Delete media server from the store rule
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::DeleteMediaServer( const TDesC8& aUDN )
+    {
+    TBool deleted( EFalse );
+    for( TInt i = 0; i < iMediaServers.Count() && !deleted; i++ )
+        {
+        if( KErrNone == iMediaServers[i]->MediaServer().Compare(aUDN) )
+            {
+            delete iMediaServers[i];
+            iMediaServers.Remove(i);
+            iMediaServers.Compress();
+            deleted = ETrue;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Adds one album into excluded list
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::AddExcAlbumL( const TDesC& aAlbum )
+    {
+    TRACE(Print(_L("[COMMON]\t AddExcAlbumL( %S )"), &aAlbum ));
+    HBufC* temp = aAlbum.AllocL();
+    CleanupStack::PushL( temp );
+    iExcAlbums->AppendL( *temp );
+    CleanupStack::Pop( temp );
+    }
+
+// ---------------------------------------------------------------------------
+// Adds one playlist into excluded list
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CCmStoreRule::AddExcPlayListL( const TDesC& aPlayList )
+    {
+    HBufC* temp = aPlayList.AllocL();
+    CleanupStack::PushL( temp );
+    iExcPlayLists->AppendL( *temp );
+    CleanupStack::Pop( temp );
+    }
+
+// ---------------------------------------------------------------------------
+// Removes one album from the excluded list
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::RemoveExcAlbum( const TDesC& aAlbum )
+    {
+    TInt pos( KErrNone );
+    TInt err( iExcAlbums->Find( aAlbum, pos, ECmpNormal ) );
+    if( err == KErrNone )
+        {
+        iExcAlbums->Delete( pos );
+        iExcAlbums->Compress();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Removes one playlist from the excluded list
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CCmStoreRule::RemoveExcPlayList( const TDesC& aPlayList )
+    {
+    TInt pos( KErrNone );
+    TInt err( iExcPlayLists->Find( aPlayList, pos, ECmpNormal ) );
+    if( err == KErrNone )
+        {
+        iExcPlayLists->Delete( pos );
+        iExcPlayLists->Compress();
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Returns excluded albums
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDesCArray& CCmStoreRule::ExcAlbums()
+    {
+    return *iExcAlbums;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns excluded playlists
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CDesCArray& CCmStoreRule::ExcPlayLists()
+    {
+    return *iExcPlayLists;
+    }
+            
+// ---------------------------------------------------------------------------
+// Get media server
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C const TDesC8& CCmStoreRule::MediaServerL( TInt aIndex )
+    {
+    // check parameter
+    if ( aIndex < 0 || aIndex >= iMediaServers.Count() ) 
+        {
+        User::Leave( KErrArgument );
+        }
+        
+    return iMediaServers[aIndex]->MediaServer();
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns count of rules
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CCmStoreRule::DefCount() const
+    {
+    return iRuleDefs.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns count of media servers
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C TInt CCmStoreRule::MediaServerCount() const
+    {
+    return iMediaServers.Count();
+    }    
+
+// ---------------------------------------------------------------------------
+// Sets FillRule name
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::SetNameL( const TDesC8& aName )
+    {
+    delete iName;
+    iName = NULL;
+    iName = aName.AllocL();        
+    }
+
+// ---------------------------------------------------------------------------
+// Get Name
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TDesC8& CCmStoreRule::Name() const
+    {
+    return *iName;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets list id, when storing data into db this values isn't used as a 
+// db list id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::SetListId( const TUint aId )
+    {
+    iId = aId;
+    }
+
+// ---------------------------------------------------------------------------
+// Get list id
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C TUint CCmStoreRule::ListId() const
+    {
+    return iId;
+    }
+            
+// ---------------------------------------------------------------------------
+// Sets selected state
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::SetSelected( TCmFillRuleStatus aSelected )
+    {
+    iSelected = aSelected;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns method
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCmFillRuleStatus CCmStoreRule::Selected() const
+    {
+    return iSelected;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets rule's status ( e.g ECmToBeRemoved )
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCmStoreRule::SetStatus( TCmListItemStatus aStatus )
+    {
+    iStatus = aStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns status 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCmListItemStatus CCmStoreRule::Status() const
+    {
+    return iStatus;
+    }
+    
+// ---------------------------------------------------------------------------
+// CCmStoreRule::ExternalizeL
+// ---------------------------------------------------------------------------
+//
+void CCmStoreRule::ExternalizeL( RWriteStream& aStream ) const
+    {
+    aStream.WriteInt32L( iName->Length() );
+    if ( iName )
+        {
+        aStream << *iName;
+        }
+    else
+        {
+        aStream << KNullDesC8();
+        }      
+        
+    aStream.WriteInt16L((TInt)iSelected );    
+    aStream.WriteInt16L((TInt)iStatus );
+    
+    aStream.WriteInt16L( iRuleDefs.Count() );
+    for ( TInt index(0); index < iRuleDefs.Count(); index++ )
+        {
+        aStream.WriteInt16L((TInt)iRuleDefs[index] );
+        }
+        
+    aStream.WriteInt16L( iMediaServers.Count() );
+    for ( TInt index(0); index < iMediaServers.Count(); index++ )
+        {
+        iMediaServers[index]->ExternalizeL( aStream );
+        }
+    TRACE(Print(_L("[COMMON]\t iExcAlbums->Count() = %d"), 
+        iExcAlbums->Count() ));    
+    aStream.WriteInt16L( iExcAlbums->Count() );
+    for ( TInt index(0); index < iExcAlbums->Count(); index++ )
+        {
+        TRACE(Print(_L("[COMMON]\t iExcAlbums[index].Length() = %d"), 
+            iExcAlbums->MdcaPoint(index).Length() ));                
+        aStream.WriteInt32L( iExcAlbums->MdcaPoint(index).Length() );
+        aStream << iExcAlbums->MdcaPoint(index);
+        }
+    TRACE(Print(_L("[COMMON]\t iExcPlayLists->Count() = %d"), 
+        iExcPlayLists->Count() ));         
+    aStream.WriteInt16L( iExcPlayLists->Count() );
+    for ( TInt index(0); index < iExcPlayLists->Count(); index++ )
+        {
+        TRACE(Print(_L("[COMMON]\t iExcPlayLists[index].Length() = %d"), 
+            iExcPlayLists->MdcaPoint(index).Length() ));
+        aStream.WriteInt32L( iExcPlayLists->MdcaPoint(index).Length() );
+        aStream << iExcPlayLists->MdcaPoint(index);
+        }
+    }
+        
+// ---------------------------------------------------------------------------
+// CCmFillRule::InternalizeL
+// ---------------------------------------------------------------------------
+//
+void CCmStoreRule::InternalizeL( RReadStream& aStream )
+    {
+    // Content
+    if ( iName )
+        {
+        delete iName;
+        iName = NULL;
+        }
+    TInt bufLength = aStream.ReadInt32L();    
+    iName = HBufC8::NewL( aStream, bufLength );
+    
+    // cleanup
+    iRuleDefs.Reset();
+ 
+    iSelected = (TCmFillRuleStatus)aStream.ReadInt16L();
+    iStatus = (TCmListItemStatus)aStream.ReadInt16L();
+    
+    // rule count 
+    TInt ruleCount = aStream.ReadInt16L();
+    
+    // Then internalize them from the stream one by one
+    for (TInt index = 0; index < ruleCount; index++ )
+        {
+        iRuleDefs.Append((TCmMediaType)aStream.ReadInt16L());   
+        }
+        
+    // cleanup
+    iMediaServers.ResetAndDestroy();
+    
+    // media Server count
+    TInt mediaServerCount = aStream.ReadInt16L();
+    
+    // Then internalize them from the stream one by one
+    for (TInt index = 0; index < mediaServerCount; index++ )
+        {
+        CCmMediaServer* server = CCmMediaServer::NewLC();    
+        server->InternalizeL( aStream );
+        iMediaServers.Append( server );
+        CleanupStack::Pop( server );   
+        server = NULL;
+        }
+    iExcAlbums->Reset();   
+    TInt excAlbumsCount( aStream.ReadInt16L() );
+    bufLength = KErrNone;
+    HBufC* temp;
+    TRACE(Print(_L("[COMMON]\t excAlbumsCount = %d"), excAlbumsCount ));    
+    for ( TInt index(0); index < excAlbumsCount ; index++ )
+        {
+        bufLength = aStream.ReadInt32L();
+        TRACE(Print(_L("[COMMON]\t bufLength = %d"), bufLength )); 
+        temp = HBufC::NewL( aStream, bufLength );
+        CleanupStack::PushL( temp );
+        iExcAlbums->AppendL( *temp );
+        CleanupStack::Pop( temp );
+        temp = NULL;
+        }         
+    iExcPlayLists->Reset();
+    TInt excPlayListCount( aStream.ReadInt16L() );
+    bufLength = KErrNone;
+    TRACE(Print(_L("[COMMON]\t excPlayListCount = %d"), excPlayListCount ));
+    for ( TInt index(0); index < excPlayListCount ; index++ )
+        {
+        bufLength = aStream.ReadInt32L();
+        TRACE(Print(_L("[COMMON]\t bufLength = %d"), bufLength ));
+        temp = HBufC::NewL( aStream, bufLength );
+        CleanupStack::PushL( temp );
+        iExcPlayLists->AppendL( *temp );
+        CleanupStack::Pop( temp );
+        temp = NULL;
+        }                 
+    }
+                
+// ---------------------------------------------------------------------------
+// Default constructor
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//    
+CCmStoreRule::CCmStoreRule() : 
+    iRuleDefs( KArrayGranularity ), 
+    iMediaServers( KArrayGranularity )
+    {
+    
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//    
+void CCmStoreRule::ConstructL()
+    {
+    iExcAlbums = new ( ELeave ) CDesCArrayFlat( KArrayGranularityContainer );
+    iExcPlayLists = 
+        new ( ELeave ) CDesCArrayFlat( KArrayGranularityContainer );
+    }    
+
+// End of file
+