コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: ListByTag.cs プロジェクト: redscarf2/MyProjects
 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));
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: ListByTag.cs プロジェクト: uvbs/MyProjects
 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);
     }
 }
コード例 #5
0
 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);
         }
     }
 }
コード例 #6
0
        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();
        }
コード例 #7
0
ファイル: List.cs プロジェクト: redscarf2/MyProjects
 /// <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));
     }
 }