versioncheck.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "versioncheck.h"
  2. #include "SNCDataBase.h"
  3. #include "loghelper.h"
  4. VersionCheck::VersionCheck()
  5. {
  6. this->local_app_version = SNCDataBase::getAppVersion();
  7. this->appconfig_url = SNCDataBase::getAppConfigUrl();
  8. stop = false;
  9. manager = 0;
  10. }
  11. VersionCheck::~VersionCheck()
  12. {
  13. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  14. <<"VersionCheck Destroyed.";
  15. if(manager)
  16. delete manager;
  17. }
  18. bool VersionCheck::needUpdate()
  19. {
  20. if(!getServerConfig())
  21. return false;
  22. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  23. <<"app xml fetched";
  24. QString minver = parser.minVer;
  25. QString maxver = parser.maxVer;
  26. QString curver = this->local_app_version;
  27. QRegExp exp("\\d+\.\\d+\.\\d+");
  28. qDebug()<<minver<<maxver<<curver;
  29. if(!exp.exactMatch(minver)||!exp.exactMatch((maxver))||!exp.exactMatch(curver))
  30. {
  31. return false;
  32. }
  33. if(compare(curver,maxver))
  34. {
  35. if(compare(curver,minver))
  36. {
  37. this->force = true;
  38. }
  39. else
  40. {
  41. this->force = false;
  42. }
  43. return true;
  44. }
  45. return false;
  46. }
  47. bool VersionCheck::isForce()
  48. {
  49. return this->force;
  50. }
  51. bool VersionCheck::getServerConfig()
  52. {
  53. QString config_url = appconfig_url;
  54. qDebug()<<appconfig_url;
  55. QString content = downloadFile(config_url);
  56. qDebug()<<content;
  57. return parser.readConfig(content);
  58. }
  59. QString VersionCheck::downloadFile(QString http_url)
  60. {
  61. QUrl url(http_url);
  62. QNetworkAccessManager manager;
  63. QNetworkReply *reply = manager.get(QNetworkRequest(url));
  64. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
  65. QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
  66. QTimer::singleShot(10000, &loop, SLOT(quit()));
  67. loop.exec();
  68. QString content = reply->readAll();
  69. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"));
  70. QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
  71. if(reply)
  72. delete reply;
  73. return content;
  74. }
  75. bool VersionCheck::compare(QString ver1, QString ver2)
  76. {
  77. QStringList list = ver1.split(".");
  78. int ver1Major = list.at(0).toInt();
  79. int ver1Middle = list.at(1).toInt();
  80. int ver1Last = list.at(2).toInt();
  81. list = ver2.split(".");
  82. int ver2Major = list.at(0).toInt();
  83. int ver2Middle = list.at(1).toInt();
  84. int ver2Last = list.at(2).toInt();
  85. qDebug()<<ver1Major<<ver1Middle<<ver1Last;
  86. qDebug()<<ver2Major<<ver2Middle<<ver2Last;
  87. if(ver1Major<ver2Major)
  88. {
  89. return true;
  90. }
  91. else if(ver1Major==ver2Major)
  92. {
  93. if(ver1Middle<ver2Middle)
  94. {
  95. return true;
  96. }
  97. else if(ver1Middle==ver2Middle)
  98. {
  99. if(ver1Last<ver2Last)
  100. {
  101. return true;
  102. }
  103. }
  104. }
  105. return false;
  106. }