5#include "RabbitCommonDir.h" 
    6#include <QStandardPaths> 
    8#include <QCoreApplication> 
    9#include <QLoggingCategory> 
   13static Q_LOGGING_CATEGORY(log, 
"RabbitCommon.Dir")
 
   18    m_szDocumentPath = QStandardPaths::writableLocation(
 
   19             QStandardPaths::DocumentsLocation)
 
   20             + QDir::separator() + 
"Rabbit" 
   21             + QDir::separator() + QCoreApplication::applicationName();
 
   22    qInfo(log) << 
"Document path:" << m_szDocumentPath;
 
   24    if(!d.exists(m_szDocumentPath))
 
   25        if(!d.mkpath(m_szDocumentPath))
 
   26            qCritical(log) << 
"mkdir documents dir fail:" << m_szDocumentPath;
 
   28    m_szApplicationDir =  QCoreApplication::applicationDirPath();
 
   29    qInfo(log) << 
"Application dir:" << m_szApplicationDir;
 
   30#if defined (Q_OS_ANDROID) 
   31    m_szApplicationInstallRootDir = 
"assets:";
 
   33    if(m_szApplicationDir.isEmpty())
 
   34        m_szApplicationInstallRootDir = 
"..";
 
   36        m_szApplicationInstallRootDir = m_szApplicationDir + QDir::separator() + 
"..";
 
   37    QDir r(m_szApplicationInstallRootDir);
 
   38    m_szApplicationInstallRootDir = r.absolutePath();
 
   40    qInfo(log) << 
"Application root dir:" << m_szApplicationInstallRootDir;
 
   45    static CDir* p = 
nullptr;
 
   51QString CDir::GetDirApplication()
 
   54    return m_szApplicationDir;
 
   57int CDir::SetDirApplication(
const QString &szPath)
 
   59    m_szApplicationDir = szPath;
 
   63QString CDir::GetDirApplicationInstallRoot()
 
   65    return m_szApplicationInstallRootDir;
 
   68int CDir::SetDirApplicationInstallRoot(
const QString &szPath)
 
   70    m_szApplicationInstallRootDir = szPath;
 
   74QString CDir::GetDirConfig(
bool bReadOnly)
 
   78#if defined (Q_OS_ANDROID) 
   82    szPath = GetDirUserDocument() + QDir::separator() + 
"root" + QDir::separator() + 
"etc";
 
   91    szPath = GetDirApplicationInstallRoot() + QDir::separator() + 
"etc";
 
   99QString CDir::GetDirLog()
 
  102    szPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)
 
  103             + QDir::separator() + 
"log" 
  104             + QDir::separator() + 
"Rabbit" 
  105             + QDir::separator() + QCoreApplication::applicationName();
 
  114    if(!d.exists(szPath))
 
  115        if(!d.mkpath(szPath))
 
  116            qCritical(log) << 
"Make path fail:" << szPath;
 
  124#if defined (Q_OS_ANDROID) 
  126        return "assets:/share";
 
  127    szPath = GetDirUserDocument() + QDir::separator() + 
"root" + QDir::separator() + 
"share";
 
  129    if(!d.exists(szPath))
 
  136    szPath = GetDirApplicationInstallRoot() + QDir::separator() + 
"share";
 
  138    if(!d.exists(szPath))
 
 
  146    QString szPath = 
GetDirData(bReadOnly) + QDir::separator() + 
"doc";
 
  147    if(!szProjectName.isEmpty())
 
  148        szPath += QDir::separator() + szProjectName;
 
 
  152QString CDir::GetDirDatabase(
bool bReadOnly)
 
  154    QString szPath = 
GetDirData(bReadOnly) + QDir::separator() + 
"db";
 
  156    if(!d.exists(szPath))
 
  161QString CDir::GetDirDatabaseFile(
const QString &szFile, 
bool bReadOnly)
 
  164        return GetDirDatabase(bReadOnly) + QDir::separator() + 
"database.db";
 
  165    return GetDirDatabase(bReadOnly) + QDir::separator() + szFile;
 
  168QString CDir::GetDirApplicationXml(
bool bReadOnly)
 
  170    QString szPath = GetDirConfig(bReadOnly) + QDir::separator() + 
"xml";
 
  172    if(!d.exists(szPath))
 
  177QString CDir::GetDirPlugins(
const QString &szDir)
 
  180#if defined (Q_OS_ANDROID) 
  181    szPath = GetDirApplication();
 
  183    szPath = GetDirApplicationInstallRoot() + QDir::separator() + 
