deliver/lib/deliver/upload_screenshots.rb in fastlane-2.150.0.rc3 vs deliver/lib/deliver/upload_screenshots.rb in fastlane-2.150.0.rc4

- old
+ new

@@ -1,6 +1,7 @@ require 'spaceship/tunes/tunes' +require 'digest/md5' require_relative 'app_screenshot' require_relative 'module' require_relative 'loader' @@ -89,10 +90,14 @@ # Refresh version localizations localizations = version.get_app_store_version_localizations end + upload_screenshots(screenshots_per_language, localizations) + end + + def upload_screenshots(screenshots_per_language, localizations) # Upload screenshots indized = {} # per language and device type screenshots_per_language.each do |language, screenshots_for_language| # Find localization to upload screenshots to @@ -112,11 +117,17 @@ app_screenshot_sets = localization.get_app_screenshot_sets app_screenshot_sets.each do |app_screenshot_set| app_screenshot_sets_map[app_screenshot_set.screenshot_display_type] = app_screenshot_set # Set initial screnshot count - indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= app_screenshot_set.app_screenshots.size + indized[localization.locale][app_screenshot_set.screenshot_display_type] ||= { + count: app_screenshot_set.app_screenshots.size, + checksums: [] + } + + checksums = app_screenshot_set.app_screenshots.map(&:source_file_checksum).uniq + indized[localization.locale][app_screenshot_set.screenshot_display_type][:checksums] = checksums end UI.message("Uploading #{screenshots_for_language.length} screenshots for language #{language}") screenshots_for_language.each do |screenshot| display_type = screenshot.device_type @@ -131,24 +142,33 @@ set = localization.create_app_screenshot_set(attributes: { screenshotDisplayType: display_type }) app_screenshot_sets_map[display_type] = set - indized[localization.locale][set.screenshot_display_type] = 0 + indized[localization.locale][set.screenshot_display_type] = { + count: 0, + checksums: [] + } end - index = indized[localization.locale][set.screenshot_display_type] + index = indized[localization.locale][set.screenshot_display_type][:count] if index >= 10 - UI.error("Too many screenshots found for device '#{screenshot.formatted_name}' in '#{screenshot.language}', skipping this one (#{screenshot.path})") + UI.error("Too many screenshots found for device '#{screenshot.device_type}' in '#{screenshot.language}', skipping this one (#{screenshot.path})") next end - indized[localization.locale][set.screenshot_display_type] += 1 + bytes = File.binread(screenshot.path) + checksum = Digest::MD5.hexdigest(bytes) + duplicate = indized[localization.locale][set.screenshot_display_type][:checksums].include?(checksum) - # Also.. what is the messages type even for? - UI.message("Uploading '#{screenshot.path}'...") - set.upload_screenshot(path: screenshot.path) + if duplicate + UI.message("Previous uploaded. Skipping '#{screenshot.path}'...") + else + indized[localization.locale][set.screenshot_display_type][:count] += 1 + UI.message("Uploading '#{screenshot.path}'...") + set.upload_screenshot(path: screenshot.path) + end end end UI.success("Successfully uploaded screenshots to App Store Connect") end