296 lines
11 KiB
C++
296 lines
11 KiB
C++
|
|
#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)
|