public void Apply()
{
if (!IsModified) return;
IsModified = false;
ChannelCleaner.Mode = channelCleanupMode;
ChannelCleaner.InactiveLimit = channelCleanupInactiveLimit*60000;
peerCast.AccessController.MaxRelays = maxRelays;
peerCast.AccessController.MaxRelaysPerChannel = maxRelaysPerChannel;
peerCast.AccessController.MaxPlays = maxPlays;
peerCast.AccessController.MaxPlaysPerChannel = maxPlaysPerChannel;
peerCast.AccessController.MaxUpstreamRate = maxUpstreamRate;
peerCast.AccessController.MaxUpstreamRatePerChannel = maxUpstreamRatePerChannel;
pecaApp.Settings.Get<WPFSettings>().ShowWindowOnStartup = isShowWindowOnStartup;
if (IsListenersModified) {
foreach (var listener in peerCast.OutputListeners.ToArray()) {
peerCast.StopListen(listener);
}
foreach (var listener in ports) {
var newlistener = peerCast.StartListen(listener.EndPoint, listener.LocalAccepts, listener.GlobalAccepts);
newlistener.GlobalAuthorizationRequired = listener.GlobalAuthRequired;
newlistener.LocalAuthorizationRequired = listener.LocalAuthRequired;
newlistener.AuthenticationKey = listener.AuthenticationKey;
}
isListenersModified = false;
}
if (IsYellowPagesModified) {
foreach (var yp in peerCast.YellowPages.ToArray()) {
peerCast.RemoveYellowPage(yp);
}
foreach (var yp in yellowPages) {
if (String.IsNullOrEmpty(yp.Name)) continue;
if (String.IsNullOrEmpty(yp.AnnounceUri) && String.IsNullOrEmpty(yp.ChannelsUri)) continue;
Uri announce_uri = String.IsNullOrEmpty(yp.AnnounceUri) ? null : new Uri(yp.AnnounceUri, UriKind.Absolute);
Uri channels_uri = String.IsNullOrEmpty(yp.ChannelsUri) ? null : new Uri(yp.ChannelsUri, UriKind.Absolute);
peerCast.AddYellowPage(yp.Protocol.Protocol, yp.Name, announce_uri, channels_uri);
}
isYellowPagesModified = false;
}
var port_mapper = pecaApp.Plugins.GetPlugin<PeerCastStation.UI.PortMapperPlugin>();
if (port_mapper!=null) {
port_mapper.Enabled = portMapperEnabled;
port_mapper.DiscoverAsync()
.ContinueWith(prev => OnPropertyChanged("PortMapperExternalAddresses"));
}
PortCheckStatus = PortCheckStatus.Checking;
CheckPortAsync().ContinueWith(prev => {
if (prev.IsCanceled || prev.IsFaulted) {
PortCheckStatus = PortCheckStatus.Failed;
}
else {
PortCheckStatus = prev.Result;
peerCast.IsFirewalled = prev.Result!=PortCheckStatus.Opened;
}
});
pecaApp.SaveSettings();
}