Ejemplo n.º 1
0
        // GET: Home
        public ActionResult Index()
        {
            ChannelsContext             con      = new ChannelsContext();
            RepositoryService <Channel> channels = new RepositoryService <Channel>(con);

            return(View(channels.GetAll().ToList()));
        }
Ejemplo n.º 2
0
        public override void Run()
        {
            // get active channels from DB
            List <Channel> channelsToExport;

            using (var channelDb = new ChannelsContext())
            {
                channelsToExport = channelDb.Channels
                                   .Where(channel => this._channelID == null || channel.ID == this._channelID)          // filter by specific channel if passed
                                   .Include(i => i.Links)
                                   .Include(i => i.Groups)
                                   .Where(i => i.Status == Channel.ChannelStatus.Visible)
                                   .ToList();
            }

            var outRows = new List <string>(channelsToExport.Count * 2 + 1)
            {
                "#EXTM3U"
            };

            foreach (var channel in channelsToExport)
            {
                outRows.Add($"#EXTINF:-1 channel-id=\"{ channel.ID }\" group-title=\"{ string.Join(",", channel.Groups.Select(g => g.GroupName)) }\",{ channel.Name }");
                outRows.Add($"{ channel.Links.Where(i => i.IsActive).First().Link }");
            }

            File.WriteAllLines(this._outputFilePath, outRows);

            Logger.Info($"Exported { channelsToExport.Count } channels");
        }
Ejemplo n.º 3
0
        protected void CheckAndAddNews(List <Channel> news)
        {
            ChannelsContext                 con          = new ChannelsContext();
            RepositoryService <Channel>     channels     = new RepositoryService <Channel>(con);
            RepositoryService <ChannelItem> channelItems = new RepositoryService <ChannelItem>(con);

            foreach (var item in channelItems.GetAll())
            {
                item.State = false;
                channelItems.Edit(item);
            }

            channelItems.Save();

            foreach (var item in news)
            {
                bool found = false;

                foreach (var item2 in channels.GetAll())
                {
                    if (item2.Link == item.Link)
                    {
                        found = true;
                    }
                }

                if (!found)
                {
                    channels.Add(item);
                }
            }
        }
Ejemplo n.º 4
0
        public override void Run()
        {
            using (var channelsDB = new ChannelsContext())
            {
                channelsDB.Channels
                .Include(i => i.Groups)
                .AsParallel()
                .ForAll(channel => AssignGroups(ref channel));

                var count = channelsDB.SaveChanges();

                Logger.Info($"Updated { count } rows");
            }
        }
Ejemplo n.º 5
0
        public void Configuration(IAppBuilder app)
        {
            using (ChannelsContext con = new ChannelsContext())
            {
                con.Database.CreateIfNotExists();
            }

            AutofacService service = new AutofacService();

            GlobalConfiguration.Configuration.UseSqlServerStorage("ChannelsContext");

            app.UseHangfireDashboard();
            app.UseHangfireServer();
            RecurringJob.RemoveIfExists("RSSFeed");
            RecurringJob.AddOrUpdate("RSSFeed", () => ParseRSS(), Cron.MinuteInterval(2));
        }
Ejemplo n.º 6
0
        public override void Run()
        {
            using (var channelsDB = new ChannelsContext())
            {
                int counter = 0;

                var tasks = channelsDB.Channels
                            .Include(i => i.Links)
                            .Where(channel =>
                                   (this._channelID == null || channel.ID == this._channelID) && // filter by specific channel if passed
                                   (this._channelStatus == null || channel.Status == this._channelStatus.Value)  // filter by specific channel status if passed
                                   )
                            .SelectMany(channel => channel.Links)
                            .Where(link => !link.IsLocked)
                            .AsParallel()
                            .Select(async link =>
                {
                    //var task = CheckLink(link.Link);
                    //link.IsActive = await Task.WhenAny(task, Task.Delay(TimeSpan.FromSeconds(30).Milliseconds)) == task ? task.Result : false;
                    link.IsActive      = await CheckLink(link.Link);
                    link.LastCheckDate = DateTime.Now;

                    Logger.Info($"{ counter++ }:[{ (link.IsActive ? "Active" : "Inactive") }] { link.Link }");
                })
                            .ToList();

                Task.WhenAll(tasks).Wait();

                channelsDB.SaveChanges();

                var totalCount  = channelsDB.ChannelLinks.Count();
                var activeCount = channelsDB.ChannelLinks.Where(i => i.IsActive).Count();
                Logger.Info($"Total links: { totalCount }; active: { activeCount }; inactive: { totalCount - activeCount }");
            }

            CheckActiveChannels();
        }
