File indexing completed on 2024-05-05 05:40:34

0001 /*************************************************************************
0002  *    Copyright (C) 2011 by Renaud Guezennec                             *
0003  *    Copyright (C) 2011 by Joseph Boudou                                *
0004  *                                                                       *
0005  *      https://rolisteam.org/                                        *
0006  *                                                                       *
0007  *   Rolisteam is free software; you can redistribute it and/or modify   *
0008  *   it under the terms of the GNU General Public License as published   *
0009  *   by the Free Software Foundation; either version 2 of the License,   *
0010  *   or (at your option) any later version.                              *
0011  *                                                                       *
0012  *   This program is distributed in the hope that it will be useful,     *
0013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of      *
0014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       *
0015  *   GNU General Public License for more details.                        *
0016  *                                                                       *
0017  *   You should have received a copy of the GNU General Public License   *
0018  *   along with this program; if not, write to the                       *
0019  *   Free Software Foundation, Inc.,                                     *
0020  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           *
0021  *************************************************************************/
0022 
0023 #include "services/tipchecker.h"
0024 
0025 #include <QDebug>
0026 #include <QJsonDocument>
0027 #include <QJsonObject>
0028 #include <QNetworkReply>
0029 #include <QNetworkRequest>
0030 #include <QStringList>
0031 #include <QUrl>
0032 /*****************
0033  * UpdateChecker *
0034  *****************/
0035 
0036 TipChecker::TipChecker(QObject* obj) : QObject(obj)
0037 {
0038     m_noErrror= true;
0039 }
0040 
0041 bool TipChecker::hasArticle()
0042 {
0043     return m_state;
0044 }
0045 
0046 void TipChecker::startChecking()
0047 {
0048 #ifdef HAVE_QT_NETWORK
0049     m_manager= new QNetworkAccessManager(this);
0050     connect(m_manager, &QNetworkAccessManager::finished, this, &TipChecker::readJSon);
0051     m_manager->get(QNetworkRequest(QUrl("https://rolisteam.org/tips.json")));
0052 #endif
0053 }
0054 
0055 QString TipChecker::getArticleContent()
0056 {
0057     return m_msg;
0058 }
0059 
0060 QString TipChecker::getUrl()
0061 {
0062     return m_url;
0063 }
0064 
0065 QString TipChecker::getArticleTitle()
0066 {
0067     return m_title;
0068 }
0069 void TipChecker::readJSon(QNetworkReply* p)
0070 {
0071     if(p->error() != QNetworkReply::NoError)
0072     {
0073         m_noErrror= false;
0074         emit checkFinished();
0075         return;
0076     }
0077 
0078     QByteArray a= p->readAll();
0079     QJsonParseError error;
0080     QJsonDocument doc(QJsonDocument::fromJson(a, &error));
0081     if(error.error != QJsonParseError::NoError)
0082     {
0083         m_noErrror= false;
0084         emit checkFinished();
0085         return;
0086     }
0087 
0088     QJsonObject obj= doc.object();
0089     QString locale= QLocale::system().name();
0090     int pos= locale.indexOf('_');
0091     if(pos >= 0)
0092     {
0093         locale= locale.remove(0, pos);
0094     }
0095 
0096     if(!obj.contains(locale))
0097     {
0098         locale= "en";
0099     }
0100     if(obj.contains(locale))
0101     {
0102         QJsonObject lang= obj[locale].toObject();
0103         m_title= lang["title"].toString();
0104         m_msg= lang["msg"].toString();
0105         m_url= lang["url"].toString();
0106         m_id= lang["id"].toInt();
0107         if(!m_msg.isEmpty() && !m_title.isEmpty())
0108         {
0109             m_state= true;
0110         }
0111     }
0112     emit checkFinished();
0113 }
0114 
0115 int TipChecker::getId() const
0116 {
0117     return m_id;
0118 }
0119 
0120 void TipChecker::setId(int value)
0121 {
0122     m_id= value;
0123 }