Пример #1
0
void MainWindow::httpRequestFinished(QNetworkReply *reply)
{
    bool silent = reply->property("silent").toBool();

    QString str;

    if (reply->error() == QNetworkReply::NoError && reply->isReadable())
        str = QString::fromUtf8(reply->readAll());
    else
        return httpRequestFailed(silent);

    reply->deleteLater();

    QTextStream in(&str);
    if (in.readLine() != "[iTest.current-version]")
        return httpRequestFailed(silent);
    QString current_ver = in.readLine();
    if (in.readLine() != "[iTest.current-version.float]")
        return httpRequestFailed(silent);
    double f_current_ver = in.readLine().toDouble();
    if (in.readLine() != "[iTest.release-notes]")
        return httpRequestFailed(silent);
    QString release_notes;
    while (!in.atEnd()) {
        release_notes.append(in.readLine());
    }

    if (f_current_ver <= F_ITEST_VERSION) {
        if (!silent) {
            QMessageBox message(this);
            message.setWindowTitle("iTest");
            message.setWindowModality(Qt::WindowModal);
            message.setWindowFlags(message.windowFlags() | Qt::Sheet);
            message.setIcon(QMessageBox::Information);
            message.setText(tr("You are running the latest version of iTest."));
            message.exec();
        }
    } else {
        QMessageBox message(this);
        message.setWindowTitle("iTest");
        message.setWindowModality(Qt::WindowModal);
        message.setWindowFlags(message.windowFlags() | Qt::Sheet);
        message.setIcon(QMessageBox::Information);
        message.setText(tr("iTest %1 is available now.").arg(current_ver));
        message.setInformativeText(QString("<html><head>"
                                           "<meta name=\"qrichtext\" content=\"1\" />"
                                           "<style type=\"text/css\">p, li { white-space: pre-wrap; }</style>"
                                           "</head><body><p>%1</p></body></html>")
                                   .arg(release_notes));
        message.addButton(tr("&Download Update"), QMessageBox::AcceptRole);
        message.addButton(tr("Remind Me &Later"), QMessageBox::RejectRole);
        switch (message.exec()) {
            case QMessageBox::AcceptRole: // Download
                QDesktopServices::openUrl(QUrl("http://github.com/michal-tomlein/itest/releases"));
                break;
            case QMessageBox::RejectRole: // Later
                break;
        }
    }
}
Пример #2
0
static memBuf_t *
httpRequest(const char *url, const char *logUrl, const char *data, const char *logData, enum requestType rt)
{
	const char *nonNullData = data ? data : "";
	memBuf_t *mp = (memBuf_t *)myMalloc(sizeof(memBuf_t));
	char *metaRefresh;

	mp->memory = mp->readptr = NULL;
	mp->size = 0;
	mp->timeToFirstByte = 0;

	lastURL = url;

	if (!curlInitDone && initCurlStuff())
		return NULL;

	/* Note: was CURLOPT_WRITEDATA, which is the same as CURLOPT_FILE.
	 * Some older versions of libcurl don't have CURLOPT_WRITEDATA.
	 */
	if ((curlrc = curl_easy_setopt(easyhandle, CURLOPT_FILE, (void *)mp)))
		return httpRequestFailed(mp);

	if (rt == GET) {
		if ((curlrc = curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, 1)))
			return httpRequestFailed(mp);
	} else {
		log(("%s", logData ? logData : nonNullData));
		if ((curlrc = curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, nonNullData)))
			return httpRequestFailed(mp);
	}

	log(("%s", logUrl ? logUrl : url));
	if ((curlrc = curl_easy_setopt(easyhandle, CURLOPT_URL, url)))
		return httpRequestFailed(mp);

	if ((curlrc = curl_easy_perform(easyhandle)))
		return httpRequestFailed(mp);

	log(("checking for META Refresh"));
	if ((metaRefresh = memGetMetaRefresh(mp)) != NULL) {
		log(("page redirection by META Refresh: %s\n", metaRefresh));
		freeMembuf(mp);
		return httpGet(metaRefresh, NULL);
	}

	return mp;
}