OSDN Git Service

Ver0.26
[gefu/Gefu.git] / deleteworker.cpp
1 #include "deleteworker.h"\r
2 \r
3 #include <QFileInfo>\r
4 #include <QDir>\r
5 #include <QDebug>\r
6 #include <QThread>\r
7 \r
8 const int SLEEP_TIME = 1;\r
9 \r
10 ///////////////////////////////////////////////////////////////////////////////\r
11 /// \brief DeleteWorker::DeleteWorker\r
12 ///\r
13 /// コンストラクタ\r
14 ///\r
15 DeleteWorker::DeleteWorker() :\r
16     OperationWorker(),\r
17     m_DeleteList(),\r
18     m_Targets()\r
19 {\r
20 }\r
21 \r
22 ///////////////////////////////////////////////////////////////////////////////\r
23 /// \brief DeleteWorker::Listup\r
24 /// \param path 削除するパス\r
25 ///\r
26 /// 削除対象をリストアップします。(再帰)\r
27 ///\r
28 void DeleteWorker::Listup(const QString &path)\r
29 {\r
30     if (isAborted()) {\r
31         return;\r
32     }\r
33     this->thread()->msleep(SLEEP_TIME);\r
34 \r
35     if (QFileInfo(path).isDir()) {\r
36         QDir dir(path);\r
37         QFileInfoList list = dir.entryInfoList(QDir::NoDotAndDotDot |\r
38                                                QDir::System |\r
39                                                QDir::Hidden |\r
40                                                QDir::AllDirs |\r
41                                                QDir::Files,\r
42                                                QDir::DirsFirst);\r
43         foreach (const QFileInfo &info, list) {\r
44             Listup(info.absoluteFilePath());\r
45         }\r
46     }\r
47 \r
48     m_Targets << path;\r
49 }\r
50 \r
51 ///////////////////////////////////////////////////////////////////////////////\r
52 /// \brief DeleteWorker::run\r
53 ///\r
54 /// 削除を実行します。\r
55 ///\r
56 void DeleteWorker::run()\r
57 {\r
58     foreach (const QFileInfo &info, m_DeleteList) {\r
59         if (isAborted()) {\r
60             emit finished(true);\r
61             return;\r
62         }\r
63         Listup(info.absoluteFilePath());\r
64     }\r
65 \r
66     bool ret;\r
67     int successCount = 0;\r
68     int errorCount = 0;\r
69     QString msg;\r
70     foreach (const QString &path, m_Targets) {\r
71         this->thread()->msleep(SLEEP_TIME);\r
72         if (isAborted()) {\r
73             emit finished(true);\r
74             return;\r
75         }\r
76 \r
77         emit progress(tr("削除:%1").arg(path));\r
78 \r
79         QFileInfo info(path);\r
80         if (info.isDir()) {\r
81             QDir dir(path);\r
82             ret = dir.rmdir(path);\r
83         }\r
84         else {\r
85             ret = QFile::remove(path);\r
86         }\r
87 \r
88         if (ret) {\r
89             successCount++;\r
90             emit success(tr("成功"));\r
91         }\r
92         else {\r
93             errorCount++;\r
94             emit error(tr("失敗"));\r
95         }\r
96 \r
97         msg = tr("%1アイテム成功。").arg(successCount);\r
98         if (errorCount > 0) {\r
99             msg += tr("%1アイテム失敗。").arg(errorCount);\r
100         }\r
101         emit information(msg);\r
102     }\r
103 \r
104     emit finished();\r
105 }\r
106 \r
107 ///////////////////////////////////////////////////////////////////////////////\r
108 /// \brief DeleteWorker::initialText\r
109 /// \return 初期表示テキストを返します。\r
110 ///\r
111 QString DeleteWorker::initialText() const\r
112 {\r
113     return tr("削除準備中...");\r
114 }\r