diff options
author | Stéphane Lepin <stephane.lepin@gmail.com> | 2017-08-14 11:07:36 +0200 |
---|---|---|
committer | Stéphane Lepin <stephane.lepin@gmail.com> | 2017-08-14 11:07:36 +0200 |
commit | 7ff7bd6ecaee6d3b273b9c50a14a9a1c34a11723 (patch) | |
tree | bf30f6f231e94bd4f40d96031efde8e3e330e4fd /src/broadcast | |
parent | cac95d899dca566a2dc17fcffc934044019625cb (diff) |
BroadcastManager: proper Live Broadcasting status report
Diffstat (limited to 'src/broadcast')
-rw-r--r-- | src/broadcast/broadcastmanager.cpp | 41 | ||||
-rw-r--r-- | src/broadcast/broadcastmanager.h | 9 |
2 files changed, 45 insertions, 5 deletions
diff --git a/src/broadcast/broadcastmanager.cpp b/src/broadcast/broadcastmanager.cpp index 19f8b50144..f7091c59f8 100644 --- a/src/broadcast/broadcastmanager.cpp +++ b/src/broadcast/broadcastmanager.cpp @@ -85,7 +85,6 @@ void BroadcastManager::slotControlEnabled(double v) { if (v > 0.0) { slotProfilesChanged(); - m_pStatusCO->forceSet(STATUSCO_CONNECTED); } else { m_pStatusCO->forceSet(STATUSCO_UNCONNECTED); } @@ -124,6 +123,9 @@ bool BroadcastManager::addConnection(BroadcastProfilePtr profile) { ShoutConnectionPtr connection(new ShoutConnection(profile, m_pConfig)); m_pNetworkStream->addOutputWorker(connection); + connect(profile.data(), SIGNAL(connectionStatusChanged(int)), + this, SLOT(slotConnectionStatusChanged(int))); + kLogger.debug() << "addConnection: created connection for profile" << profile->getProfileName(); return true; @@ -135,6 +137,9 @@ bool BroadcastManager::removeConnection(BroadcastProfilePtr profile) { ShoutConnectionPtr connection = findConnectionForProfile(profile); if(connection) { + disconnect(profile.data(), SIGNAL(connectionStatusChanged(int)), + this, SLOT(slotConnectionStatusChanged(int))); + // Disabling the profile tells ShoutOutput's thread to disconnect connection->profile()->setEnabled(false); m_pNetworkStream->removeOutputWorker(connection); @@ -161,3 +166,37 @@ ShoutConnectionPtr BroadcastManager::findConnectionForProfile(BroadcastProfilePt return ShoutConnectionPtr(); } + +void BroadcastManager::slotConnectionStatusChanged(int newState) { + Q_UNUSED(newState); + // Collect status info + int connectingCount = 0, connectedCount = 0, failedCount = 0; + QList<BroadcastProfilePtr> profiles = m_pBroadcastSettings->profiles(); + for (BroadcastProfilePtr profile : profiles) { + int status = profile->connectionStatus(); + if (status == BroadcastProfile::STATUS_FAILURE) { + failedCount++; + } + else if (status == BroadcastProfile::STATUS_CONNECTING) { + connectingCount++; + } + else if (status == BroadcastProfile::STATUS_CONNECTED) { + connectedCount++; + } + + } + + // Changed global status indicator depending on global connections status + if (failedCount > 0) { + m_pStatusCO->forceSet(STATUSCO_FAILURE); + } + else if (connectingCount > 0) { + m_pStatusCO->forceSet(STATUSCO_CONNECTING); + } + else if (connectedCount > 0) { + m_pStatusCO->forceSet(STATUSCO_CONNECTED); + } + else { + m_pStatusCO->forceSet(STATUSCO_UNCONNECTED); + } +} diff --git a/src/broadcast/broadcastmanager.h b/src/broadcast/broadcastmanager.h index 7d6d555d70..43ad4e1ed2 100644 --- a/src/broadcast/broadcastmanager.h +++ b/src/broadcast/broadcastmanager.h @@ -41,18 +41,19 @@ class BroadcastManager : public QObject { void slotProfileAdded(BroadcastProfilePtr profile); void slotProfileRemoved(BroadcastProfilePtr profile); void slotProfilesChanged(); + void slotConnectionStatusChanged(int newState); private: + bool addConnection(BroadcastProfilePtr profile); + bool removeConnection(BroadcastProfilePtr profile); + ShoutConnectionPtr findConnectionForProfile(BroadcastProfilePtr profile); + UserSettingsPointer m_pConfig; BroadcastSettingsPointer m_pBroadcastSettings; QSharedPointer<EngineNetworkStream> m_pNetworkStream; ControlPushButton* m_pBroadcastEnabled; ControlObject* m_pStatusCO; - - bool addConnection(BroadcastProfilePtr profile); - bool removeConnection(BroadcastProfilePtr profile); - ShoutConnectionPtr findConnectionForProfile(BroadcastProfilePtr profile); }; #endif /* BROADCAST_BROADCASTMANAGER_H */ |