saveMaterial method

Future<bool> saveMaterial(
  1. CourseMaterial material, {
  2. CancelToken? cancelToken,
  3. ProgressCallback? onReceiveProgress,
  4. void onSaving()?,
})

Downloads and exports a material, returning false when cancelled.

Implementation

Future<bool> saveMaterial(
  CourseMaterial material, {
  CancelToken? cancelToken,
  ProgressCallback? onReceiveProgress,
  void Function()? onSaving,
}) async {
  final reference = await _materialReference(material);
  return _fileSaveService.saveDownloadedFile((directory) async {
    Object? localError;
    StackTrace? localStackTrace;
    final file = await _authRepository.withAuth<MaterialFileDto?>(() async {
      try {
        return await _iSchoolPlusService.downloadMaterial(
          reference,
          directory,
          cancelToken: cancelToken,
          onReceiveProgress: onReceiveProgress,
        );
      } on UnsupportedError catch (error, stackTrace) {
        localError = error;
        localStackTrace = stackTrace;
        return null;
      } on FileSystemException catch (error, stackTrace) {
        localError = error;
        localStackTrace = stackTrace;
        return null;
      }
    }, sso: [.iSchoolPlusService]);
    if (localError case final error?) {
      if (error is UnsupportedError) {
        await _storeMaterialClassification(material, true);
      }
      Error.throwWithStackTrace(error, localStackTrace!);
    }
    if (cancelToken?.isCancelled != true) onSaving?.call();
    return file!;
  }, canSave: () => cancelToken?.isCancelled != true);
}