mirror of
https://github.com/blupi-games/planetblupi
synced 2024-12-30 10:15:36 +01:00
Show a message on the main screen if an update is available
This commit is contained in:
parent
4ba3056984
commit
77262bf3a8
@ -22,9 +22,15 @@
|
|||||||
#include <argagg/argagg.hpp>
|
#include <argagg/argagg.hpp>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <iterator>
|
||||||
|
#include <sstream>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <thread>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
#include "blupi.h"
|
#include "blupi.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
@ -74,6 +80,25 @@ struct url_data {
|
|||||||
size_t size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Out>
|
||||||
|
void split (const std::string & s, char delim, Out result)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss.str (s);
|
||||||
|
std::string item;
|
||||||
|
while (std::getline (ss, item, delim))
|
||||||
|
{
|
||||||
|
*(result++) = item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> split (const std::string & s, char delim)
|
||||||
|
{
|
||||||
|
std::vector<std::string> elems;
|
||||||
|
split (s, delim, std::back_inserter (elems));
|
||||||
|
return elems;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Read an integer from a string.
|
* \brief Read an integer from a string.
|
||||||
*
|
*
|
||||||
@ -389,6 +414,28 @@ static void HandleEvent (const SDL_Event & event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case EV_CHECKUPDATE:
|
||||||
|
{
|
||||||
|
std::string * data = static_cast<std::string *> (event.user.data1);
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
||||||
|
json jsonData = json::parse (*data);
|
||||||
|
|
||||||
|
/* Check if the remote version is newer */
|
||||||
|
std::vector<std::string> list = split (jsonData["version"], '.');
|
||||||
|
std::vector<unsigned int> version (3);
|
||||||
|
std::transform (
|
||||||
|
list.begin (), list.end (), version.begin (),
|
||||||
|
[](const std::string & s) -> unsigned int { return std::stoi (s); });
|
||||||
|
|
||||||
|
if (
|
||||||
|
PB_VERSION_INT (version[0], version[1], version[2]) >
|
||||||
|
PLANETBLUPI_VERSION_INT)
|
||||||
|
g_pEvent->SetUpdateVersion (jsonData["version"]);
|
||||||
|
|
||||||
|
delete data;
|
||||||
|
}
|
||||||
|
|
||||||
case EV_MUSIC_STOP:
|
case EV_MUSIC_STOP:
|
||||||
if (g_pSound->IsStoppedOnDemand ())
|
if (g_pSound->IsStoppedOnDemand ())
|
||||||
break;
|
break;
|
||||||
|
@ -56,10 +56,13 @@ typedef Sint32 LPARAM;
|
|||||||
|
|
||||||
#define PB_STRINGIFY(s) #s
|
#define PB_STRINGIFY(s) #s
|
||||||
#define PB_TOSTRING(s) PB_STRINGIFY (s)
|
#define PB_TOSTRING(s) PB_STRINGIFY (s)
|
||||||
|
#define PB_VERSION_INT(a, b, c) (a << 16 | b << 8 | c)
|
||||||
#define PB_VERSION_DOT(a, b, c) a##.##b##.##c
|
#define PB_VERSION_DOT(a, b, c) a##.##b##.##c
|
||||||
#define PB_VERSION(a, b, c) PB_VERSION_DOT (a, b, c)
|
#define PB_VERSION(a, b, c) PB_VERSION_DOT (a, b, c)
|
||||||
#define PLANETBLUPI_VERSION \
|
#define PLANETBLUPI_VERSION \
|
||||||
PB_VERSION (PB_VERSION_MAJOR, PB_VERSION_MINOR, PB_VERSION_PATCH)
|
PB_VERSION (PB_VERSION_MAJOR, PB_VERSION_MINOR, PB_VERSION_PATCH)
|
||||||
|
#define PLANETBLUPI_VERSION_INT \
|
||||||
|
PB_VERSION_INT (PB_VERSION_MAJOR, PB_VERSION_MINOR, PB_VERSION_PATCH)
|
||||||
#define PLANETBLUPI_VERSION_STR PB_TOSTRING (PLANETBLUPI_VERSION)
|
#define PLANETBLUPI_VERSION_STR PB_TOSTRING (PLANETBLUPI_VERSION)
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -1590,6 +1590,8 @@ CEvent::CEvent ()
|
|||||||
m_Lang = m_Languages.begin () + 3;
|
m_Lang = m_Languages.begin () + 3;
|
||||||
else
|
else
|
||||||
m_Lang = m_Languages.begin ();
|
m_Lang = m_Languages.begin ();
|
||||||
|
|
||||||
|
m_updateBlinking = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructeur.
|
// Destructeur.
|
||||||
@ -1870,6 +1872,11 @@ void AddCheatCode (char * pDst, char * pSrc)
|
|||||||
pDst[j] = 0;
|
pDst[j] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEvent::SetUpdateVersion (const std::string & version)
|
||||||
|
{
|
||||||
|
this->m_updateVersion = version;
|
||||||
|
}
|
||||||
|
|
||||||
// Dessine un texte multi-lignes centré.
|
// Dessine un texte multi-lignes centré.
|
||||||
|
|
||||||
void CEvent::DrawTextCenter (const char * text, Sint32 x, Sint32 y, Sint32 font)
|
void CEvent::DrawTextCenter (const char * text, Sint32 x, Sint32 y, Sint32 font)
|
||||||
@ -1945,6 +1952,17 @@ bool CEvent::DrawButtons ()
|
|||||||
res, sizeof (res), "%s %u.%u.%u", gettext ("Version"), PB_VERSION_MAJOR,
|
res, sizeof (res), "%s %u.%u.%u", gettext ("Version"), PB_VERSION_MAJOR,
|
||||||
PB_VERSION_MINOR, PB_VERSION_PATCH);
|
PB_VERSION_MINOR, PB_VERSION_PATCH);
|
||||||
DrawText (m_pPixmap, pos, res, FONTLITTLE);
|
DrawText (m_pPixmap, pos, res, FONTLITTLE);
|
||||||
|
|
||||||
|
if (!this->m_updateVersion.empty () && this->m_updateBlinking++ % 80 < 40)
|
||||||
|
{
|
||||||
|
pos.x = 70;
|
||||||
|
pos.y = 465;
|
||||||
|
snprintf (
|
||||||
|
res, sizeof (res),
|
||||||
|
gettext ("New version available for download on www.blupi.org (v%s)"),
|
||||||
|
this->m_updateVersion.c_str ());
|
||||||
|
DrawText (m_pPixmap, pos, res, FONTLITTLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_phase == EV_PHASE_SETUP || m_phase == EV_PHASE_SETUPp)
|
if (m_phase == EV_PHASE_SETUP || m_phase == EV_PHASE_SETUPp)
|
||||||
|
@ -129,8 +129,8 @@ public:
|
|||||||
void IntroStep ();
|
void IntroStep ();
|
||||||
|
|
||||||
Uint8 GetWindowScale ();
|
Uint8 GetWindowScale ();
|
||||||
|
void SetUpdateVersion (const std::string & version);
|
||||||
|
|
||||||
public:
|
|
||||||
static void PushUserEvent (Sint32 code, void * data = nullptr);
|
static void PushUserEvent (Sint32 code, void * data = nullptr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -247,6 +247,8 @@ protected:
|
|||||||
Uint16 m_keymod;
|
Uint16 m_keymod;
|
||||||
POINT m_debugPos;
|
POINT m_debugPos;
|
||||||
Sint32 m_introTime;
|
Sint32 m_introTime;
|
||||||
|
Sint32 m_updateBlinking;
|
||||||
|
std::string m_updateVersion;
|
||||||
};
|
};
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
13003
src/json.hpp
Normal file
13003
src/json.hpp
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user