archiveName function

(String, ArchiveType) archiveName(
  1. String path, [
  2. ArchiveType type = ArchiveType.tgz,
  3. List<String> extAllows = basicArchiveExtAllows
])

create archive name from path and type

Implementation

(String, ArchiveType) archiveName(
  String path, [
  ArchiveType type = ArchiveType.tgz,
  List<String> extAllows = basicArchiveExtAllows,
]) {
  var dname = p.dirname(path);
  var fname = p.basenameWithoutExtension(path);
  var ename = p.extension(path).toLowerCase();
  if (ename.isNotEmpty) {
    ename = ename.substring(1); // remove prefix .
    ename = archiveTypeMapper[ename] ?? ename;
    // if (ename == 'tar.gz') ename = 'tgz';
    final isAllowType = isAllowArchiveType(path, extAllows);
    if (!isAllowType) {
      ename = type.name;
      path = p.normalize(p.join(dname, '$fname.$ename'));
    }
  }

  if (ename.isNotEmpty && ArchiveType.values.asNameMap().containsKey(ename)) {
    type = ArchiveType.values.byName(ename);
  }

  var name = p.split(path).last.toLowerCase();
  if (name.endsWith(type.name)) return (path, type);

  name += '.${type.name}';
  path = p.normalize(p.join(path, '..', name));
  return (path, type);
}