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