void DVRServerRepository::loadServers() { Q_ASSERT(m_servers.isEmpty()); QSettings settings; settings.beginGroup(QLatin1String("servers")); QStringList groups = settings.childGroups(); DVRServerSettingsReader settingsReader; foreach (QString group, groups) { bool ok = false; int id = (int)group.toUInt(&ok); if (!ok) { qWarning("Ignoring invalid server ID from configuration"); continue; } DVRServer *server = settingsReader.readServer(id); if (!server) { qWarning("Ignoring invalid server from configuration"); continue; } server->setParent(this); connect(server, SIGNAL(serverRemoved(DVRServer*)), this, SLOT(onServerRemoved(DVRServer*))); connect(server, SIGNAL(statusAlertMessageChanged(QString)), this, SIGNAL(serverAlertsChanged())); m_servers.append(server); m_maxServerId = qMax(m_maxServerId, id); }
void DVRServer::updateStatsReply() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); if (!reply) return; reply->deleteLater(); QString message; if (reply->error() != QNetworkReply::NoError) { message = tr("Status request error: %1").arg(reply->errorString()); } else { QByteArray data = reply->readAll(); QXmlStreamReader xml(data); bool hadMessageElement = false; while (xml.readNextStartElement()) { if (xml.name() == QLatin1String("stats")) { while (xml.readNext() != QXmlStreamReader::Invalid) { if (xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == QLatin1String("stats")) break; else if (xml.tokenType() != QXmlStreamReader::StartElement) continue; if (xml.name() == QLatin1String("message")) { hadMessageElement = true; QString text = xml.readElementText(); if (!text.isEmpty()) message = text; } else if (xml.name() == QLatin1String("bc-server-running") && xml.readElementText().trimmed() == QLatin1String("down")) message = tr("Server process stopped"); } } } if (!hadMessageElement) message = tr("Status request error: invalid server response"); } if (message != m_statusAlertMessage) { m_statusAlertMessage = message; emit statusAlertMessageChanged(message); } }
void DVRServer::disconnectedSlot() { while (!m_visibleCameras.isEmpty()) { DVRCamera *c = m_visibleCameras.takeFirst(); c->setOnline(false); emit cameraRemoved(c); } m_devicesLoaded = false; m_statusAlertMessage.clear(); emit statusAlertMessageChanged(QString()); }
DVRServer * DVRServerRepository::createServer(const QString& name) { int id = ++m_maxServerId; DVRServer *server = new DVRServer(id, this); server->configuration().setDisplayName(name); emit serverAboutToBeAdded(server); m_servers.append(server); connect(server, SIGNAL(serverRemoved(DVRServer*)), this, SLOT(onServerRemoved(DVRServer*))); connect(server, SIGNAL(statusAlertMessageChanged(QString)), this, SIGNAL(serverAlertsChanged())); emit serverAdded(server); return server; }
void DVRServersModel::serverAdded(DVRServer *server) { Item i; i.server = server; foreach (DVRCamera *camera, server->cameras()) i.cameras.append(camera); beginInsertRows(QModelIndex(), m_items.size(), m_items.size()); m_items.append(i); endInsertRows(); connect(server, SIGNAL(changed()), SLOT(serverDataChanged())); connect(server, SIGNAL(statusChanged(int)), SLOT(serverDataChanged())); connect(server, SIGNAL(cameraAdded(DVRCamera*)), SLOT(cameraAdded(DVRCamera*))); connect(server, SIGNAL(cameraRemoved(DVRCamera*)), SLOT(cameraRemoved(DVRCamera*))); connect(server, SIGNAL(statusAlertMessageChanged(QString)), SLOT(serverDataChanged())); }