private async Task <bool> DownloadFFMpeg(FFMpegInstallInfo downloadinfo, string directory, IProgress <double> progress) { foreach (var url in downloadinfo.DownloadUrls) { progress.Report(0); try { var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions { Url = url, CancellationToken = CancellationToken.None, Progress = progress }).ConfigureAwait(false); ExtractFFMpeg(downloadinfo, tempFile, directory); return(true); } catch (Exception ex) { _logger.ErrorException("Error downloading {0}", ex, url); } } return(false); }
private void ExtractFFMpeg(FFMpegInstallInfo downloadinfo, string tempFile, string targetFolder) { _logger.Info("Extracting ffmpeg from {0}", tempFile); var tempFolder = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString()); _fileSystem.CreateDirectory(tempFolder); try { ExtractArchive(downloadinfo, tempFile, tempFolder); var files = _fileSystem.GetFilePaths(tempFolder, true) .ToList(); foreach (var file in files.Where(i => { var filename = Path.GetFileName(i); return (string.Equals(filename, downloadinfo.FFProbeFilename, StringComparison.OrdinalIgnoreCase) || string.Equals(filename, downloadinfo.FFMpegFilename, StringComparison.OrdinalIgnoreCase)); })) { var targetFile = Path.Combine(targetFolder, Path.GetFileName(file)); _fileSystem.CopyFile(file, targetFile, true); SetFilePermissions(targetFile); } } finally { DeleteFile(tempFile); } }
public FFMpegLoader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient, IZipClient zipClient, IFileSystem fileSystem, FFMpegInstallInfo ffmpegInstallInfo) { _logger = logger; _appPaths = appPaths; _httpClient = httpClient; _zipClient = zipClient; _fileSystem = fileSystem; _ffmpegInstallInfo = ffmpegInstallInfo; }
private void ExtractArchive(FFMpegInstallInfo downloadinfo, string archivePath, string targetPath) { _logger.Info("Extracting {0} to {1}", archivePath, targetPath); if (string.Equals(downloadinfo.ArchiveType, "7z", StringComparison.OrdinalIgnoreCase)) { _zipClient.ExtractAllFrom7z(archivePath, targetPath, true); } else if (string.Equals(downloadinfo.ArchiveType, "gz", StringComparison.OrdinalIgnoreCase)) { _zipClient.ExtractAllFromTar(archivePath, targetPath, true); } }
public FFMpegLoader(IApplicationPaths appPaths, IFileSystem fileSystem, FFMpegInstallInfo ffmpegInstallInfo) { _appPaths = appPaths; _fileSystem = fileSystem; _ffmpegInstallInfo = ffmpegInstallInfo; }