Class: Factorix::CLI::Commands::MOD::Uninstall
- Defined in:
- lib/factorix/cli/commands/mod/uninstall.rb
Overview
Uninstall MODs from MOD directory
Instance Method Summary collapse
-
#call(mod_specs: [], all: false) ⇒ void
Execute the uninstall command.
Methods inherited from Base
backup_support!, confirmable!, inherited, require_game_stopped!
Instance Method Details
#call(mod_specs: [], all: false) ⇒ void
This method returns an undefined value.
Execute the uninstall command
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/factorix/cli/commands/mod/uninstall.rb', line 36 def call(mod_specs: [], all: false, **) # Validate arguments if all && mod_specs.any? raise InvalidArgumentError, "Cannot specify MOD names with --all option" end unless all || mod_specs.any? raise InvalidArgumentError, "Must specify MOD names or use --all option" end # Load current state (without validation to allow fixing issues) mod_list = MODList.load presenter = Progress::Presenter.new(title: "\u{1F50D}\u{FE0E} Scanning MOD(s)", output: err) handler = Progress::ScanHandler.new(presenter) installed_mods = InstalledMOD.all(handler:) graph = Dependency::Graph::Builder.build(installed_mods:, mod_list:) # Determine uninstall targets uninstall_targets = if all plan_uninstall_all(graph, installed_mods) else # Parse mod specs to extract MOD and optional version mod_specs.map {|spec| parse_mod_spec(spec) } end targets_to_uninstall = plan_uninstall(uninstall_targets, graph, installed_mods, all:) if all expansions_to_disable = graph.nodes.count {|node| mod = node.mod mod.expansion? && mod_list.exist?(mod) && mod_list.enabled?(mod) } if targets_to_uninstall.empty? && expansions_to_disable.zero? say "No MOD(s) to uninstall or disable", prefix: :info return end elsif targets_to_uninstall.empty? say "No MOD(s) to uninstall", prefix: :info return end show_plan(targets_to_uninstall, all:, graph:, mod_list:) return unless confirm?("Do you want to uninstall these MOD(s)?") execute_uninstall(targets_to_uninstall, installed_mods, mod_list) disable_expansion_mods(graph, mod_list) if all backup_if_exists(runtime.mod_list_path) mod_list.save say "Uninstalled #{targets_to_uninstall.size} MOD(s)", prefix: :success say "Saved mod-list.json", prefix: :success end |