packinfomanger.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "packinfomanger.h"
  2. #include <pqQtlib/core/pqapppath.h>
  3. #include <pqQtlib/utils/pqfileutils.h>
  4. #include <QDateTime>
  5. #include <QJsonDocument>
  6. #include <QJsonArray>
  7. #include "QDebug"
  8. using namespace PQ;
  9. PackInfoManger::PackInfoManger(QObject *parent) : QObject(parent)
  10. {
  11. _dataDir = AppPath::this_()->dataDir();
  12. if(!_dataDir.exists("packinfo")){
  13. _dataDir.mkdir("packinfo");
  14. }
  15. _dataDir.cd("packinfo");
  16. }
  17. QString PackInfoManger::savePackInfo(const QSharedPointer<PackInfo> & info)
  18. {
  19. if(info.isNull()) return "";
  20. auto tm = QDateTime::fromSecsSinceEpoch(info->time());
  21. auto dir = getDir(tm.date(),true);
  22. QString name = info->codeSingle();
  23. name += "_sync.json";
  24. QString ret = dir.absoluteFilePath(name);
  25. if(writeAbsoluteFile(ret,QJsonDocument(info->toObject()).toJson()))
  26. return ret;
  27. return "";
  28. }
  29. QString PackInfoManger::setPackInfoSync(const QString & code, qint64 time, bool autoSync)
  30. {
  31. QDateTime tm;
  32. if(time < 0){
  33. tm = QDateTime::currentDateTime();
  34. } else {
  35. tm = QDateTime::fromSecsSinceEpoch(time);
  36. }
  37. auto dir = getDir(tm.date());
  38. QString name = dir.absoluteFilePath(code + "_sync.json");
  39. QString newName = dir.absoluteFilePath(code + ".json");
  40. if(QFile::rename(name,newName) && autoSync){
  41. writeAbsoluteFile(_dataDir.absoluteFilePath("auto_sync.time"),tm.toString("yyyy-MM-dd").toUtf8());
  42. return newName;
  43. }
  44. return "";
  45. }
  46. QDate PackInfoManger::lastSyncDate()
  47. {
  48. QByteArray dt = readAbsoluteFile(_dataDir.absoluteFilePath("sync.time"));
  49. if(dt.isEmpty()) {
  50. QDate ret = QDate::currentDate().addDays(-30);
  51. writeAbsoluteFile(_dataDir.absoluteFilePath("auto_sync.time"),ret.toString("yyyy-MM-dd").toUtf8());
  52. }
  53. return QDate::fromString(QString::fromUtf8(dt),"yyyy-MM-dd");
  54. }
  55. QDir PackInfoManger::getDir(const QDate & tm, bool create)
  56. {
  57. QString dirName = tm.toString("yyyy-MM-dd");
  58. if(create && !_dataDir.exists(dirName)){
  59. _dataDir.mkdir(dirName);
  60. }
  61. return QDir(_dataDir.absoluteFilePath(dirName));
  62. }
  63. QList<PackSaveInfo> PackInfoManger::getPackInfo(const QDate & tm,bool noSync)
  64. {
  65. auto dir = getDir(tm);
  66. auto list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
  67. QList<PackSaveInfo> ret;
  68. for(int i = 0; i < list.size(); ++i){
  69. auto & finfo = list.at(i);
  70. if(noSync && finfo.fileName().indexOf("_sync") > 0) continue;
  71. auto obj = QJsonDocument::fromJson(readAbsoluteFile(finfo.absoluteFilePath())).object();
  72. auto info = PackInfo::fromObject(obj);
  73. if(!info.isNull()){
  74. PackSaveInfo pinfo;
  75. pinfo.absPath = finfo.absoluteFilePath();
  76. pinfo.packInfo = info;
  77. ret.append(pinfo);
  78. }
  79. }
  80. return ret;
  81. }
  82. QList<PackSaveInfo> PackInfoManger::getPackInfoSync(const QDate &tm)
  83. {
  84. auto dir = getDir(tm);
  85. auto list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
  86. QList<PackSaveInfo> ret;
  87. for(int i = 0; i < list.size(); ++i){
  88. auto & finfo = list.at(i);
  89. if(finfo.fileName().indexOf("_sync") < 0) continue;
  90. auto obj = QJsonDocument::fromJson(readAbsoluteFile(finfo.absoluteFilePath())).object();
  91. auto info = PackInfo::fromObject(obj);
  92. if(!info.isNull()){
  93. PackSaveInfo pinfo;
  94. pinfo.absPath = finfo.absoluteFilePath();
  95. pinfo.packInfo = info;
  96. ret.append(pinfo);
  97. }
  98. }
  99. return ret;
  100. }
  101. QList<QSharedPointer<ProjectInfo>> PackInfoManger::getLocalProjectInfo()
  102. {
  103. QList<QSharedPointer<ProjectInfo>> list;
  104. auto dt = readAbsoluteFile(_dataDir.absoluteFilePath("project.json"));
  105. if(!dt.isEmpty()) {
  106. QJsonArray ary = QJsonDocument::fromJson(dt).array();
  107. for(int i = 0; i < ary.size(); ++i){
  108. auto obj = ary.at(i).toObject();
  109. auto info = ProjectInfo::fromObject(obj);
  110. if(!info.isNull()) {
  111. info->isLocal = true;
  112. list.append(info);
  113. }
  114. }
  115. }
  116. return list;
  117. }
  118. bool PackInfoManger::syncLocalProjectInfo(QList<QSharedPointer<ProjectInfo> > &projects)
  119. {
  120. QJsonArray ary;
  121. for(int i = 0; i < projects.size(); ++i)
  122. {
  123. ary.append(projects.at(i)->toObject());
  124. }
  125. QByteArray dt = QJsonDocument(ary).toJson();
  126. return writeAbsoluteFile(_dataDir.absoluteFilePath("project.json"),dt);
  127. }