public async void Create(int provider, string response, Dictionary <string, string> parameters, HttpListenerContext context) { var playlist = "#EXTM3U\r\n"; var channels = ChannelProvider.GetChannels(); if (channels.Count() != 0 && context != null) { foreach (var channel in channels) { var server = channel.Servers[new Random().Next(0, (channel.Servers.Count - 1))].URL; var name = channel.Name; var logo = channel.Logo; var type = channel.Type; var epgid = channel.ID; var prov = ChannelProvider.GetProviderNameByID(db, provider); playlist += string.Format("#EXTINF:-1 tvg-name=\"{2}\" group-title=\"{3}\" tvg-id=\"{0}\",{2}\r\n", epgid == 0 ? string.Empty : epgid.AsString(), logo, name, prov.Result); playlist += string.Format("{0}\r\n", (type != 2 || !server.EndsWith(".ts")) ? server : string.Format("http://{1}:83/tsproxy/?url={0}", server, context.Request.Headers["Host"].Split(':')[0])); } } Task.Run(() => Console.WriteLine("Playlist created!")); Task.Run(() => MakeResponse(provider, playlist, BackendAction.Create, parameters, context)); }
public async void Download(int provider, string response, Dictionary <string, string> parameters, HttpListenerContext context) { if (string.IsNullOrEmpty(parameters["epglist"])) { return; } lock (parameters) { var epg_url = GetEPGProviderURL(int.Parse(parameters["epglist"])).Result; if (!string.IsNullOrEmpty(epg_url)) { var prov = ChannelProvider.GetProviderNameByID(db, provider); var wc = new HTTPClient(epg_url); wc.GetResponse(prov.Result); wc.HTTPClientResponse += (sender, e) => { var res = e.Data; if (!string.IsNullOrEmpty(res)) { EPGData = ImportFormJson(res, int.Parse(parameters["epglist"])).Result; } }; } } Task.Run(() => MakeResponse(provider, response, BackendAction.Download, parameters, context)); }
public async void Create(int provider, string response, Dictionary <string, string> parameters, HttpListenerContext context) { if (EPGData != null) { var xml = new XmlDocument(); var root = xml.CreateElement("tv"); root.SetAttribute("generator-info-name", string.Format("Generated from {0} EPG data by Netvision IPTV Backend", ChannelProvider.GetProviderNameByID(db, provider).Result)); root.SetAttribute("generator-info-url", "https://github.com/LipkeGu/Netvision/"); var channels = ChannelProvider.GetChannels(); foreach (var channel in channels) { if (channel.ID == 0) { continue; } var cnode = xml.CreateElement("channel"); cnode.SetAttribute("id", channel.ID.AsString()); var dn = xml.CreateElement("display-name"); dn.SetAttribute("lang", "de"); dn.InnerText = channel.Name; cnode.AppendChild(dn); root.AppendChild(cnode); } Task.Run(() => Console.WriteLine("Generating epgdata.xml.gz...")); var epgchannels = (from c in EPGData where c.Value.Count() != 0 select c).OrderBy(c => c.Key); if (epgchannels.Count() != 0) { foreach (var item in epgchannels) { Task.Run(() => { for (var i = 0; i < item.Value.Count(); i++) { lock (item.Value[i]) { var programm = xml.CreateElement("programme"); programm.SetAttribute("start", item.Value[i].Start); programm.SetAttribute("stop", item.Value[i].Stop); programm.SetAttribute("channel", item.Key); var title = xml.CreateElement("title"); title.SetAttribute("lang", "de"); title.InnerText = item.Value[i].Title; programm.AppendChild(title); if (!string.IsNullOrEmpty(item.Value[i].Description)) { var desc = xml.CreateElement("desc"); desc.SetAttribute("lang", "de"); desc.InnerText = item.Value[i].Description; programm.AppendChild(desc); } if (item.Value[i].Person != null) { if (item.Value[i].Person.Count != 0) { var credits = xml.CreateElement("credits"); var actors = (from a in item.Value[i].Person where a.kind == "actor" select a.name); foreach (var a in actors) { var actor = xml.CreateElement("actor"); actor.InnerText = a; credits.AppendChild(actor); } var directors = (from a in item.Value[i].Person where a.kind == "director" select a.name); foreach (var d in directors) { var director = xml.CreateElement("director"); director.InnerText = d; credits.AppendChild(director); } programm.AppendChild(credits); } } var icon = item.Value[i].Images; if (!string.IsNullOrEmpty(icon)) { var ico = xml.CreateElement("icon"); ico.SetAttribute("src", icon); programm.AppendChild(ico); } if (!string.IsNullOrEmpty(item.Value[i].Series_Episodes)) { var episode = xml.CreateElement("episode-num"); episode.SetAttribute("system", "onscreen"); episode.InnerText = string.Format("S{0} E{1}/{2}", item.Value[i].Series_Season, item.Value[i].Series_Episode, item.Value[i].Series_Episodes); programm.AppendChild(episode); } if (!string.IsNullOrEmpty(item.Value[i].Date)) { var year = xml.CreateElement("date"); year.InnerText = item.Value[i].Date; programm.AppendChild(year); } if (!string.IsNullOrEmpty(item.Value[i].Country)) { var country = xml.CreateElement("country"); country.InnerText = item.Value[i].Country; programm.AppendChild(country); } foreach (var cat in item.Value[i].Categories) { var c = xml.CreateElement("category"); c.SetAttribute("lang", "de"); c.InnerText = cat.text; programm.AppendChild(c); } if (!string.IsNullOrEmpty(item.Value[i].SubTitle)) { var ss = xml.CreateElement("sub-title"); ss.SetAttribute("lang", "de"); ss.InnerText = item.Value[i].SubTitle; programm.AppendChild(ss); } root.AppendChild(programm); } } }); } } xml.AppendChild(root); xml.InsertBefore(xml.CreateXmlDeclaration("1.0", "UTF-8", null), root); fs.Delete("epgdata.xml"); xml.Save("epgdata.xml"); Task.Run(() => { fs.GZipCompress("epgdata.xml"); Console.WriteLine("EPG informations saved to: epgdata.xml.gz..."); }); } if (EPGData != null) { EPGData.Clear(); } Task.Run(() => MakeResponse(provider, string.Empty, BackendAction.Create, parameters, context)); }