"plugins";
 
  186        szPath += QDir::separator() + szDir;
 
  190QString CDir::GetDirUserDocument()
 
  192    return m_szDocumentPath;
 
  197    m_szDocumentPath = szPath;
 
  198    if(m_szDocumentPath.isEmpty())
 
  200        m_szDocumentPath = QStandardPaths::writableLocation(
 
  201            QStandardPaths::DocumentsLocation)
 
  202            + QDir::separator() + 
"Rabbit" 
  203            + QDir::separator() + QCoreApplication::applicationName();
 
  207    if(!d.exists(szPath))
 
 
  212QString CDir::GetDirUserConfig()
 
  214    QString szPath = GetDirUserDocument() + QDir::separator() + 
"etc";
 
  217    if(!d.exists(szPath))
 
  224QString CDir::GetDirUserData()
 
  226    QString szPath = GetDirUserDocument() + QDir::separator() + 
"share";
 
  229    if(!d.exists(szPath))
 
  236QString CDir::GetDirUserDatabase()
 
  238    QString szPath = GetDirUserData() + QDir::separator() + 
"db";
 
  240    if(!d.exists(szPath))
 
  245QString CDir::GetDirUserDatabaseFile(
const QString &szFile)
 
  248        return GetDirUserDatabase() + QDir::separator() + 
"database.db";
 
  249    return GetDirUserDatabase() + QDir::separator() + szFile;
 
  252QString CDir::GetDirUserXml()
 
  254    QString szPath = GetDirUserData() + QDir::separator() + 
"xml";
 
  256    if(!d.exists(szPath))
 
  261QString CDir::GetDirUserImage()
 
  263    QString szPath = GetDirUserData() + QDir::separator() + 
"image";
 
  265    if(!d.exists(szPath))
 
  272#if defined(_DEBUG) || defined(DEBUG) 
  273    return ":/share/translations";
 
  275    QString szPath(szPrefix);
 
  280    return szPath + QDir::separator() + 
"translations";
 
 
  283QString CDir::GetDirIcons(
bool bReadOnly)
 
  285    return GetDirData(bReadOnly) + QDir::separator() + 
"icons";
 
  288QString CDir::GetDirPluginsTranslation(QString szDir)
 
  290#if defined(_DEBUG) || defined(DEBUG) 
  291    return ":/" + szDir + 
"/translations";
 
  292#elif defined (Q_OS_ANDROID) 
  293    return "assets:/" + szDir + 
"/translations";
 
  296    return GetDirApplicationInstallRoot() + QDir::separator()
 
  297            + szDir + QDir::separator() + 
"translations";
 
  300QString CDir::GetFileApplicationConfigure(
bool bReadOnly)
 
  302    return GetDirConfig(bReadOnly) + QDir::separator()
 
  303            + QCoreApplication::applicationName() + 
".conf";
 
  306QString CDir::GetFileUserConfigure()
 
  308    QString szName = GetDirUserDocument() + QDir::separator()
 
  309            + QCoreApplication::applicationName() + 
".conf";
 
  313int CDir::CopyDirectory(
const QString &fromDir, 
const QString &toDir, 
bool bCoverIfFileExists)
 
  315    QDir formDir_(fromDir);
 
  320        if(!toDir_.mkpath(toDir_.absolutePath()))
 
  324    QFileInfoList fileInfoList = formDir_.entryInfoList();
 
  325    foreach(QFileInfo fileInfo, fileInfoList)
 
  327        if(fileInfo.fileName() == 
"."|| fileInfo.fileName() == 
"..")
 
  332            if(!CopyDirectory(fileInfo.filePath(),
 
  333                              toDir_.filePath(fileInfo.fileName()),
 
  339            if(bCoverIfFileExists && toDir_.exists(fileInfo.fileName()))
 
  341                toDir_.remove(fileInfo.fileName());
 
  343            if(!QFile::copy(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName())))
 
QString GetDirData(bool bReadOnly=false)
Get data directory.
 
QString GetDirDocument(QString szProjectName=QString(), bool bReadOnly=false)
GetDirDocument.
 
int SetDirUserDocument(QString szPath=QString())
Set user document directory.
 
QString GetDirTranslations(QString szPrefix=QString())