#include <QDateTime>\r
#include <QThread>\r
\r
-CopyMoveWorker::CopyMoveWorker(QObject *parent) :\r
- IWorker(parent),\r
- m_CopyList(NULL),\r
+const int SLEEP_TIME = 1;\r
+\r
+CopyMoveWorker::CopyMoveWorker() :\r
+ OperationWorker(),\r
+ m_CopyList(),\r
m_tgtDir(),\r
m_CopyMap(),\r
m_AskingMutex(),\r
{\r
}\r
\r
-void CopyMoveWorker::operate()\r
+void CopyMoveWorker::Listup(const QString &srcPath, const QString &tgtPath)\r
{\r
- if (m_Move) {\r
- m_progressText->setText(tr("移動準備中..."));\r
+ if (isAborted()) {\r
+ return;\r
}\r
- else {\r
- m_progressText->setText(tr("コピー準備中..."));\r
+ this->thread()->msleep(SLEEP_TIME);\r
+\r
+ QFileInfo info(srcPath);\r
+ QDir tgtDir(tgtPath);\r
+\r
+ m_CopyMap.insert(srcPath, tgtDir.absoluteFilePath(info.fileName()));\r
+ if (!info.isDir()) {\r
+ return;\r
+ }\r
+\r
+ QDir srcDir(srcPath);\r
+ QFileInfoList list = srcDir.entryInfoList(QDir::NoDotAndDotDot |\r
+ QDir::System |\r
+ QDir::Hidden |\r
+ QDir::AllDirs |\r
+ QDir::Files,\r
+ QDir::DirsFirst);\r
+ foreach (QFileInfo info2, list) {\r
+ Listup(info2.absoluteFilePath(),\r
+ tgtDir.absoluteFilePath(info.fileName()));\r
}\r
+}\r
\r
- foreach (const QString &srcPath, *m_CopyList) {\r
- if (isStopRequested()) {\r
- emit canceled();\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief CopyMoveWorker::run\r
+///\r
+void CopyMoveWorker::run()\r
+{\r
+ foreach (const QString &path, m_CopyList) {\r
+ if (isAborted()) {\r
+ emit finished(true);\r
return;\r
}\r
- Listup(srcPath, m_tgtDir);\r
+ Listup(path, m_tgtDir);\r
}\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
+ const QString operation = (m_Move) ? tr("移動:%1 -> %2") :\r
+ tr("コピー:%1 -> %2");\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
- if (isStopRequested()) {\r
- emit canceled();\r
+ this->thread()->msleep(SLEEP_TIME);\r
+ if (isAborted()) {\r
+ emit finished(true);\r
return;\r
}\r
QFileInfo srcInfo(it.key());\r
QFileInfo tgtInfo(it.value());\r
\r
- emit operation((m_Move ? tr("移動") : tr("コピー:"))\r
- + srcInfo.absoluteFilePath()\r
- + tr(" -> ")\r
- + tgtInfo.absoluteFilePath());\r
+ emit progress(operation\r
+ .arg(srcInfo.absoluteFilePath())\r
+ .arg(tgtInfo.absoluteFilePath()));\r
\r
if (srcInfo.isDir()) {\r
if (tgtInfo.exists()) {\r
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, ©Method, &alias,\r
- srcInfo.absoluteFilePath(),\r
- tgtInfo.absoluteFilePath());\r
- while (isAsking()) {\r
- this->thread()->msleep(100);\r
- }\r
+ m_Asking = true;\r
+ emit askOverWrite(©Method,\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 (isAborted()) {\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
+ emit progress(msg);\r
+ emit finished(true);\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
break;\r
}\r
}\r
- emit operation(tr("=>") + tgtInfo.fileName() + tr("にリネーム"));\r
+ emit progress(tr("=> %1 にリネーム").arg(tgtInfo.fileName()));\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
+ emit progress(tr("=> %1 にリネーム").arg(tgtInfo.fileName()));\r
+ }\r
+ else {\r
+ qDebug() << "Unknown method : " << copyMethod;\r
+ Q_ASSERT(false);\r
}\r
}\r
\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
if (errDelCount > 0) {\r
msg += tr("%1ファイル削除失敗。").arg(errDelCount);\r
}\r
- m_progressText->setText(msg);\r
+ emit information(msg);\r
}\r
\r
if (m_Move) {\r
emit finished();\r
}\r
\r
-void CopyMoveWorker::Listup(const QString &srcPath, const QString &tgtPath)\r
+QString CopyMoveWorker::initialText() const\r
{\r
- if (isStopRequested()) {\r
- return;\r
+ if (m_Move) {\r
+ return tr("移動準備中...");\r
}\r
-\r
- QFileInfo info(srcPath);\r
- QDir tgtDir(tgtPath);\r
-\r
- m_CopyMap.insert(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
- Listup(info2.absoluteFilePath(),\r
- tgtDir.absoluteFilePath(info.fileName()));\r
- }\r
+ else {\r
+ return tr("コピー準備中...");\r
}\r
}\r