optimise ProfileLoader
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Syping 2021-04-02 02:54:28 +02:00
parent 3c673beed1
commit 2f135cd373
1 changed files with 42 additions and 24 deletions

View File

@ -16,18 +16,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/ *****************************************************************************/
#include "ProfileLoader.h"
#include "SnapmaticPicture.h" #include "SnapmaticPicture.h"
#include "ProfileLoader.h"
#include "SavegameData.h" #include "SavegameData.h"
#include "CrewDatabase.h" #include "CrewDatabase.h"
#include "wrapper.h" #include "wrapper.h"
#include <QStringBuilder> #include <QStringBuilder>
#include <QStringList> #include <QVector>
#include <QString> #include <QString>
#include <QThread>
#include <QList>
#include <QFile> #include <QFile>
#ifdef Q_OS_WIN
#include <QDir> #include <QDir>
#include <QList>
#else
#include "sys/types.h"
#include "dirent.h"
#endif
ProfileLoader::ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent) : QThread(parent), profileFolder(profileFolder), crewDB(crewDB) ProfileLoader::ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObject *parent) : QThread(parent), profileFolder(profileFolder), crewDB(crewDB)
{ {
@ -36,30 +40,44 @@ ProfileLoader::ProfileLoader(QString profileFolder, CrewDatabase *crewDB, QObjec
void ProfileLoader::run() void ProfileLoader::run()
{ {
int curFile = 1; int curFile = 1;
QDir profileDir; int maximumV = 0;
QList<int> crewList; QVector<int> crewList;
profileDir.setPath(profileFolder); QVector<QString> savegameFiles;
QVector<QString> snapmaticPics;
// Seek pictures and savegames #ifdef Q_OS_WIN
profileDir.setNameFilters(QStringList("SGTA5*")); QDir dir(profileFolder);
QStringList SavegameFiles = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); const QStringList files = dir.entryList();
QStringList BackupFiles = SavegameFiles.filter(".bak", Qt::CaseInsensitive); for (const QString &fileName : files) {
profileDir.setNameFilters(QStringList("PGTA5*")); if (fileName.startsWith("SGTA5") && !fileName.endsWith(".bak")) {
QStringList SnapmaticPics = profileDir.entryList(QDir::Files | QDir::NoDot, QDir::NoSort); savegameFiles << fileName;
BackupFiles += SnapmaticPics.filter(".bak", Qt::CaseInsensitive); maximumV++;
}
SavegameFiles.removeDuplicates(); if (fileName.startsWith("PGTA5") && !fileName.endsWith(".bak")) {
SnapmaticPics.removeDuplicates(); snapmaticPics << fileName;
for (const QString &BackupFile : qAsConst(BackupFiles)) { maximumV++;
SavegameFiles.removeAll(BackupFile); }
SnapmaticPics.removeAll(BackupFile);
} }
#else
int maximumV = SavegameFiles.length() + SnapmaticPics.length(); DIR *dirp = opendir(profileFolder.toUtf8().constData());
struct dirent *dp;
while ((dp = readdir(dirp)) != 0) {
const QString fileName = QString::fromUtf8(dp->d_name);
if (fileName.startsWith("SGTA5") && !fileName.endsWith(".bak")) {
savegameFiles << fileName;
maximumV++;
}
if (fileName.startsWith("PGTA5") && !fileName.endsWith(".bak")) {
snapmaticPics << fileName;
maximumV++;
}
}
closedir(dirp);
#endif
// Loading pictures and savegames // Loading pictures and savegames
emit loadingProgress(curFile, maximumV); emit loadingProgress(curFile, maximumV);
for (const QString &SavegameFile : qAsConst(SavegameFiles)) { for (const QString &SavegameFile : qAsConst(savegameFiles)) {
emit loadingProgress(curFile, maximumV); emit loadingProgress(curFile, maximumV);
const QString sgdPath = profileFolder % "/" % SavegameFile; const QString sgdPath = profileFolder % "/" % SavegameFile;
SavegameData *savegame = new SavegameData(sgdPath); SavegameData *savegame = new SavegameData(sgdPath);
@ -68,7 +86,7 @@ void ProfileLoader::run()
} }
curFile++; curFile++;
} }
for (const QString &SnapmaticPic : qAsConst(SnapmaticPics)) { for (const QString &SnapmaticPic : qAsConst(snapmaticPics)) {
emit loadingProgress(curFile, maximumV); emit loadingProgress(curFile, maximumV);
const QString picturePath = profileFolder % "/" % SnapmaticPic; const QString picturePath = profileFolder % "/" % SnapmaticPic;
SnapmaticPicture *picture = new SnapmaticPicture(picturePath); SnapmaticPicture *picture = new SnapmaticPicture(picturePath);