Fix race condition exception by checking badge key exists
Enabling disk_cache can lead to an exception (invalid_index) when changing channel: Invalid get index 'badge_sets' (on base 'Dictionary'). (gift_node.gd:525) We short-circuit the get_badge_mapping (and also, as a side effect, we lower the ciclomatic complexity of the method) so that when there is a missing key the right thing happens. This way we "return early" in the three cases: if it is cached on memory, if it is cached on disk, or if we have to retrieve it from Twitch/HTTPS. Fixes #25
This commit is contained in:
parent
7751bbf853
commit
554e32495e
@ -519,11 +519,15 @@ func get_badge(badge_name : String, channel_id : String = "_global", scale : Str
|
||||
return caches[RequestType.BADGE][channel_id][cachename]
|
||||
|
||||
func get_badge_mapping(channel_id : String = "_global") -> Dictionary:
|
||||
if !caches[RequestType.BADGE_MAPPING].has(channel_id):
|
||||
if caches[RequestType.BADGE_MAPPING].has(channel_id):
|
||||
return caches[RequestType.BADGE_MAPPING][channel_id]
|
||||
|
||||
var filename : String = disk_cache_path + "/" + RequestType.keys()[RequestType.BADGE_MAPPING] + "/" + channel_id + ".json"
|
||||
if (disk_cache && FileAccess.file_exists(filename)):
|
||||
caches[RequestType.BADGE_MAPPING][channel_id] = JSON.parse_string(FileAccess.get_file_as_string(filename))["badge_sets"]
|
||||
else:
|
||||
var cache = JSON.parse_string(FileAccess.get_file_as_string(filename))
|
||||
if "badge_sets" in cache:
|
||||
return cache["badge_sets"]
|
||||
|
||||
var request : HTTPRequest = HTTPRequest.new()
|
||||
add_child(request)
|
||||
request.request("https://api.twitch.tv/helix/chat/badges" + ("/global" if channel_id == "_global" else "?broadcaster_id=" + channel_id), [USER_AGENT, "Authorization: Bearer " + token["access_token"], "Client-Id:" + client_id, "Content-Type: application/json"], HTTPClient.METHOD_GET)
|
||||
|
Loading…
x
Reference in New Issue
Block a user