pqapppath.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "pqapppath.h"
  2. #include <QCoreApplication>
  3. #include <QFileInfo>
  4. namespace PQ {
  5. AppPath * AppPath::this_()
  6. {
  7. static AppPath _p;
  8. return &_p;
  9. }
  10. AppPath::AppPath() : QObject(nullptr)
  11. {
  12. QDir dir = QDir::temp();
  13. QString dirName = QString("%1.%2").arg(QCoreApplication::applicationName()).arg(QCoreApplication::applicationPid());
  14. if(!dir.exists(dirName)){
  15. dir.mkdir(dirName);
  16. }
  17. dir.cd(dirName);
  18. _tmpDir = dir;
  19. dir = QDir::home();
  20. dirName = ".";
  21. dirName += QCoreApplication::applicationName();
  22. if(!dir.exists(dirName)){
  23. dir.mkdir(dirName);
  24. }
  25. dir.cd(dirName);
  26. QFileInfo info(dir.absolutePath());
  27. setBaseDir(dir);
  28. }
  29. bool AppPath::setBaseDir(const QDir &dir)
  30. {
  31. if(!dir.exists()) return false;
  32. QFileInfo info(dir.absolutePath());
  33. if(!info.isWritable()) return false;
  34. _baseDir = dir;
  35. if(!_baseDir.exists("config")){
  36. _baseDir.mkdir("config");
  37. }
  38. _configDir = QDir(_baseDir.absoluteFilePath("config"));
  39. if(!_baseDir.exists("cache")){
  40. _baseDir.mkdir("cache");
  41. }
  42. _cacheDir = QDir(_baseDir.absoluteFilePath("cache"));
  43. if(!_baseDir.exists("data")){
  44. _baseDir.mkdir("data");
  45. }
  46. _dataDir = QDir(_baseDir.absoluteFilePath("data"));
  47. if(!_baseDir.exists("log")){
  48. _baseDir.mkdir("log");
  49. }
  50. _logDir = QDir(_baseDir.absoluteFilePath("log"));
  51. emit pathChanged();
  52. return true;
  53. }
  54. }