filemanager/src/filemanager/src/operationservice/fmoperationmove.cpp
changeset 16 ada7962b4308
parent 14 1957042d8c7e
child 21 15299bc55001
equal deleted inserted replaced
14:1957042d8c7e 16:ada7962b4308
    17 
    17 
    18 #include "fmoperationmove.h"
    18 #include "fmoperationmove.h"
    19 #include "fmcommon.h"
    19 #include "fmcommon.h"
    20 #include "fmoperationbase.h"
    20 #include "fmoperationbase.h"
    21 #include "fmdrivedetailstype.h"
    21 #include "fmdrivedetailstype.h"
       
    22 #include "fmutils.h"
    22 
    23 
    23 #include <QDir>
    24 #include <QDir>
    24 #include <QFileInfo>
    25 #include <QFileInfo>
    25 #include <QStringList>
    26 #include <QStringList>
    26 #include <QStack>
    27 #include <QStack>
    77             *mErrString = source;
    78             *mErrString = source;
    78             ret = FmErrSrcPathDoNotExist;
    79             ret = FmErrSrcPathDoNotExist;
    79             return ret;
    80             return ret;
    80         }
    81         }
    81         QString newName;
    82         QString newName;
       
    83         bool isAcceptReplace = false;
    82         QFileInfo destFi( mTargetPath + fi.fileName() );
    84         QFileInfo destFi( mTargetPath + fi.fileName() );
       
    85         // while for duplicated file/dir
    83         while( destFi.exists() ) {
    86         while( destFi.exists() ) {
    84             emit askForRename( destFi.absoluteFilePath(), &newName );
    87             if( destFi.isFile() && destFi.absoluteFilePath().compare( fi.absoluteFilePath(), Qt::CaseInsensitive ) != 0  ) {
    85             if( newName.isEmpty() ) {
    88                 emit askForReplace( destFi.absoluteFilePath(), fi.absoluteFilePath(), &isAcceptReplace );
    86                 ret = FmErrCancel;
    89                 if( isAcceptReplace ) {
    87                 break;
    90                     //delete src file
    88             }
    91                     if( !QFile::remove( destFi.absoluteFilePath() ) ) {
    89             QString targetName = mTargetPath + newName;
    92                         *mErrString = destFi.absoluteFilePath();
    90             destFi.setFile( targetName );
    93                         ret = FmErrCannotRemove;
       
    94                         break;
       
    95                     }
       
    96                     destFi.setFile( destFi.absoluteFilePath() );
       
    97                 } else {
       
    98                     emit askForRename( destFi.absoluteFilePath(), &newName );
       
    99                     if( newName.isEmpty() ) {
       
   100                         ret = FmErrCancel;
       
   101                         break;
       
   102                     }
       
   103                     QString targetName = mTargetPath + newName;
       
   104                     destFi.setFile( targetName );
       
   105                 }
       
   106             } else{
       
   107                 // destination is dir
       
   108                 emit askForRename( destFi.absoluteFilePath(), &newName );
       
   109                 if( newName.isEmpty() ) {
       
   110                     ret = FmErrCancel;
       
   111                     break;
       
   112                 }
       
   113                 QString targetName = mTargetPath + newName;
       
   114                 destFi.setFile( targetName );
       
   115             }
    91         }
   116         }
    92         if( ret != FmErrNone ) {
   117         if( ret != FmErrNone ) {
    93             return ret;
   118             return ret;
    94         }
   119         }
    95 
   120 
   130             *mErrString = source;
   155             *mErrString = source;
   131             ret = FmErrCannotRemove;
   156             ret = FmErrCannotRemove;
   132         }
   157         }
   133         IncreaseProgress( fileSize );
   158         IncreaseProgress( fileSize );
   134     } else if (fi.isDir()) {
   159     } else if (fi.isDir()) {
   135         ret = moveDirInsideContent( source, newName );
   160         if( FmUtils::isDefaultFolder( source ) ){
       
   161             ret = FmErrRemoveDefaultFolder;
       
   162         }
       
   163         else{
       
   164             ret = moveDirInsideContent( source, newName );
       
   165         }
       
   166         
   136         if( ret!= FmErrNone ) {
   167         if( ret!= FmErrNone ) {
   137             return ret;
   168             return ret;
   138         }
   169         }
   139         if ( !fi.dir().rmdir( fi.absoluteFilePath() ) ) {
   170         if ( !fi.dir().rmdir( fi.absoluteFilePath() ) ) {
   140             *mErrString = fi.absolutePath();
   171             *mErrString = fi.absolutePath();
   225     return FmErrNone;
   256     return FmErrNone;
   226 }
   257 }
   227 
   258 
   228 void FmOperationMove::IncreaseProgress( quint64 size )
   259 void FmOperationMove::IncreaseProgress( quint64 size )
   229 {
   260 {
       
   261     if( mTotalSize <=0 ) {
       
   262         return;
       
   263     }
   230     mMovedSize += size;
   264     mMovedSize += size;
   231     int step = ( mMovedSize * 100 ) / mTotalSize;
   265     int step = ( mMovedSize * 100 ) / mTotalSize;
   232     if( step > mCurrentStep ) {
   266     if( step > mCurrentStep ) {
   233         mCurrentStep = step;
   267         mCurrentStep = step;
   234         emit notifyProgress( mCurrentStep );
   268         emit notifyProgress( mCurrentStep );