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)
1010signal patch_data_update (data )
1111signal delete_data_update (data )
1212
13+ signal once_successful (dataSnapshot )
14+ signal once_failed ()
15+
1316signal push_successful ()
1417signal push_failed ()
1518
19+
1620const ORDER_BY : String = "orderBy"
1721const LIMIT_TO_FIRST : String = "limitToFirst"
1822const LIMIT_TO_LAST : String = "limitToLast"
@@ -21,6 +25,7 @@ const END_AT : String = "endAt"
2125const EQUAL_TO : String = "equalTo"
2226
2327var _pusher : HTTPRequest
28+ var _getter : HTTPRequest
2429var _listener : Node
2530var _store : FirebaseDatabaseStore
2631var _auth : Dictionary
@@ -29,6 +34,7 @@ var _filter_query : Dictionary
2934var _db_path : String
3035var _cached_filter : String
3136var _push_queue : Array = []
37+ var _get_queue : Array = []
3238var _update_queue : Array = []
3339var _delete_queue : Array = []
3440var _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+
6780func 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