diff --git a/common/qlistdb.cpp b/common/qlistdb.cpp index 97eec42..907f84c 100644 --- a/common/qlistdb.cpp +++ b/common/qlistdb.cpp @@ -20,6 +20,7 @@ #include "cmautils.h" #include "qlistdb.h" #include "cmaobject.h" +#include "sforeader.h" #include #include @@ -28,6 +29,30 @@ #include #include +static bool nameLessThan(const QFileInfo &v1, const QFileInfo &v2) +{ + if(v1.isDir() && v2.isDir()) { + SfoReader sfo; + QString t1, t2; + + if(sfo.load(v1.absoluteFilePath() + QDir::separator() + "sce_sys" + QDir::separator() + "param.sfo") || + sfo.load(v1.absoluteFilePath() + QDir::separator() + "PARAM.SFO")) { + t1 = QString(sfo.value("TITLE", "")); + } + + if(sfo.load(v2.absoluteFilePath() + QDir::separator() + "sce_sys" + QDir::separator() + "param.sfo") || + sfo.load(v2.absoluteFilePath() + QDir::separator() + "PARAM.SFO")) { + t2 = QString(sfo.value("TITLE", "")); + } + + if(!t1.isEmpty() && !t2.isEmpty()) { + return t1 < t2; + } + } + + return v1.absoluteFilePath() < v2.absoluteFilePath(); +} + QListDB::QListDB(QObject *obj_parent) : Database(obj_parent) { @@ -151,7 +176,6 @@ int QListDB::create() } qDebug("Added objects for OHFI 0x%02X: %i", ohfi_array[i], dir_count); - total_objects += dir_count; object_list[ohfi_array[i]] = list; } @@ -215,6 +239,10 @@ int QListDB::recursiveScanRootDirectory(root_list &list, CMAObject *obj_parent, dir.setSorting(QDir::Name | QDir::DirsFirst); QFileInfoList qsl = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Time); + if(obj_parent && !obj_parent->parent) { + qSort(qsl.begin(), qsl.end(), nameLessThan); + } + foreach(const QFileInfo &info, qsl) { if(!continueOperation()) {