String? getRepositoryUrl()

in app/lib/shared/urls.dart [357:405]


String? getRepositoryUrl(
  String? repository,
  String relativePath, {
  String branch = 'master',
}) {
  if (repository == null || repository.isEmpty) return null;
  for (var key in _repositoryReplacePrefixes.keys) {
    if (repository!.startsWith(key)) {
      repository =
          repository.replaceFirst(key, _repositoryReplacePrefixes[key]!);
    }
  }
  try {
    final uri = Uri.parse(repository!);
    final segments = List<String>.from(uri.pathSegments);
    while (segments.isNotEmpty && segments.last.isEmpty) {
      segments.removeLast();
    }

    if (repository.startsWith('https://github.com/') ||
        repository.startsWith('https://gitlab.com/')) {
      if (segments.length >= 2 &&
          segments[1].endsWith('.git') &&
          segments[1].length > 4) {
        segments[1] = segments[1].substring(0, segments[1].length - 4);
      }

      final extension = p.extension(relativePath).toLowerCase();
      final isRaw = _imageExtensions.contains(extension);
      final typeSegment = isRaw ? 'raw' : 'blob';

      if (segments.length < 2) {
        return null;
      } else if (segments.length == 2) {
        final newUrl = uri.replace(pathSegments: segments).toString();
        return p.url.join(newUrl, typeSegment, branch, relativePath);
      } else if (segments[2] == 'tree' || segments[2] == 'blob') {
        segments[2] = typeSegment;
        final newUrl = uri.replace(pathSegments: segments).toString();
        return p.url.join(newUrl, relativePath);
      } else {
        return null;
      }
    }
  } catch (_) {
    return null;
  }
  return null;
}