--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hsapplication/src/hsrecoverymanager.cpp Wed Aug 18 09:40:07 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include <e32property.h>
+
+#include <QFile>
+
+#include "hsrecoverymanager.h"
+
+const TInt KPSCategoryUid(0x20022F36);
+const TInt KPSCrashCountKey(1);
+const int KCrashCountThreshold(3);
+const int KResetCrashCountInterval(60000);
+
+/*!
+ \class HsRecoveryManager
+ \ingroup group_hsapplication
+ \brief Used during homescreen startup for recovering from possible crash situations.
+*/
+
+/*!
+ Constructs a new recovery manager with the given \a parent item.
+*/
+HsRecoveryManager::HsRecoveryManager(QObject *parent)
+ : QObject(parent)
+{
+ mTimer.setInterval(KResetCrashCountInterval);
+ mTimer.setSingleShot(true);
+ connect(&mTimer, SIGNAL(timeout()), SLOT(resetCrashCount()));
+}
+
+/*!
+ Destructor.
+*/
+HsRecoveryManager::~HsRecoveryManager()
+{
+}
+
+/*!
+ Executes this recovery manager. If crash count exceeds the
+ threshold, the ROM configuration is selected. Otherwise,
+ the existing one is used.
+*/
+void HsRecoveryManager::execute()
+{
+ int count = crashCount();
+ if (KCrashCountThreshold <= count) {
+ restoreRomDatabase();
+ resetCrashCount();
+ return;
+ }
+ if (0 < count) {
+ mTimer.start();
+ }
+}
+
+/*!
+ Restores the ROM database to c: drive.
+*/
+void HsRecoveryManager::restoreRomDatabase()
+{
+ // If exists, remove the database from c:
+ QFile file("c:/private/20022f35/homescreen.db");
+ if (file.exists()) {
+ file.remove();
+ }
+ // Copy the rom database to c: and set permissions.
+ file.setFileName("z:/private/20022f35/homescreen.db");
+ file.copy("c:/private/20022f35/homescreen.db");
+ file.setFileName("c:/private/20022f35/homescreen.db");
+ file.setPermissions(QFile::ReadOwner | QFile::WriteOwner);
+}
+
+/*!
+ Resets the crash count to zero.
+*/
+void HsRecoveryManager::resetCrashCount()
+{
+ RProperty::Set(TUid::Uid(KPSCategoryUid), KPSCrashCountKey, 0);
+}
+
+/*!
+ Returns the current crash count.
+*/
+int HsRecoveryManager::crashCount()
+{
+ TInt count = 0;
+ RProperty::Get(TUid::Uid(KPSCategoryUid), KPSCrashCountKey, count);
+ return count;
+}