filemanager/src/fmbkupenginewrapper/private/win32/fmbkupengine_p.cpp
changeset 14 1957042d8c7e
child 18 edd66bde63a4
child 25 b7bfdea70ca2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/src/fmbkupenginewrapper/private/win32/fmbkupengine_p.cpp	Fri Apr 16 14:53:38 2010 +0300
@@ -0,0 +1,427 @@
+/*
+ * 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:
+ *      The source file of the backup engine implement for win32
+ */
+
+#include "FmBkupEngine_p.h"
+#include <QThread>
+
+#include "fmbkupcommon.h"
+#include "fmbackupsettings.h"
+#include "fmrestoresettings.h"
+#include "fmdefine.h"
+
+#include <QSettings>
+
+FmBkupEnginePrivate::FmBkupEnginePrivate(FmBkupEngine* bkupEngine): q(bkupEngine), mError( FmErrNone )
+{
+   mBkupThread = new FmBkupThread( this );
+
+    connect( mBkupThread, SIGNAL( notifyPreparing( bool ) ), this, SLOT( onNotifyPreparing( bool ) ) );
+	connect( mBkupThread, SIGNAL( notifyStart( bool, int ) ), this, SLOT( onNotifyStart( bool, int ) ) );
+	connect( mBkupThread, SIGNAL( notifyUpdate(int) ), this, SLOT( onNotifyUpdate(int) ) );
+	connect( mBkupThread, SIGNAL( notifyFinish(int) ), 
+			this, SLOT( onNotifyFinish(int) ) );
+	connect( mBkupThread, SIGNAL( notifyMemoryLow(int, int& ) ), this, SLOT( onNotifyMemoryLow(int, int&) ) );
+}
+
+FmBkupEnginePrivate::~FmBkupEnginePrivate()
+{
+
+}
+
+void FmBkupEnginePrivate::onNotifyPreparing( bool cancelable )
+{
+    emit notifyPreparing( cancelable );
+}
+void FmBkupEnginePrivate::onNotifyStart( bool cancelable, int totalCount )
+{
+    emit notifyStart( cancelable, totalCount );
+}
+void FmBkupEnginePrivate::onNotifyUpdate( int count )
+{
+    emit notifyUpdate( count );
+}
+void FmBkupEnginePrivate::onNotifyFinish( int err )
+{
+    emit notifyFinish( err );
+}
+void FmBkupEnginePrivate::onNotifyMemoryLow( int memoryValue, int &userError )
+{
+    emit notifyMemoryLow( memoryValue, userError );
+}
+
+bool FmBkupEnginePrivate::startBackup( QList<FmBkupDrivesAndOperation* > drivesAndOperationList,
+QList<FmBkupBackupCategory*> backupCategoryList,QString drive, quint32 content )
+{
+    mError = mBkupThread->asyncBackup( drivesAndOperationList, backupCategoryList, drive, content );
+    return ( mError == FmErrNone );
+}
+
+void FmBkupEnginePrivate::cancelBackup()
+{
+    mBkupThread->stop();
+}
+
+int FmBkupEnginePrivate::deleteBackup( QList<FmBkupDrivesAndOperation* > drivesAndOperationList )
+{
+    mError = FmErrNone;
+
+    selection.clear();
+    FmRestoreSettings& rstSettings( *( q->RestoreSettingsL() ) );
+    rstSettings.GetSelectionL( selection );
+    QSettings settings("Nokia", "FileManager");
+    foreach( FmRestoreInfo restoreInfo, selection ) {
+        switch( restoreInfo.content() )
+        {
+        case FmBkupEngineCommon::EFileManagerBackupContentSettings:
+            settings.beginGroup("BackupSettings");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        case FmBkupEngineCommon::EFileManagerBackupContentMessages:
+            settings.beginGroup("BackupMessages");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        case FmBkupEngineCommon::EFileManagerBackupContentContacts:
+            settings.beginGroup("BackupContacts");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        case FmBkupEngineCommon::EFileManagerBackupContentCalendar:
+            settings.beginGroup("BackupCalendar");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        case FmBkupEngineCommon::EFileManagerBackupContentBookmarks:
+            settings.beginGroup("BackupBookmarks");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        case FmBkupEngineCommon::EFileManagerBackupContentUserFiles:
+            settings.beginGroup("BackupUserFiles");
+            settings.remove( QString( "" ) );
+            settings.endGroup();
+            break;
+        default:
+            break;
+        }
+    }
+
+    
+
+    return mError;
+}
+
+//    TUint32 FmgrToBkupMask( const TUint32 aFmrgMask );
+int FmBkupEnginePrivate::error()
+{
+    return mError;
+
+}
+
+//
+bool FmBkupEnginePrivate::StartRestoreL( QList<FmBkupDrivesAndOperation* > drivesAndOperationList )
+{
+    selection.clear();
+    FmRestoreSettings& rstSettings( *( q->RestoreSettingsL() ) );
+    rstSettings.GetSelectionL( selection );
+
+    mError = mBkupThread->asyncRestore( drivesAndOperationList,selection );
+    return ( mError == FmErrNone );
+
+}
+    
+
+void FmBkupEnginePrivate::GetRestoreInfoArray( QList<FmBkupDrivesAndOperation* > drivesAndOperationList,
+        QList< FmRestoreInfo > &restoreInfoList,
+        const int aDrive )
+{
+    restoreInfoList.clear();
+    QString debugString;
+    QSettings settings("Nokia", "FileManager");
+    QDateTime dateTime;
+
+    settings.beginGroup("BackupSettings");
+    quint32 content  = (settings.value("content", 0).toUInt());
+    debugString = settings.value( "dateTime").toString();
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    QString drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+    if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+    settings.beginGroup("BackupMessages");
+    content  = (settings.value("content", 0).toUInt());
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+   if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+    settings.beginGroup("BackupContacts");
+    content  = (settings.value("content", 0).toUInt());
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+    if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+    settings.beginGroup("BackupCalendar");
+    content  = (settings.value("content", 0).toUInt());
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+    if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+    settings.beginGroup("BackupBookmarks");
+    content  = (settings.value("content", 0).toUInt());
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+    if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+    settings.beginGroup("BackupUserFiles");
+    content  = (settings.value("content", 0).toUInt());
+    dateTime.setTime_t( settings.value( "dateTime" ).toUInt() );
+    drive = settings.value( "drive" ).toString();
+    settings.endGroup();
+    if( content != 0 && ( DriverNameToNumber(drive) == aDrive || aDrive < 0 ) )
+    {
+        FmRestoreInfo restoreInfo( content, dateTime, drive );
+        restoreInfoList.push_back( restoreInfo );
+    }
+
+}
+
+
+
+
+FmBkupThread::FmBkupThread( QObject *parent ) : QThread( parent ), mRunType( RunTypeNone ), mStop( false )
+{
+}
+
+FmBkupThread::~FmBkupThread()
+{
+
+}
+
+int FmBkupThread::asyncBackup( QList<FmBkupDrivesAndOperation* > drivesAndOperationList,
+QList<FmBkupBackupCategory*> backupCategoryList,QString drive, quint32 content )
+{
+    if( this->isRunning() ){
+        return FmErrAlreadyStarted;
+    }
+
+    if( drivesAndOperationList.count() == 0 || backupCategoryList.count() == 0 ){
+        return FmErrWrongParam;
+    }
+
+    mRunType = RunTypeBackup;
+    mDrivesAndOperationList.clear();
+    mBackupCategoryList.clear();
+
+    foreach( FmBkupDrivesAndOperation* driversAndOperation , drivesAndOperationList ) {
+        mDrivesAndOperationList.push_back( driversAndOperation );
+    }
+    foreach( FmBkupBackupCategory* backupCategory , backupCategoryList ) {
+        mBackupCategoryList.push_back( backupCategory );
+    }
+
+    mDrive = drive;
+    mContent = content;
+    start();
+    return FmErrNone;
+}
+int FmBkupThread::asyncRestore( QList<FmBkupDrivesAndOperation* > drivesAndOperationList, QList< FmRestoreInfo > selection )
+{
+    if( this->isRunning() ) {
+        return FmErrAlreadyStarted;
+    }
+
+    if( drivesAndOperationList.count() == 0 ){
+        return FmErrWrongParam;
+    }
+
+    mRunType = RunTypeRestore;
+    mDrivesAndOperationList.clear();
+    foreach( FmBkupDrivesAndOperation* driversAndOperation , drivesAndOperationList ) {
+        mDrivesAndOperationList.push_back( driversAndOperation );
+    }
+    
+    foreach( FmRestoreInfo info , selection ) {
+        mSelection.push_back( info );
+    }
+    start();
+    return FmErrNone;
+}
+
+
+
+void FmBkupThread::stop()
+{
+    mStop = true;
+}
+
+
+
+
+void FmBkupThread::run()
+{
+    mStop = false;
+
+ 
+    if( mRunType == RunTypeBackup )
+    {
+        emit notifyPreparing( true );
+        this->sleep( 1 );
+        emit notifyStart( true, 6 );
+
+        QSettings settings("Nokia", "FileManager");
+
+        if( mContent && FmBkupEngineCommon::EFileManagerBackupContentSettings ) {
+            settings.beginGroup("BackupSettings");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentSettings );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            this->msleep( 500 );
+            emit notifyUpdate( 1 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        } 
+        if( mContent && FmBkupEngineCommon::EFileManagerBackupContentMessages ) {
+            settings.beginGroup("BackupMessages");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentMessages );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            this->msleep( 500 );
+            emit notifyUpdate( 2 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        }
+        if ( mContent && FmBkupEngineCommon::EFileManagerBackupContentContacts ) {
+            settings.beginGroup("BackupContacts");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentContacts );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            this->msleep( 500 );
+            emit notifyUpdate( 3 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        }
+        if ( mContent && FmBkupEngineCommon::EFileManagerBackupContentCalendar ) {
+            settings.beginGroup("BackupCalendar");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentCalendar );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            this->msleep( 500 );
+            emit notifyUpdate( 4 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        }
+        if ( mContent && FmBkupEngineCommon::EFileManagerBackupContentBookmarks ) {
+            settings.beginGroup("BackupBookmarks");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentBookmarks );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            this->msleep( 500 );
+            emit notifyUpdate( 5 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        }
+        if ( mContent && FmBkupEngineCommon::EFileManagerBackupContentUserFiles ) {
+            settings.beginGroup("BackupUserFiles");
+            settings.setValue( "content", FmBkupEngineCommon::EFileManagerBackupContentUserFiles );
+            settings.setValue( "dateTime", QDateTime::currentDateTime().toTime_t() );
+            settings.setValue( "drive", mDrive );
+            settings.endGroup();
+            emit notifyUpdate( 6 );
+            if( mStop ) {
+                emit notifyFinish( FmErrCancel );
+                return;
+            }
+        }
+    } else if( mRunType == RunTypeRestore )
+    {
+
+        emit notifyPreparing( false );
+        this->sleep( 1 );
+        emit notifyStart( false, 6 );
+        this->msleep( 500 );
+        emit notifyUpdate( 1 );
+        this->msleep( 500 );
+        emit notifyUpdate( 2 );
+        this->msleep( 500 );
+        emit notifyUpdate( 3 );
+        this->msleep( 500 );
+        emit notifyUpdate( 4 );
+        this->msleep( 500 );
+        emit notifyUpdate( 5 );
+        this->msleep( 500 );
+        emit notifyUpdate( 6 );
+        this->msleep( 500 );
+    }
+
+    emit notifyFinish( FmErrNone );
+}
+
+
+int FmBkupEnginePrivate::DriverNameToNumber( QString driverName )
+{
+    int drive = 0;
+    drive = driverName[0].toUpper().toAscii() - 'A' + 0/*EDriveA*/;
+    return drive;
+}
+QString FmBkupEnginePrivate::NumberToDriverName( int driver )
+{
+    QChar driverChar( driver - 0/*EDriveA*/ + 'A' );
+    QString driverName = QString( driverChar ) + ':';
+    return driverName;
+}
+