Make update checker use a compile-time list of tags to determine the appropriate updates to list, instead of a hard-coded OS check. The list of accepted tags is defined by the UPDATE_CHECKER_ACCEPT_TAGS macro. If this macro is undefined, the update checker will still compile, but will reject all updates with tags.

Updates #1132.

Originally committed to SVN as r4440.
This commit is contained in:
Niels Martin Hansen 2010-06-05 20:16:30 +00:00
parent 2d9eee4ea9
commit ff34a08afd
2 changed files with 42 additions and 17 deletions

View file

@ -112,6 +112,18 @@
//#define FINAL_RELEASE //#define FINAL_RELEASE
// Specify tags the update checker accepts
// See <http://devel.aegisub.org/wiki/Technical/UpdateChecker> for details on tags.
// Depending on who will be using your build, you may or may not want to have the
// "source" tag in here. If the string is empty, the update checker will reject any
// update offered.
#if defined(_M_IX86)
# define UPDATE_CHECKER_ACCEPT_TAGS "windows source"
#elif defined(_M_X64)
# define UPDATE_CHECKER_ACCEPT_TAGS "win64 source"
#endif
///////////// NOT RECOMMENDED ///////////// ///////////// NOT RECOMMENDED /////////////

View file

@ -61,6 +61,7 @@
#include <wx/statline.h> #include <wx/statline.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <memory> #include <memory>
#include <set>
#include <vector> #include <vector>
#endif #endif
@ -323,6 +324,17 @@ static wxString GetSystemLanguage()
void AegisubVersionCheckerThread::DoCheck() void AegisubVersionCheckerThread::DoCheck()
{ {
std::set<wxString> accept_tags;
#ifdef UPDATE_CHECKER_ACCEPT_TAGS
{
wxStringTokenizer tk(wxString(UPDATE_CHECKER_ACCEPT_TAGS, wxConvUTF8), _T(" "));
while (tk.HasMoreTokens())
{
accept_tags.insert(tk.GetNextToken());
}
}
#endif
const wxString servername = _T("updates.aegisub.org"); const wxString servername = _T("updates.aegisub.org");
const wxString base_updates_path = _T("/trunk"); const wxString base_updates_path = _T("/trunk");
@ -344,7 +356,7 @@ void AegisubVersionCheckerThread::DoCheck()
std::auto_ptr<wxInputStream> stream(http.GetInputStream(path)); std::auto_ptr<wxInputStream> stream(http.GetInputStream(path));
if (stream.get() == 0) // check for null-pointer if (stream.get() == 0) // check for null-pointer
throw VersionCheckError("Could not connect to updates server."); throw VersionCheckError(STD_STR(_("Could not download from updates server.")));
if (http.GetResponse() < 200 || http.GetResponse() >= 300) { if (http.GetResponse() < 200 || http.GetResponse() >= 300) {
const std::string str_err = STD_STR(wxString::Format(_("HTTP request failed, got HTTP response %d."), http.GetResponse())); const std::string str_err = STD_STR(wxString::Format(_("HTTP request failed, got HTTP response %d."), http.GetResponse()));
@ -367,7 +379,7 @@ void AegisubVersionCheckerThread::DoCheck()
wxString line_type = parsed[0]; wxString line_type = parsed[0];
wxString line_revision = parsed[1]; wxString line_revision = parsed[1];
wxString line_platform = parsed[2]; wxString line_tags_str = parsed[2];
wxString line_url = inline_string_decode(parsed[3]); wxString line_url = inline_string_decode(parsed[3]);
wxString line_friendlyname = inline_string_decode(parsed[4]); wxString line_friendlyname = inline_string_decode(parsed[4]);
wxString line_description = inline_string_decode(parsed[5]); wxString line_description = inline_string_decode(parsed[5]);
@ -378,23 +390,24 @@ void AegisubVersionCheckerThread::DoCheck()
continue; continue;
} }
// check if the OS is right // check if the tags match
wxOperatingSystemId osid = wxGetOsVersion(); if (line_tags_str.IsEmpty() || line_tags_str == _T("all"))
if (line_platform == _T("windows") && !(osid & wxOS_WINDOWS_NT))
{ {
continue; // looking good
} }
if (line_platform == _T("mac") && !(osid & wxOS_MAC_OSX_DARWIN)) else
{ {
continue; bool accepts_all_tags = true;
wxStringTokenizer tk(line_tags_str, _T(" "));
while (tk.HasMoreTokens())
{
if (accept_tags.find(tk.GetNextToken()) == accept_tags.end())
{
accepts_all_tags = false;
break;
} }
if (line_platform == _T("source") && (osid & wxOS_WINDOWS_NT || osid & wxOS_MAC_OSX_DARWIN))
{
// TODO: support interested-in-source-releases flag
continue;
} }
if (!(line_platform == _T("windows") || line_platform == _T("mac") || line_platform == _T("source") || line_platform == _T("all"))) if (!accepts_all_tags)
{
continue; continue;
} }