BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
UpdateNotifier.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/mainwindow/UpdateNotifier.cpp
6 //! @brief Implements class UpdateNotifier
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
18 #include <QtNetwork>
19 
21  : QObject(parent), m_networkAccessManager(new QNetworkAccessManager(parent))
22 {
23  connect(m_networkAccessManager, &QNetworkAccessManager::finished, this,
25 }
26 
28 {
29  if (hasDefinedUpdatesFlag()) {
30  if (updatesFlag()) {
31  QString address(Constants::S_VERSION_URL);
32  QUrl url(address);
33  QNetworkRequest networkRequest(url);
34  networkRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute,
35  QNetworkRequest::AlwaysNetwork);
36  QString text = QString("Mozilla/5.0 (BornAgainGUI-%1)")
38  networkRequest.setRawHeader(QByteArray("User-Agent"), text.toLatin1());
39  m_networkAccessManager->get(networkRequest);
40  } else {
41  emit onUpdateNotification("");
42  }
43  }
44 }
45 
46 void UpdateNotifier::replyFinished(QNetworkReply* reply)
47 {
48  QString replyString;
49  if (reply->error() == QNetworkReply::NoError) {
50  if (reply->isReadable()) {
51  // Reading the first line of ChangeLog
52  replyString = QString::fromUtf8(reply->readLine().data());
53  int versionIndex = replyString.indexOf("-") + 1;
54  int versionIndexEnd = replyString.indexOf(",", versionIndex);
55  QString versionString = replyString.mid(versionIndex, versionIndexEnd - versionIndex);
56  QString myVersion = GUIHelpers::getBornAgainVersionString();
57 
58  // Testwise degrade version
59  // myVersion = "1.1.0";
60 
61  if (GUIHelpers::versionCode(versionString) > GUIHelpers::versionCode(myVersion)) {
62  QString message("New version is available: <a href=\"");
63  message.append(Constants::S_DOWNLOAD_LINK);
64  message.append("\">");
65  message.append(replyString);
66  message.append("</a>");
67  emit onUpdateNotification(message);
68  } else {
69  emit onUpdateNotification("");
70  }
71  }
72  };
73  reply->deleteLater();
74 }
75 
77 {
78  QSettings settings;
79  settings.beginGroup(Constants::S_UPDATES);
80  settings.setValue(Constants::S_CHECKFORUPDATES, flag);
81  settings.endGroup();
82 }
83 
84 //! Returns true if there is defined flag requiring check for updates.
85 
87 {
88  QSettings settings;
89  if (settings.childGroups().contains(Constants::S_UPDATES)) {
90  settings.beginGroup(Constants::S_UPDATES);
91  return settings.value(Constants::S_CHECKFORUPDATES).toBool();
92  }
93  return false;
94 }
95 
96 //! Returns true if settings contain record about user choice for updates.
97 
99 {
100  QSettings settings;
101  return settings.childGroups().contains(Constants::S_UPDATES);
102 }
Defines class GUIHelpers functions.
Implements class UpdateNotifier.
void setCheckUpdatesFlag(bool flag)
void replyFinished(QNetworkReply *reply)
bool hasDefinedUpdatesFlag() const
Returns true if settings contain record about user choice for updates.
QNetworkAccessManager * m_networkAccessManager
void onUpdateNotification(const QString &text)
bool updatesFlag() const
Returns true if there is defined flag requiring check for updates.
UpdateNotifier(QObject *parent=0)
Defines namespace Constants.
const char S_CHECKFORUPDATES[]
const char S_DOWNLOAD_LINK[]
const char S_UPDATES[]
const char S_VERSION_URL[]
QString getBornAgainVersionString()
Definition: GUIHelpers.cpp:130
int versionCode(const QString &version)
Definition: GUIHelpers.cpp:173