]> Some of my projects - localmylist.git/commitdiff
Add UnknownFileLookupTask to remove known files from unkown_file and (optionally...
authorAPTX <marek321@gmail.com>
Wed, 13 Jun 2012 02:01:27 +0000 (04:01 +0200)
committerAPTX <marek321@gmail.com>
Wed, 13 Jun 2012 02:01:44 +0000 (04:01 +0200)
localmylist/include/LocalMyList/UnknownFileLookupTask [new file with mode: 0644]
localmylist/localmylist.pro
localmylist/unknownfilelookuptask.cpp [new file with mode: 0644]
localmylist/unknownfilelookuptask.h [new file with mode: 0644]

diff --git a/localmylist/include/LocalMyList/UnknownFileLookupTask b/localmylist/include/LocalMyList/UnknownFileLookupTask
new file mode 100644 (file)
index 0000000..3283420
--- /dev/null
@@ -0,0 +1,2 @@
+#include "../../unknownfilelookuptask.h"
+
index 3c2951e227917bbc4dca8268522e1c0e133656f7..e5149a7fcd504ed9bbac45b1308e831574fa7b1a 100644 (file)
@@ -22,7 +22,8 @@ SOURCES += \
        animetitleparsetask.cpp \
        mylistexportparsetask.cpp \
        settings.cpp \
-       renamehandler.cpp
+       renamehandler.cpp \
+       unknownfilelookuptask.cpp
 
 HEADERS += \
        localmylist_global.h \
@@ -38,7 +39,8 @@ HEADERS += \
        animetitleparsetask.h \
        mylistexportparsetask.h \
        settings.h \
-       renamehandler.h
+       renamehandler.h \
+       unknownfilelookuptask.h
 
 CONV_HEADERS += \
        include/LocalMyList/AbstractTask \
@@ -49,7 +51,8 @@ CONV_HEADERS += \
        include/LocalMyList/MyList \
        include/LocalMyList/MyListExportParseTask \
        include/LocalMyList/MyListModel \
-       include/LocalMyList/Settings
+       include/LocalMyList/Settings \
+       include/LocalMyList/UnknownFileLookupTask
 
 SHARE += \
        share/schema/schema.sql \
diff --git a/localmylist/unknownfilelookuptask.cpp b/localmylist/unknownfilelookuptask.cpp
new file mode 100644 (file)
index 0000000..78f6bce
--- /dev/null
@@ -0,0 +1,68 @@
+#include "unknownfilelookuptask.h"
+
+#include "database.h"
+
+namespace LocalMyList {
+
+UnknownFileLookupTask::UnknownFileLookupTask(Database *db, QObject *parent) :
+       AbstractTask(db, parent)
+{
+}
+
+QString UnknownFileLookupTask::taskSubject() const
+{
+       return tr("Unkown File Lookup");
+}
+
+bool UnknownFileLookupTask::canUseThreads() const
+{
+       return true;
+}
+
+void UnknownFileLookupTask::start()
+{
+       offset = 0;
+       workUnit();
+}
+
+void UnknownFileLookupTask::workUnit()
+{
+       RaiiTransaction t(db);
+
+       QSqlQuery q(db->connection());
+       q.prepare("SELECT ed2k, size, host_id, path FROM unknown_file "
+                         "LIMIT :limit "
+                         "OFFSET :offset");
+
+       q.bindValue(":limit", OPERATIONS_PER_UNIT);
+       q.bindValue(":offset", offset);
+
+       if (!db->exec(q))
+       {
+               emit finished();
+               return;
+       }
+
+       while (q.next())
+       {
+               File f;
+               f.ed2k = q.value(0).toByteArray();
+               f.size = q.value(1).toLongLong();
+               f.fid = db->isKnownFile(f.ed2k, f.size);
+
+               if (!f.fid)
+                       continue;
+               db->removeKnownUnknownFile(f);
+       }
+       t.commit();
+
+       offset += OPERATIONS_PER_UNIT;
+
+
+       if (q.size() < OPERATIONS_PER_UNIT)
+               emit finished();
+       else
+               emit nextWorkUnit();
+}
+
+} // namespace LocalMyList
diff --git a/localmylist/unknownfilelookuptask.h b/localmylist/unknownfilelookuptask.h
new file mode 100644 (file)
index 0000000..856af8a
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef UNKNOWNFILELOOKUPTASK_H
+#define UNKNOWNFILELOOKUPTASK_H
+
+#include "abstracttask.h"
+
+namespace LocalMyList {
+
+class LOCALMYLISTSHARED_EXPORT UnknownFileLookupTask : public AbstractTask
+{
+       Q_OBJECT
+public:
+       explicit UnknownFileLookupTask(Database *db, QObject *parent = 0);
+       
+       QString taskSubject() const;
+       bool canUseThreads() const;
+
+public slots:
+       void start();
+
+protected:
+       void workUnit();
+       
+private:
+       int offset;
+};
+
+} // namespace LocalMyList
+
+#endif // UNKNOWNFILELOOKUPTASK_H