summaryrefslogtreecommitdiffstats
path: root/smdirwatcher.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-04-03 07:52:56 +0200
committerArno <arno@disconnect.de>2018-04-03 07:52:56 +0200
commitbac6fe431150bb5706fe0fb349e753b8fe08c12e (patch)
tree2841c2c8c3e8e33321855a0635f4b8f0d6891b46 /smdirwatcher.cpp
parent2213d00d25b6b3127e33a0df63cae54d29748d06 (diff)
downloadSheMov-bac6fe431150bb5706fe0fb349e753b8fe08c12e.tar.gz
SheMov-bac6fe431150bb5706fe0fb349e753b8fe08c12e.tar.bz2
SheMov-bac6fe431150bb5706fe0fb349e753b8fe08c12e.zip
Good riddance Filesystem Widget!
Get rid of FilesystemWidget and helper classes. The SmDirWatcher was useful, once, I guess, nice to implement it by foot, but with the current workflow it isn't needed any more.
Diffstat (limited to 'smdirwatcher.cpp')
-rw-r--r--smdirwatcher.cpp172
1 files changed, 0 insertions, 172 deletions
diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp
deleted file mode 100644
index 46ec905..0000000
--- a/smdirwatcher.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version
- 2 of the License, or (at your option) any later version.
-*/
-
-#include <QDateTime>
-#include <QDir>
-#include <QImage>
-#include <QProgressDialog>
-#include <QApplication>
-
-#include <sys/inotify.h>
-#include <unistd.h>
-#include <poll.h>
-
-#include "smdirmodel.h"
-#include "smdirwatcher.h"
-#include "smtreeitem.h"
-#include "helper.h"
-#include "smglobals.h"
-
-SmDirWatcher::SmDirWatcher(int numFields, QObject *parent) : QThread(parent), mFd(0), mDescr(0), mNumFields(numFields), mExpensiveOps(true) {
- mBufLen = 1024 * (sizeof(struct inotify_event) + 16);
- mINdata = new char[mBufLen];
- mFd = inotify_init();
- mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "dirwatcherdb");
- mDb.open();
-}
-
-void SmDirWatcher::setDir(const QString &dir){
- if(mDescr){
- inotify_rm_watch(mFd, mDescr); //generates IN_IGNORE ???
- }
- mCurrent = dir;
- QDir d(mCurrent);
- qApp->setOverrideCursor(Qt::WaitCursor);
- SmTreeItem *rootItem = new SmTreeItem(mNumFields);
- for(uint i = 0; i < d.count(); ++i){
- QFileInfo fi = d.entryInfoList().at(i);
- if(fi.fileName() == "." || fi.fileName() == ".."){
- continue;
- }
- QList<QVariant> data = generalData(fi.absoluteFilePath());
- SmTreeItem *newItem = new SmTreeItem(data, rootItem);
- rootItem->appendChild(newItem);
- }
- emit population(rootItem);
- /* mask rationale:
- * IN_DELETE_SELF cannot happen since we're only
- * watching one directory at all time.
- * We don't care about the other events
- */
- mDescr = inotify_add_watch(mFd, qPrintable(dir), IN_CLOSE_WRITE | IN_CREATE | IN_DELETE | IN_MOVED_FROM | IN_MOVED_TO);
- qApp->restoreOverrideCursor();
-}
-
-void SmDirWatcher::setExpensiveOps(bool expensiveOps){
- mExpensiveOps = expensiveOps;
-}
-
-QList<QVariant> SmDirWatcher::generalData(const QString &path){
- QFileInfo fi(path);
- QList<QVariant> data;
- data << fi.fileName() << fi.size();
- QString mime = Helper::mimeType(fi.absoluteFilePath());
- data << mime;
- data << fi.lastModified();
- QString md5;
- if(mExpensiveOps){
- md5 = Helper::md5Sum(path);
- data << md5;
- if(mime.startsWith("video")){
- QVariantMap m = Helper::ffmpegData(fi.absoluteFilePath());
- data << m.value("duration") << m.value("bit_rate");
- }else if(mime.startsWith("image")){
- if(fi.size() > 1024*400){ //skip images bigger than 300 kb
- data << "skipped" << QVariant();
- }else{
- QVariant picSize = Helper::picSize(fi.absoluteFilePath());
- data << picSize << QVariant();
- }
- }else{
- data << QVariant() << QVariant();
- }
- data << fi.absoluteFilePath();
- int present = presenceData(md5);
- data << present;
- }else{
- data << QVariant() << QVariant() << QVariant() << fi.absoluteFilePath() << SmDirModel::InNone;
- }
- return data;
-}
-
-int SmDirWatcher::presenceData(QString &md5){
- int retval = SmDirModel::InNone;
- QSqlQuery present1Q(mDb);
- present1Q.prepare("SELECT COUNT(*) FROM files WHERE cmd5sum = :md5");
- present1Q.bindValue(":md5", md5);
- if(!present1Q.exec()){
- mDb.close();
- mDb.open();
- return SmDirModel::InNone;
- }
- while(present1Q.next()){
- int c = present1Q.value(0).toInt();
- if(c > 0){
- retval = SmDirModel::InFiles;
- }
- }
- QSqlQuery present2Q(mDb);
- present2Q.prepare("SELECT COUNT(*) from files_origin WHERE cmd5sum = :md5");
- present2Q.bindValue(":md5", md5);
- present2Q.exec();
- while(present2Q.next()){
- int c = present2Q.value(0).toInt();
- if(c > 0){
- retval = SmDirModel::InOrigin;
- }
- }
- QSqlQuery present3Q(mDb);
- present3Q.prepare("SELECT COUNT(*) FROM pics WHERE cmd5sum = :md5");
- present3Q.bindValue(":md5", md5);
- present3Q.exec();
- while(present3Q.next()){
- int c = present3Q.value(0).toInt();
- if(c > 0){
- retval = SmDirModel::InPictures;
- }
- }
- return retval;
-}
-
-void SmDirWatcher::run(){
- struct pollfd pfd[1];
- pfd[0].fd = mFd;
- pfd[0].events = POLLIN;
- pfd[0].revents = 0;
- int pr = poll(pfd, 1, 0);
- if(pr <= 0){
- return;
- }
- int r = read(mFd, mINdata, mBufLen);
- if(r <= 0){
- return;
- }
- int i = 0;
- while(i < r){
- inotify_event *e = reinterpret_cast<inotify_event*>(&mINdata[i]);
- if((!e->len) || (e->mask & IN_IGNORED)){
- i += sizeof(inotify_event) + e->len;
- continue;
- }
- quint32 mask = e->mask;
- QString name = QString("%1/%2").arg(mCurrent).arg(e->name);
- QList<QVariant> d = generalData(name);
- if(mask & IN_CREATE || mask & IN_MOVED_TO){
- emit newData(d, Added);
- }else if(mask & IN_DELETE || mask & IN_MOVED_FROM){
- emit newData(d, Deleted);
- }else if(mask & IN_CLOSE_WRITE){
- emit newData(d, CloseWrite);
- }
- i += sizeof(inotify_event) + e->len;
- }
-}
-
-void SmDirWatcher::stop(){
- quit();
- wait();
-}