filemanager/src/filemanager/src/operationservice/fmoperationmove.cpp
changeset 16 ada7962b4308
parent 14 1957042d8c7e
child 21 15299bc55001
--- a/filemanager/src/filemanager/src/operationservice/fmoperationmove.cpp	Fri Apr 16 14:53:38 2010 +0300
+++ b/filemanager/src/filemanager/src/operationservice/fmoperationmove.cpp	Mon May 03 12:24:39 2010 +0300
@@ -19,6 +19,7 @@
 #include "fmcommon.h"
 #include "fmoperationbase.h"
 #include "fmdrivedetailstype.h"
+#include "fmutils.h"
 
 #include <QDir>
 #include <QFileInfo>
@@ -79,15 +80,39 @@
             return ret;
         }
         QString newName;
+        bool isAcceptReplace = false;
         QFileInfo destFi( mTargetPath + fi.fileName() );
+        // while for duplicated file/dir
         while( destFi.exists() ) {
-            emit askForRename( destFi.absoluteFilePath(), &newName );
-            if( newName.isEmpty() ) {
-                ret = FmErrCancel;
-                break;
+            if( destFi.isFile() && destFi.absoluteFilePath().compare( fi.absoluteFilePath(), Qt::CaseInsensitive ) != 0  ) {
+                emit askForReplace( destFi.absoluteFilePath(), fi.absoluteFilePath(), &isAcceptReplace );
+                if( isAcceptReplace ) {
+                    //delete src file
+                    if( !QFile::remove( destFi.absoluteFilePath() ) ) {
+                        *mErrString = destFi.absoluteFilePath();
+                        ret = FmErrCannotRemove;
+                        break;
+                    }
+                    destFi.setFile( destFi.absoluteFilePath() );
+                } else {
+                    emit askForRename( destFi.absoluteFilePath(), &newName );
+                    if( newName.isEmpty() ) {
+                        ret = FmErrCancel;
+                        break;
+                    }
+                    QString targetName = mTargetPath + newName;
+                    destFi.setFile( targetName );
+                }
+            } else{
+                // destination is dir
+                emit askForRename( destFi.absoluteFilePath(), &newName );
+                if( newName.isEmpty() ) {
+                    ret = FmErrCancel;
+                    break;
+                }
+                QString targetName = mTargetPath + newName;
+                destFi.setFile( targetName );
             }
-            QString targetName = mTargetPath + newName;
-            destFi.setFile( targetName );
         }
         if( ret != FmErrNone ) {
             return ret;
@@ -132,7 +157,13 @@
         }
         IncreaseProgress( fileSize );
     } else if (fi.isDir()) {
-        ret = moveDirInsideContent( source, newName );
+        if( FmUtils::isDefaultFolder( source ) ){
+            ret = FmErrRemoveDefaultFolder;
+        }
+        else{
+            ret = moveDirInsideContent( source, newName );
+        }
+        
         if( ret!= FmErrNone ) {
             return ret;
         }
@@ -227,6 +258,9 @@
 
 void FmOperationMove::IncreaseProgress( quint64 size )
 {
+    if( mTotalSize <=0 ) {
+        return;
+    }
     mMovedSize += size;
     int step = ( mMovedSize * 100 ) / mTotalSize;
     if( step > mCurrentStep ) {