Ejemplo n.º 7
0
        private void CheckActiveChannels()
        {
            using (var channelsDB = new ChannelsContext())
            {
                //var channelsToHide = channelsDB.Channels
                //          .Include(c => c.Links)
                //          .Where(c => c.Status == Channel.ChannelStatus.Visible && !c.Links.Any(l => l.IsActive))
                //          .ToList();

                //foreach (var channel in channelsToHide)
                //{
                //    Logger.Info($"{ channel.ToString() } has no active links, set to NoActiveLinks");
                //    channel.Status = Channel.ChannelStatus.NoActiveLinks;
                //}
                //channelsDB.SaveChanges();

                //var channelsToShow = channelsDB.Channels
                //        .Include(c => c.Links)
                //        .Where(c => c.Status == Channel.ChannelStatus.NoActiveLinks && c.Links.Any(l => l.IsActive))
                //        .ToList();

                //foreach (var channel in channelsToShow)
                //{
                //    Logger.Info($"{ channel.ToString() } has active links, set to Visible");
                //    channel.Status = Channel.ChannelStatus.Visible;
                //}
                //channelsDB.SaveChanges();

                //var hiddenChannels = channelsDB.Channels
                //                               .Include(c => c.Links)
                //                               .Where(c => (c.Status != Channel.ChannelStatus.Visible && c.Status != Channel.ChannelStatus.Ignored) && c.Links.Any(l => l.IsActive))
                //                               .ToList();

                //foreach (var channel in hiddenChannels)
                //{
                //    Logger.Info($"{ channel.ToString() } has active links, but hidden");
                //    channel.Status = Channel.ChannelStatus.NotApproved;
                //}
                //channelsDB.SaveChanges();

                var channels = channelsDB.Channels.Include(c => c.Links).ToList();
                foreach (var channel in channels)
                {
                    var hasActiveLinks = channel.Links.Any(l => l.IsActive);

                    // hide active channels that has no active links
                    if (channel.Status == Channel.ChannelStatus.Visible && !hasActiveLinks)
                    {
                        Logger.Info($"{ channel.ToString() } has no active links, set to NoActiveLinks");
                        channel.Status = Channel.ChannelStatus.NoActiveLinks;
                    }

                    // hide pending channels that has no active links
                    else if (channel.Status == Channel.ChannelStatus.NotApproved && !hasActiveLinks)
                    {
                        Logger.Info($"{ channel.ToString() } has no active links, set to Hidden");
                        channel.Status = Channel.ChannelStatus.Hidden;
                    }

                    // show active channel if has links
                    else if (channel.Status == Channel.ChannelStatus.NoActiveLinks && hasActiveLinks)
                    {
                        Logger.Info($"{ channel.ToString() } has active links, set to Visible");
                        channel.Status = Channel.ChannelStatus.Visible;
                    }

                    // set to pending if is hidden and has active links
                    else if (channel.Status == Channel.ChannelStatus.Hidden && hasActiveLinks)
                    {
                        Logger.Info($"{ channel.ToString() } has active links, but hidden");
                        channel.Status = Channel.ChannelStatus.NotApproved;
                    }
                }

                channelsDB.SaveChanges();
            }
        }
Ejemplo n.º 8
0
        public override void Run()
        {
            var sourcePlaylistFiles = Directory.GetFiles(this._sourceFolderPath);

            var allParsedChannels = sourcePlaylistFiles
                                    .AsParallel()
                                    .SelectMany(file => ParseFile(file))
                                    .Distinct(new SourceChannelComparer())
                                    .ToList();

            // group channels by name
            var cleanChannels = allParsedChannels
                                .GroupBy(channel => channel.Name, new ChannelNameComparer())
                                .Select(source => new Channel()
            {
                Name    = source.First().Name,
                Aliases = new List <ChannelAlias>()
                {
                    new ChannelAlias()
                    {
                        Alias = source.First().Name.ToLower().Trim()
                    }
                },
                Links = source.Select(i => new ChannelLink()
                {
                    Link = i.Link
                }).Distinct(new ChannelLinkComparer()).ToList()
            })
                                .ToList();

            using (var channelsDB = new ChannelsContext())
            {
                // add new channels to DB
                #region new channels

                var newChannels = cleanChannels
                                  .GroupJoin(channelsDB.ChannelAliases.Select(a => a).ToList(), c => c.Name, a => a.Alias, (c, n) => new { Parsed = c, Existing = n }, new ChannelNameComparer())
                                  .Where(c => !c.Existing.Any())
                                  .Select(c => c.Parsed)
                                  .ToList();

                if (newChannels.Any())
                {
                    channelsDB.Channels.AddRange(newChannels);
                    channelsDB.SaveChanges();
                    Logger.Info($"{ newChannels.Count } new channels added");
                }

                #endregion

                // update links for existing channels
                #region update links

                var existingChannels = channelsDB.ChannelAliases.Select(a => a).ToList();
                var channelsToUpdate = cleanChannels.Join(existingChannels, clean => clean.Name, existing => existing.Alias, (clean, existing) =>
                {
                    clean.ID = existing.ChannelID;
                    return(clean);
                }).ToList();

                var pairs = channelsDB.Channels
                            .Include(c => c.Links)
                            .Join(channelsToUpdate, c => c.ID, parsed => parsed.ID, (existing, parsed) => new { Existing = existing, Parsed = parsed })
                            .ToList();

                pairs.ForEach(p =>
                {
                    var newLinks = p.Parsed.Links.Except(p.Existing.Links, new ChannelLinkComparer());
                    if (newLinks.Any())
                    {
                        p.Existing.Links.AddRange(newLinks);
                    }
                });
                var newLinksAdded = channelsDB.SaveChanges();
                Logger.Info($"{ newLinksAdded } new links added");

                #endregion
            }
        }