7#include <QtCore/private/qfactoryloader_p.h>
8#include <QtCore/private/qcoreapplication_p.h>
9#include <QtCore/qcborarray.h>
13using namespace Qt::StringLiterals;
17Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, pluginLoader,
20QPermissionPlugin *permissionPlugin(
const QPermission &permission)
23 QMutexLocker locker(&mutex);
25 const char *permissionType = permission.type().name();
26 qCDebug(lcPermissions,
"Looking for permission plugin for %s", permissionType);
28 if (Q_UNLIKELY(!pluginLoader)) {
29 qCWarning(lcPermissions,
"Cannot check or request permissions during application shutdown");
33 auto metaDataList = pluginLoader()->metaData();
34 for (
int i = 0; i < metaDataList.size(); ++i) {
35 auto metaData = metaDataList.at(i).value(QtPluginMetaDataKeys::MetaData).toMap();
36 auto permissions = metaData.value(
"Permissions"_L1).toArray();
37 if (permissions.contains(QString::fromUtf8(permissionType))) {
38 auto className = metaDataList.at(i).value(QtPluginMetaDataKeys::ClassName).toString();
39 qCDebug(lcPermissions) <<
"Found matching plugin" << qUtf8Printable(className);
40 auto *plugin =
static_cast<QPermissionPlugin*>(pluginLoader()->instance(i));
45 qCWarning(lcPermissions).nospace() <<
"Could not find permission plugin for "
46 << permission.type().name() <<
". Please make sure you have included the "
47 <<
"required usage description in your Info.plist";
58 if (
auto *plugin = permissionPlugin(permission))
59 return plugin->checkPermission(permission);
61 return Qt::PermissionStatus::Denied;
66 if (
auto *plugin = permissionPlugin(permission))
67 plugin->requestPermission(permission, callback);
69 callback(Qt::PermissionStatus::Denied);
\inmodule QtCore \inheaderfile QPermissions
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
Qt::PermissionStatus checkPermission(const QPermission &permission)
#define QPermissionPluginInterface_iid