deliver/lib/deliver/upload_screenshots.rb in fastlane-2.152.0 vs deliver/lib/deliver/upload_screenshots.rb in fastlane-2.153.0
- old
+ new
@@ -10,13 +10,11 @@
class UploadScreenshots
def upload(options, screenshots)
return if options[:skip_screenshots]
return if options[:edit_live]
- legacy_app = options[:app]
- app_id = legacy_app.apple_id
- app = Spaceship::ConnectAPI::App.get(app_id: app_id)
+ app = options[:app]
platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
version = app.get_edit_app_store_version(platform: platform)
UI.user_error!("Could not find a version to edit for app '#{app.name}' for '#{platform}'") unless version
@@ -26,51 +24,11 @@
screenshots_per_language = screenshots.group_by(&:language)
localizations = version.get_app_store_version_localizations
if options[:overwrite_screenshots]
- # Get localizations on version
- localizations.each do |localization|
- # Only delete screenshots if trying to upload
- next unless screenshots_per_language.keys.include?(localization.locale)
-
- # Iterate over all screenshots for each set and delete
- screenshot_sets = localization.get_app_screenshot_sets
-
- # Multi threading delete on single localization
- threads = []
- errors = []
-
- screenshot_sets.each do |screenshot_set|
- UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
- screenshot_set.app_screenshots.each do |screenshot|
- UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
- threads << Thread.new do
- begin
- screenshot.delete!
- UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
- rescue => error
- UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
- errors << error
- end
- end
- end
- end
-
- sleep(1) # Feels bad but sleeping a bit to let the threads catchup
-
- unless threads.empty?
- Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
- threads.each(&:join)
- Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
- end
-
- # Crash if any errors happen while deleting
- errors.each do |error|
- UI.error(error.message)
- end
- end
+ delete_screenshots(localizations, screenshots_per_language)
end
# Finding languages to enable
languages = screenshots_per_language.keys
locales_to_enable = languages - localizations.map(&:locale)
@@ -91,9 +49,82 @@
# Refresh version localizations
localizations = version.get_app_store_version_localizations
end
upload_screenshots(screenshots_per_language, localizations, options)
+ end
+
+ def delete_screenshots(localizations, screenshots_per_language, tries: 5)
+ tries -= 1
+
+ # Get localizations on version
+ localizations.each do |localization|
+ # Only delete screenshots if trying to upload
+ next unless screenshots_per_language.keys.include?(localization.locale)
+
+ # Iterate over all screenshots for each set and delete
+ screenshot_sets = localization.get_app_screenshot_sets
+
+ # Multi threading delete on single localization
+ threads = []
+ errors = []
+
+ screenshot_sets.each do |screenshot_set|
+ UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
+ screenshot_set.app_screenshots.each do |screenshot|
+ UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
+ threads << Thread.new do
+ begin
+ screenshot.delete!
+ UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
+ rescue => error
+ UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
+ errors << error
+ end
+ end
+ end
+ end
+
+ sleep(1) # Feels bad but sleeping a bit to let the threads catchup
+
+ unless threads.empty?
+ Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
+ threads.each(&:join)
+ Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
+ end
+
+ # Crash if any errors happen while deleting
+ errors.each do |error|
+ UI.error(error.message)
+ end
+ end
+
+ # Verify all screenshots have been deleted
+ # Sometimes API requests will fail but screenshots will still be deleted
+ count = count_screenshots(localizations)
+ UI.important("Number of screenshots not deleted: #{count}")
+ if count > 0
+ if tries.zero?
+ UI.user_error!("Failed verification of all screenshots deleted... #{count} screenshot(s) still exist")
+ else
+ UI.error("Failed to delete all screenshots... Tries remaining: #{tries}")
+ delete_screenshots(localizations, screenshots_per_language, tries: tries)
+ end
+ else
+ UI.message("Successfully deleted all screenshots")
+ end
+ end
+
+ def count_screenshots(localizations)
+ count = 0
+ localizations.each do |localization|
+ screenshot_sets = localization.get_app_screenshot_sets
+ screenshot_sets.each do |screenshot_set|
+ count += screenshot_set.app_screenshots.size
+ end
+ end
+
+ return count
end
def upload_screenshots(screenshots_per_language, localizations, options)
# Check if should wait for processing
# Default to waiting if submitting for review (since needed for submission)