homescreenapp/hsapplication/src/hsrecoverymanager.cpp
changeset 77 4b195f3bea29
child 81 7dd137878ff8
--- /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;
+}