// GET: Home public ActionResult Index() { ChannelsContext con = new ChannelsContext(); RepositoryService <Channel> channels = new RepositoryService <Channel>(con); return(View(channels.GetAll().ToList())); }
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"); }
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); } } }
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"); } }
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)); }
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(); }
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(); } }
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 } }