/// <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); }
/// <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); }
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]) }); } }