public static ChannelLink Parse(XPathNavigator navigator) { ChannelLink result = null; Guid channelId = Guid.Empty; string id = navigator.GetAttribute("id", String.Empty); if (!String.IsNullOrEmpty(id)) { channelId = new Guid(id); } int mpChannelId = -1; string mpId = navigator.GetAttribute("mpId", String.Empty); if (!String.IsNullOrEmpty(id)) { mpChannelId = Int32.Parse(mpId); } if (channelId != Guid.Empty && mpChannelId >= 0) { string channelName = navigator.GetAttribute("name", String.Empty); ChannelType channelType; string type = navigator.GetAttribute("type", String.Empty); if (String.IsNullOrEmpty(type)) { channelType = ChannelType.Television; } else { channelType = (ChannelType)Enum.Parse(typeof(ChannelType), type); } string mpChannelName = navigator.GetAttribute("mpName", String.Empty); result = new ChannelLink(channelType, channelId, channelName, mpChannelId, mpChannelName); } return result; }
private LinkedMediaPortalChannel GetLinkedMediaPortalChannelInternal(ChannelType channelType, Guid channelId, string displayName, out bool isAutoLinked, out bool duplicateChannelsFound) { EnsureLoaded(); _readerWriterLock.EnterReadLock(); try { isAutoLinked = false; duplicateChannelsFound = false; if (_linksById.ContainsKey(channelId)) { ChannelLink link = _linksById[channelId]; return(new LinkedMediaPortalChannel(link.MPChannelId, link.MPChannelName)); } TvDatabase.Channel channel = GetChannelByDisplayName(channelType, displayName, out duplicateChannelsFound); if (channel != null) { isAutoLinked = true; _autoLinkedMPChannels[channel.IdChannel] = true; return(new LinkedMediaPortalChannel(channel.IdChannel, channel.DisplayName)); } return(null); } finally { _readerWriterLock.ExitReadLock(); } }
public void SetLinkedMediaPortalChannelInternal(Channel channel, TvDatabase.Channel mpChannel) { EnsureLoaded(); _readerWriterLock.EnterWriteLock(); try { ClearLinkedMediaPortalChannel(channel); ChannelLink link = new ChannelLink(channel.ChannelType, channel.ChannelId, channel.DisplayName, mpChannel.IdChannel, mpChannel.DisplayName); _linksById.Add(link.ChannelId, link); } finally { _readerWriterLock.ExitWriteLock(); } }
public static ChannelLink Parse(XPathNavigator navigator) { ChannelLink result = null; Guid channelId = Guid.Empty; string id = navigator.GetAttribute("id", String.Empty); if (!String.IsNullOrEmpty(id)) { channelId = new Guid(id); } int mpChannelId = -1; string mpId = navigator.GetAttribute("mpId", String.Empty); if (!String.IsNullOrEmpty(id)) { mpChannelId = Int32.Parse(mpId); } if (channelId != Guid.Empty && mpChannelId >= 0) { string channelName = navigator.GetAttribute("name", String.Empty); ChannelType channelType; string type = navigator.GetAttribute("type", String.Empty); if (String.IsNullOrEmpty(type)) { channelType = ChannelType.Television; } else { channelType = (ChannelType)Enum.Parse(typeof(ChannelType), type); } string mpChannelName = navigator.GetAttribute("mpName", String.Empty); result = new ChannelLink(channelType, channelId, channelName, mpChannelId, mpChannelName); } return(result); }
private void LoadChannelLinks(bool forceLoad) { string settingsFileName = this.SettingsFileName; if (!File.Exists(settingsFileName)) { _readerWriterLock.EnterWriteLock(); try { _linksById.Clear(); _autoLinkedMPChannels.Clear(); return; } finally { _readerWriterLock.ExitWriteLock(); } } DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(settingsFileName); if (forceLoad || lastWriteTimeUtc != _lastFileWriteTimeUtc) { _readerWriterLock.EnterWriteLock(); try { _lastFileWriteTimeUtc = lastWriteTimeUtc; _linksById.Clear(); _autoLinkedMPChannels.Clear(); using (StreamReader reader = new StreamReader(settingsFileName, Encoding.UTF8)) { XPathDocument xpathDocument = new XPathDocument(reader); XPathNavigator navigator = xpathDocument.CreateNavigator(); XPathNodeIterator iterator = navigator.Select("/links/link"); while (iterator.MoveNext()) { ChannelLink link = ChannelLink.Parse(iterator.Current); if (link != null) { TvDatabase.Channel mpChannel = GetChannelById(link.ChannelType, link.MPChannelId); if (mpChannel == null || mpChannel.DisplayName != link.MPChannelName) { bool duplicateChannelsFound; mpChannel = GetChannelByDisplayName(link.ChannelType, link.MPChannelName, out duplicateChannelsFound); } if (mpChannel != null) { _linksById.Add(link.ChannelId, link); } } } } } finally { _readerWriterLock.ExitWriteLock(); } } }