/// <summary> /// 直播分类信息扩展接口 /// </summary> public string LiveTypesEx(LiveFilter filter) { try { var key = new VideoNodeKey(filter.platform, filter.type, filter.auth); var root = new XElement("types"); var filters = VideoNodesUtil.FormateTagFilter(filter); root.Add(from livetype in LiveTypeDicCache.Instance.Items where livetype.Channels.ContainsKey(key) let count = GetChannelCount(livetype, key, filter, filters) where count > 0 select new XElement("type", new XElement("tid", livetype.ID), new XElement("name", livetype.Language[filter.lang].Title), new XElement("count", count), new XElement("image", livetype.PicLink) )); return(root.ToString(SaveOptions.DisableFormatting)); } catch (KeyNotFoundException) { return(NoPlatLive()); } catch (Exception ex) { return(BoxUtils.FormatErrorMsg(ex)); } }
/// <summary> /// 直播节目预告输出 /// </summary> public static XElement LiveListParade(ChannelLiveItemsNode parade, LiveFilter filter) { return(new XElement("parade", new XAttribute("begin_time", parade.StartTime.TimeOfDay.ToString()), parade.Language[filter.lang].Title )); }
/// <summary> /// 获取节目信息扩展接口 /// </summary> public string LiveListsEx(LiveFilter filter) { try { var pars = VideoParsUtils.FormatLiveVideoPars(filter); var filters = VideoNodesUtil.FormateLiveVideoExFilter(filter, pars); var key = new VideoNodeKey(filter.platform, filter.type, filter.auth); var query = LiveListCache.Instance.Items[key].Where(v => { bool result = true; foreach (var f in filters) { result = result && f(v, pars, filter); } return(result); }); return(CreatePageList(VideoSortUtils <LiveVideoNode> .SortLiveVideos(query, filter, pars), filter, pars, key, true)); } catch (KeyNotFoundException) { return(NoPlatLive()); } catch (Exception ex) { return(BoxUtils.FormatErrorMsg(ex)); } }
/// <summary> /// 直播节目请求参数处理 /// </summary> public static VideoPars FormatLiveVideoPars(LiveFilter filter) { VideoPars vp = new VideoPars(); if (filter.type != 0) { vp.SortTag = filter.type.ToString(); } if (!string.IsNullOrEmpty(filter.flag)) { vp.Flags = filter.flag.FormatStrToArray(SplitArray.LineArray); } if (filter.forbidden) { filter.forbidden = VideoNodeKeyArray.Instance.Forbidden[new VideoNodeKey(filter.platform, 0, filter.auth)]; if (filter.forbidden) { if (ForbiddenAreaCache.Instance.Items.ContainsKey(filter.fbcode)) { vp.ForbiddenName = ForbiddenAreaCache.Instance.Items[filter.fbcode].ForbiddenAreaName; } else { filter.forbidden = false; } } } return(vp); }
/// <summary> /// 分页输出频道列表 /// </summary> private string CreatePageList(IEnumerable <LiveVideoNode> list, LiveFilter filter, VideoPars pars, VideoNodeKey key, bool isEx) { var xml = new XElement("vlist"); xml.Add(new XElement("countInPage", filter.c), new XElement("page", filter.s)); var count = list.PageList(filter, pars, xml, isEx); xml.AddFirst(new XElement("count", count), new XElement("page_count", PageUtils.PageCount(count, filter.c))); return(xml.ToString(SaveOptions.DisableFormatting)); }
/// <summary> /// 获取节目预告列表 /// </summary> public string LiveParade(LiveFilter filter) { try { var video = LiveListCache.Instance.Dictionary[filter.vid]; var parades = video.Items.Where(p => p.StartTime.Date.Equals(filter.date.Date)).OrderBy(p => p.StartTime); return(CreateParades(video, parades, filter)); } catch (KeyNotFoundException) { return(NoPlatLive()); } catch (Exception ex) { return(BoxUtils.FormatErrorMsg(ex)); } }
public static int PageList <T>(this IEnumerable <T> source, LiveFilter filter, VideoPars pars, XElement root, bool isEx) where T : LiveVideoNode { var index = (filter.s - 1) * filter.c; var max = index + filter.c; int num = 0; using (IEnumerator <T> enumerator = source.GetEnumerator()) { while (enumerator.MoveNext()) { if (index <= num && num < max) { root.Add(VideoResponseUtils.CustomLiveListRes(enumerator.Current, filter, filter.type, isEx)); } num++; } } return(num); }
private int GetChannelCount(LiveTypeNode node, VideoNodeKey key, LiveFilter filter, List <Func <VideoBase, ExFilterBase, bool> > filters) { int count = 0; if (node.Channels.ContainsKey(key)) { var cs = node.Channels[key]; foreach (var c in cs) { var result = true; foreach (var f in filters) { result = result && f(LiveListCache.Instance.Dictionary[c], filter); } if (result) { count++; } } } return(count); }
private void ConvertFilterEnumToIFilter(LiveFilter liveFilter) { switch (liveFilter) { case LiveFilter.None: activeFilter = null; break; case LiveFilter.Antique: activeFilter = new AntiqueFilter(); break; case LiveFilter.AutoEnhance: activeFilter = new AutoEnhanceFilter(); break; case LiveFilter.AutoLevels: activeFilter = new AutoLevelsFilter(); break; case LiveFilter.Cartoon: activeFilter = new CartoonFilter(); break; case LiveFilter.ColorBoost: activeFilter = new ColorBoostFilter(); break; case LiveFilter.Grayscale: activeFilter = new GrayscaleFilter(); break; case LiveFilter.Lomo: activeFilter = new LomoFilter(); break; case LiveFilter.MagicPen: activeFilter = new MagicPenFilter(); break; case LiveFilter.Negative: activeFilter = new NegativeFilter(); break; case LiveFilter.Noise: activeFilter = new NoiseFilter(); break; case LiveFilter.Oily: activeFilter = new OilyFilter(); break; case LiveFilter.Paint: activeFilter = new PaintFilter(); break; case LiveFilter.Sketch: activeFilter = new SketchFilter(); break; case LiveFilter.Vignetting: activeFilter = new VignettingFilter(); break; case LiveFilter.WhiteboardEnhancement: activeFilter = new WhiteboardEnhancementFilter(); break; default: activeFilter = null; break; } }
/// <summary> /// 直播扩展接口条件过滤方法集 /// </summary> public static List <Func <LiveVideoNode, VideoPars, LiveFilter, bool> > FormateLiveVideoExFilter(LiveFilter filter, VideoPars pars) { var filters = new List <Func <LiveVideoNode, VideoPars, LiveFilter, bool> >(11); filters.Add(FilterFunUtils.LiveHiddenFlag); if (filter.forbidden) { filters.Add(FilterFunUtils.LiveForbidden); } if (!string.IsNullOrEmpty(filter.beginletter)) { filters.Add(FilterFunUtils.LiveBeginLetter); } if (pars.Flags != null) { filters.Add(FilterFunUtils.LiveFlags); } if (filter.ver <= 1) { filters.Add(FilterFunUtils.LiveVer1); } else { filters.Add(FilterFunUtils.LiveVer2); } if (filter.forbidvip == 1) { filters.Add(FilterFunUtils.LiveForbidVip); } if (filter.bitratemin != 0) { filters.Add(FilterFunUtils.LiveBitMin); } if (filter.bitratemax != 0) { filters.Add(FilterFunUtils.LiveBitMax); } if (filter.wmin != 0) { filters.Add(FilterFunUtils.LiveWMin); } if (filter.wmax != 0) { filters.Add(FilterFunUtils.LiveWMax); } if (filter.hmin != 0) { filters.Add(FilterFunUtils.LiveHMin); } if (filter.hmax != 0) { filters.Add(FilterFunUtils.LiveHMax); } return(filters); }
/// <summary> /// 直播基本接口条件过滤方法集 /// </summary> public static List <Func <LiveVideoNode, VideoPars, LiveFilter, bool> > FormateLiveVideoFilter(LiveFilter filter, VideoPars pars) { var filters = new List <Func <LiveVideoNode, VideoPars, LiveFilter, bool> >(4); filters.Add(FilterFunUtils.LiveHiddenFlag); if (filter.forbidden) { filters.Add(FilterFunUtils.LiveForbidden); } if (!string.IsNullOrEmpty(filter.beginletter)) { filters.Add(FilterFunUtils.LiveBeginLetter); } if (pars.Flags != null) { filters.Add(FilterFunUtils.LiveFlags); } if (filter.ver <= 1) { filters.Add(FilterFunUtils.LiveVer1); } else { filters.Add(FilterFunUtils.LiveVer2); } return(filters); }
/// <summary> /// 直播标准排序 /// </summary> public static IEnumerable <LiveVideoNode> StandardLiveSort(IEnumerable <LiveVideoNode> query, LiveFilter filter, VideoPars pars) { if (string.IsNullOrEmpty(pars.SortTag)) { //AuthKey key = new AuthKey() { Auth = filter.auth, PlatForm = filter.platform }; //if (PlatFormCache.Instance.AuthItems.ContainsKey(key)) //{ // return query.OrderBy(v => { if (v.MainRank.ContainsKey(key))return v.MainRank[key]; return 0; }); //} //key.Auth = null; //return query.OrderBy(v => { if (v.MainRank.ContainsKey(key))return v.MainRank[key]; return 0; }); //return query.OrderByDescending(video => video.Hot); return(query.OrderBy(v => v.Rank)); } return(query.OrderBy(video => video.TagsRank[pars.SortTag])); }
/// <summary> /// 直播频道排序,节目获取接口使用 /// </summary> public static IEnumerable <LiveVideoNode> SortLiveVideos(IEnumerable <LiveVideoNode> query, LiveFilter filter, VideoPars pars) { if (!string.IsNullOrEmpty(filter.order)) { if (filter.order == "t") //热度、排行榜 { query = HotLiveSort(query, filter); } else if (filter.order == "n") //更新时间 { query = query.OrderByDescending(video => video.Main.ModifyTime); } else if (filter.order == "a") { query = query.OrderBy(video => video.ChannelName); } else if (filter.order == "g") { query = query.OrderByDescending(video => video.BKInfo.Score); } else //标准 { query = StandardLiveSort(query, filter, pars); } } else //标准 { query = StandardLiveSort(query, filter, pars); } return(query); }
/// <summary> /// 输出频道预告列表 /// </summary> private string CreateParades(LiveVideoNode video, IEnumerable <ChannelLiveItemsNode> parades, LiveFilter filter) { var root = new XElement("v", new XElement("vid", video.Main.ChannelID), new XElement("title", video.Language[filter.lang].ChannelName), new XElement("parade-date", filter.date.ToString("yyyy-MM-dd")) ); var paradelist = new XElement("parade_list"); paradelist.Add(from parade in parades select VideoResponseUtils.LiveListParade(parade, filter)); root.Add(paradelist); return(root.ToString(SaveOptions.DisableFormatting)); }