analyzeImages method

List<ImageEntityStatistics> analyzeImages({
  1. bool ignoreDynamicAssets = false,
  2. required List<ImageEntityStatistics> imageEntities,
  3. required List<FileSystemEntity> configureEntities,
  4. required List<FileSystemEntity> libEntites,
})

Implementation

List<ImageEntityStatistics> analyzeImages({
  bool ignoreDynamicAssets = false,
  required List<ImageEntityStatistics> imageEntities,
  required List<FileSystemEntity> configureEntities,
  required List<FileSystemEntity> libEntites,
}) {
  for (var codeEntity in [...configureEntities, ...libEntites]) {
    if (codeEntity is File) {
      String fileString = codeEntity.readAsStringSync();
      for (var imageEntity in imageEntities) {
        String? imageName = imageEntity.entity.name;
        String? imageFileName = imageEntity.entity.fileName;
        String? extensionName = imageEntity.entity.ext;
        if (imageName != null) {
          if (fileString.contains(imageName)) {
            imageEntity.refered++;
          } else if (imageFileName != null &&
              fileString.contains(imageFileName)) {
            // Some file seperate the file with it file fomat
            imageEntity.refered++;
          } else if (!ignoreDynamicAssets) {
            // For the image like account_vip$vipLvl.webp
            if (numberRegex.hasMatch(imageName)) {
              // If the path of image container number
              String replacedPattern = imageName.splitMapJoin(numberRegex,
                  onMatch: (s) => stringInterpolationPattern);

              RegExp imagePathRegex = RegExp(replacedPattern);
              if (imagePathRegex.hasMatch(fileString)) {
                imageEntity.refered++;
              }
            } else if (extensionName != null &&
                imageFileName != null &&
                fileString.contains(extensionName)) {
              // "nav_arrow_${show ? 'up' : 'down'}.webp"
              var lines = imageStringRegex.allMatches(fileString);
              for (var line in lines) {
                var imgPath = line[0];
                if (imgPath != null && imgPath.contains(extensionName)) {
                  RegExp fuzzyRegex = RegExp(stringInterpolationPattern);
                  imgPath = imgPath.replaceAll(quoteRegex, '');
                  List<String> splitStrings = imgPath.split(fuzzyRegex);
                  if (splitStrings.every((str) => imageName.contains(str))) {
                    imageEntity.refered++;
                  }
                }
              }
            }
          }
        } else {
          printError('Name not exists: ${imageEntity.entity.name}');
        }
      }
    }
  }
  imageEntities.sort((a, b) => b.refered.compareTo(a.refered));
  return imageEntities;
}