/* 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 #include #include #include #include "smdirmodel.h" #include "smdirwatcher.h" #include "smtreeitem.h" #include "helper.h" SmDirModel::SmDirModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mHeaders(headers){ mWatch = new SmDirWatcher(this); } SmDirModel::~SmDirModel(){ delete mWatch; } QVariant SmDirModel::data(const QModelIndex &index, int role) const{ if(!index.isValid()){ return QVariant(); } SmTreeItem *i = itemAt(index); switch (role){ case NameRole: return i->data(Name); case SizeRole: return i->data(Size); case TypeRole: return i->data(Type); case CreatedRole: return i->data(Created); case Md5sumRole: return i->data(Md5sum); case DurationRole: return i->data(Duration); case BitrateRole: return i->data(Bitrate); case FullPathRole: return i->data(FullPath); default: return SmTreeModel::data(index, role); } } bool SmDirModel::setData(const QModelIndex &index, const QVariant &value, int role){ if(!index.isValid()){ return false; } if(role == Qt::EditRole && index.column() == Name){ QString newName = value.toString(); if(newName.contains(QDir::separator())){ return false; } SmTreeItem *i = itemAt(index); QString old = i->data(FullPath).toString(); QString dir = fileInfo(index).absolutePath(); QString newPath = QString("%1/%2").arg(dir).arg(newName); QFile::rename(old, newPath); return true; } return false; } bool SmDirModel::isDir(const QModelIndex &idx) const { if(!idx.isValid()){ return false; } SmTreeItem *i = itemAt(idx); QFileInfo fi(i->data(FullPath).toString()); return fi.isDir(); } QFileInfo SmDirModel::fileInfo(const QModelIndex &idx) const { if(!idx.isValid()){ return QFileInfo(); } SmTreeItem *i = itemAt(idx); return QFileInfo(i->data(FullPath).toString()); } void SmDirModel::setDir(const QString &dir){ QFileInfo fi(dir); if(!fi.isDir()){ return; } mCur = dir; populate(); mWatch->setDir(dir); } void SmDirModel::populate(){ SmTreeItem *root = new SmTreeItem(mHeaders.size()); QDir d = QDir(mCur); foreach(QFileInfo fi, d.entryInfoList()){ if(fi.fileName() == "."){ continue; } QList data = fileData(fi); SmTreeItem *n = new SmTreeItem(data, root); root->appendChild(n); } setRoot(root); } const QList SmDirModel::fileData(const QFileInfo &fi) const{ QList data; data << fi.fileName() << fi.size(); QString mime = Helper::mimeType(fi.absoluteFilePath()); data << mime; data << fi.lastModified(); QList si = QList() << QVariant() << QVariant(); if(mime.startsWith("video")){ si = Helper::duration(fi.absoluteFilePath()); } data << Helper::md5Sum(fi.absoluteFilePath()); data << si << fi.absoluteFilePath(); return data; }