public async void Initialize() { while(DescriptionBrowser == null) { Thread.Sleep(1); } await DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => { DescriptionBrowser.NavigateToString(Content.Description); Handler.LoadMovie(); })); LiveCommentInstance = new NicoNicoLiveComment(Content.GetPlayerStatus.MesseageServerUrl, Content.GetPlayerStatus.MesseageServerPort, this); Time = new VideoTime(); //Time.VideoTimeString = NicoNicoUtil.GetTimeFromVpos(Content.GetPlayerStatus, (int.Parse(Content.GetPlayerStatus.EndTime) - int.Parse(Content.GetPlayerStatus.BaseTime)) * 100); Time.Length = int.Parse(Content.GetPlayerStatus.EndTime) - int.Parse(Content.GetPlayerStatus.BaseTime); //Time.BufferedTime = Time.Length; Comment = new LiveCommentViewModel(this); OpenVideo(); //タイムシフトじゃなかったらすぐに再生 if(!Content.GetPlayerStatus.Archive) { foreach(var content in Content.GetPlayerStatus.ContentsList) { } } }
private void Initialize(string videoUrl) { IsActive = true; Task.Run(() => { Mylist = new VideoMylistViewModel(this); VideoData = new VideoData(); Status = "動画情報取得中"; //動画情報取得 VideoData.ApiData = NicoNicoWatchApi.GetWatchApiData(videoUrl); //ロードに失敗したら if(VideoData.ApiData == null) { LoadFailed = true; IsActive = false; Status = "動画の読み込みに失敗しました。"; return; } //有料動画なら if(VideoData.ApiData.IsPaidVideo) { App.ViewModelRoot.Messenger.Raise(new TransitionMessage(typeof(PaidVideoDialog), this, TransitionMode.Modal)); return; } DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => { while(VideoFlash == null) { Thread.Sleep(1); } if(VideoData.ApiData.Cmsid.Contains("nm")) { VideoData.VideoType = NicoNicoVideoType.SWF; WebBrowser.Source = new Uri(GetNMPlayerPath()); } else if(VideoData.ApiData.GetFlv.VideoUrl.StartsWith("rtmp")) { VideoData.VideoType = NicoNicoVideoType.RTMP; WebBrowser.Source = new Uri(GetRTMPPlayerPath()); } else { if(VideoData.ApiData.MovieType == "flv") { VideoData.VideoType = NicoNicoVideoType.FLV; } else { VideoData.VideoType = NicoNicoVideoType.MP4; } WebBrowser.Source = new Uri(GetPlayerPath()); } })); IsActive = false; Time = new VideoTime(); //動画時間 Time.VideoTimeString = NicoNicoUtil.ConvertTime(VideoData.ApiData.Length); if(VideoData.ApiData.GetFlv.IsPremium && !VideoData.ApiData.GetFlv.VideoUrl.StartsWith("rtmp")) { Task.Run(() => { Status = "ストーリーボード取得中"; NicoNicoStoryBoard sb = new NicoNicoStoryBoard(VideoData.ApiData.GetFlv.VideoUrl); VideoData.StoryBoardData = sb.GetStoryBoardData(); Status = "ストーリーボード取得完了"; }); } NicoNicoComment comment = new NicoNicoComment(VideoData.ApiData.GetFlv, this); List<NicoNicoCommentEntry> list = comment.GetComment(); if(list != null) { foreach(NicoNicoCommentEntry entry in list) { VideoData.CommentData.Add(new CommentEntryViewModel(entry)); } dynamic json = new DynamicJson(); json.array = list; DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => InjectComment(json.ToString()))); } if(!Properties.Settings.Default.CommentVisibility) { DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => InvokeScript("JsToggleComment"))); } else { CommentVisibility = true; } //App.ViewModelRoot.StatusBar.Status = "動画取得完了"; }); }
public VideoViewModel(string videoUrl, PlayListViewModel playList = null) : base(videoUrl.Substring(30)) { PlayList = playList; if(videoUrl.Contains("?")) { videoUrl = videoUrl.Split('?')[0]; Name = videoUrl.Substring(30); } VideoUrl = videoUrl; Cmsid = Name; Mylist = new VideoMylistViewModel(this); Comment = new VideoCommentViewModel(this); Handler = new VideoFlashHandler(this); Time = new VideoTime(); VideoData = new VideoData(); InitializeView(); }