add GURT URL support for images
This commit is contained in:
@@ -1,47 +1,61 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
func fetch_image(url: String) -> ImageTexture:
|
func fetch_image(url: String) -> ImageTexture:
|
||||||
var http_request = HTTPRequest.new()
|
|
||||||
add_child(http_request)
|
|
||||||
|
|
||||||
if url.is_empty():
|
if url.is_empty():
|
||||||
return null
|
return null
|
||||||
|
|
||||||
var network_request = NetworkManager.start_request(url, "GET", false)
|
var network_request = NetworkManager.start_request(url, "GET", false)
|
||||||
|
|
||||||
var request_headers = PackedStringArray()
|
var body: PackedByteArray
|
||||||
request_headers.append("User-Agent: " + UserAgent.get_user_agent())
|
var response_code: int
|
||||||
|
var headers: PackedStringArray
|
||||||
var headers_dict = {}
|
|
||||||
headers_dict["User-Agent"] = UserAgent.get_user_agent()
|
|
||||||
NetworkManager.set_request_headers(network_request.id, headers_dict)
|
|
||||||
|
|
||||||
var error = http_request.request(url, request_headers)
|
|
||||||
if error != OK:
|
|
||||||
print("Error making HTTP request: ", error)
|
|
||||||
NetworkManager.fail_request(network_request.id, "HTTP request error: " + str(error))
|
|
||||||
http_request.queue_free()
|
|
||||||
return null
|
|
||||||
|
|
||||||
var response = await http_request.request_completed
|
|
||||||
|
|
||||||
var result = response[0] # HTTPClient.Result
|
|
||||||
var response_code = response[1] # int
|
|
||||||
var headers = response[2] # PackedStringArray
|
|
||||||
var body = response[3] # PackedByteArray
|
|
||||||
|
|
||||||
http_request.queue_free()
|
|
||||||
|
|
||||||
var response_headers = {}
|
var response_headers = {}
|
||||||
for header in headers:
|
|
||||||
var parts = header.split(":", 1)
|
|
||||||
if parts.size() == 2:
|
|
||||||
response_headers[parts[0].strip_edges()] = parts[1].strip_edges()
|
|
||||||
|
|
||||||
if result != HTTPRequest.RESULT_SUCCESS or response_code != 200:
|
if url.begins_with("gurt://"):
|
||||||
print("Failed to fetch image. Result: ", result, " Response code: ", response_code)
|
var gurt_body = await fetch_gurt_resource(url, true)
|
||||||
NetworkManager.complete_request(network_request.id, response_code, "Request failed", response_headers, body.get_string_from_utf8(), body)
|
if gurt_body.is_empty():
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
body = gurt_body
|
||||||
|
response_code = 200
|
||||||
|
headers = PackedStringArray()
|
||||||
|
else:
|
||||||
|
# Handle HTTP/HTTPS URLs
|
||||||
|
var http_request = HTTPRequest.new()
|
||||||
|
add_child(http_request)
|
||||||
|
|
||||||
|
var request_headers = PackedStringArray()
|
||||||
|
request_headers.append("User-Agent: " + UserAgent.get_user_agent())
|
||||||
|
|
||||||
|
var headers_dict = {}
|
||||||
|
headers_dict["User-Agent"] = UserAgent.get_user_agent()
|
||||||
|
NetworkManager.set_request_headers(network_request.id, headers_dict)
|
||||||
|
|
||||||
|
var error = http_request.request(url, request_headers)
|
||||||
|
if error != OK:
|
||||||
|
print("Error making HTTP request: ", error)
|
||||||
|
NetworkManager.fail_request(network_request.id, "HTTP request error: " + str(error))
|
||||||
|
http_request.queue_free()
|
||||||
|
return null
|
||||||
|
|
||||||
|
var response = await http_request.request_completed
|
||||||
|
|
||||||
|
var result = response[0] # HTTPClient.Result
|
||||||
|
response_code = response[1] # int
|
||||||
|
headers = response[2] # PackedStringArray
|
||||||
|
body = response[3] # PackedByteArray
|
||||||
|
|
||||||
|
http_request.queue_free()
|
||||||
|
|
||||||
|
for header in headers:
|
||||||
|
var parts = header.split(":", 1)
|
||||||
|
if parts.size() == 2:
|
||||||
|
response_headers[parts[0].strip_edges()] = parts[1].strip_edges()
|
||||||
|
|
||||||
|
if result != HTTPRequest.RESULT_SUCCESS or response_code != 200:
|
||||||
|
print("Failed to fetch image. Result: ", result, " Response code: ", response_code)
|
||||||
|
NetworkManager.complete_request(network_request.id, response_code, "Request failed", response_headers, body.get_string_from_utf8(), body)
|
||||||
|
return null
|
||||||
|
|
||||||
NetworkManager.complete_request(network_request.id, response_code, "OK", response_headers, body.get_string_from_utf8(), body)
|
NetworkManager.complete_request(network_request.id, response_code, "OK", response_headers, body.get_string_from_utf8(), body)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user