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 <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 360 of file KisStorageModel.cpp.

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