OSDN Git Service

Ver0.19
[gefu/Gefu.git] / copymoveworker.cpp
index 972e435..f23ee70 100644 (file)
@@ -35,13 +35,12 @@ void CopyMoveWorker::operate()
     }\r
 \r
     bool ret;\r
-    int copyMethod = OverWriteDialog::Undefined;\r
-    int prevCopyMethod = OverWriteDialog::Undefined;\r
     int successCount = 0;\r
     int skipCount = 0;\r
     int errorCount = 0;\r
     int errDelCount = 0;\r
     QString msg;\r
+    QString copyMethod;\r
     QString alias;\r
     StringMap::iterator it;\r
     for (it = m_CopyMap.begin(); it != m_CopyMap.end(); it++) {\r
@@ -73,45 +72,52 @@ void CopyMoveWorker::operate()
         do {    // コピーをスキップするのにbreakを使うがためのdo-while\r
             if (tgtInfo.exists()) {\r
                 // 解決方法を選択\r
-                if (copyMethod == OverWriteDialog::Undefined ||\r
-                        copyMethod == OverWriteDialog::Rename)\r
-                {\r
-                    bool bOk;\r
-                    m_Asking = true;\r
-                    emit askOverWrite(&bOk, &prevCopyMethod, &copyMethod, &alias,\r
-                                      srcInfo.absoluteFilePath(),\r
-                                      tgtInfo.absoluteFilePath());\r
-                    while (isAsking()) {\r
-                        this->thread()->msleep(100);\r
-                    }\r
+                m_Asking = true;\r
+                emit askOverWrite(&copyMethod,\r
+                                  &alias,\r
+                                  srcInfo.absoluteFilePath(),\r
+                                  tgtInfo.absoluteFilePath());\r
+\r
+                while (isAsking()) {\r
+                    thread()->msleep(100);\r
+                }\r
 \r
-                    if (!bOk) {\r
-                        requestStop();\r
-                        msg = tr("%1個のファイルをコピーしました。").arg(successCount);\r
-                        if (skipCount > 0) {\r
-                            msg += tr("%1個のファイルをスキップしました。").arg(skipCount);\r
-                        }\r
-                        if (errorCount > 0) {\r
-                            msg += tr("%1個のファイルをコピーできませんでした。").arg(errorCount);\r
-                        }\r
-                        m_progressText->setText(msg);\r
-                        emit canceled();\r
-                        return;\r
+                // キャンセルされた?\r
+                if (isStopRequested()) {\r
+                    msg = tr("%1個のファイルをコピーしました。").arg(successCount);\r
+                    if (skipCount > 0) {\r
+                        msg += tr("%1個のファイルをスキップしました。").arg(skipCount);\r
                     }\r
+                    if (errorCount > 0) {\r
+                        msg += tr("%1個のファイルをコピーできませんでした。").arg(errorCount);\r
+                    }\r
+                    m_progressText->setText(msg);\r
+                    emit canceled();\r
+                    return;\r
                 }\r
 \r
-                if (prevCopyMethod == OverWriteDialog::OverWrite) {\r
+                if (copyMethod == "rbOverWrite") {\r
+                    if (srcInfo.absoluteFilePath() == tgtInfo.absoluteFilePath()) {\r
+                        emit success(tr("同一ファイルへの操作のためスキップ"));\r
+                        skipCount++;\r
+                        break;\r
+                    }\r
                     QFile(tgtInfo.absoluteFilePath()).remove();\r
                 }\r
-                else if (prevCopyMethod == OverWriteDialog::OverWriteIfNew) {\r
+                else if (copyMethod == "rbOverWriteIfNew") {\r
                     if (srcInfo.lastModified() <= tgtInfo.lastModified()) {\r
-                        emit success(tr("スキップ"));\r
+                        emit success(tr("古いファイルのためスキップ"));\r
+                        skipCount++;\r
+                        break;\r
+                    }\r
+                    if (srcInfo.absoluteFilePath() == tgtInfo.absoluteFilePath()) {\r
+                        emit success(tr("同一ファイルへの操作のためスキップ"));\r
                         skipCount++;\r
                         break;\r
                     }\r
                     QFile(tgtInfo.absoluteFilePath()).remove();\r
                 }\r
-                else if (prevCopyMethod == OverWriteDialog::AppendNumber) {\r
+                else if (copyMethod == "rbAppendNumber") {\r
                     QString baseName = tgtInfo.baseName();\r
                     QString suffix = tgtInfo.completeSuffix();\r
                     for (int n = 1; ; n++) {\r
@@ -123,29 +129,32 @@ void CopyMoveWorker::operate()
                     }\r
                     emit operation(tr("=>") + tgtInfo.fileName() + tr("にリネーム"));\r
                 }\r
-                else if (prevCopyMethod == OverWriteDialog::Skip) {\r
+                else if (copyMethod == "rbSkip") {\r
                     emit success(tr("スキップ"));\r
                     skipCount++;\r
                     break;\r
                 }\r
-                else if (prevCopyMethod == OverWriteDialog::Rename) {\r
+                else if (copyMethod == "rbRename") {\r
                     tgtInfo.setFile(tgtInfo.absolutePath(), alias);\r
                     emit operation(tr("=>") + tgtInfo.fileName() + tr("にリネーム"));\r
                 }\r
+                else {\r
+                    qDebug() << "Unknown method : " << copyMethod;\r
+                    Q_ASSERT(false);\r
+                }\r
             }\r
 \r
             ret = QFile::copy(srcInfo.absoluteFilePath(), tgtInfo.absoluteFilePath());\r
             if (ret) {\r
                 successCount++;\r
                 emit success(tr("成功"));\r
-                if (m_Move) {\r
+                if (m_Move && srcInfo.absoluteFilePath() != tgtInfo.absoluteFilePath()) {\r
                     ret = QFile(srcInfo.absoluteFilePath()).remove();\r
                     if (!ret) {\r
                         errDelCount++;\r
                         emit error("元ファイルの削除に失敗");\r
                     }\r
                 }\r
-\r
             }\r
             else {\r
                 errorCount++;\r
@@ -188,7 +197,7 @@ void CopyMoveWorker::Listup(const QString &srcPath, const QString &tgtPath)
     QDir tgtDir(tgtPath);\r
 \r
     m_CopyMap.insert(srcPath, tgtDir.absoluteFilePath(info.fileName()));\r
-//    qDebug() << srcPath << " -> " << tgtDir.absoluteFilePath(info.fileName());\r
+    qDebug() << srcPath << " -> " << tgtDir.absoluteFilePath(info.fileName());\r
     if (info.isDir()) {\r
         QDir srcDir(srcPath);\r
         foreach (QFileInfo info2, srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {\r