private TagNodeKey GetNodeKey(string dimension, int type) { var key = _list.FirstOrDefault(v => v.Dimension == dimension && v.Type == type); if (key == null) { key = new TagNodeKey() { Dimension = dimension, Type = type }; _list.Add(key); } return(key); }
public string ListByTags(ListFilter filter) { try { var pindex = VideoNodeKeyArray.Instance.Items[new VideoNodeKey(filter.platform, 0, filter.auth)]; var pars = VideoParsUtils.FormatListByTags(filter); var filters = VideoNodesUtil.FormateVideoFilter(filter, pars); var tag = pars.SortTag.Substring(0, pars.SortTag.LastIndexOf(":")); var dimension = pars.SortTag.Substring(pars.SortTag.LastIndexOf(":") + 1); IEnumerable <int> channels = new List <int>(); foreach (var type in BoxTypeCache.Instance.Items.Values) { var key = new TagNodeKey() { Dimension = dimension, Type = type.TypeID }; if (TagCache.Instance.Items.ContainsKey(key)) { var vkey = new VideoNodeKey(filter.platform, type.TypeID, filter.auth); var node = TagCache.Instance.Items[key].FirstOrDefault(v => v.Language[CustomArray.LanguageArray[0]].Title == tag); if (node != null && node.Channels.ContainsKey(vkey)) { channels = channels.Union(node.Channels[vkey]); } } } var query = channels.Where(v => { bool result = true; var video = ListCache.Instance.Dictionary[v]; foreach (var f in filters) { result = result && f(video, pars, filter); } return(result); } ); return(CreatePageList(query, filter, pars, false)); } catch (KeyNotFoundException) { return(NoPlatForm()); } catch (Exception ex) { return(BoxUtils.FormatErrorMsg(ex)); } }
private void LoadTagCount(Dictionary <TagNodeKey, List <TagNode> > dic, TagNodeKey key, int count) { var c = count; if (bool.Parse(AppSettingCache.Instance["ActDirectorTag"])) { try { if (key.Dimension == CustomArray.ActDimension) { if (key.Type == 1) { var sql = "select count(*) from bktags where tagtype=4 and bktype=0"; c = Convert.ToInt32(DbObject <BoxTypeInfo> .ExecuteScalarBySql(sql)); } else if (key.Type == 2) { var sql = "select count(*) from bktags where tagtype=4 and bktype=1"; c = Convert.ToInt32(DbObject <BoxTypeInfo> .ExecuteScalarBySql(sql)); } } else if (key.Dimension == CustomArray.DirectorDimension) { if (key.Type == 1) { var sql = "select count(*) from bktags where tagtype=5 and bktype=0"; c = Convert.ToInt32(DbObject <BoxTypeInfo> .ExecuteScalarBySql(sql)); } else if (key.Type == 2) { var sql = "select count(*) from bktags where tagtype=5 and bktype=1"; c = Convert.ToInt32(DbObject <BoxTypeInfo> .ExecuteScalarBySql(sql)); } } } catch (Exception ex) { _log.Error(ex); dic[key] = new List <TagNode>(1000); } } dic[key] = new List <TagNode>(c); }
public string ListByTags(ListFilter filter) { try { var pindex = VideoNodeKeyArray.Instance.Items[new VideoNodeKey(filter.platform, 0, filter.auth)]; var pars = VideoParsUtils.FormatListByTags(filter); var filters = VideoNodesUtil.FormateVideoFilter(filter, pars); var tag = pars.SortTag.Substring(0, pars.SortTag.LastIndexOf(":")); var dimension = pars.SortTag.Substring(pars.SortTag.LastIndexOf(":") + 1); IEnumerable<int> channels = new List<int>(); foreach (var type in BoxTypeCache.Instance.Items.Values) { var key = new TagNodeKey() { Dimension = dimension, Type = type.TypeID }; if (TagCache.Instance.Items.ContainsKey(key)) { var vkey = new VideoNodeKey(filter.platform, type.TypeID, filter.auth); var node = TagCache.Instance.Items[key].FirstOrDefault(v => v.Language[CustomArray.LanguageArray[0]].Title == tag); if (node != null && node.Channels.ContainsKey(vkey)) channels = channels.Union(node.Channels[vkey]); } } var query = channels.Where(v => { bool result = true; var video = ListCache.Instance.Dictionary[v]; foreach (var f in filters) { result = result && f(video, pars, filter); } return result; } ); return CreatePageList(query, filter, pars, false); } catch (KeyNotFoundException) { return NoPlatForm(); } catch (Exception ex) { return BoxUtils.FormatErrorMsg(ex); } }
private void LoadBKTags(Dictionary <TagNodeKey, List <TagNode> > dic, TagNodeKey key, VideoNode video, string[] dimensions) { foreach (var dimension in dimensions) { var node = dic[key].FirstOrDefault(v => v.Language[CustomArray.LanguageArray[0]].Title == dimension); if (node != null) { foreach (var plat in video.PlatForms) { var vk = VideoNodeKeyArray.Instance.FindKey(plat.PlatformName, video.Type, plat.Licence); if (!node.Channels.ContainsKey(vk)) { node.Channels.Add(vk, new List <int>()); } node.Channels[vk].Add(video.Main.ChannelID); } } else { node = new TagNode() { Language = SimpleLanguageHandler.ProcessLang(dimension, string.Empty), Channels = new Dictionary <VideoNodeKey, List <int> >()//VideoNodeKeyArray.Instance.InitChannels() }; foreach (var plat in video.PlatForms) { var vk = VideoNodeKeyArray.Instance.FindKey(plat.PlatformName, video.Type, plat.Licence); if (!node.Channels.ContainsKey(vk)) { node.Channels.Add(vk, new List <int>()); } node.Channels[vk].Add(video.Main.ChannelID); } dic[key].Add(node); } } }
public override void RefreshCache() { var dic = new Dictionary <TagNodeKey, List <TagNode> >(TagTypeCache.Instance.Dictionary.Count); var tagtypes = TagTypeCache.Instance.Dictionary.Values; var pcount = PlatformUtils.FormatVodPlatform().Count; var tagtypequery = from tagtype in tagtypes join boxtag in BoxTagCache.Instance.Dictionary.Values on tagtype.TagTypeID equals boxtag.TagType into boxtags select new { TagType = tagtype, BoxTags = boxtags.OrderBy(v => v.TagRank) }; foreach (var tag in tagtypequery) { var key = new TagNodeKey() { Dimension = tag.TagType.TagTypeLimitName, Type = tag.TagType.BoxTypeID }; //dic[key] = new List<TagNode>(tag.BoxTags.Count()); LoadTagCount(dic, key, tag.BoxTags.Count()); var relquery = from boxtag in tag.BoxTags join rel in ChannelTagRelCache.Instance.Items //加载频道 on boxtag.ID equals rel.TagID into rels select new { Node = new TagNode() { Language = SimpleLanguageHandler.ProcessLang(boxtag.TagName, boxtag.TagNameEng), Channels = new Dictionary <VideoNodeKey, List <int> >(pcount) }, Rels = rels.OrderByDescending(r => r.Rank) //OrderBy(r => r.Rank) }; foreach (var rel in relquery) { var result = false; var rcount = rel.Rels.Count(); foreach (var r in rel.Rels) { VideoNode v; if (ListCache.Instance.Dictionary.TryGetValue(r.ChannelID, out v)) { foreach (var plat in v.PlatForms) { var vk = VideoNodeKeyArray.Instance.FindKey(plat.PlatformName, v.Type, plat.Licence); //new VideoNodeKey(plat.PlatformName, v.Type, plat.Licence); if (!rel.Node.Channels.ContainsKey(vk)) { rel.Node.Channels.Add(vk, new List <int>(rcount)); } rel.Node.Channels[vk].Add(v.Main.ChannelID); result = true; } } } if (result) { dic[key].Add(rel.Node); } } } if (bool.Parse(AppSettingCache.Instance["ActDirectorTag"])) { LoadActorDirector(dic); } _cache = dic; LuceneInitIndex(dic); GC.Collect(); }
/// <summary> /// 获取视频数据基本接口 /// </summary> public string VideoList(ListFilter filter) { try { var pars = VideoParsUtils.FormatVideoPars(filter); var vkey = new VideoNodeKey(filter.platform, filter.type, filter.auth); var filters = VideoNodesUtil.FormateVideoFilter(filter, pars); IEnumerable <int> channels; if (filter.treeleftid != 0) { var node = TreeNodeCache.Instance.Items[filter.treeleftid]; if (node.Channels.ContainsKey(vkey)) { channels = VideoSortUtils <VideoNode> .Sort(node.Channels[vkey], filter); } else { channels = new List <int>(); } } else if (!string.IsNullOrEmpty(pars.SortTag)) { try { var tag = pars.SortTag.Substring(0, pars.SortTag.LastIndexOf(":")); var dimension = pars.SortTag.Substring(pars.SortTag.LastIndexOf(":") + 1); var key = new TagNodeKey() { Dimension = dimension, Type = filter.type }; if (TagCache.Instance.Items.ContainsKey(key)) { var node = TagCache.Instance.Items[key].FirstOrDefault(v => v.Language[CustomArray.LanguageArray[0]].Title == tag); if (node != null && node.Channels.ContainsKey(vkey)) { channels = node.Channels[vkey]; } else { channels = new List <int>(); } } else { channels = new List <int>(); } } catch { return(BoxUtils.FormatErrorMsg("ntags分析错误")); } } else { channels = ListCache.Instance.Items[vkey].OrderArray; } var query = channels.Where(v => { bool result = true; var video = ListCache.Instance.Dictionary[v]; foreach (var f in filters) { result = result && f(video, pars, filter); } return(result); }); return(CreatePageList(VideoSortUtils <VideoNode> .Sort(query, filter), filter, pars, false)); } catch (KeyNotFoundException) { return(NoPlatForm()); } catch (Exception ex) { return(BoxUtils.FormatErrorMsg(ex)); } }