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())