mirror of
https://github.com/thegatesbrowser/thegates.git
synced 2025-08-25 05:17:25 -04:00
add license, move folders
This commit is contained in:
parent
185cc74060
commit
271c4a46a1
132 changed files with 21 additions and 0 deletions
34
app/scripts/api/analytics/analytics.gd
Normal file
34
app/scripts/api/analytics/analytics.gd
Normal file
|
@ -0,0 +1,34 @@
|
|||
extends Node
|
||||
class_name Analitycs
|
||||
|
||||
@export var api: ApiSettings
|
||||
signal analytics_ready
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
await get_user_id()
|
||||
analytics_ready.emit()
|
||||
|
||||
|
||||
func send_event(body: Dictionary = {}) -> void:
|
||||
var url = api.analytics_event
|
||||
var callback = func(_result, code, _headers, _body):
|
||||
if code != 200: Debug.logclr("Request send_event failed. Code " + str(code), Color.RED)
|
||||
|
||||
var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST)
|
||||
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_event", Color.RED)
|
||||
|
||||
|
||||
func get_user_id() -> void:
|
||||
AnalyticsEvents.user_id = DataSaver.get_string("analytics", "user_id")
|
||||
if not AnalyticsEvents.user_id.is_empty(): return
|
||||
|
||||
var url = api.create_user_id
|
||||
var callback = func(_result, code, _headers, body):
|
||||
if code == 200:
|
||||
AnalyticsEvents.user_id = body.get_string_from_utf8()
|
||||
DataSaver.set_value("analytics", "user_id", AnalyticsEvents.user_id)
|
||||
else: Debug.logclr("Request create_user_id failed. Code " + str(code), Color.RED)
|
||||
|
||||
var err = await Backend.request(url, callback)
|
||||
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request create_user_id", Color.RED)
|
79
app/scripts/api/analytics/analytics_events.gd
Normal file
79
app/scripts/api/analytics/analytics_events.gd
Normal file
|
@ -0,0 +1,79 @@
|
|||
extends Node
|
||||
#class_name AnalyticsEvents
|
||||
|
||||
var user_id := "none"
|
||||
|
||||
|
||||
func base(event_name: String) -> Dictionary:
|
||||
var event = {}
|
||||
event.event_name = event_name
|
||||
event.user_id = user_id
|
||||
return event
|
||||
|
||||
|
||||
# APP
|
||||
|
||||
func app_open() -> Dictionary:
|
||||
return base("application_open")
|
||||
|
||||
|
||||
func heartbeat(time_spend: int) -> Dictionary:
|
||||
var event = base("heartbeat")
|
||||
event.time_spend = time_spend
|
||||
return event
|
||||
|
||||
|
||||
func app_exit(time_spend: int) -> Dictionary:
|
||||
var event = base("application_exit")
|
||||
event.time_spend = time_spend
|
||||
return event
|
||||
|
||||
|
||||
# GATE
|
||||
|
||||
func search(query: String) -> Dictionary:
|
||||
var event = base("search")
|
||||
event.query = query
|
||||
return event
|
||||
|
||||
|
||||
func gate_open(url: String) -> Dictionary:
|
||||
var event = base("gate_open")
|
||||
event.gate_url = url
|
||||
return event
|
||||
|
||||
|
||||
func gate_enter(url: String, download_time: int) -> Dictionary:
|
||||
var event = base("gate_enter")
|
||||
event.gate_url = url
|
||||
event.download_time = download_time
|
||||
return event
|
||||
|
||||
|
||||
func gate_exit(url: String, time_spend: int) -> Dictionary:
|
||||
var event = base("gate_exit")
|
||||
event.gate_url = url
|
||||
event.time_spend = time_spend
|
||||
return event
|
||||
|
||||
|
||||
# BOOKMARK
|
||||
|
||||
func bookmark(url: String) -> Dictionary:
|
||||
var event = base("bookmark")
|
||||
event.gate_url = url
|
||||
return event
|
||||
|
||||
|
||||
func unbookmark(url: String) -> Dictionary:
|
||||
var event = base("unbookmark")
|
||||
event.gate_url = url
|
||||
return event
|
||||
|
||||
|
||||
# ERROR
|
||||
|
||||
func error(msg: String) -> Dictionary:
|
||||
var event = base("error")
|
||||
event.msg = msg
|
||||
return event
|
13
app/scripts/api/analytics/analytics_sender.gd
Normal file
13
app/scripts/api/analytics/analytics_sender.gd
Normal file
|
@ -0,0 +1,13 @@
|
|||
extends Node
|
||||
class_name AnalyticsSender
|
||||
|
||||
var analytics: Analitycs
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
analytics = get_parent()
|
||||
analytics.analytics_ready.connect(start)
|
||||
|
||||
|
||||
func start() -> void:
|
||||
pass
|
37
app/scripts/api/analytics/analytics_sender_app.gd
Normal file
37
app/scripts/api/analytics/analytics_sender_app.gd
Normal file
|
@ -0,0 +1,37 @@
|
|||
extends AnalyticsSender
|
||||
class_name AnalyticsSenderApp
|
||||
|
||||
const HEARTBEAT_DELAY = 60
|
||||
var heartbeat_timer: Timer
|
||||
|
||||
|
||||
func start() -> void:
|
||||
super.start()
|
||||
|
||||
analytics.send_event(AnalyticsEvents.app_open())
|
||||
start_heartbeat()
|
||||
|
||||
# Send latest exit event
|
||||
var json: String = DataSaver.get_string("analytics", "app_exit")
|
||||
if json.is_empty(): return
|
||||
DataSaver.set_value("analytics", "app_exit", "")
|
||||
analytics.send_event(JSON.parse_string(json))
|
||||
|
||||
|
||||
func start_heartbeat() -> void:
|
||||
heartbeat_timer = Timer.new()
|
||||
add_child(heartbeat_timer)
|
||||
heartbeat_timer.timeout.connect(send_hearbeat)
|
||||
heartbeat_timer.start(HEARTBEAT_DELAY)
|
||||
|
||||
|
||||
func send_hearbeat() -> void:
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000)
|
||||
analytics.send_event(AnalyticsEvents.heartbeat(time_spend))
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
# Save to send on open
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000)
|
||||
var event = AnalyticsEvents.app_exit(time_spend)
|
||||
DataSaver.set_value("analytics", "app_exit", JSON.stringify(event))
|
20
app/scripts/api/analytics/analytics_sender_bookmark.gd
Normal file
20
app/scripts/api/analytics/analytics_sender_bookmark.gd
Normal file
|
@ -0,0 +1,20 @@
|
|||
extends AnalyticsSender
|
||||
class_name AnalyticsSenderBookmark
|
||||
|
||||
@export var bookmarks: Bookmarks
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super.start()
|
||||
|
||||
bookmarks.on_star.connect(send_bookmark)
|
||||
bookmarks.on_unstar.connect(send_unbookmark)
|
||||
|
||||
|
||||
func send_bookmark(gate: Gate, featured: bool) -> void:
|
||||
if featured: return
|
||||
analytics.send_event(AnalyticsEvents.bookmark(gate.url))
|
||||
|
||||
|
||||
func send_unbookmark(gate: Gate) -> void:
|
||||
analytics.send_event(AnalyticsEvents.unbookmark(gate.url))
|
12
app/scripts/api/analytics/analytics_sender_error.gd
Normal file
12
app/scripts/api/analytics/analytics_sender_error.gd
Normal file
|
@ -0,0 +1,12 @@
|
|||
extends AnalyticsSender
|
||||
class_name AnalyticsSenderError
|
||||
|
||||
|
||||
func start() -> void:
|
||||
super.start()
|
||||
|
||||
Debug.error.connect(send_error)
|
||||
|
||||
|
||||
func send_error(msg: String) -> void:
|
||||
analytics.send_event(AnalyticsEvents.error(msg))
|
57
app/scripts/api/analytics/analytics_sender_gate.gd
Normal file
57
app/scripts/api/analytics/analytics_sender_gate.gd
Normal file
|
@ -0,0 +1,57 @@
|
|||
extends AnalyticsSender
|
||||
class_name AnalyticsSenderGate
|
||||
|
||||
@export var gate_events: GateEvents
|
||||
|
||||
var gate_open_time: int
|
||||
var gate_url: String
|
||||
|
||||
|
||||
func start() -> void:
|
||||
super.start()
|
||||
|
||||
gate_events.search.connect(send_search)
|
||||
gate_events.open_gate.connect(send_gate_open)
|
||||
gate_events.gate_entered.connect(send_gate_enter)
|
||||
gate_events.exit_gate.connect(send_gate_exit)
|
||||
|
||||
# Send latest exit event
|
||||
var json: String = DataSaver.get_string("analytics", "send_gate_exit")
|
||||
if json.is_empty(): return
|
||||
DataSaver.set_value("analytics", "send_gate_exit", "")
|
||||
analytics.send_event(JSON.parse_string(json))
|
||||
|
||||
|
||||
func send_search(query: String) -> void:
|
||||
if not gate_url.is_empty(): send_gate_exit()
|
||||
|
||||
analytics.send_event(AnalyticsEvents.search(query))
|
||||
|
||||
|
||||
func send_gate_open(url: String) -> void:
|
||||
if not gate_url.is_empty(): send_gate_exit()
|
||||
|
||||
gate_url = url
|
||||
gate_open_time = int(Time.get_ticks_msec() / 1000)
|
||||
analytics.send_event(AnalyticsEvents.gate_open(url))
|
||||
|
||||
|
||||
func send_gate_enter() -> void:
|
||||
var download_time = int(Time.get_ticks_msec() / 1000) - gate_open_time
|
||||
gate_open_time = int(Time.get_ticks_msec() / 1000)
|
||||
analytics.send_event(AnalyticsEvents.gate_enter(gate_url, download_time))
|
||||
|
||||
|
||||
func send_gate_exit() -> void:
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000) - gate_open_time
|
||||
analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend))
|
||||
gate_url = ""
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if gate_url.is_empty(): return
|
||||
|
||||
# Save to send on open
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000) - gate_open_time
|
||||
var event = AnalyticsEvents.gate_exit(gate_url, time_spend)
|
||||
DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event))
|
19
app/scripts/api/backend.gd
Normal file
19
app/scripts/api/backend.gd
Normal file
|
@ -0,0 +1,19 @@
|
|||
extends Node
|
||||
#class_name Backend
|
||||
|
||||
|
||||
func request(url: String, callback: Callable,
|
||||
body: Dictionary = {}, method: int = HTTPClient.METHOD_GET) -> Error:
|
||||
var data = JSON.stringify(body)
|
||||
var headers = []
|
||||
|
||||
var http = HTTPRequest.new()
|
||||
http.use_threads = true
|
||||
add_child(http)
|
||||
|
||||
var err = http.request(url, headers, method, data)
|
||||
var res = await http.request_completed
|
||||
callback.call(res[0], res[1], res[2], res[3])
|
||||
remove_child(http)
|
||||
|
||||
return err
|
25
app/scripts/api/discover_gate.gd
Normal file
25
app/scripts/api/discover_gate.gd
Normal file
|
@ -0,0 +1,25 @@
|
|||
extends Node
|
||||
|
||||
@export var api: ApiSettings
|
||||
@export var gate_events: GateEvents
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
gate_events.gate_config_loaded.connect(send_discover_gate)
|
||||
|
||||
|
||||
func send_discover_gate(c_url: String, c_gate: ConfigGate) -> void:
|
||||
var body = {}
|
||||
body.url = c_url
|
||||
body.title = c_gate.title
|
||||
body.description = c_gate.description
|
||||
body.image = c_gate.image_url
|
||||
body.resource_pack = c_gate.resource_pack_url
|
||||
body.libraries = c_gate.libraries
|
||||
|
||||
var url = api.discover_gate
|
||||
var callback = func(_result, code, _headers, _body):
|
||||
if code != 200: Debug.logclr("Request send_discover_gate failed. Code " + str(code), Color.RED)
|
||||
|
||||
var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST)
|
||||
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_discover_gate", Color.RED)
|
44
app/scripts/api/featured_gates.gd
Normal file
44
app/scripts/api/featured_gates.gd
Normal file
|
@ -0,0 +1,44 @@
|
|||
extends Node
|
||||
|
||||
@export var api: ApiSettings
|
||||
@export var bookmarks: Bookmarks
|
||||
|
||||
var result_str: String = "{}"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
bookmarks.on_ready.connect(on_bookmarks_ready)
|
||||
if bookmarks.is_ready: on_bookmarks_ready()
|
||||
|
||||
|
||||
func on_bookmarks_ready() -> void:
|
||||
if bookmarks.gates.size() > 0: return
|
||||
|
||||
await featured_gates_request()
|
||||
Debug.logclr("======== Featured gates ========", Color.LIGHT_SEA_GREEN)
|
||||
|
||||
var gates = JSON.parse_string(result_str)
|
||||
if gates == null or gates.is_empty():
|
||||
Debug.logclr("No featured gates found", Color.YELLOW)
|
||||
return
|
||||
|
||||
for gate in gates:
|
||||
Debug.logr(gate["url"])
|
||||
star_gate(gate)
|
||||
|
||||
|
||||
func featured_gates_request() -> void:
|
||||
var callback = func(_result, code, _headers, body):
|
||||
if code == 200:
|
||||
result_str = body.get_string_from_utf8()
|
||||
else: Debug.logclr("Featured gates request failed. Code " + str(code), Color.RED)
|
||||
|
||||
var err = await Backend.request(api.featured_gates, callback)
|
||||
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send featured gates request", Color.RED)
|
||||
|
||||
|
||||
func star_gate(gate_d: Dictionary) -> void:
|
||||
var image_path = await FileDownloader.download(gate_d["image"])
|
||||
var gate = Gate.create(gate_d["url"], gate_d["title"], gate_d["description"], image_path, "", "")
|
||||
|
||||
bookmarks.star(gate, true)
|
Loading…
Add table
Add a link
Reference in a new issue