Skip to content

Commit b198bd8

Browse files
committed
Update for once functionality
1 parent 0bc1b2f commit b198bd8

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

addons/godot-firebase/database/database.gd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,17 @@ func _on_FirebaseAuth_logout() -> void:
4141

4242
func get_database_reference(path : String, filter : Dictionary = {}) -> FirebaseDatabaseReference:
4343
var firebase_reference : FirebaseDatabaseReference = FirebaseDatabaseReference.new()
44+
var getter := HTTPRequest.new()
45+
getter.use_threads = true
4446
var pusher : HTTPRequest = HTTPRequest.new()
45-
Utilities.fix_http_request(pusher)
4647
pusher.use_threads = true
4748
var listener : Node = Node.new()
4849
listener.set_script(load("res://addons/http-sse-client/HTTPSSEClient.gd"))
4950
var store : FirebaseDatabaseStore = FirebaseDatabaseStore.new()
5051
firebase_reference.set_db_path(path, filter)
5152
firebase_reference.set_auth_and_config(_auth, _config)
5253
firebase_reference.set_pusher(pusher)
54+
firebase_reference.set_getter(getter)
5355
firebase_reference.set_listener(listener)
5456
firebase_reference.set_store(store)
5557
add_child(firebase_reference)

addons/godot-firebase/database/reference.gd

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
## @meta-authors TODO
2-
## @meta-version 2.3
1+
## @meta-authors BackAt50Ft
2+
## @meta-version 2.4
33
## A reference to a location in the Realtime Database.
44
## Documentation TODO.
55
@tool
@@ -10,9 +10,13 @@ signal new_data_update(data)
1010
signal patch_data_update(data)
1111
signal delete_data_update(data)
1212

13+
signal once_successful(dataSnapshot)
14+
signal once_failed()
15+
1316
signal push_successful()
1417
signal push_failed()
1518

19+
1620
const ORDER_BY : String = "orderBy"
1721
const LIMIT_TO_FIRST : String = "limitToFirst"
1822
const LIMIT_TO_LAST : String = "limitToLast"
@@ -21,6 +25,7 @@ const END_AT : String = "endAt"
2125
const EQUAL_TO : String = "equalTo"
2226

2327
var _pusher : HTTPRequest
28+
var _getter : HTTPRequest
2429
var _listener : Node
2530
var _store : FirebaseDatabaseStore
2631
var _auth : Dictionary
@@ -29,6 +34,7 @@ var _filter_query : Dictionary
2934
var _db_path : String
3035
var _cached_filter : String
3136
var _push_queue : Array = []
37+
var _get_queue : Array = []
3238
var _update_queue : Array = []
3339
var _delete_queue : Array = []
3440
var _can_connect_to_host : bool = false
@@ -64,6 +70,13 @@ func set_pusher(pusher_ref : HTTPRequest) -> void:
6470
add_child(_pusher)
6571
_pusher.request_completed.connect(on_push_request_complete)
6672

73+
func set_getter(getter_ref : HTTPRequest) -> void:
74+
if !_getter:
75+
_getter = getter_ref
76+
add_child(_getter)
77+
_getter.request_completed.connect(on_get_request_complete)
78+
79+
6780
func set_listener(listener_ref : Node) -> void:
6881
if !_listener:
6982
_listener = listener_ref
@@ -126,6 +139,16 @@ func delete(reference : String) -> void:
126139
else:
127140
_delete_queue.append(reference)
128141

142+
#
143+
# Gets a data snapshot once at the position passed in
144+
#
145+
func once(reference : String) -> void:
146+
if _getter.get_http_client_status() == HTTPClient.STATUS_DISCONNECTED:
147+
var ref_pos = _get_list_url() + _db_path + _separator + reference + _get_remaining_path()
148+
_getter.request(ref_pos, _headers, HTTPClient.METHOD_GET, "")
149+
else:
150+
_get_queue.append(reference)
151+
129152
#
130153
# Returns a deep copy of the current local copy of the data stored at this reference in the Firebase
131154
# Realtime Database.
@@ -204,3 +227,15 @@ func on_push_request_complete(result : int, response_code : int, headers : Packe
204227

205228
if _delete_queue.size() > 0:
206229
delete(_delete_queue.pop_front())
230+
231+
func on_get_request_complete(result : int, response_code : int, headers : PackedStringArray, body : PackedByteArray) -> void:
232+
if response_code == HTTPClient.RESPONSE_OK:
233+
var bod = Utilities.get_json_data(body)
234+
once_successful.emit(bod)
235+
else:
236+
once_failed.emit()
237+
238+
# handle queued operations
239+
if _get_queue.size() > 0:
240+
once(_get_queue.pop_front())
241+

0 commit comments

Comments
 (0)