lib/spaceship/tunes/app_version.rb in spaceship-0.37.0 vs lib/spaceship/tunes/app_version.rb in spaceship-0.38.0

- old
+ new

@@ -166,18 +166,17 @@ end # @param application (Spaceship::Tunes::Application) The app this version is for # @param app_id (String) The unique Apple ID of this app # @param is_live (Boolean) - def find(application, app_id, is_live) + def find(application, app_id, is_live, platform: nil) # we only support applications - platform = Spaceship::Tunes::AppVersionCommon.find_platform(application.raw_data['versionSets']) - raise "We do not support BUNDLE types right now" if platform['type'] == 'BUNDLE' + raise "We do not support BUNDLE types right now" if application.type == 'BUNDLE' # too bad the "id" field is empty, it forces us to make more requests to the server # these could also be cached - attrs = client.app_version(app_id, is_live) + attrs = client.app_version(app_id, is_live, platform: platform) return nil unless attrs attrs[:application] = application attrs[:is_live] = is_live @@ -378,20 +377,21 @@ # Uploads or removes a screenshot # @param icon_path (String): The path to the screenshot. Use nil to remove it # @param sort_order (Fixnum): The sort_order, from 1 to 5 # @param language (String): The language for this screenshot # @param device (string): The device for this screenshot - def upload_screenshot!(screenshot_path, sort_order, language, device) + # @param is_messages (Bool): True if the screenshot is for iMessage + def upload_screenshot!(screenshot_path, sort_order, language, device, is_messages) raise "sort_order must be higher than 0" unless sort_order > 0 raise "sort_order must not be > 5" if sort_order > 5 # this will also check both language and device parameters - device_lang_screenshots = screenshots_data_for_language_and_device(language, device)["value"] + device_lang_screenshots = screenshots_data_for_language_and_device(language, device, is_messages)["value"] existing_sort_orders = device_lang_screenshots.map { |s| s["value"]["sortOrder"] } if screenshot_path # adding / replacing upload_file = UploadFile.from_path screenshot_path - screenshot_data = client.upload_screenshot(self, upload_file, device) + screenshot_data = client.upload_screenshot(self, upload_file, device, is_messages) # Since October 2016 we also need to pass the size, height, width and checksum # otherwise iTunes Connect validation will fail at a later point new_screenshot = { "value" => { @@ -409,11 +409,12 @@ # We only set this, if we actually successfully uploaded a new screenshot # for this device / language combination # if this value is not set, iTC will fallback to another device type for screenshots language_details = raw_data_details.find { |d| d["language"] == language }["displayFamilies"]["value"] device_language_details = language_details.find { |display_family| display_family['name'] == device } - device_language_details["scaled"]["value"] = false + scaled_key = is_messages ? "messagesScaled" : "scaled" + device_language_details[scaled_key]["value"] = false if existing_sort_orders.include?(sort_order) # replace device_lang_screenshots[existing_sort_orders.index(sort_order)] = new_screenshot else # add device_lang_screenshots << new_screenshot @@ -445,11 +446,11 @@ # @param device (String): The device for this screenshot # @param timestamp (String): The optional timestamp of the screenshot to grab def upload_trailer!(trailer_path, language, device, timestamp = "05.00", preview_image_path = nil) raise "No app trailer supported for iphone35" if device == 'iphone35' - device_lang_trailer = trailer_data_for_language_and_device(language, device) + device_lang_trailer = trailer_data_for_language_and_device(language, device, is_messages) if trailer_path # adding / replacing trailer / replacing preview raise "Invalid timestamp #{timestamp}" if (timestamp =~ /^[0-9][0-9].[0-9][0-9]$/).nil? if preview_image_path check_preview_screenshot_resolution(preview_image_path, device) @@ -552,12 +553,13 @@ transit_app_file = raw_data["transitAppFile"]["value"] @transit_app_file = nil @transit_app_file = Tunes::TransitAppFile.factory(transit_app_file) if transit_app_file end - def screenshots_data_for_language_and_device(language, device) - container_data_for_language_and_device("screenshots", language, device) + def screenshots_data_for_language_and_device(language, device, is_messages) + data_field = is_messages ? "messagesScreenshots" : "screenshots" + container_data_for_language_and_device(data_field, language, device) end def trailer_data_for_language_and_device(language, device) container_data_for_language_and_device("appTrailers", language, device) end @@ -580,11 +582,11 @@ def setup_screenshots @screenshots = {} raw_data_details.each do |row| # Now that's one language right here - @screenshots[row['language']] = setup_screenshots_for(row) + @screenshots[row['language']] = setup_screenshots_for(row) + setup_messages_screenshots_for(row) end end # generates the nested data structure to represent screenshots def setup_screenshots_for(row) @@ -624,10 +626,38 @@ # }, # "isEditable": true, # "isRequired": false, # "errorKeys": null # }], + # "messagesScaled": { + # "value": false, + # "isEditable": false, + # "isRequired": false, + # "errorKeys": null + # }, + # "messagesScreenshots": { + # "value": [{ + # "value": { + # "assetToken": "Purple62/v4/08/0a/04/080a0430-c2cc-2577-f491-9e0a09c58ffe/mzl.pbcpzqyg.jpg", + # "sortOrder": 1, + # "type": null, + # "originalFileName": "ios-414-1.jpg" + # }, + # "isEditable": true, + # "isRequired": false, + # "errorKeys": null + # }, { + # "value": { + # "assetToken": "Purple71/v4/de/81/aa/de81aa10-64f6-332e-c974-9ee46adab675/mzl.cshkjvwl.jpg", + # "sortOrder": 2, + # "type": null, + # "originalFileName": "ios-414-2.jpg" + # }, + # "isEditable": true, + # "isRequired": false, + # "errorKeys": null + # }], # "isEditable": true, # "isRequired": false, # "errorKeys": null # }, # "trailer": { @@ -637,9 +667,34 @@ # "errorKeys": null # } # } display_family.fetch("screenshots", {}).fetch("value", []).each do |screenshot| + screenshot_data = screenshot["value"] + data = { + device_type: display_family['name'], + language: row["language"] + }.merge(screenshot_data) + result << Tunes::AppScreenshot.factory(data) + end + end + + return result + end + + # generates the nested data structure to represent screenshots + def setup_messages_screenshots_for(row) + return [] if row.nil? || row["displayFamilies"].nil? + + display_families = row.fetch("displayFamilies", {}).fetch("value", nil) + return [] unless display_families + + result = [] + + display_families.each do |display_family| + display_family_screenshots = display_family.fetch("messagesScreenshots", {}) + next unless display_family_screenshots + display_family_screenshots.fetch("value", []).each do |screenshot| screenshot_data = screenshot["value"] data = { device_type: display_family['name'], language: row["language"] }.merge(screenshot_data)