Add basic update checking

This commit is contained in:
jp9000
2014-07-13 23:56:28 -07:00
parent f801348a33
commit 4e7f076c68
4 changed files with 124 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#include <time.h>
#include <obs.hpp>
#include <QMessageBox>
#include <QShowEvent>
@@ -551,6 +552,7 @@ void OBSBasic::OBSInit()
Load(savePath);
ResetAudioDevices();
TimedCheckForUpdates();
loaded = true;
}
@@ -831,6 +833,101 @@ bool OBSBasic::QueryRemoveSource(obs_source_t source)
return button == QMessageBox::Yes;
}
#define UPDATE_CHECK_INTERVAL (60*60*24*4) /* 4 days */
void OBSBasic::TimedCheckForUpdates()
{
long long lastUpdate = config_get_int(App()->GlobalConfig(), "General",
"LastUpdateCheck");
uint32_t lastVersion = config_get_int(App()->GlobalConfig(), "General",
"LastVersion");
if (lastVersion < LIBOBS_API_VER) {
lastUpdate = 0;
config_set_int(App()->GlobalConfig(), "General",
"LastUpdateCheck", 0);
}
long long t = (long long)time(nullptr);
long long secs = t - lastUpdate;
if (secs > UPDATE_CHECK_INTERVAL)
CheckForUpdates();
}
void OBSBasic::CheckForUpdates()
{
ui->actionCheckForUpdates->setEnabled(false);
QUrl url("https://obsproject.com/obs2_update/mac_basic.json");
updateReply = networkManager.get(QNetworkRequest(url));
connect(updateReply, SIGNAL(finished()),
this, SLOT(updateFileFinished()));
connect(updateReply, SIGNAL(readyRead()),
this, SLOT(updateFileRead()));
}
void OBSBasic::updateFileRead()
{
updateReturnData.push_back(updateReply->readAll());
}
void OBSBasic::updateFileFinished()
{
ui->actionCheckForUpdates->setEnabled(true);
if (updateReply->error()) {
blog(LOG_WARNING, "Update check failed: %s",
QT_TO_UTF8(updateReply->errorString()));
return;
}
const char *jsonReply = updateReturnData.constData();
if (!jsonReply || !*jsonReply)
return;
obs_data_t returnData = obs_data_create_from_json(jsonReply);
obs_data_t versionData = obs_data_getobj(returnData, "version");
const char *description = obs_data_getstring(returnData, "description");
const char *download = obs_data_getstring(returnData, "download");
if (returnData && versionData && description && download) {
long major = obs_data_getint(versionData, "major");
long minor = obs_data_getint(versionData, "minor");
long patch = obs_data_getint(versionData, "patch");
long version = MAKE_SEMANTIC_VERSION(major, minor, patch);
blog(LOG_INFO, "Update check: latest version is: %ld.%ld.%ld",
major, minor, patch);
if (version > LIBOBS_API_VER) {
QString str = QTStr("UpdateAvailable.Text");
QMessageBox messageBox(this);
str = str.arg(QString::number(major),
QString::number(minor),
QString::number(patch),
download);
messageBox.setWindowTitle(QTStr("UpdateAvailable"));
messageBox.setTextFormat(Qt::RichText);
messageBox.setText(str);
messageBox.setInformativeText(QT_UTF8(description));
messageBox.exec();
long long t = (long long)time(nullptr);
config_set_int(App()->GlobalConfig(), "General",
"LastUpdateCheck", t);
config_save(App()->GlobalConfig());
}
} else {
blog(LOG_WARNING, "Bad JSON file received from server");
}
obs_data_release(versionData);
obs_data_release(returnData);
}
void OBSBasic::RemoveSelectedScene()
{
OBSScene scene = GetCurrentScene();
@@ -1626,6 +1723,11 @@ void OBSBasic::on_actionUploadLastLog_triggered()
UploadLog(App()->GetLastLog());
}
void OBSBasic::on_actionCheckForUpdates_triggered()
{
CheckForUpdates();
}
void OBSBasic::logUploadRead()
{
logUploadReturnData.push_back(logUploadReply->readAll());