private void UpdateChannelList()
{
var new_list = peerCast.Channels;
var old_list = channelList.Items.OfType<ChannelListItem>().Select(item => item.Channel);
updating = true;
foreach (var channel in old_list.Intersect(new_list).ToArray()) {
for (var i=0; i<channelList.Items.Count; i++) {
if ((channelList.Items[i] as ChannelListItem).Channel==channel) {
channelList.Items[i] = new ChannelListItem(channel);
if (channelList.SelectedIndex==i) {
UpdateTree(channel);
UpdateChannelInfo(channel);
UpdateOutputList(channel);
}
break;
}
}
}
foreach (var channel in new_list.Except(old_list).ToArray()) {
channelList.Items.Add(new ChannelListItem(channel));
}
foreach (var channel in old_list.Except(new_list).ToArray()) {
for (var i=0; i<channelList.Items.Count; i++) {
if ((channelList.Items[i] as ChannelListItem).Channel==channel) {
channelList.Items.RemoveAt(i);
break;
}
}
}
if (channelList.SelectedIndex<0) {
ClearTree();
ClearChannelInfo();
ClearOutputList();
}
updating = false;
}