save groups meta
This commit is contained in:
		@@ -6,3 +6,5 @@ class_name GroupMetadata
 | 
				
			|||||||
@export var description: String
 | 
					@export var description: String
 | 
				
			||||||
@export var installs: Array[InstallMetadata]
 | 
					@export var installs: Array[InstallMetadata]
 | 
				
			||||||
@export var settings_overrides: Dictionary
 | 
					@export var settings_overrides: Dictionary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signal save_request
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								Classes/GroupsInstallsManager.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Classes/GroupsInstallsManager.gd
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					extends Node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const GROUPS_BASE_FOLDER := "user://groups"
 | 
				
			||||||
 | 
					const METADATA_FILENAME := "meta.tres"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# key: GroupMetadata
 | 
				
			||||||
 | 
					# values: String = UUID
 | 
				
			||||||
 | 
					var groups: Dictionary = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func _ready() -> void:
 | 
				
			||||||
 | 
						DirAccess.make_dir_absolute(GROUPS_BASE_FOLDER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func create_group_folder(gm: GroupMetadata) -> void:
 | 
				
			||||||
 | 
						if gm in groups.values():
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var folder_name := UUID.v4()
 | 
				
			||||||
 | 
						var d := DirAccess.open(GROUPS_BASE_FOLDER)
 | 
				
			||||||
 | 
						d.make_dir(folder_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						groups[gm] = folder_name
 | 
				
			||||||
 | 
						gm.save_request.connect(group_metadata_should_save.bind(gm))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func group_metadata_should_save(gm: GroupMetadata) -> void:
 | 
				
			||||||
 | 
						var path := GROUPS_BASE_FOLDER.path_join(groups[gm]).path_join(METADATA_FILENAME)
 | 
				
			||||||
 | 
						var save_err := ResourceSaver.save(gm, path)
 | 
				
			||||||
 | 
						if save_err != OK:
 | 
				
			||||||
 | 
							print("couldn't save resource, error ", save_err)
 | 
				
			||||||
@@ -22,9 +22,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Note: The code might not be as pretty it could be, since it's written
 | 
					# Note: The code might not be as pretty it could be, since it's written
 | 
				
			||||||
# in a way that maximizes performance. Methods are inlined and loops are avoided.
 | 
					# in a way that maximizes performance. Methods are inlined and loops are avoided.
 | 
				
			||||||
 | 
					class_name UUID
 | 
				
			||||||
const BYTE_MASK: int = 0b11111111
 | 
					const BYTE_MASK: int = 0b11111111
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static func uuidbin():
 | 
					
 | 
				
			||||||
 | 
					static func uuidbin() -> Array:
 | 
				
			||||||
  randomize()
 | 
					  randomize()
 | 
				
			||||||
  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
					  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
				
			||||||
  return [
 | 
					  return [
 | 
				
			||||||
@@ -34,7 +36,7 @@ static func uuidbin():
 | 
				
			|||||||
	randi() & BYTE_MASK, randi() & BYTE_MASK, randi() & BYTE_MASK, randi() & BYTE_MASK,
 | 
						randi() & BYTE_MASK, randi() & BYTE_MASK, randi() & BYTE_MASK, randi() & BYTE_MASK,
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static func uuidbinrng(rng: RandomNumberGenerator):
 | 
					static func uuidbinrng(rng: RandomNumberGenerator) -> Array:
 | 
				
			||||||
  rng.randomize()
 | 
					  rng.randomize()
 | 
				
			||||||
  return [
 | 
					  return [
 | 
				
			||||||
	rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK,
 | 
						rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK,
 | 
				
			||||||
@@ -43,7 +45,7 @@ static func uuidbinrng(rng: RandomNumberGenerator):
 | 
				
			|||||||
	rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK,
 | 
						rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK, rng.randi() & BYTE_MASK,
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static func v4():
 | 
					static func v4() -> String:
 | 
				
			||||||
  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
					  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
				
			||||||
  var b = uuidbin()
 | 
					  var b = uuidbin()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +66,7 @@ static func v4():
 | 
				
			|||||||
	b[10], b[11], b[12], b[13], b[14], b[15]
 | 
						b[10], b[11], b[12], b[13], b[14], b[15]
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static func v4_rng(rng: RandomNumberGenerator):
 | 
					static func v4_rng(rng: RandomNumberGenerator) -> String:
 | 
				
			||||||
  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
					  # 16 random bytes with the bytes on index 6 and 8 modified
 | 
				
			||||||
  var b = uuidbinrng(rng)
 | 
					  var b = uuidbinrng(rng)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,7 @@ func add_new_install() -> void:
 | 
				
			|||||||
			install_item.setup_from_metadata(im)
 | 
								install_item.setup_from_metadata(im)
 | 
				
			||||||
			install_item.edit_item_button_pressed.connect(edit_install.bind(install_item))
 | 
								install_item.edit_item_button_pressed.connect(edit_install.bind(install_item))
 | 
				
			||||||
			group_metadata.installs.append(im)
 | 
								group_metadata.installs.append(im)
 | 
				
			||||||
 | 
								group_metadata.save_request.emit()
 | 
				
			||||||
	, CONNECT_ONE_SHOT)
 | 
						, CONNECT_ONE_SHOT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	install_edit_dialog.show()
 | 
						install_edit_dialog.show()
 | 
				
			||||||
@@ -144,6 +145,7 @@ func setup_rename() -> void:
 | 
				
			|||||||
		func(new_text: String):
 | 
							func(new_text: String):
 | 
				
			||||||
			header_text_label.text = new_text
 | 
								header_text_label.text = new_text
 | 
				
			||||||
			group_metadata.name = new_text
 | 
								group_metadata.name = new_text
 | 
				
			||||||
 | 
								group_metadata.save_request.emit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			reenable.call()
 | 
								reenable.call()
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,8 @@ func get_group_metadata() -> GroupMetadata:
 | 
				
			|||||||
	group_metadata.settings_overrides = override_editor_settings_menu.get_overrides()
 | 
						group_metadata.settings_overrides = override_editor_settings_menu.get_overrides()
 | 
				
			||||||
	group_metadata.name = name_line_edit.text
 | 
						group_metadata.name = name_line_edit.text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						group_metadata.save_request.emit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return group_metadata
 | 
						return group_metadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,8 @@ func add_new_group() -> void:
 | 
				
			|||||||
			group_menu.setup_from_metadata(gm)
 | 
								group_menu.setup_from_metadata(gm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			group_menu.edit_group_button_pressed.connect(edit_group.bind(group_menu))
 | 
								group_menu.edit_group_button_pressed.connect(edit_group.bind(group_menu))
 | 
				
			||||||
 | 
								GroupsInstallsManager.create_group_folder(gm)
 | 
				
			||||||
 | 
								GroupsInstallsManager.group_metadata_should_save(gm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	, CONNECT_ONE_SHOT)
 | 
						, CONNECT_ONE_SHOT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,7 @@ config/icon="res://icon.svg"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
DotEnv="*res://Classes/DotEnv.gd"
 | 
					DotEnv="*res://Classes/DotEnv.gd"
 | 
				
			||||||
ReleasesManager="*res://Classes/ReleasesManager.gd"
 | 
					ReleasesManager="*res://Classes/ReleasesManager.gd"
 | 
				
			||||||
 | 
					GroupsInstallsManager="*res://Classes/GroupsInstallsManager.gd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[display]
 | 
					[display]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user