first commit
This commit is contained in:
295
project/fm_viewer/module/fm_version_checker.cpp
Normal file
295
project/fm_viewer/module/fm_version_checker.cpp
Normal file
@@ -0,0 +1,295 @@
|
||||
|
||||
#include "fm_version_checker.h"
|
||||
#if (USE_VERSION_CHECK)
|
||||
#include "../rm_include.h"
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
#include <QJsonObject>
|
||||
|
||||
#if (RM_MODEL == RM_MODEL_TYPE_TB4000)
|
||||
static QString VERSION_URL = "https://www.telebit.co.kr/html/download/pcviewer_version.json";
|
||||
#if(SUB_MODEL_TB5000)
|
||||
static QString VERSION_MODEL_NAME = "TB5000";
|
||||
#else // SUB_MODEL_TB5000
|
||||
static QString VERSION_MODEL_NAME = "TB4000";
|
||||
#endif // SUB_MODEL_TB5000
|
||||
#endif // TB4000 + TB5000
|
||||
|
||||
#if (RM_MODEL_EMT_KR)
|
||||
#include "../cfg/rm_settings_cfg_emt_kr.h"
|
||||
|
||||
|
||||
//static const char VERSION_URL[] = "http://fmproject2.iptime.org/emt/nexian/versions.php";
|
||||
// static const char VERSION_MODEL_NAME[] = "viewer";
|
||||
static const char VERSION_URL[] = "https://nexiandownload.kr/API/app_data.php";
|
||||
//static const char VERSION_MODEL_NAME[] = "PCV";
|
||||
|
||||
// 모델별 확인되면 해당 URL 로 이동, 확인되지 않으면 NM5000_URL 로 이동
|
||||
static const char NM5000_URL[] = "https://nexiandownload.kr/download_view.php?TYPE_CD=PCV&PRODUCT_SEQ=&&seq=PST_0011";
|
||||
static const char MIRROR5_URL[] = "https://nexiandownload.kr/download_view.php?TYPE_CD=PCV&PRODUCT_SEQ=&seq=PST_0012";
|
||||
static const char NP5000_URL[] = "https://nexiandownload.kr/download_view.php?TYPE_CD=PCV&PRODUCT_SEQ=&seq=PST_0013";
|
||||
static const char PRO5_URL[] = "https://nexiandownload.kr/download_view.php?TYPE_CD=PCV&PRODUCT_SEQ=&seq=PST_0014";
|
||||
|
||||
#endif // @RM_MODEL_EMT_KR
|
||||
|
||||
FMVersionChecker* FMVersionChecker::_instance = NULL;
|
||||
|
||||
FMVersionChecker::FMVersionChecker(QObject *parent): QObject(parent)
|
||||
{
|
||||
_checkedViewer = false;
|
||||
}
|
||||
void FMVersionChecker::start()
|
||||
{
|
||||
//qInfo() << __FUNCTION__;
|
||||
//_updates.clear();
|
||||
|
||||
// 이미 처리 완료
|
||||
if(_checkedViewer) {
|
||||
return;
|
||||
}
|
||||
|
||||
QNetworkAccessManager* manager = new QNetworkAccessManager();
|
||||
connect(manager,SIGNAL(finished(QNetworkReply*)),SLOT(onFinished(QNetworkReply*)));
|
||||
QNetworkRequest request;
|
||||
request.setUrl(QUrl(VERSION_URL));
|
||||
manager->get(request);
|
||||
}
|
||||
// URL 정보 확인 결과
|
||||
#if (RM_MODEL_EMT_KR)
|
||||
void FMVersionChecker::onFinished(QNetworkReply* reply)
|
||||
{
|
||||
if(reply->error())
|
||||
{
|
||||
#if (USER_LOGER)
|
||||
if(RMApp::instance()->userLog) {
|
||||
RMApp::instance()->appendLog("ERROR","VERSION_CHECK:" + reply->errorString());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else // 정상 수신
|
||||
{
|
||||
QString nv = reply->readAll(); // 데이터 불러오기
|
||||
if (nv.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
_checkedViewer = true;
|
||||
#if (1) // 양산서버
|
||||
// <pre>{</pre>
|
||||
nv = nv.replace("<pre>","").replace("</pre>","");
|
||||
QJsonDocument doc = QJsonDocument::fromJson(nv.toUtf8());
|
||||
QJsonObject root = doc.object();
|
||||
if(!root.contains("models")) {
|
||||
return;
|
||||
}
|
||||
QString currentVersion = QString().sprintf("%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2); // ,RM_MODEL_SVN_VERSION
|
||||
QJsonArray obj = root.value("models").toArray();
|
||||
for(int i=0;i<obj.size();i++) {
|
||||
QJsonObject item = obj.at(i).toObject();
|
||||
if(!item.contains("model") || !item.contains("data")) {
|
||||
continue;
|
||||
}
|
||||
// Pro 5 -> pro5, 실제 모델 확인은 필요 없음
|
||||
// QString model = item.value("model").toString().replace(" ","").trimmed().toLower();
|
||||
QJsonObject data = item.value("data").toObject();
|
||||
if(!data.contains("PCV")) {
|
||||
continue;
|
||||
}
|
||||
QJsonObject pcv = data.value("PCV").toObject();
|
||||
if(!pcv.contains("version"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
QString version = pcv.value("version").toString().toLower().replace("v","").trimmed();
|
||||
if(version != currentVersion) { //
|
||||
QMap<QString,QString> info;
|
||||
for(int j=0;j<pcv.keys().size();j++) {
|
||||
QString key = pcv.keys().at(j);
|
||||
info.insert(key,pcv.value(key).toString());
|
||||
}
|
||||
emit updateFound(info);
|
||||
break;
|
||||
}
|
||||
} // for
|
||||
#else // 개발서버
|
||||
QJsonDocument doc = QJsonDocument::fromJson(nv.toUtf8());
|
||||
QJsonArray obj = doc.array();
|
||||
QString currentVersion = QString().sprintf("%d.%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2,RM_MODEL_SVN_VERSION);
|
||||
for(int i=0;i<obj.size();i++) {
|
||||
QJsonObject item = obj.at(i).toObject();
|
||||
if(item.contains("model") &&
|
||||
item.contains("fw") &&
|
||||
item.value("model").toString().trimmed() == VERSION_MODEL_NAME) {
|
||||
|
||||
QJsonObject fwitem = item.value("fw").toObject();
|
||||
if(fwitem.contains("version"))
|
||||
{
|
||||
QString version = fwitem.value("version").toString().trimmed();
|
||||
//qInfo() << "VERSION CURRENT:" << currentVersion << "SERVER:" << version << __FUNCTION__;
|
||||
if(version != currentVersion) { //
|
||||
QMap<QString,QString> info;
|
||||
for(int j=0;j<fwitem.keys().size();j++) {
|
||||
QString key = fwitem.keys().at(j);
|
||||
info.insert(key,fwitem.value(key).toString());
|
||||
}
|
||||
emit updateFound(info);
|
||||
break;
|
||||
}
|
||||
} // @if(fwitem.contains("version"))
|
||||
}
|
||||
}
|
||||
#endif // 개발서버
|
||||
} // else
|
||||
}
|
||||
#else // Telebit?
|
||||
void FMVersionChecker::onFinished(QNetworkReply* reply)
|
||||
{
|
||||
if(reply->error())
|
||||
{
|
||||
#if (USER_LOGER)
|
||||
if(RMApp::instance()->userLog) {
|
||||
RMApp::instance()->appendLog("ERROR","VERSION_CHECK:" + reply->errorString());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else // 정상 수신
|
||||
{
|
||||
QString nv = reply->readAll(); // 데이터 불러오기
|
||||
if (nv.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
_checkedViewer = true;
|
||||
// 에러 처리 -> 이후 제거예정
|
||||
//nv = nv.replace("},\r\n]","}\r\n]");
|
||||
QJsonDocument doc = QJsonDocument::fromJson(nv.toUtf8());
|
||||
QJsonArray obj = doc.array();
|
||||
QString currentVersion = QString().sprintf("%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2);
|
||||
for(int i=0;i<obj.size();i++) {
|
||||
QJsonObject item = obj.at(i).toObject();
|
||||
|
||||
if(item.contains("name") && item.value("name").toString().trimmed() == VERSION_MODEL_NAME) {
|
||||
QString iv = item.value("version").toString().trimmed();
|
||||
|
||||
if(item.contains("version") && iv.compare(currentVersion) > 0)
|
||||
{
|
||||
QMap<QString,QString> info;
|
||||
for(int j=0;j<item.keys().size();j++) {
|
||||
QString key = item.keys().at(j);
|
||||
info.insert(key,item.value(key).toString());
|
||||
}
|
||||
emit updateFound(info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // EMT/TELEBIT
|
||||
|
||||
|
||||
FMVersionDialog::FMVersionDialog(QMap<QString,QString> update, QWidget *parent) : QDialog(parent,Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint)
|
||||
{
|
||||
_info = update;
|
||||
setWindowTitle(FM_WSTR(L"업데이트 알림"));
|
||||
setFixedSize(420,220);
|
||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||
layout->setAlignment(Qt::AlignTop);
|
||||
layout->setSpacing(15);
|
||||
setLayout(layout);
|
||||
|
||||
|
||||
// 새로운 버전의 소프트웨어를 사용할 수 있습니다.
|
||||
QLabel* t1 = new QLabel(this);
|
||||
t1->setText(FM_WSTR(L"새롭게 업데이트된 버전이 확인되었습니다."));
|
||||
layout->addWidget(t1);
|
||||
|
||||
QFont font = t1->font();
|
||||
font.setPixelSize(12);
|
||||
font.setFamily("Arial");
|
||||
font.setLetterSpacing(QFont::PercentageSpacing,108);
|
||||
font.setStyleStrategy(QFont::PreferAntialias);
|
||||
t1->setFont(font);
|
||||
|
||||
// 다운로드하려면 아래 URL을 클릭하십시오.
|
||||
QLabel* t2 = new QLabel(this);
|
||||
t2->setText(FM_WSTR(L"다운로드하려면 아래 URL을 클릭하십시오."));
|
||||
t2->setFont(font);
|
||||
layout->addWidget(t2);
|
||||
|
||||
QString currentVersionPrefix = FM_WSTR(L"현재 버전:");
|
||||
QString nextVersionPrefix = FM_WSTR(L"업데이트된 버전:");
|
||||
QString typeTitle = FM_WSTR(L"S/W");
|
||||
|
||||
QLabel* tt = new QLabel(this);
|
||||
tt->setFont(font);
|
||||
|
||||
tt->setText("<b>" + typeTitle + "</b>");
|
||||
tt->setFont(font);
|
||||
layout->addWidget(tt);
|
||||
|
||||
QLabel* versions = new QLabel(this);
|
||||
versions->setIndent(10);
|
||||
versions->setFont(font);
|
||||
#if (RM_MODEL_EMT_KR)
|
||||
QString currentVersion = QString().sprintf("%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2);
|
||||
// → \xe2\x86\x92
|
||||
versions->setText(currentVersionPrefix + "\t<b>" + currentVersion + "</b>\t" + QString::fromUtf8("\xe2\x86\x92") + "\t" + nextVersionPrefix + "\t<b>" + _info.value("version") + "\t</b>");
|
||||
#else // RM_MODEL_EMT_KR
|
||||
QString currentVersion = QString().sprintf("%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2);
|
||||
versions->setText(currentVersionPrefix + "\t<b>" + currentVersion + "</b>\t" + QString::fromUtf8("\xe2\x86\x92") + "\t" + nextVersionPrefix + "\t<b>" + _info.value("version") + "\t</b>");
|
||||
#endif // RM_MODEL_EMT_KR
|
||||
layout->addWidget(versions);
|
||||
|
||||
|
||||
// LINK
|
||||
QLabel* urlLink = new QLabel(this);
|
||||
urlLink->setFont(font);
|
||||
|
||||
#if (RM_MODEL_EMT_KR)
|
||||
// _info.value("url") 는 무시 각 모델별 다운로드 페이지로 이동
|
||||
QString url = NM5000_URL;
|
||||
if (CFG::info.model == NM5000) { // NM5000
|
||||
// url = NM5000_URL;
|
||||
} else if (CFG::info.model == NP5000) { // NP5000
|
||||
url =NP5000_URL;
|
||||
} else if (CFG::info.model == MIRROR5) { // MIRROR5
|
||||
url =MIRROR5_URL;
|
||||
} else if (CFG::info.model == PRO5) { // PRO5
|
||||
url =PRO5_URL;
|
||||
}
|
||||
#else // EMT_KR
|
||||
QString url = _info.value("url");
|
||||
#endif // RM_MODEL_EMT_KR
|
||||
|
||||
|
||||
urlLink->setIndent(10);
|
||||
// _info.value("url")
|
||||
urlLink->setText("<a href=\"" + url + "\">" + FM_WSTR(L"다운로드 페이지로 이동") + "</a>");
|
||||
urlLink->setTextFormat(Qt::RichText);
|
||||
urlLink->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||
urlLink->setOpenExternalLinks(true);
|
||||
QFont font2 = urlLink->font();
|
||||
font2.setFamily("Arial");
|
||||
font2.setPixelSize(14);
|
||||
urlLink->setFont(font2);
|
||||
|
||||
layout->addWidget(urlLink);
|
||||
|
||||
// Close
|
||||
QWidget* buttonWidget = new QWidget(this);
|
||||
buttonWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||
layout->addWidget(buttonWidget);
|
||||
QHBoxLayout* bl = new QHBoxLayout(buttonWidget);
|
||||
bl->setAlignment(Qt::AlignBottom | Qt::AlignRight);
|
||||
QPushButton* closeButton = new QPushButton(buttonWidget);
|
||||
closeButton->setFixedWidth(100);
|
||||
closeButton->setFont(font);
|
||||
closeButton->setText(FM_WSTR(L"닫기"));
|
||||
connect(closeButton,&QPushButton::clicked,[=]() {
|
||||
reject();
|
||||
});
|
||||
bl->addWidget(closeButton);
|
||||
}
|
||||
|
||||
|
||||
#endif // #if (USE_VERSION_CHECK)
|
||||
Reference in New Issue
Block a user