Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qmediastoragelocation.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <QStandardPaths>
7#include <QUrl>
8
10
12{
13 QStringList dirCandidates;
14
15#if QT_CONFIG(mmrenderer)
16 dirCandidates << QLatin1String("shared/camera");
17#endif
18
19 dirCandidates << QStandardPaths::writableLocation(type);
21 dirCandidates << QDir::homePath();
22 dirCandidates << QDir::currentPath();
23 dirCandidates << QDir::tempPath();
24
25 for (const QString &path : std::as_const(dirCandidates)) {
26 QDir dir(path);
27 if (dir.exists() && QFileInfo(path).isWritable())
28 return dir;
29 }
30
31 return QDir();
32}
33
34static QString generateFileName(const QDir &dir, const QString &prefix, const QString &extension)
35{
36 auto lastMediaIndex = 0;
37 const auto list = dir.entryList({ QStringLiteral("%1*.%2").arg(prefix, extension) });
38 for (const QString &fileName : list) {
39 auto mediaIndex = QStringView{fileName}.mid(prefix.size(), fileName.size() - prefix.size() - extension.size() - 1).toInt();
40 lastMediaIndex = qMax(lastMediaIndex, mediaIndex);
41 }
42
43 const QString name = QStringLiteral("%1%2.%3")
44 .arg(prefix)
45 .arg(lastMediaIndex + 1, 4, 10, QLatin1Char('0'))
46 .arg(extension);
47
48 return dir.absoluteFilePath(name);
49}
50
51
54 const QString &extension)
55{
56 using namespace Qt::StringLiterals;
57
58 if (QUrl(requestedName).scheme() == "content"_L1)
59 return requestedName;
60
61 auto prefix = "clip_"_L1;
62 switch (type) {
63 case QStandardPaths::PicturesLocation: prefix = "image_"_L1; break;
64 case QStandardPaths::MoviesLocation: prefix = "video_"_L1; break;
65 case QStandardPaths::MusicLocation: prefix = "record_"_L1; break;
66 default: break;
67 }
68
69 if (requestedName.isEmpty())
71
72 QString path = requestedName;
73
75 path = defaultDirectory(type).absoluteFilePath(path);
76
77 if (QFileInfo(path).isDir())
78 return generateFileName(QDir(path), prefix, extension);
79
80 if (!path.endsWith(extension))
81 path.append(QStringLiteral(".%1").arg(extension));
82
83 return path;
84}
85
\inmodule QtCore
Definition qdir.h:20
static QString tempPath()
Returns the absolute canonical path of the system's temporary directory.
Definition qdir.cpp:2133
static QString homePath()
Returns the absolute path of the user's home directory.
Definition qdir.cpp:2103
static QString currentPath()
Returns the absolute path of the application's current directory.
Definition qdir.cpp:2054
static QString writableLocation(StandardLocation type)
StandardLocation
This enum describes the different locations that can be queried using methods such as QStandardPaths:...
\inmodule QtCore
\inmodule QtCore
Definition qstringview.h:78
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
Returns the substring of length length starting at position start in this object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
\inmodule QtCore
Definition qurl.h:94
void extension()
[6]
Definition dialogs.cpp:230
Q_MULTIMEDIA_EXPORT QString generateFileName(const QString &requestedName, QStandardPaths::StandardLocation type, const QString &extension)
Q_MULTIMEDIA_EXPORT QDir defaultDirectory(QStandardPaths::StandardLocation type)
Combined button and popup list for selecting options.
static QString generateFileName(const QDir &dir, const QString &prefix, const QString &extension)
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:42
GLenum type
GLuint name
GLsizei const GLchar *const * path
static QT_BEGIN_NAMESPACE bool isRelative(const QString &path)
SSL_CTX int void * arg
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define QStringLiteral(str)
static int toInt(const QChar &qc, int R)
QList< int > list
[14]
QString dir
[11]
\inmodule QtCore \reentrant
Definition qchar.h:18