Example #1
0
 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;
 }
Example #2
0
        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();
            }
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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();
            }
        }
Example #6
0
        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();
                }
            }
        }