scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp
branchRCL_3
changeset 26 e8d784ac1a4b
parent 0 040fcad49f44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp	Wed Sep 01 12:30:40 2010 +0100
@@ -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