--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsharing/upnpcontentserver/src/upnpselectionwriter.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2005-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: CUpnpSelectionWriter class implementation
+ *
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+
+#include <upnpstring.h>
+#include <centralrepository.h>
+#include <s32file.h>
+
+#include "upnpselectionwriter.h"
+#include "upnpcontentservercrkeys.h"
+#include "upnpcontentserverdefs.h"
+
+_LIT( KComponentLogfile, "contentserver.txt");
+#include "upnplog.h"
+
+using namespace UpnpContentServer;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::NewL
+// Two-phased constructor.
+// --------------------------------------------------------------------------
+//
+CUpnpSelectionWriter* CUpnpSelectionWriter::NewL(
+ TUpnpMediaType aMediaType )
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+
+ CUpnpSelectionWriter* self =
+ new(ELeave) CUpnpSelectionWriter();
+
+ CleanupStack::PushL(self);
+ self->ConstructL( aMediaType );
+ CleanupStack::Pop(self);
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ return self;
+ }
+
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CUpnpSelectionWriter::ConstructL(
+ TUpnpMediaType aMediaType )
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+ iMediaType = aMediaType;
+
+ iFileArray = new (ELeave) CDesCArrayFlat(4);
+ iOkItems.Reset();
+
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ }
+
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::CUpnpSelectionWriter
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// --------------------------------------------------------------------------
+//
+CUpnpSelectionWriter::CUpnpSelectionWriter()
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::CUpnpSelectionWriter
+// C++ default destructor.
+// --------------------------------------------------------------------------
+//
+CUpnpSelectionWriter::~CUpnpSelectionWriter()
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+
+ delete iFileArray;
+ iOkItems.Reset();
+ delete iRepository;
+
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::AppendItemL
+// ( other items were commented in header )
+// --------------------------------------------------------------------------
+//
+void CUpnpSelectionWriter::AppendItemL( const TPtrC aNewObject)
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+ iFileArray->AppendL( aNewObject );
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::AppendStatusL
+// ( other items were commented in header )
+// --------------------------------------------------------------------------
+//
+void CUpnpSelectionWriter::AppendStatusL( TInt aIndex )
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+ iOkItems.AppendL( aIndex );
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpSelectionWriter::SaveSharingState
+// Saves sharing state to central repository
+// --------------------------------------------------------------------------
+//
+TInt CUpnpSelectionWriter::SaveSharingStateL( TInt aShareAllSelection )
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+
+ TInt status = KErrNone;
+ iRepository = CRepository::NewL( KCrUidUpnpContentserver );
+ switch ( iMediaType )
+ {
+ case EImageAndVideo:
+ {
+ if (aShareAllSelection == EShareAll ||
+ aShareAllSelection == EShareNone ||
+ aShareAllSelection == EShareMany )
+ {
+ status = iRepository->Set( KUPnPAppShareAllVisualFiles,
+ aShareAllSelection);
+ }
+ break;
+ }
+ case EPlaylist:
+ {
+ if (aShareAllSelection == EShareAll ||
+ aShareAllSelection == EShareNone ||
+ aShareAllSelection == EShareMany )
+ {
+ status = iRepository->Set( KUPnPAppShareAllMusicFiles,
+ aShareAllSelection);
+ }
+ break;
+ }
+ default:
+ {
+ __LOG( "SaveSharingStateL - default");
+ break;
+ }
+ }
+
+ delete iRepository;
+ iRepository = NULL;
+
+ // Store the item array
+ if ( aShareAllSelection == EShareMany )
+ {
+ StoreSharedContainerIDsL();
+ }
+
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ return status;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPFileSharingEngine::StoreSharedContainerIDsL
+// Creates main containers and starts sharing them
+// --------------------------------------------------------------------------
+//
+TInt CUpnpSelectionWriter::StoreSharedContainerIDsL() const
+ {
+ __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ );
+
+ // Leave if aIdArray = NULL
+ if ( !iFileArray )
+ {
+ User::Leave(KErrArgument);
+ }
+
+ RFs fs;
+ RFile file;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL(fs);
+
+ TFileName directory;
+
+ // Get private directory path
+ fs.SessionPath(directory);
+
+ // Try to create directory
+ TInt error = fs.MkDir(directory);
+ // it's ok if directory already exists
+ if (!(error != KErrNone && error != KErrAlreadyExists))
+ {
+
+ // Add file name
+ if ( iMediaType == EImageAndVideo )
+ {
+ directory.Append( KVisualFile );
+ }
+ else if ( iMediaType == EPlaylist )
+ {
+ directory.Append( KMusicFile );
+ }
+
+ error = file.Replace(fs, directory, EFileWrite );
+ if ( !error )
+ {
+ CleanupClosePushL( file );
+ RFileWriteStream writeStream(file);
+ CleanupClosePushL( writeStream );
+
+ for (TInt index = 0; index < iFileArray->Count(); index++)
+ {
+ // check that sharing of the container was succesful
+ if ( iOkItems.Find( index ) != KErrNotFound )
+ {
+ // Write identifiers to the file
+ writeStream << iFileArray->MdcaPoint(index);
+ }
+ }
+
+ // Clean up
+ CleanupStack::PopAndDestroy(&writeStream); // Close writeStream
+ CleanupStack::PopAndDestroy(&file); // Close file
+ }
+ }
+ CleanupStack::PopAndDestroy(&fs);
+ __LOG8_1( "%s end.", __PRETTY_FUNCTION__ );
+ return error;
+ }
+
+// End of file