dealSaveDir static method

Future<String> dealSaveDir(
  1. FileDownloader config
)

Implementation

static Future<String> dealSaveDir(FileDownloader config) async {
  String? saveDir = config.saveDir;
  if (saveDir == null || saveDir.isEmpty) {
    saveDir = FileDownloader.globalSaveDir;
  }
  if (saveDir == null || saveDir.isEmpty) {
    throw Exception('OkhttpDownloadUtil.globalSaveDir is not set!!!!');
  }

  Directory dir = Directory(saveDir);
  if (! dir.existsSync()) {
     await dir.create(recursive: true);
    if (!dir.existsSync()) {
      throw Exception('mkdirs failed: $saveDir');
    }
  } else {
    if (await File(saveDir).exists()) {
      print('warn: saveDir is a File, will try another name: $saveDir');
      dir = Directory('${dir.parent.path}/${dir.path}-dir');
       await dir.create(recursive: true);
      if (!dir.existsSync()) {
        throw Exception('mkdirs failed: ${dir.path}');
      }
    } else {
      List<FileSystemEntity> files = dir.listSync();
      int i = 0;
      while (files.length > 1000) {
        i++;
        dir = Directory('${dir.parent.path}/${dir.path}-$i');
        if (!await dir.exists()) {
          break;
        } else {
          if (!await dir.exists()) {
            await dir.delete();
          }
          files = dir.listSync();
        }
      }
    }
  }
  return dir.path;
}