#include "fm_version_checker.h" #if (USE_VERSION_CHECK) #include "../rm_include.h" #include #include #include #include #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) // 양산서버 //
{
nv = nv.replace("
","").replace("
",""); 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 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 info; for(int j=0;j info; for(int j=0;jerror()) { #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 0) { QMap info; for(int j=0;j 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("" + typeTitle + ""); 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" + currentVersion + "\t" + QString::fromUtf8("\xe2\x86\x92") + "\t" + nextVersionPrefix + "\t" + _info.value("version") + "\t"); #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" + currentVersion + "\t" + QString::fromUtf8("\xe2\x86\x92") + "\t" + nextVersionPrefix + "\t" + _info.value("version") + "\t"); #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("" + FM_WSTR(L"다운로드 페이지로 이동") + ""); 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)