bool ListFile::fileMatchesFilters()

in extensions/standard-processors/processors/ListFile.cpp [78:130]


bool ListFile::fileMatchesFilters(const ListedFile& listed_file) {
  if (ignore_hidden_files_ && utils::file::FileUtils::is_hidden(listed_file.full_file_path)) {
    logger_->log_debug("File '%s' is hidden so it will not be listed", listed_file.full_file_path.string());
    return false;
  }

  if (file_filter_) {
    const auto file_name = listed_file.full_file_path.filename();

    if (!std::regex_match(file_name.string(), *file_filter_)) {
      logger_->log_debug("File '%s' does not match file filter so it will not be listed", listed_file.full_file_path.string());
      return false;
    }
  }

  if (path_filter_) {
    const auto relative_path = std::filesystem::relative(listed_file.full_file_path.parent_path(), input_directory_);
    if (!std::regex_match(relative_path.string(), *path_filter_)) {
      logger_->log_debug("Relative path '%s' does not match path filter so file '%s' will not be listed", relative_path.string(), listed_file.full_file_path.string());
      return false;
    }
  }

  if (minimum_file_age_ || maximum_file_age_) {
    const auto file_age = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - listed_file.getLastModified());

    if (minimum_file_age_ && file_age < *minimum_file_age_) {
      logger_->log_debug("File '%s' does not meet the minimum file age requirement so it will not be listed", listed_file.full_file_path.string());
      return false;
    }

    if (maximum_file_age_ && file_age > *maximum_file_age_) {
      logger_->log_debug("File '%s' does not meet the maximum file age requirement so it will not be listed", listed_file.full_file_path.string());
      return false;
    }
  }

  if (minimum_file_size_ || maximum_file_size_) {
    const auto file_size = utils::file::file_size(listed_file.full_file_path);

    if (minimum_file_size_ && file_size < *minimum_file_size_) {
      logger_->log_debug("File '%s' does not meet the minimum file size requirement so it will not be listed", listed_file.full_file_path.string());
      return false;
    }

    if (maximum_file_size_ && *maximum_file_size_ < file_size) {
      logger_->log_debug("File '%s' does not meet the maximum file size requirement so it will not be listed", listed_file.full_file_path.string());
      return false;
    }
  }

  return true;
}