예제 #1
0
        /// <summary>
        /// Create the danmaku model
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <DanmakuModelBase> CreateDanmakuModel(string id)
        {
            AcDanmakuModel model = new AcDanmakuModel();

            await ParseToModelCollection(model, id);

            return(model);
        }
예제 #2
0
        /// <summary>
        /// Create the danmaku model with the specified source uri
        /// </summary>
        /// <param name="id"></param>
        /// <param name="acfunUri">The danmaku server uri</param>
        /// <returns></returns>
        public async Task <DanmakuModelBase> CreateDanmakuModel(string id, string acfunUri)
        {
            AcDanmakuModel model = new AcDanmakuModel();

            ACFUNDANMAKUURI = acfunUri;
            await ParseToModelCollection(model, id);

            return(model);
        }
예제 #3
0
        async Task ParseToModelCollection(AcDanmakuModel model, string id)
        {
            model.DanmakuCollection = new List <Model.Danmaku>();

            string response = await GetStringFromInternet(GetDanmakuCompleteUri(id));


            JsonArray jsonArray = ParseJsonArray(response);

            var commentArray = jsonArray[0].GetArray().Concat(jsonArray[1].GetArray()).Concat(jsonArray[2].GetArray());

            foreach (var item in commentArray)
            {
                string[]    posData = item.GetObject().GetNamedString("c").Split(',');
                DanmakuMode mode;
                switch (Convert.ToInt32(posData[2]))
                {
                case 1:
                    mode = DanmakuMode.Scroll;
                    break;

                case 7:
                    mode = DanmakuMode.Advanced;
                    break;

                case 4:
                    mode = DanmakuMode.Bottom;
                    break;

                case 5:
                    mode = DanmakuMode.Top;
                    break;

                //todo: add support of 'advanced' danmaku
                default:
                    mode = DanmakuMode.Scroll;
                    break;
                }
                int  fore_int = 0;
                bool fore     = Int32.TryParse(posData[1], out fore_int);
                model.DanmakuCollection.Add(new Danmaku()
                {
                    Content = item.GetObject().GetNamedString("m"), PositionData = posData, Time = Convert.ToDouble(posData[0]), ForegroundColor = (fore) ? (fore_int | 0xFF000000).ToColor() : Colors.White, Mode = mode, Size = Convert.ToInt32(posData[3])
                });
            }
        }