Switch to side-by-side view

--- a/libupnpp/control/linnsongcast.cxx
+++ b/libupnpp/control/linnsongcast.cxx
@@ -321,6 +321,29 @@
             vsenders.push_back(st);
         }
     }
+}
+
+bool setReceiverPlaying(ReceiverState st)
+{
+    if (!st.rcv || !st.prod) {
+        string uuid = st.UDN;
+        getReceiverState(uuid, st, true);
+        if (!st.rcv || !st.prod) {
+            st.reason = st.nm + " : can't connect";
+            return false;
+        }
+    }
+
+    if (st.prod->setSourceIndex(st.receiverSourceIndex)) {
+        st.reason = st.nm + " : can't set source index to " +
+                    SoapHelp::i2s(st.receiverSourceIndex);
+        return false;
+    }
+    if (st.rcv->play()) {
+        st.reason = st.nm + " Receiver::play() failed";
+        return false;
+    }
+    return true;
 }
 
 bool setReceiverPlaying(ReceiverState st,
@@ -538,6 +561,43 @@
     return true;
 }
 
-}
-}
-
+void setReceiversPlaying(const vector<string>& slaves)
+{
+    vector<string> reasons;
+    setReceiversPlayingWithStatus(slaves, reasons);
+}
+
+bool setReceiversPlayingWithStatus(const vector<string>& rcvs,
+                                   vector<string>& reasons)
+{
+    reasons.clear();
+    reasons.resize(rcvs.size());
+    for (unsigned int i = 0; i < rcvs.size(); i++) {
+        auto& sl = rcvs[i];
+        LOGDEB("Setting up " << sl << endl);
+        ReceiverState sstate;
+        getReceiverState(sl, sstate);
+
+        switch (sstate.state) {
+        case ReceiverState::SCRS_GENERROR:
+        case ReceiverState::SCRS_NOOH:
+            LOGERR(sl << sstate.reason << endl);
+            reasons[i] = sstate.reason;
+            continue;
+        case ReceiverState::SCRS_STOPPED:
+        case ReceiverState::SCRS_PLAYING:
+        case ReceiverState::SCRS_NOTRECEIVER:
+            if (setReceiverPlaying(sstate)) {
+                LOGDEB(sl << " set up for playing " << endl);
+            } else {
+                LOGERR(sstate.reason << endl);
+                reasons[i] = sstate.reason;
+            }
+        }
+    }
+    return true;
+}
+
+}
+}
+