packinfomanger.cpp 5.7 KB

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