spaceship/lib/spaceship/connect_api/models/app_screenshot.rb in fastlane-2.150.0.rc3 vs spaceship/lib/spaceship/connect_api/models/app_screenshot.rb in fastlane-2.150.0.rc4
- old
+ new
@@ -1,8 +1,11 @@
require_relative '../model'
require_relative '../file_uploader'
+require 'spaceship/globals'
+require 'digest/md5'
+
module Spaceship
class ConnectAPI
class AppScreenshot
include Spaceship::ConnectAPI::Model
@@ -13,40 +16,10 @@
attr_accessor :asset_type
attr_accessor :upload_operations
attr_accessor :asset_delivery_state
attr_accessor :uploaded
- # "fileSize": 92542,
- # "fileName": "ftl_3241d62418767c0aa9b889b020c4f8db_45455763d4aaf7b18ee0045bc787f3de.png",
- # "sourceFileChecksum": "c237fd7852ed8f9285d16d9a28d2ec25",
- # "imageAsset": {
- # "templateUrl": "https://is4-ssl.mzstatic.com/image/thumb/Purple113/v4/61/18/68/61186886-b234-5bd0-1f4a-563124f18511/pr_source.png/{w}x{h}bb.{f}",
- # "width": 2048,
- # "height": 2732
- # },
- # "assetToken": "Purple113/v4/61/18/68/61186886-b234-5bd0-1f4a-563124f18511/pr_source.png",
- # "assetType": "SortedJ99ScreenShot",
- # "uploadOperations": null,
- # "assetDeliveryState": {
- # "errors": [],
- # "warnings": null,
- # "state": "COMPLETE"
- # },
- # "uploaded": null
-
- # "assetDeliveryState": {
- # "errors": [],
- # "warnings": null,
- # "state": "AWAITING_UPLOAD"
- # },
-
- # "assetDeliveryState": {
- # "errors": [],
- # "warnings": null,
- # "state": "UPLOAD_COMPLETE"
- # },
-
attr_mapping({
"fileName" => "file_name",
"sourceFileChecksum" => "source_file_checksum",
"imageAsset" => "image_asset",
"assetToken" => "asset_token",
@@ -58,36 +31,59 @@
def self.type
return "appScreenshots"
end
+ def complete?
+ (asset_delivery_state || {})["state"] == "COMPLETE"
+ end
+
#
# API
#
+ #
def self.create(app_screenshot_set_id: nil, path: nil)
require 'faraday'
filename = File.basename(path)
filesize = File.size(path)
- payload = File.binread(path)
+ bytes = File.binread(path)
post_attributes = {
fileSize: filesize,
fileName: filename
}
- post_resp = Spaceship::ConnectAPI.post_app_screenshot(app_screenshot_set_id: app_screenshot_set_id, attributes: post_attributes).to_models.first
+ # Create placeholder
+ screenshot = Spaceship::ConnectAPI.post_app_screenshot(
+ app_screenshot_set_id: app_screenshot_set_id,
+ attributes: post_attributes
+ ).first
- upload_operation = post_resp.upload_operations.first
- Spaceship::ConnectAPI::FileUploader.upload(upload_operation, payload)
+ # Upload the file
+ upload_operations = screenshot.upload_operations
+ Spaceship::ConnectAPI::FileUploader.upload(upload_operations, bytes)
+ # Update file uploading complete
patch_attributes = {
uploaded: true,
- sourceFileChecksum: "checksum-holder"
+ sourceFileChecksum: Digest::MD5.hexdigest(bytes)
}
- Spaceship::ConnectAPI.patch_app_screenshot(app_screenshot_id: post_resp.id, attributes: patch_attributes).to_models.first
+ begin
+ screenshot = Spaceship::ConnectAPI.patch_app_screenshot(
+ app_screenshot_id: screenshot.id,
+ attributes: patch_attributes
+ ).first
+ rescue => error
+ puts("Failed to patch app screenshot. Update may have gone through so verifying") if Spaceship::Globals.verbose?
+
+ screenshot = Spaceship::ConnectAPI.get_app_screenshot(app_screenshot_id: screenshot.id).first
+ raise error unless screenshot.complete?
+ end
+
+ return screenshot
end
def delete!(filter: {}, includes: nil, limit: nil, sort: nil)
Spaceship::ConnectAPI.delete_app_screenshot(app_screenshot_id: id)
end