--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,327 @@
+/*
+* 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: SlideshowPlugin utility classes and functions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <f32fsys.h>
+#include <eikenv.h>
+#include <pathinfo.h>
+#include <DRMHelper.h>
+#include <caf/caftypes.h>
+
+#include "SlideshowPluginUtils.h"
+
+_LIT(KSSPDriveLetterMC, "E");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Repository watcher
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::NewL
+// ---------------------------------------------------------------------------
+//
+CRepositoryWatcher* CRepositoryWatcher::NewL(
+ const TUid aUid,
+ const TUint32 aKey,
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType,
+ TCallBack aCallBack,
+ CRepository* aRepository)
+ {
+ CRepositoryWatcher* self = new(ELeave)
+ CRepositoryWatcher(aUid, aKey, aCallBack, aRepository);
+
+ CleanupStack::PushL(self);
+ self->ConstructL(aKeyType);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::NewL
+// ---------------------------------------------------------------------------
+//
+CRepositoryWatcher* CRepositoryWatcher::NewL(
+ const TUid aUid,
+ TCallBack aCallBack,
+ CRepository* aRepository)
+ {
+ CRepositoryWatcher* self = new(ELeave) CRepositoryWatcher(
+ aUid, NCentralRepositoryConstants::KInvalidNotificationId, aCallBack, aRepository);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::~CRepositoryWatcher
+// ---------------------------------------------------------------------------
+//
+CRepositoryWatcher::~CRepositoryWatcher()
+ {
+ if ( iNotifyHandler )
+ {
+ iNotifyHandler->StopListening();
+ delete iNotifyHandler;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::CRepositoryWatcher
+// ---------------------------------------------------------------------------
+//
+CRepositoryWatcher::CRepositoryWatcher(
+ const TUid aUid,
+ const TUint32 aKey,
+ TCallBack aCallBack,
+ CRepository* aRepository)
+ :
+ iUid(aUid), iKey(aKey), iCallBack(aCallBack), iRepository(aRepository)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType)
+ {
+ iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository, aKeyType, iKey);
+ iNotifyHandler->StartListeningL();
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::ConstructL()
+ {
+ iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository);
+ iNotifyHandler->StartListeningL();
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::ChangedKey
+// ---------------------------------------------------------------------------
+//
+TUint32 CRepositoryWatcher::ChangedKey()
+ {
+ return iChangedKey;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::HandleNotifyInt
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::HandleNotifyInt(
+ TUint32 aKey, TInt /*aNewValue*/ )
+ {
+ iChangedKey = aKey;
+ iCallBack.CallBack();
+ iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::HandleNotifyString
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::HandleNotifyString( TUint32 aKey,
+ const TDesC16& /*aNewValue*/ )
+ {
+ iChangedKey = aKey;
+ iCallBack.CallBack();
+ iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::HandleNotifyGeneric
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::HandleNotifyGeneric(TUint32 aKey)
+ {
+ iChangedKey = aKey;
+ iCallBack.CallBack();
+ iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId;
+ }
+
+// ---------------------------------------------------------------------------
+// CRepositoryWatcher::HandleNotifyError
+// ---------------------------------------------------------------------------
+//
+void CRepositoryWatcher::HandleNotifyError(TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/)
+ {
+ }
+
+
+// P & S subscriber
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::CPSSubscriber
+// ---------------------------------------------------------------------------
+//
+CPSSubscriber::CPSSubscriber(TCallBack aCallBack, RProperty& aProperty)
+ : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::~CPSSubscriber
+// ---------------------------------------------------------------------------
+//
+CPSSubscriber::~CPSSubscriber()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::SubscribeL
+// ---------------------------------------------------------------------------
+//
+void CPSSubscriber::SubscribeL()
+ {
+ if (!IsActive())
+ {
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::StopSubscribe
+// ---------------------------------------------------------------------------
+//
+void CPSSubscriber::StopSubscribe()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::RunL
+// ---------------------------------------------------------------------------
+//
+void CPSSubscriber::RunL()
+ {
+ if (iStatus.Int() == KErrNone)
+ {
+ iCallBack.CallBack();
+ SubscribeL();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CPSSubscriber::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CPSSubscriber::DoCancel()
+ {
+ iProperty.Cancel();
+ }
+
+
+
+// ========== UTILITIES CLASS ===============================
+
+// Checks if memory card is present
+TBool SlideshowUtil::IsMCPresent()
+ {
+ RFs& fs = CCoeEnv::Static()->FsSession();
+
+ TInt error = KErrNone;
+ TDriveInfo driveInfo;
+ TInt res = 0;
+ TInt err = fs.CharToDrive(PathInfo::MemoryCardRootPath()[0], res);
+ error = fs.Drive(driveInfo, res );
+
+ // Not present, locked or unknown is bad
+ if ((error != KErrNone) ||
+ (driveInfo.iMediaAtt & KMediaAttLocked) ||
+ (driveInfo.iType == EMediaNotPresent) ||
+ (driveInfo.iType == EMediaUnknown))
+ {
+ return EFalse;
+ }
+
+ // Read-only is fine
+ return ETrue;
+ }
+
+
+// Checks if the given file is on memory card
+TBool SlideshowUtil::IsOnMC(TFileName aFile)
+ {
+ // Grab drive letter from path and compare to memory card drive letter
+ TBuf<1> driveLetterBuf;
+ driveLetterBuf.CopyUC(aFile.Left(1));
+
+ if (driveLetterBuf.Compare(KSSPDriveLetterMC) == 0)
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+
+// Checks that the file has enough DRM rights to be displayed
+TBool SlideshowUtil::DRMCheck(CDRMHelper *aDRMHelper, TDesC& /* aFileName */)
+ {
+ if (!aDRMHelper)
+ {
+ return EFalse;
+ }
+
+ return ETrue;
+ }
+
+
+// Checks that the slide has enough DRM rights to be displayed
+TBool SlideshowUtil::DRMCheck(CDRMHelper *aDRMHelper, CSlideshowSlide* aSlide)
+ {
+ if (!aDRMHelper || !aSlide)
+ {
+ return EFalse;
+ }
+
+ return (DRMCheck(aDRMHelper, *(aSlide->FileName())));
+ }
+
+
+// Consumes the slide's DRM rights
+void SlideshowUtil::DRMConsume(CDRMHelper* aDRMHelper, CSlideshowSlide* aSlide)
+ {
+ if (!aDRMHelper || !aSlide)
+ {
+ return;
+ }
+
+ aDRMHelper->ConsumeFile2(*(aSlide->FileName()),
+ ContentAccess::EView,
+ CDRMHelper::EStart);
+ aDRMHelper->ConsumeFile2(*(aSlide->FileName()),
+ ContentAccess::EView,
+ CDRMHelper::EFinish);
+ }
+
+
+// End of File