alter vatter
This commit is contained in:
68
addons/rider-plugin/scripts/locator/rider_locator_service.gd
Normal file
68
addons/rider-plugin/scripts/locator/rider_locator_service.gd
Normal file
@@ -0,0 +1,68 @@
|
||||
@tool
|
||||
extends RefCounted
|
||||
class_name RiderLocatorService
|
||||
|
||||
var _installations_found: Array = []
|
||||
# we can keep a reference, it will be freed automatically, when the editor is closed
|
||||
var _rider_locator: RefCounted = null
|
||||
|
||||
# Last value we wrote to / observed for the Rider selector dropdown
|
||||
var _last_selected_index: int = 0
|
||||
|
||||
func start_search() -> void:
|
||||
# use ClassDB to somehow still work without GDExtension part (in older Godot versions)
|
||||
if not ClassDB.class_exists("RiderLocator"):
|
||||
return
|
||||
|
||||
EditorSettingsUtil.show_rider_searching_state()
|
||||
if _rider_locator == null:
|
||||
_rider_locator = ClassDB.instantiate("RiderLocator")
|
||||
_rider_locator.connect("installations_loaded", _on_installations_loaded)
|
||||
_rider_locator.start_search()
|
||||
|
||||
func _on_installations_loaded(array: Array) -> void:
|
||||
_installations_found = array
|
||||
_update_selector()
|
||||
|
||||
func _update_selector() -> void:
|
||||
if _installations_found.is_empty():
|
||||
EditorSettingsUtil.erase_rider_external_editor_setting()
|
||||
return
|
||||
|
||||
var index := _index_for_exec_path(_installations_found)
|
||||
# Set _last_selected_index BEFORE register_rider_installations so the
|
||||
# synchronous settings_changed handler sees a match and skips its work.
|
||||
_last_selected_index = index
|
||||
EditorSettingsUtil.register_rider_installations(_installations_found, index)
|
||||
|
||||
var settings_changed := EditorInterface.get_editor_settings().settings_changed
|
||||
if not settings_changed.is_connected(_on_selection_changed):
|
||||
settings_changed.connect(_on_selection_changed)
|
||||
|
||||
func _index_for_exec_path(installations: Array) -> int:
|
||||
var current := EditorSettingsUtil.get_external_editor_path()
|
||||
if current.is_empty():
|
||||
return 0
|
||||
for i in installations.size():
|
||||
if installations[i].get("path", "") == current:
|
||||
return i + 1
|
||||
return 0
|
||||
|
||||
func _on_selection_changed() -> void:
|
||||
var selected_index := EditorSettingsUtil.get_rider_selector_index()
|
||||
|
||||
# settings_changed fires for every editor setting, this helps to avoid updating on every other changes
|
||||
if selected_index == _last_selected_index:
|
||||
return
|
||||
_last_selected_index = selected_index
|
||||
|
||||
# Index 0 is the placeholder, so the path is left untouched.
|
||||
if selected_index == 0:
|
||||
return
|
||||
|
||||
var installation_index := selected_index - 1
|
||||
if installation_index >= 0 and installation_index < _installations_found.size():
|
||||
var installation = _installations_found[installation_index]
|
||||
var new_path: String = installation.get("path", "")
|
||||
if not new_path.is_empty():
|
||||
EditorSettingsUtil.set_external_editor_path(new_path)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cfsu1rbg0ypem
|
||||
Reference in New Issue
Block a user