packinfomanger.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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<QSharedPointer<BoxModel>> PackInfoManger::getBoxModel()
  83. {
  84. auto dir =PQ::AppPath::this_()->dataDir();
  85. if(!dir.exists("BoxModel")){
  86. dir.mkdir("BoxModel");
  87. }
  88. dir.cd("BoxModel");
  89. auto list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
  90. QList<QSharedPointer<BoxModel>> ret;
  91. for(int i = 0; i < list.size(); ++i){
  92. auto & finfo = list.at(i);
  93. auto obj = QJsonDocument::fromJson(readAbsoluteFile(finfo.absoluteFilePath())).object();
  94. auto info = BoxModel::fromObject(obj);
  95. if(!info.isNull()){
  96. ret.append(info);
  97. }
  98. }
  99. return ret;
  100. }
  101. QList<QSharedPointer<PackModel>> PackInfoManger::getPackModel()
  102. {
  103. auto dir =PQ::AppPath::this_()->dataDir();
  104. if(!dir.exists("PackModel")){
  105. dir.mkdir("PackModel");
  106. }
  107. dir.cd("PackModel");
  108. // QList<QSharedPointer<PackModel>> packmodel;
  109. auto list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
  110. QList<QSharedPointer<PackModel>> ret;
  111. for(int i = 0; i < list.size(); ++i){
  112. auto & finfo = list.at(i);
  113. auto obj = QJsonDocument::fromJson(readAbsoluteFile(finfo.absoluteFilePath())).object();
  114. auto info = PackModel::fromObject(obj);
  115. if(!info.isNull()){
  116. ret.append(info);
  117. }
  118. }
  119. return ret;
  120. }
  121. QList<PackSaveInfo> PackInfoManger::getPackInfoSync(const QDate &tm)
  122. {
  123. auto dir = getDir(tm);
  124. auto list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
  125. QList<PackSaveInfo> ret;
  126. for(int i = 0; i < list.size(); ++i){
  127. auto & finfo = list.at(i);
  128. if(finfo.fileName().indexOf("_sync") < 0) continue;
  129. auto obj = QJsonDocument::fromJson(readAbsoluteFile(finfo.absoluteFilePath())).object();
  130. auto info = PackInfo::fromObject(obj);
  131. if(!info.isNull()){
  132. PackSaveInfo pinfo;
  133. pinfo.absPath = finfo.absoluteFilePath();
  134. pinfo.packInfo = info;
  135. ret.append(pinfo);
  136. }
  137. }
  138. return ret;
  139. }
  140. QList<QSharedPointer<ProjectInfo>> PackInfoManger::getLocalProjectInfo()
  141. {
  142. QList<QSharedPointer<ProjectInfo>> list;
  143. auto dt = readAbsoluteFile(_dataDir.absoluteFilePath("project.json"));
  144. if(!dt.isEmpty()) {
  145. QJsonArray ary = QJsonDocument::fromJson(dt).array();
  146. for(int i = 0; i < ary.size(); ++i){
  147. auto obj = ary.at(i).toObject();
  148. auto info = ProjectInfo::fromObject(obj);
  149. if(!info.isNull()) {
  150. info->isLocal = true;
  151. list.append(info);
  152. }
  153. }
  154. }
  155. return list;
  156. }
  157. bool PackInfoManger::syncLocalProjectInfo(QList<QSharedPointer<ProjectInfo> > &projects)
  158. {
  159. QJsonArray ary;
  160. for(int i = 0; i < projects.size(); ++i)
  161. {
  162. ary.append(projects.at(i)->toObject());
  163. }
  164. QByteArray dt = QJsonDocument(ary).toJson();
  165. return writeAbsoluteFile(_dataDir.absoluteFilePath("project.json"),dt);
  166. }