mirror of
https://github.com/QuasarApp/QuasarAppLib.git
synced 2025-04-29 11:14:39 +00:00
Merge pull request #42 from QuasarApp/platformutils
added support snap platform
This commit is contained in:
commit
10d0361ae1
53
qaplatformutils.h
Normal file
53
qaplatformutils.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024-2024 QuasarApp.
|
||||||
|
* Distributed under the lgplv3 software license, see the accompanying
|
||||||
|
* Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
* of this license document, but changing it is not allowed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef PLATFORMUTILS_H
|
||||||
|
#define PLATFORMUTILS_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include "quasarapp_global.h"
|
||||||
|
|
||||||
|
namespace QuasarAppUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The iPlatformUtils class bas interface for get access platform dependet functions and constants.
|
||||||
|
*/
|
||||||
|
class QUASARAPPSHARED_EXPORT PlatformUtils
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlatformUtils();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief isSnap This method check destribution type. true if the application packed as a snap.
|
||||||
|
* @return true if the application packaged as a snap else false.
|
||||||
|
*/
|
||||||
|
static bool isSnap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief snapRootFS returns root file system of main OS (available read only)
|
||||||
|
* @return path ro main os root.
|
||||||
|
*/
|
||||||
|
static QString snapRootFS();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief transportPathToSnapRoot change path to snap avaialble.
|
||||||
|
* @param path source path of main OS.
|
||||||
|
* @return readable path location for snap pacakge.
|
||||||
|
* @note this method is not a fast, so not invoke it too offten.
|
||||||
|
*/
|
||||||
|
static QString transportPathToSnapRoot(const QString &path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief checkSystemBakupSnapInterface This method check access to bakcup permision of snap pacakge.
|
||||||
|
* This permision required to get access to rootfs of main OS.
|
||||||
|
* @return true if the app have this accesss.
|
||||||
|
*/
|
||||||
|
static bool checkSystemBakupSnapInterface();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif // IPLATFORMUTILS_H
|
99
qaplatformutils_linux.cpp
Normal file
99
qaplatformutils_linux.cpp
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024-2024 QuasarApp.
|
||||||
|
* Distributed under the lgplv3 software license, see the accompanying
|
||||||
|
* Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
* of this license document, but changing it is not allowed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qaplatformutils.h"
|
||||||
|
|
||||||
|
#if defined(Q_OS_LINUX)
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QProcessEnvironment>
|
||||||
|
#elif defined(Q_OS_ANDROID)
|
||||||
|
#elif defined(Q_OS_WIN32)
|
||||||
|
#elif defined(Q_OS_MACOS)
|
||||||
|
#elif defined(Q_OS_IOS)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace QuasarAppUtils {
|
||||||
|
|
||||||
|
#if defined(Q_OS_LINUX)
|
||||||
|
bool PlatformUtils::isSnap() {
|
||||||
|
return QProcessEnvironment::systemEnvironment().value("SNAP").size();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlatformUtils::snapRootFS() {
|
||||||
|
return "/var/lib/snapd/hostfs";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlatformUtils::transportPathToSnapRoot(const QString &path) {
|
||||||
|
if (isSnap() && checkSystemBakupSnapInterface()) {
|
||||||
|
|
||||||
|
if(QFileInfo(path).isWritable()) {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path.size() && path[0] != QString("/")) {
|
||||||
|
auto absalutPath = QProcessEnvironment::systemEnvironment().value("PWD") + "/" + path;
|
||||||
|
if (!absalutPath.contains(snapRootFS())) {
|
||||||
|
return snapRootFS() + "/" + absalutPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!path.contains(snapRootFS())) {
|
||||||
|
return snapRootFS() + "/" + path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlatformUtils::checkSystemBakupSnapInterface() {
|
||||||
|
return QDir(snapRootFS()).entryList(QDir::AllEntries | QDir::NoDotAndDotDot).size();
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(Q_OS_ANDROID)
|
||||||
|
|
||||||
|
bool PlatformUtils::isSnap() { return false;}
|
||||||
|
|
||||||
|
QString PlatformUtils::snapRootFS() { return "";}
|
||||||
|
|
||||||
|
QString PlatformUtils::transportPathToSnapRoot(const QString &path) { return path; }
|
||||||
|
|
||||||
|
bool PlatformUtils::checkSystemBakupSnapInterface() { return false; }
|
||||||
|
|
||||||
|
#elif defined(Q_OS_WIN32)
|
||||||
|
|
||||||
|
bool PlatformUtils::isSnap() { return false;}
|
||||||
|
|
||||||
|
QString PlatformUtils::snapRootFS() { return "";}
|
||||||
|
|
||||||
|
QString PlatformUtils::transportPathToSnapRoot(const QString &path) { return path; }
|
||||||
|
|
||||||
|
bool PlatformUtils::checkSystemBakupSnapInterface() { return false; }
|
||||||
|
|
||||||
|
#elif defined(Q_OS_MACOS)
|
||||||
|
|
||||||
|
bool PlatformUtils::isSnap() { return false;}
|
||||||
|
|
||||||
|
QString PlatformUtils::snapRootFS() { return "";}
|
||||||
|
|
||||||
|
QString PlatformUtils::transportPathToSnapRoot(const QString &path) { return path; }
|
||||||
|
|
||||||
|
bool PlatformUtils::checkSystemBakupSnapInterface() { return false; }
|
||||||
|
|
||||||
|
#elif defined(Q_OS_IOS)
|
||||||
|
|
||||||
|
bool PlatformUtils::isSnap() { return false;}
|
||||||
|
|
||||||
|
QString PlatformUtils::snapRootFS() { return "";}
|
||||||
|
|
||||||
|
QString PlatformUtils::transportPathToSnapRoot(const QString &path) { return path; }
|
||||||
|
|
||||||
|
bool PlatformUtils::checkSystemBakupSnapInterface() { return false; }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
@ -11,6 +11,7 @@
|
|||||||
#include "params.h"
|
#include "params.h"
|
||||||
#include "locales.h"
|
#include "locales.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
#include "qaplatformutils.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The QuasaraAppUtils class
|
* @brief The QuasaraAppUtils class
|
||||||
|
Loading…
x
Reference in New Issue
Block a user