setupFFMpegOnWindows method

Future<bool> setupFFMpegOnWindows({
  1. CancelToken? cancelToken,
  2. void onProgress(
    1. FFMpegProgress progress
    )?,
  3. Map<String, dynamic>? queryParameters,
})

Implementation

Future<bool> setupFFMpegOnWindows({
  CancelToken? cancelToken,
  void Function(FFMpegProgress progress)? onProgress,
  Map<String, dynamic>? queryParameters,
}) async {
  if (Platform.isWindows) {
    if ((_ffmpegBinDirectory == null) || (_tempFolderPath == null)) {
      await initialize();
    }
    Directory tempDir = Directory(_tempFolderPath!);
    if (await tempDir.exists() == false) {
      await tempDir.create(recursive: true);
    }
    Directory installationDir = Directory(_ffmpegInstallationPath!);
    if (await installationDir.exists() == false) {
      await installationDir.create(recursive: true);
    }
    final String ffmpegZipPath = path.join(_tempFolderPath!, "ffmpeg.zip");
    final File tempZipFile = File(ffmpegZipPath);
    if (await tempZipFile.exists() == false) {
      try {
        Dio dio = Dio();
        Response response = await dio.download(
          _ffmpegUrl,
          ffmpegZipPath,
          cancelToken: cancelToken,
          onReceiveProgress: (int received, int total) {
            onProgress?.call(FFMpegProgress(
              downloaded: received,
              fileSize: total,
              phase: FFMpegProgressPhase.downloading,
            ));
          },
          queryParameters: queryParameters,
        );
        if (response.statusCode == HttpStatus.ok) {
          onProgress?.call(FFMpegProgress(
            downloaded: 0,
            fileSize: 0,
            phase: FFMpegProgressPhase.decompressing,
          ));
          await compute(extractZipFileIsolate, {
            'zipFile': tempZipFile.path,
            'targetPath': _ffmpegInstallationPath,
          });
          onProgress?.call(FFMpegProgress(
            downloaded: 0,
            fileSize: 0,
            phase: FFMpegProgressPhase.inactive,
          ));
          return true;
        } else {
          onProgress?.call(FFMpegProgress(
            downloaded: 0,
            fileSize: 0,
            phase: FFMpegProgressPhase.inactive,
          ));
          return false;
        }
      } catch (e) {
        onProgress?.call(FFMpegProgress(
          downloaded: 0,
          fileSize: 0,
          phase: FFMpegProgressPhase.inactive,
        ));
        return false;
      }
    } else {
      onProgress?.call(FFMpegProgress(
        downloaded: 0,
        fileSize: 0,
        phase: FFMpegProgressPhase.decompressing,
      ));
      try {
        await compute(extractZipFileIsolate, {
          'zipFile': tempZipFile.path,
          'targetPath': _ffmpegInstallationPath,
        });
        onProgress?.call(FFMpegProgress(
          downloaded: 0,
          fileSize: 0,
          phase: FFMpegProgressPhase.inactive,
        ));
        return true;
      } catch (e) {
        onProgress?.call(FFMpegProgress(
          downloaded: 0,
          fileSize: 0,
          phase: FFMpegProgressPhase.inactive,
        ));
        return false;
      }
    }
  } else {
    onProgress?.call(FFMpegProgress(
      downloaded: 0,
      fileSize: 0,
      phase: FFMpegProgressPhase.inactive,
    ));
    return true;
  }
}