private void FixContainer(VideoListItem item) { SetStatus(item, VideoListItemStatusEnum.Converting); string SrcFile = Settings.NaturalGroundingFolder + item.FileName; if (item.FileName != null && File.Exists(SrcFile)) { FFmpegProcess FileInfo = MediaInfo.GetFileInfo(SrcFile); string Ext1 = Path.GetExtension(item.FileName).ToLower(); string Ext2 = DownloadBusiness.GetFinalExtension(FileInfo.VideoStream?.Format, FileInfo.AudioStream?.Format); if ((Ext2 == ".mp4" || Ext2 == ".webm") && Ext1 != Ext2) { string DstFile = item.FileName.Substring(0, item.FileName.Length - Ext1.Length) + Ext2; if (MediaMuxer.Muxe(SrcFile, SrcFile, Settings.NaturalGroundingFolder + DstFile) == CompletionStatus.Success) { FileOperationAPIWrapper.MoveToRecycleBin(SrcFile); // Change database binding. EditVideoBusiness Business = new EditVideoBusiness(); Media ExistingData = Business.GetVideoById(item.MediaId.Value); if (ExistingData != null) { // Edit video info. ExistingData.FileName = DstFile; Business.Save(); SetStatus(item, VideoListItemStatusEnum.Done); return; } } } } SetStatus(item, VideoListItemStatusEnum.Failed); }
public async Task StartScan(List <VideoListItem> selection, CancellationToken cancel) { await selection.ForEachAsync(5, cancel, async item => { Media VideoData = PlayerAccess.GetVideoById(item.MediaId.Value); if (VideoData != null && !item.IsBusy) { try { // Query the server for media info. SetStatus(item, VideoListItemStatusEnum.DownloadingInfo); VideoInfo VInfo = await DownloadManager.GetDownloadInfoAsync(VideoData.DownloadUrl); if (VInfo != null) { // Get the highest resolution format. BestFormatInfo VideoFormat = DownloadBusiness.SelectBestFormat(VInfo.Streams); if (VideoFormat == null || VideoFormat.BestVideo == null) { SetStatus(item, VideoListItemStatusEnum.Failed); } else { SetStatus(item, await IsHigherQualityAvailable(VideoFormat, Settings.NaturalGroundingFolder + VideoData.FileName)); } if (VideoFormat != null && !string.IsNullOrEmpty(VideoFormat.StatusText)) { SetStatus(item, item.Status, item.StatusText + string.Format(" ({0})", VideoFormat.StatusText)); } } else { SetStatus(item, VideoListItemStatusEnum.InvalidUrl); } } catch { SetStatus(item, VideoListItemStatusEnum.Failed); } } }); }