diff -r 000000000000 -r 05e9090e2422 skins/AknSkins/srvsrc/aknssrvinstallobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/skins/AknSkins/srvsrc/aknssrvinstallobserver.cpp Thu Dec 17 09:14:12 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2004-2008 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: Observes for changes in skin files. +* +*/ + + +#include "aknssrvinstallobserver.h" +#include + +_LIT(KAknsSrvSkinRootPath,"?:\\private\\10207114\\import\\"); + +// ----------------------------------------------------------------------------- +// CAknsSrvInstallObserver::NewL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CAknsSrvFileObserver* CAknsSrvFileObserver::NewL(MAknsSrvFileObserver* aObserver) + { + CAknsSrvFileObserver* self = new (ELeave) CAknsSrvFileObserver(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +CAknsSrvFileObserver* CAknsSrvFileObserver::NewL(MAknsSrvFileObserver* aObserver, const TDesC& aFilename) + { + CAknsSrvFileObserver* self = new (ELeave) CAknsSrvFileObserver(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + self->iFilename = aFilename.AllocL(); + CleanupStack::Pop( self ); + return self; + } + +CAknsSrvFileObserver* CAknsSrvFileObserver::NewL( + MAknsSrvFileObserver* aObserver, TAknsSrvFileSrvObserverType aObserverType, + const TDesC& aFilename ) + { + CAknsSrvFileObserver* self = + new (ELeave) CAknsSrvFileObserver( aObserver ); + CleanupStack::PushL(self); + self->ConstructL(); + self->iFilename = aFilename.AllocL(); + self->iType = aObserverType; + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CAknsSrvInstallObserver::ConstructL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CAknsSrvFileObserver::ConstructL() + { + User::LeaveIfError(iFsSession.Connect()); + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CAknsSrvSkinInstallObserver::C++ Constructor +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CAknsSrvFileObserver::CAknsSrvFileObserver(MAknsSrvFileObserver* aObserver ) : + CActive(CActive::EPriorityIdle) + { + iObserver = aObserver; + iType = EAknsSrvNotDefined; + } + +// ----------------------------------------------------------------------------- +// CAknsSrvSkinInstallObserver::C++ Desctructor +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CAknsSrvFileObserver::~CAknsSrvFileObserver() + { + Cancel(); + iFsSession.NotifyChangeCancel(); + iFsSession.Close(); + delete iFilename; + iFilename = NULL; + iObserver = NULL; + } + +// ----------------------------------------------------------------------------- +// CAknsSrvSkinInstallObserver::IssueRequest +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CAknsSrvFileObserver::IssueRequest() + { + if ( !IsActive() && iObserver ) + { + if ( iFilename ) + { + if ( iType == EAknsSrvFileObsSlidesetWallpaper ) + { + iFsSession.NotifyChange( ENotifyWrite, iStatus, *iFilename ); + } + else + { + iFsSession.NotifyChange(ENotifyFile, iStatus, *iFilename); + } + } + else + { + iFsSession.NotifyChange( ENotifyDir, iStatus, KAknsSrvSkinRootPath ); + } + + SetActive(); + } + } + +// ----------------------------------------------------------------------------- +// CAknsSrvInstallObserver::RunL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CAknsSrvFileObserver::RunL() + { + iFsSession.NotifyChangeCancel(); + + // Nobody is listening, so better stop. + if ( !iObserver ) + { + return; + } + + if (iFilename) + { + if (BaflUtils::FileExists(iFsSession, *iFilename)) + { + if ( iType == EAknsSrvFileObsSlidesetWallpaper ) + { + // Slideset file has changed. + iObserver->SlideSetModifiedL(); + } + IssueRequest(); + return; + } + else // the file has been deleted / renamed + { + iObserver->WallpaperLost(); + } + } + else + { + // Since system immediately notifies of changes, let's wait awhile so that all operations on + // directory have finished. + User::After( 1000000 ); + iObserver->NewSkinPackagesInstalled(); + IssueRequest(); + } + } + +// ----------------------------------------------------------------------------- +// CAknsSrvInstallObserver::DoCancel +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CAknsSrvFileObserver::DoCancel() + { + iFsSession.NotifyChangeCancel(); + } + +// End of File +