public static EditorResult Edit(VideoTask task) { using(TaskEditor te = new TaskEditor(task)) { if(te.ShowDialog() != DialogResult.OK) return EditorResult.Cancel; return te.cbSameForAll.Checked ? EditorResult.SameForAll : EditorResult.OK; } }
public static void ReFetchTask(VideoTask task) { CreateTaskWithAid(task.Aid, task.Page); Data.ApplicationSettings.GetInstance().Dispatcher.Invoke(() => { Data.FetchingTasks.GetInstance().Tasks.Remove(task); }); }
public static void Build(FetcherTaskToken token) { var jsonVideoInfo = NetworkHelper.GetTextFromUri(token.ToUri()); if (jsonVideoInfo.Length > 100) { var videoInfo = JsonConvert.DeserializeObject <VideoInfo>(jsonVideoInfo); VideoTask newTask = GetVideoTask(token, videoInfo); var settings = Data.ApplicationSettings.GetInstance(); settings.Dispatcher.Invoke(delegate { Data.FetchingTasks.AddTask(newTask); }); var task = new Task(() => { GetDownloadUrl(newTask); }); // TODO: 改用后台进程/进程池实现 task.Start(); } else { var errorMsg = JsonConvert.DeserializeObject <ServerSideException>(jsonVideoInfo); Data.NotificationData.AddErrorNotifiction(errorMsg); } }
public static void Build(string aid, string page) { var jsonVideoInfo = Helper.NetworkHelper.GetTextFromUri(VIDEO_INFO_API + aid + "&page=" + page); if (jsonVideoInfo.Length > 100) { var videoInfo = JsonConvert.DeserializeObject <jsonVideoInfo>(jsonVideoInfo); VideoTask newTask = GetVideoTask(aid, page, videoInfo); var settings = Data.ApplicationSettings.GetInstance(); settings.Dispatcher.Invoke(delegate { Data.FetchingTasks.AddTask(newTask); }); var task = new Task(() => { GetDownloadUrl(newTask); }); // TODO: 改用后台进程/进程池实现 task.Start(); } else { var errorMsg = JsonConvert.DeserializeObject <jsonVideoInfoFailedMessage>(jsonVideoInfo); Data.NotificationData.AddErrorNotifiction("获取视频信息失败, 错误代号: " + errorMsg.code); } }
public static void AddTask(VideoTask vt) { _instance.Tasks.Add(vt); // TODO: 将VideoTask添加到任务队列中,交由后台进程获取实际下载地址 //TaskQueue.Enqueue(vt); }
public static VideoInfoWindow Start(VideoTask task) { var win = new VideoInfoWindow(); win.Task = task; win.Show(); return(win); }
private static void AppendFileSystemInfo(VideoTask newTask, jsonVideoDownload jvd) { var durl = jvd.durl[0]; newTask.Size = Helper.FileHelper.GetFileSizeString(durl.size); newTask.DownloadUrl.Add(durl.url); newTask.DownloadUrl.AddRange(durl.backup_url); newTask.Name = newTask.Name.Substring(9); }
private static void AppendFileSystemInfo(VideoTask newTask, jsonVideoDownload jvd) { var durl = jvd.durl[0]; newTask.RawSize = durl.size; newTask.DownloadUrl.Add(durl.url); newTask.DownloadUrl.AddRange(durl.backup_url); newTask.State = FetchState.Done; //newTask.Name = newTask.Name.Substring(9); }
/// <summary> /// 获取任务的大小和下载地址 /// </summary> /// <param name="newTask"></param> private static void GetDownloadUrl(VideoTask newTask) { var cid = newTask.VideoInfo.cid; if (AdvanceSettings.UseNativeApi) { BilibiliVideoInfo info = GetVideoInfoFromNativeApi(cid); if (info.Code < 0) { throw new ServerSideException(info.Code, info.Result); } AppendFileSystemInfo(newTask, info); return; } var settings = ApplicationSettings.GetInstance(); var downJson = NetworkHelper.GetTextFromUri( DOWNLOAD_API + cid + "?quality=1&type=" + settings.FetchingOption.Format); if (downJson.Length < 100) { NotificationData.AddErrorNotifiction( "无法获取cid:" + cid + "的下载地址, 可能是非bilibili源的缘故"); newTask.State = FetchState.Error; return; } var jvd = JsonConvert.DeserializeObject <jsonVideoDownload>(downJson); if (settings.FetchingOption.Quality == "high") { var quality = jvd.accept_quality.OrderByDescending(t => t).First(); downJson = NetworkHelper.GetTextFromUri( DOWNLOAD_API + newTask.VideoInfo.cid + "?quality=" + quality); jvd = JsonConvert.DeserializeObject <jsonVideoDownload>(downJson); } if (jvd.durl.Count == 0) { NotificationData.AddErrorNotifiction( "无法获取cid:" + cid + "的下载地址, durl.count = 0"); newTask.State = FetchState.Error; return; } AppendFileSystemInfo(newTask, jvd); NotificationData.AddNotifiction( NotificationLevel.Info, "成功获取cid:" + cid + "的下载地址, 请复制下载地址到其它软件下载"); }
public async Task <VideoTask> CreateAsync(VideoTaskDto model) { var videoTask = new VideoTask { Name = model.Name, Description = model.Description, VideoHref = model.VideoHref, Module = await _context.Modules.FindAsync(model.ModuleId) }; _context.VideoTasks.Add(videoTask); await _context.SaveChangesAsync(); return(videoTask); }
private static VideoTask GetVideoTask(FetcherTaskToken token, VideoInfo videoInfo) { var newTask = new VideoTask(token) { VideoInfo = videoInfo, State = FetchState.Waiting, Name = videoInfo.title, Partname = videoInfo.partname, DownloadUrl = new List <string>(), Danmu = "http://comment.bilibili.com/" + videoInfo.cid + ".xml" }; return(newTask); }
public static async void DownAndRegxFilt(VideoTask task, Regex regex) { if (task.Danmu == string.Empty) { Data.NotificationData.GetInstance().Add( new NotifictionMessage(NotificationLevel.Warning, "下载地址尚未获取到, 请等待或删除本任务.")); return; } Data.NotificationData.GetInstance().Add(new NotifictionMessage(NotificationLevel.Info, "正在下载并过滤弹幕...请稍等")); var thrTask = new Task <string>(delegate { var danmu = Helper.NetworkHelper.GetTextFromUri(task.Danmu); return(danmu); }); thrTask.Start(); var danmuXmlBytes = await thrTask; var xmlDanmu = Helper.XmlSerializerHelper.XmlDeserialize <xmlDanmu>(danmuXmlBytes); RegxFilt(xmlDanmu, regex); var danmuXml = Helper.XmlSerializerHelper.XmlSerialize <xmlDanmu>(xmlDanmu); Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.FileName = "[弹幕]" + Helper.FileHelper.CleanInvalidFileName(task.Name); // Default file name dlg.DefaultExt = ".xml"; // Default file extension dlg.Filter = "Xml 格式弹幕 (.xml)|*.xml"; // Filter files by extension // Show save file dialog box bool? result = dlg.ShowDialog(); string filename = string.Empty; // Process save file dialog box results if (result == true) { File.WriteAllText(dlg.FileName, danmuXml); Data.NotificationData.GetInstance().Add( new NotifictionMessage(NotificationLevel.Info, "弹幕已保存到" + dlg.FileName)); } else { return; } }
private static void AppendFileSystemInfo(VideoTask newTask, BilibiliVideoInfo info) { int rawSize = 0; StringBuilder builder = new StringBuilder(); foreach (var item in info.Durls) { rawSize += item.Size; builder.AppendLine(item.Url); } var durl = info.Durls[0]; newTask.RawSize = rawSize; newTask.DownloadUrl.Add(builder.ToString().TrimEnd('\r', '\n')); //newTask.DownloadUrl.AddRange(durl.BackupUrl); newTask.State = FetchState.Done; //newTask.Name = newTask.Name.Substring(9); }
public TaskEditor(VideoTask task) { InitializeComponent(); _task = task; this.Text = task.FileFullPath; tbFile.Text = task.FileFullPath; cbMP4.Checked = task.MP4; cbFLV.Checked = task.FLV; cbWEBM.Checked = task.WEBM; cbMP3.Checked = task.MP3; tbvbmp4.Text = task.MP4_bv; tbvbwebm.Text = task.WEBM_bv; tbvbflv.Text = task.FLV_bv; tbabmp4.Text = task.MP4_ba; tbabwebm.Text = task.WEBM_ba; tbabflv.Text = task.FLV_ba; tbabmp3.Text = task.MP3_ba; tbsrflv.Text = task.FLV_sr; tbsrmp3.Text = task.MP3_sr; cbNoSound.Checked = task.NoSound; cbReplace.Checked = task.WebChar; cbPoster.Checked = task.Poster; cbJSON.Checked = task.Json; cbTN.Checked = task.Thumbnail; cbIncTime.Checked = task.LengthOnTn; cbOW.Checked = task.Overwrite; cbRotate.SelectedIndex = task.Rotate; tbWidth.Text = task.ResizeWidth; tbHeight.Text = task.ResizeHeight; nudStartOffset.Value = task.StartOffset; nudEndOffset.Value = task.EndOffset; nudMinWidth.Value = task.TnWidth; nudMinHeight.Value = task.TnHeight; cbOL1.SelectedIndex = task.Overlays[0].Item1; cbOL2.SelectedIndex = task.Overlays[1].Item1; cbOL3.SelectedIndex = task.Overlays[2].Item1; cbOL4.SelectedIndex = task.Overlays[3].Item1; tbOL1.Text = task.Overlays[0].Item2; tbOL2.Text = task.Overlays[1].Item2; tbOL3.Text = task.Overlays[2].Item2; tbOL4.Text = task.Overlays[3].Item2; }
private static VideoTask GetVideoTask(string aid, string page, jsonVideoInfo videoInfo) { var newTask = new VideoTask(); newTask.VideoInfo = videoInfo; if (string.IsNullOrEmpty(videoInfo.partname)) { newTask.Name = $"(获取下载地址中){videoInfo.title}"; newTask.Partname = "无"; } else { newTask.Name = $"(获取下载地址中){videoInfo.title} {videoInfo.partname}"; newTask.Partname = videoInfo.partname; } newTask.Aid = aid; newTask.Size = "获取中"; newTask.CreateTime = DateTime.Now.ToString(); newTask.DownloadUrl = new List <string>(); newTask.Page = page; newTask.Danmu = "http://comment.bilibili.com/" + videoInfo.cid + ".xml"; return(newTask); }
/// <summary> /// 获取任务的大小和下载地址 /// </summary> /// <param name="newTask"></param> private static void GetDownloadUrl(VideoTask newTask) { var settings = Data.ApplicationSettings.GetInstance(); var cid = newTask.VideoInfo.cid; var downJson = Helper.NetworkHelper.GetTextFromUri( DOWNLOAD_API + cid + "?quality=1&type=" + settings.FetchingOption.Format); if (downJson.Length < 100) { Data.NotificationData.AddErrorNotifiction( "无法获取cid:" + cid + "的下载地址, 可能是非bilibili源的缘故"); return; } var jvd = JsonConvert.DeserializeObject <jsonVideoDownload>(downJson); if (settings.FetchingOption.Quality == "high") { var quality = jvd.accept_quality.OrderByDescending(t => t).First(); downJson = Helper.NetworkHelper.GetTextFromUri( DOWNLOAD_API + newTask.VideoInfo.cid + "?quality=" + quality); jvd = JsonConvert.DeserializeObject <jsonVideoDownload>(downJson); } if (jvd.durl.Count == 0) { Data.NotificationData.AddErrorNotifiction( "无法获取cid:" + cid + "的下载地址, durl.count = 0"); return; } AppendFileSystemInfo(newTask, jvd); Data.NotificationData.AddNotifiction( NotificationLevel.Info, "成功获取cid:" + cid + "的下载地址, 请复制下载地址到其它软件下载"); }
public FetcherTaskToken(VideoTask vk) : this(vk.Aid, vk.Page, vk) { }
public FetcherTaskToken(string aid, int partIndex, VideoTask vk) { this.Aid = aid; this.PartIndex = partIndex; this.Task = vk; }
public void UpdateVideoTask(VideoTask task) { _context.VideoTasks.Update(task); _context.SaveChanges(); }
public async Task Remove(VideoTask videoTask) { _context.VideoTasks.Remove(videoTask); await _context.SaveChangesAsync(); }
public static void Gui(IList<string> files, bool transform = false) { if(transform) { List<VideoTask> tasks = new List<VideoTask>(); foreach(string file in files) { if(!File.Exists(file)) continue; VideoTask task = new VideoTask() { FileFullPath = file, LengthOnTn = true, MP4 = true, MP4_ba = "128k", MP4_bv = "5000k", Overwrite = true }; tasks.Add(task); } (new MainForm(tasks)).ShowDialog(); } else { (new MainForm(files)).ShowDialog(); } }
private void AddItems(IList<string> items) { VideoTask tskForCopy = null; foreach(string file in items) { bool equals = false; foreach(string itm in LB.Items) { if(file.Equals(itm, StringComparison.CurrentCultureIgnoreCase)) { equals = true; break; } } if(equals) continue; if(tskForCopy == null) { VideoTask tsk = new VideoTask() { FileFullPath = file, LengthOnTn = true }; switch(TaskEditor.Edit(tsk)) { case EditorResult.OK: LB.Items.Add(file); Tasks.Add(tsk); break; case EditorResult.SameForAll: LB.Items.Add(file); Tasks.Add(tsk); tskForCopy = tsk.Clone(); break; } } else { VideoTask tsk = tskForCopy.Clone(); tsk.FileFullPath = file; LB.Items.Add(file); Tasks.Add(tsk); } } }