summaryrefslogtreecommitdiffstats
path: root/filesystemwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesystemwidget.cpp')
-rw-r--r--filesystemwidget.cpp89
1 files changed, 85 insertions, 4 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 769bb50..ff73863 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -23,8 +23,12 @@
#include <QRegExp>
#include <QFile>
#include <QTextStream>
+#include <QSqlQuery>
+
+//debug
+#include <QDebug>
+#include <QSqlError>
-#include <errno.h>
#include <string.h>
#include "filesystemwidget.h"
@@ -37,10 +41,8 @@
#include "pictureviewer.h"
#include "smglobals.h"
-extern int errno;
-
FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
- mModel = new QFileSystemModel;
+ mModel = new FileSystemModel;
mModel->setRootPath("/");
mModel->setFilter(QDir::AllEntries | QDir::NoDot);
mModel->setReadOnly(false);
@@ -466,6 +468,16 @@ void FilesystemWidget::dvdMount(){
}
}
+void FilesystemWidget::markSeen(){
+ QStringList selected = selectedFiles();
+ if(selected.isEmpty()){
+ return;
+ }
+ foreach(QString p, selected){
+ mModel->markAsSeen(p, !mModel->isSeen(p));
+ }
+}
+
void FilesystemWidget::setWindowTitle(const QString &dir){
mWindowTitle = QString("%1 - %2").arg(qApp->applicationName()).arg(dir);
emit windowTitle(mWindowTitle);
@@ -577,3 +589,72 @@ QStringList FilesystemWidget::selectedFiles(){
}
return retval;
}
+
+//FileSystemModel
+
+FileSystemModel::FileSystemModel(QObject *parent) : QFileSystemModel(parent){
+ mDb = QSqlDatabase::database("treedb");
+ mDb.open();
+ QSqlQuery readSeen("SELECT tpath, dtseen FROM seen", mDb);
+ while(readSeen.next()){
+ mSeen.insert(readSeen.value(0).toString(), readSeen.value(1).toDateTime());
+ }
+ mDeleteFromSeenQuery = new QSqlQuery(mDb);
+ mDeleteFromSeenQuery->prepare("DELETE FROM seen WHERE tpath = :path");
+ mMarkAsSeenQuery = new QSqlQuery(mDb);
+ mMarkAsSeenQuery->prepare("INSERT INTO seen (tpath) VALUES(:path)");
+ cleanup();
+}
+
+FileSystemModel::~FileSystemModel(){
+ delete mDeleteFromSeenQuery;
+ delete mMarkAsSeenQuery;
+ mDb = QSqlDatabase();
+}
+
+QVariant FileSystemModel::data(const QModelIndex &index, int role) const{
+ if(role == Qt::ForegroundRole){
+ QString path = index.data(QFileSystemModel::FilePathRole).toString();
+ if(mSeen.keys().contains(path)){
+ return QBrush(Qt::red);
+ }
+ }
+ return QFileSystemModel::data(index, role);
+}
+
+bool FileSystemModel::isSeen(const QString &path) const{
+ return mSeen.keys().contains(path);
+}
+
+void FileSystemModel::markAsSeen(const QString &path, bool seen){
+ if(seen){
+ if(mSeen.keys().contains(path)){
+ return;
+ }
+ mMarkAsSeenQuery->bindValue(":path", path);
+ bool ok = mMarkAsSeenQuery->exec();
+ if(!ok){
+ qDebug() << mMarkAsSeenQuery->lastError().text();
+ }
+ mSeen.insert(path, QDateTime::currentDateTime());
+ }else{
+ mDeleteFromSeenQuery->bindValue(":path", path);
+ mDeleteFromSeenQuery->exec();
+ mSeen.remove(path);
+ }
+}
+
+void FileSystemModel::cleanup(){
+ QStringList toRemove;
+ foreach(QString p, mSeen.keys()){
+ QFileInfo fi(p);
+ if(!fi.exists()){
+ mDeleteFromSeenQuery->bindValue(":path", p);
+ mDeleteFromSeenQuery->exec();
+ toRemove << p;
+ }
+ }
+ foreach(QString r, toRemove){
+ mSeen.remove(r);
+ }
+}