Inheritance: ViewModelBase
 internal ChannelListViewModel(PeerCast peerCast)
 {
   this.peerCast = peerCast;
   connections = new ConnectionListViewModel();
   relayTree = new RelayTreeViewModel(peerCast);
 }
        internal ChannelListViewModel(PeerCast peerCast)
        {
            this.peerCast = peerCast;
              connections = new ConnectionListViewModel(peerCast);
              relayTree = new RelayTreeViewModel(peerCast);

              play = new Command(() =>
              {
            if (peerCast.OutputListeners.Count <= 0)
              return;

            var channel = Channel.Channel;
            var channel_id = channel.ChannelID;
            var ext = (channel.ChannelInfo.ContentType == "WMV" ||
                    channel.ChannelInfo.ContentType == "WMA" ||
                    channel.ChannelInfo.ContentType == "ASX") ? ".asx" : ".m3u";
            var endpoint = peerCast.OutputListeners[0].LocalEndPoint;
            string pls;
            if (endpoint.Address.Equals(System.Net.IPAddress.Any))
            {
              pls = String.Format("http://localhost:{0}/pls/{1}{2}", endpoint.Port, channel_id.ToString("N"), ext);
            }
            else
            {
              pls = String.Format("http://{0}/pls/{1}{2}", endpoint.ToString(), channel_id.ToString("N"), ext);
            }
            System.Diagnostics.Process.Start(pls);
              },
            () => IsChannelSelected);
              close = new Command(
            () => peerCast.CloseChannel(Channel.Channel),
            () => IsChannelSelected);
              bump = new Command(
            () => Channel.Channel.Reconnect(),
            () => IsChannelSelected);
              openContactUrl = new Command(() =>
              {
            var url = Channel.Channel.ChannelInfo.URL;
            Uri uri;
            if (!String.IsNullOrEmpty(url) && Uri.TryCreate(url, UriKind.Absolute, out uri))
            {
              Process.Start(uri.ToString());
            }
              },
            () => IsChannelSelected);
              copyStreamUrl = new Command(() =>
              {
            var channel_id = Channel.Channel.ChannelID;
            var endpoint = peerCast.OutputListeners[0].LocalEndPoint;
            var ext = Channel.Channel.ChannelInfo.ContentExtension;
            string url;
            if (endpoint.Address.Equals(System.Net.IPAddress.Any))
            {
              url = String.Format("http://localhost:{0}/stream/{1}{2}", endpoint.Port, channel_id.ToString("N"), ext);
            }
            else
            {
              url = String.Format("http://{0}/pls/{1}{2}", endpoint.ToString(), channel_id.ToString("N"), ext);
            }
            Clipboard.SetText(url);
              },
            () => IsChannelSelected && peerCast.OutputListeners.Count > 0);
              copyContactUrl = new Command(() =>
              {
            var url = Channel.Channel.ChannelInfo.URL;
            Uri uri;
            if (!String.IsNullOrEmpty(url) && Uri.TryCreate(url, UriKind.Absolute, out uri))
            {
              Clipboard.SetText(uri.ToString());
            }
              },
            () => IsChannelSelected);
        }