summaryrefslogtreecommitdiffstats
path: root/src/broadcast
diff options
context:
space:
mode:
authorStéphane Lepin <stephane.lepin@gmail.com>2017-08-14 11:07:36 +0200
committerStéphane Lepin <stephane.lepin@gmail.com>2017-08-14 11:07:36 +0200
commit7ff7bd6ecaee6d3b273b9c50a14a9a1c34a11723 (patch)
treebf30f6f231e94bd4f40d96031efde8e3e330e4fd /src/broadcast
parentcac95d899dca566a2dc17fcffc934044019625cb (diff)
BroadcastManager: proper Live Broadcasting status report
Diffstat (limited to 'src/broadcast')
-rw-r--r--src/broadcast/broadcastmanager.cpp41
-rw-r--r--src/broadcast/broadcastmanager.h9
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 */