[ADN / Bitácora] Evolución Progresiva: Sistema de Iconografía Dual (Estado + Semántica)
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# ==========================================================
|
||||
# FILE: fxs/ui_handlers.rb
|
||||
# ==========================================================
|
||||
|
||||
def leer_entrada_simple(prompt)
|
||||
print prompt; $stdout.flush; $stdin.gets.chomp
|
||||
end
|
||||
|
||||
def mostrar_encabezado_app
|
||||
puts "#{NEGRITA}#{CIAN}--- dtic-BKPs - Procesador de Backups #{APP_VER} ---#{RESET}"
|
||||
end
|
||||
|
||||
def editar_item_config(item, type_name)
|
||||
system 'clear' or system 'cls'
|
||||
puts "#{NEGRITA}#{CIAN}--- Editando #{type_name}: #{item[:id]} ---#{RESET}"
|
||||
puts "Deja el campo en blanco para mantener el valor actual."
|
||||
|
||||
item.each do |key, value|
|
||||
next if key == :id # ID no se edita directamente
|
||||
|
||||
if key == :tareas && type_name == "Comando"
|
||||
current_tasks = value.map(&:to_s).join(', ')
|
||||
nuevo_valor_str = leer_entrada_simple("#{AMARILLO}#{key}#{RESET} (IDs de tareas separados por coma) [Actual: #{current_tasks}] > ").strip
|
||||
unless nuevo_valor_str.empty?
|
||||
item[key] = nuevo_valor_str.split(',').map(&:strip).map(&:to_sym).uniq
|
||||
end
|
||||
else
|
||||
tipo = value.is_a?(TrueClass) || value.is_a?(FalseClass) ? "(true/false)" : ""
|
||||
nuevo_valor = leer_entrada_simple("#{AMARILLO}#{key}#{RESET} #{tipo} [Actual: #{value.inspect}] > ").strip
|
||||
unless nuevo_valor.empty?
|
||||
if value.is_a?(Symbol)
|
||||
item[key] = nuevo_valor.to_sym
|
||||
elsif tipo == "(true/false)"
|
||||
item[key] = nuevo_valor.downcase == 'true'
|
||||
else
|
||||
item[key] = nuevo_valor
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
puts "#{ICONO_OK} #{type_name} actualizada."
|
||||
sleep 1
|
||||
end
|
||||
|
||||
def modificar_tareas_y_comandos_menu(tareas_actuales, comandos_actuales, auto_avanzar_actual)
|
||||
loop do
|
||||
system 'clear' or system 'cls'
|
||||
puts "#{NEGRITA}#{CIAN}--- Editor de Tareas y Comandos ---#{RESET}"
|
||||
|
||||
puts "\n#{NEGRITA}Tareas Individuales: #{RESET}"
|
||||
tareas_actuales.each_with_index do |tarea, index|
|
||||
puts "#{AMARILLO}T#{index + 1}.#{RESET} #{tarea[:menu_texto]} (#{AMARILLO}id: :#{tarea[:id]}#{RESET})"
|
||||
end
|
||||
|
||||
puts "\n#{NEGRITA}Comandos: #{RESET}"
|
||||
comandos_actuales.each_with_index do |comando, index|
|
||||
puts "#{AMARILLO}C#{index + 1}.#{RESET} #{comando[:menu_texto]} (#{AMARILLO}id: :#{comando[:id]}#{RESET}, tareas: #{comando[:tareas].join(', ')}#{RESET})"
|
||||
end
|
||||
|
||||
puts "#{CIAN}-------------------------#{RESET}"
|
||||
prompt = "[Tx]=Editar Tarea, [Cx]=Editar Comando, [NT]=Nueva Tarea, [NC]=Nuevo Comando, [BT]=Borrar Tarea, [BC]=Borrar Comando, [G]=Guardar y Volver > "
|
||||
opcion = leer_entrada_simple(prompt).downcase
|
||||
|
||||
case opcion
|
||||
when /^t(\d+)$/
|
||||
index = $1.to_i - 1
|
||||
editar_item_config(tareas_actuales[index], "Tarea") if tareas_actuales[index]
|
||||
when /^c(\d+)$/
|
||||
index = $1.to_i - 1
|
||||
editar_item_config(comandos_actuales[index], "Comando") if comandos_actuales[index]
|
||||
when 'nt'
|
||||
# Generar un ID único para la nueva tarea
|
||||
new_id = "nueva_tarea_#{Time.now.to_i}".to_sym
|
||||
nueva_tarea = {
|
||||
id: new_id,
|
||||
menu_texto: "Nueva Tarea (#{new_id})",
|
||||
tipo_proceso: :rclone_sync,
|
||||
origen: "",
|
||||
destino: "",
|
||||
eliminar_origen: false,
|
||||
sobrescribir_destino: false
|
||||
}
|
||||
editar_item_config(nueva_tarea, "Nueva Tarea")
|
||||
tareas_actuales << nueva_tarea
|
||||
when 'nc'
|
||||
# Generar un ID único para el nuevo comando
|
||||
new_id = "nuevo_comando_#{Time.now.to_i}".to_sym
|
||||
nuevo_comando = {
|
||||
id: new_id,
|
||||
menu_texto: "Nuevo Comando (#{new_id})",
|
||||
tareas: [] # Se pueden añadir tareas después
|
||||
}
|
||||
editar_item_config(nuevo_comando, "Nuevo Comando")
|
||||
comandos_actuales << nuevo_comando
|
||||
when 'bt'
|
||||
index_b = leer_entrada_simple("Número de tarea a borrar (Ej: T1) > ").downcase.gsub('t', '').to_i - 1
|
||||
if tareas_actuales[index_b]
|
||||
puts "#{ICONO_WARN} Borrando tarea '#{tareas_actuales[index_b][:menu_texto]}'."
|
||||
tareas_actuales.delete_at(index_b)
|
||||
sleep 1
|
||||
end
|
||||
when 'bc'
|
||||
index_b = leer_entrada_simple("Número de comando a borrar (Ej: C1) > ").downcase.gsub('c', '').to_i - 1
|
||||
if comandos_actuales[index_b]
|
||||
puts "#{ICONO_WARN} Borrando comando '#{comandos_actuales[index_b][:menu_texto]}'."
|
||||
comandos_actuales.delete_at(index_b)
|
||||
sleep 1
|
||||
end
|
||||
when 'g'
|
||||
guardar_configuracion(tareas_actuales, comandos_actuales, auto_avanzar_actual)
|
||||
return
|
||||
else
|
||||
puts "#{ICONO_ERROR} Opción no válida."
|
||||
sleep 1
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user