TelescopeClientJsonRts2::TelescopeClientJsonRts2(const QString &name, const QString ¶ms, Equinox eq) : TelescopeClient(name) , networkManager(new QNetworkAccessManager) , equinox(eq) , baseurl("http://localhost:8889/") , telName("") , telReadonly(false) , telLatitude(NAN) , telLongitude(NAN) , telAltitude(NAN) , telTargetDist(NAN) , time_delay(50) , reconnectTimer(-1) , refresh_delay(500) , server_micros(0) { telescopeManager = GETSTELMODULE(TelescopeControl); // Example params: // 1000:test:1234@localhost:8889/tel QRegExp paramRx("^(\\d+):(.*)$"); QString url; if (paramRx.exactMatch(params)) { refresh_delay = paramRx.capturedTexts().at(1).toInt() / 1000; // convert microseconds to milliseconds url = paramRx.capturedTexts().at(2).trimmed(); } else { qWarning() << "ERROR creating TelescopeClientJsonRts2: invalid parameters."; return; } qDebug() << "TelescopeRTS2(" << name << ") URL, refresh timeout: " << url << "," << refresh_delay; baseurl.setUrl(url); if (!baseurl.isValid()) { qWarning() << "TelescopeRTS2(" << name << ") invalid URL: " << url; return; } QUrl rurl(baseurl); rurl.setPath(baseurl.path() + "/api/devbytype"); QUrlQuery query; query.addQueryItem("t", "2"); rurl.setQuery(query); cfgRequest.setUrl(rurl); qDebug() << "TelescopeRTS2(" << name << ")::TelescopeRTS2: request url:" << rurl.toString(); connect(&networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); networkManager.get(cfgRequest); }
bool SSortFileItem::FileDescending(CFileItem *left, CFileItem *right) { // sanity RETURN_IF_NULL(left,false); RETURN_IF_NULL(right,false); // ignore the ".." item - that should always be on top if (left->IsParentFolder()) return true; if (right->IsParentFolder()) return false; CURL lurl(left->m_strPath); CURL rurl(right->m_strPath); int result = StringUtils::AlphaNumericCompare(lurl.GetFileNameWithoutPath().c_str(), rurl.GetFileNameWithoutPath().c_str()); if (result < 0) return false; if (result > 0) return true; return left->m_lStartOffset > right->m_lStartOffset; }
void TelescopeClientJsonRts2::replyFinished(QNetworkReply *reply) { if (reply->error() != QNetworkReply::NoError) { if (reply->url().path().endsWith("/api/cmd") && reply->error() == QNetworkReply::ProtocolInvalidOperationError) { setReadOnly(true); return; } qDebug() << "TelescopeRTS2(" << name << ")::replyFinished: error " << reply->error() << " url: " << reply->url().toString(); telName = ""; if (reconnectTimer < 0) reconnectTimer = startTimer(15000); return; } if (reconnectTimer > 0) { killTimer(reconnectTimer); reconnectTimer = -1; } QByteArray data = reply->readAll(); //qDebug() << "TelescopeRTS2(" << name << ")::replyFinished: data " << (QString) data; QJsonDocument doc; QJsonParseError jsonError; doc = QJsonDocument::fromJson(data, &jsonError); if (reply->url().path().endsWith("/api/devbytype")) { QJsonArray arr = doc.array(); telName = arr[0].toString(); getReadOnly(); } else if (reply->url().path().endsWith("/api/deviceinfo")) { QJsonObject docObject = doc.object(); setReadOnly(docObject["readonly"].toBool()); QUrl rurl(baseurl); rurl.setPath(baseurl.path() + "/api/get"); QUrlQuery query; query.addQueryItem("d", telName); rurl.setQuery(query); request.setUrl(rurl); qDebug() << "TelescopeRTS2(" << name << ")::replyFinished: request url:" << rurl.toString(); refreshTimer(); } else if (reply->url().path().endsWith("/api/get")) { QJsonObject docObject = doc.object(); QJsonObject dObject = docObject["d"].toObject(); QJsonObject telObject = dObject["TEL"].toObject(); telLongitude = dObject["LONGITUD"].toDouble() * M_PI / 180.0; telLatitude = dObject["LATITUDE"].toDouble() * M_PI / 180.0; telAltitude = dObject["ALTITUDE"].toDouble(); telTargetDist = dObject["target_distance"].toDouble() * M_PI / 180.0; const double ra = telObject["ra"].toDouble() * M_PI / 180.0; const double dec = telObject["dec"].toDouble() * M_PI / 180.0; const double cdec = cos(dec); qDebug() << "TelescopeRTS2(" << name << ")::replyFinished: RADEC" << ra << dec; lastPos.set(cos(ra)*cdec, sin(ra)*cdec, sin(dec)); interpolatedPosition.add(lastPos, getNow(), server_micros, 0); QTimer::singleShot(refresh_delay, this, SLOT(refreshTimer())); } else if (reply->url().path().endsWith("/api/cmd")) { QJsonObject docObject = doc.object(); int cmdRet = docObject["ret"].toInt(); qDebug() << "Move command finished: " << cmdRet; if (cmdRet == 0) getReadOnly(); else setReadOnly(true); } else { qWarning() << "TelescopeRTS2(" << name << ")::replyFinished: unhandled reply: " << reply->url().toString(); } reply->deleteLater(); }