Krita Source Code Documentation
Loading...
Searching...
No Matches
KisStorageModel.cpp File Reference
#include "KisStorageModel.h"
#include <QBuffer>
#include <QDir>
#include <QFont>
#include <QSqlError>
#include <QSqlQuery>
#include <KisResourceLocator.h>
#include <KoResourcePaths.h>
#include <KisResourceModelProvider.h>
#include <KisResourceThumbnailCache.h>
#include <QFileInfo>
#include <QSaveFile>
#include <kis_assert.h>
#include <kconfig.h>
#include <kconfiggroup.h>
#include <ksharedconfig.h>
#include <kis_debug.h>

Go to the source code of this file.

Classes

struct  KisStorageModel::Private
 

Functions

QString findUnusedName (QString location, QString filename)
 

Function Documentation

◆ findUnusedName()

QString findUnusedName ( QString location,
QString filename )

Definition at line 361 of file KisStorageModel.cpp.

362{
363 // the Save Incremental Version incrementation in KisViewManager is way too complex for this task
364 // and in that case there is a specific file to increment, while here we need to find just
365 // an unused filename
366 QFileInfo info = QFileInfo(location + "/" + filename);
367 if (!info.exists()) {
368 return filename;
369 }
370
371 QString extension = info.suffix();
372 QString filenameNoExtension = filename.left(filename.length() - extension.length());
373
374
375 QDir dir = QDir(location);
376 QStringList similarEntries = dir.entryList(QStringList() << filenameNoExtension + "*");
377
378 QList<int> versions;
379 int maxVersionUsed = -1;
380 for (int i = 0; i < similarEntries.count(); i++) {
381 QString entry = similarEntries[i];
382 //QFileInfo fi = QFileInfo(entry);
383 if (!entry.endsWith(extension)) {
384 continue;
385 }
386 QString versionStr = entry.right(entry.length() - filenameNoExtension.length()); // strip the common part
387 versionStr = versionStr.left(versionStr.length() - extension.length());
388 if (!versionStr.startsWith("_")) {
389 continue;
390 }
391 versionStr = versionStr.right(versionStr.length() - 1); // strip '_'
392 // now the part left should be a number
393 bool ok;
394 int version = versionStr.toInt(&ok);
395 if (!ok) {
396 continue;
397 }
398 if (version > maxVersionUsed) {
399 maxVersionUsed = version;
400 }
401 }
402
403 int versionToUse = maxVersionUsed > -1 ? maxVersionUsed + 1 : 1;
404 int versionStringLength = 3;
405 QString baseNewVersion = QString::number(versionToUse);
406 while (baseNewVersion.length() < versionStringLength) {
407 baseNewVersion.prepend("0");
408 }
409
410 QString newFilename = filenameNoExtension + "_" + QString::number(versionToUse) + extension;
411 bool success = !QFileInfo(location + "/" + newFilename).exists();
412
413 if (!success) {
414 qCritical() << "The new filename for the bundle does exist." << newFilename;
415 }
416
417 return newFilename;
418
419}
QList< QString > QStringList