better and more efficient uid generation
This commit is contained in:
parent
c7ec038e26
commit
291236ff2c
2 changed files with 28 additions and 22 deletions
|
@ -56,6 +56,8 @@
|
|||
#include <QUrl>
|
||||
#include <QDir>
|
||||
|
||||
#include <random>
|
||||
|
||||
#define importTimeFormat "HHmmss"
|
||||
#define findRetryLimit 500
|
||||
|
||||
|
@ -496,8 +498,7 @@ fileDialogPreOpen: //Work?
|
|||
{
|
||||
QString selectedFile = selectedFiles.at(0);
|
||||
QDateTime importDateTime = QDateTime::currentDateTime();
|
||||
int currentTime = importDateTime.toString(importTimeFormat).toInt();
|
||||
if (!importFile(selectedFile, importDateTime, ¤tTime, true)) goto fileDialogPreOpen; //Work?
|
||||
if (!importFile(selectedFile, importDateTime, true)) goto fileDialogPreOpen; //Work?
|
||||
}
|
||||
else if (selectedFiles.length() > 1)
|
||||
{
|
||||
|
@ -540,14 +541,13 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles)
|
|||
|
||||
// THREADING HERE PLEASE
|
||||
QDateTime importDateTime = QDateTime::currentDateTime();
|
||||
int currentTime = importDateTime.time().toString(importTimeFormat).toInt();
|
||||
for (QString selectedFile : selectedFiles)
|
||||
{
|
||||
overallId++;
|
||||
pbDialog.setValue(overallId);
|
||||
pbDialog.setLabelText(tr("Import file %1 of %2 files").arg(QString::number(overallId), QString::number(maximumId)));
|
||||
importDateTime = QDateTime::currentDateTime();
|
||||
if (!importFile(selectedFile, importDateTime, ¤tTime, false))
|
||||
if (!importFile(selectedFile, importDateTime, false))
|
||||
{
|
||||
failed << QFileInfo(selectedFile).fileName();
|
||||
}
|
||||
|
@ -565,12 +565,12 @@ void ProfileInterface::importFilesProgress(QStringList selectedFiles)
|
|||
}
|
||||
}
|
||||
|
||||
bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple)
|
||||
bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple)
|
||||
{
|
||||
QString selectedFileName = QFileInfo(selectedFile).fileName();
|
||||
if (QFile::exists(selectedFile))
|
||||
{
|
||||
if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e")
|
||||
if ((selectedFileName.left(4) == "PGTA" && !selectedFileName.contains('.')) || selectedFileName.right(4) == ".g5e")
|
||||
{
|
||||
SnapmaticPicture *picture = new SnapmaticPicture(selectedFile);
|
||||
if (picture->readingPicture(true, true, true))
|
||||
|
@ -602,7 +602,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else if(isSupportedImageFile(selectedFileName))
|
||||
else if (isSupportedImageFile(selectedFileName))
|
||||
{
|
||||
SnapmaticPicture *picture = new SnapmaticPicture(":/template/template.g5e");
|
||||
if (picture->readingPicture(true, false, true, false))
|
||||
|
@ -673,17 +673,16 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
|
|||
return false;
|
||||
}
|
||||
SnapmaticProperties spJson = picture->getSnapmaticProperties();
|
||||
spJson.uid = QString(QString::number(*currentTime) %
|
||||
QString::number(importDateTime.date().dayOfYear())).toInt();
|
||||
spJson.uid = getRandomUid();
|
||||
bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
|
||||
bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
|
||||
bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
|
||||
int cEnough = 0;
|
||||
while ((fExists || fExistsHidden) && cEnough < findRetryLimit)
|
||||
while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit)
|
||||
{
|
||||
*currentTime = *currentTime - 1;
|
||||
spJson.uid = QString(QString::number(*currentTime) %
|
||||
QString::number(importDateTime.date().dayOfYear())).toInt();
|
||||
spJson.uid = getRandomUid();
|
||||
fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
|
||||
fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
|
||||
fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
|
||||
cEnough++;
|
||||
}
|
||||
|
@ -728,17 +727,16 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
|
|||
if (picture->setImage(importDialog->image()))
|
||||
{
|
||||
SnapmaticProperties spJson = picture->getSnapmaticProperties();
|
||||
spJson.uid = QString(QString::number(*currentTime) %
|
||||
QString::number(importDateTime.date().dayOfYear())).toInt();
|
||||
spJson.uid = getRandomUid();
|
||||
bool fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
|
||||
bool fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
|
||||
bool fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
|
||||
int cEnough = 0;
|
||||
while ((fExists || fExistsHidden) && cEnough < findRetryLimit)
|
||||
while ((fExists || fExistsBackup || fExistsHidden) && cEnough < findRetryLimit)
|
||||
{
|
||||
*currentTime = *currentTime - 1;
|
||||
spJson.uid = QString(QString::number(*currentTime) %
|
||||
QString::number(importDateTime.date().dayOfYear())).toInt();
|
||||
spJson.uid = getRandomUid();
|
||||
fExists = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid));
|
||||
fExistsBackup = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".bak");
|
||||
fExistsHidden = QFile::exists(profileFolder % "/PGTA5" % QString::number(spJson.uid) % ".hidden");
|
||||
cEnough++;
|
||||
}
|
||||
|
@ -1337,8 +1335,7 @@ void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData)
|
|||
{
|
||||
QString selectedFile = pathList.at(0);
|
||||
QDateTime importDateTime = QDateTime::currentDateTime();
|
||||
int currentTime = importDateTime.toString(importTimeFormat).toInt();
|
||||
importFile(selectedFile, QDateTime::currentDateTime(), ¤tTime, true);
|
||||
importFile(selectedFile, QDateTime::currentDateTime(), true);
|
||||
}
|
||||
else if (pathList.length() > 1)
|
||||
{
|
||||
|
@ -1945,3 +1942,11 @@ preSelectionTitle:
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int ProfileInterface::getRandomUid()
|
||||
{
|
||||
std::mt19937 rng;
|
||||
rng.seed(std::random_device()());
|
||||
std::uniform_int_distribution<std::mt19937::result_type> uiddist(10000000, 2147483647);
|
||||
return uiddist(rng);
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ private:
|
|||
int contentMode;
|
||||
|
||||
bool isSupportedImageFile(QString selectedFileName);
|
||||
bool importFile(QString selectedFile, QDateTime importDateTime, int *currentTime, bool notMultiple);
|
||||
bool importFile(QString selectedFile, QDateTime importDateTime, bool notMultiple);
|
||||
void importFilesProgress(QStringList selectedFiles);
|
||||
bool importSnapmaticPicture(SnapmaticPicture *picture, bool warn = true);
|
||||
bool importSavegameData(SavegameData *savegame, QString sgdPath, bool warn = true);
|
||||
|
@ -124,6 +124,7 @@ private:
|
|||
void insertSnapmaticIPI(QWidget *widget);
|
||||
void insertSavegameIPI(QWidget *widget);
|
||||
void sortingProfileInterface();
|
||||
static int getRandomUid();
|
||||
|
||||
signals:
|
||||
void profileLoaded();
|
||||
|
|
Loading…
Reference in a new issue