class EL_STANDARD_REMOVE_DATA_APP
Client examples: COMPILED_CLASSES
Standard application to prompt user to remove (current) application data and configuration files directories for all users. Usually called from DEBIAN/prerm script with root permissions.
note
	description: "[
		Standard application to prompt user to remove (current) application data and configuration files
		directories for all users. Usually called from DEBIAN/prerm script with root permissions.
	]"
	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"
	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-01-11 14:46:09 GMT (Thursday 11th January 2024)"
	revision: "13"
		
		class
	EL_STANDARD_REMOVE_DATA_APP
inherit
	EL_APPLICATION
		redefine
			option_name
		end
	EL_MODULE_SYSTEM;	EL_MODULE_OS; EL_MODULE_USER_INPUT
	EL_SHARED_APPLICATION_LIST
		export
			{ANY} Application_list
		end
	EL_SHARED_DIRECTORY
		rename
			Directory as OS_directory
		end
	EL_SHARED_WORD
	EL_SHARED_UNINSTALL_TEXTS
	EL_APPLICATION_CONSTANTS
create
	make
feature {EL_MULTI_APPLICATION_ROOT} -- Initiliazation
	initialize
			--
		do
		end
feature -- Basic operations
	run
			--
		require else
			has_main_application: Application_list.has_main
		local
			user_agreed: BOOLEAN
		do
			lio.put_string (Confirmation_prompt + ": ")
			user_agreed := User_input.entered_letter (Word.first_letter_yes)
			lio.put_new_line
			if user_agreed then
				across System.user_permutation_list (Directory.app_all_list) as list loop
					remove_directory (list.item)
				end
			end
		end
feature {NONE} -- Implementation
	remove_directory (path: DIR_PATH)
		-- remove existing directory and one above if it's empty and matches company name
		-- 	.config/<company name>
		-- 	.<company name>
		local
			parent_base: ZSTRING
		do
			OS.delete_tree (path)
			if attached path.parent as parent then
				parent_base := parent.base; parent_base.prune_all_leading ('.')
				if parent_base ~ Build_info.company and then OS_directory.named (parent).is_empty then
					OS.delete_tree (parent)
				end
			end
		end
feature {EL_UNINSTALL_SCRIPT_I} -- String constants
	Confirmation_prompt: ZSTRING
		once
			Result := Text.remove_all_data_prompt #$ [Application_list.Main_launcher.name]
		end
feature {NONE} -- Application constants
	Description: ZSTRING
		once
			Result := Text.remove_all_data_prompt.substring_to ('(')
			Result.right_adjust
		end
	Option_name: IMMUTABLE_STRING_8
		once
			Result := Standard_option.remove_data
		end
end