Install a moduli(5) manual page.
[dragonfly.git] / contrib / bsdinstaller-1.1.6 / src / backend / lua / configure / menu / 500_install_packages.lua
1 -- $Id: 500_install_packages.lua,v 1.7 2005/04/04 20:38:50 cpressey Exp $
2
3 require "cmdchain"
4 require "package"
5 require "storage_ui"
6
7 local num_keys = function(tab)
8         local k, v
9         local i = 0
10         for k, v in tab do i = i + 1 end
11         return i
12 end
13
14 local install_packages = function()
15         local base = App.state.target:get_base()
16         local pkg_list = Package.list_all("")
17         local ok, i, pkg_name, selected
18         local sel_pkgs = {}
19
20         for i, pkg_name in pkg_list do
21                 if not Package.exists(base, pkg_name) then
22                         sel_pkgs[pkg_name] = false -- but present...
23                 end
24         end
25
26         ok, sel_pkgs = StorageUI.select_packages{
27             name = _("Select Packages"),
28             short_desc = _("Select the packages you wish to install from " ..
29                             "the LiveCD onto the HDD."),
30             checkbox_name = _("Install?"),
31             ok_name = _("Install these Packages"),
32             cancel_name = _("Cancel"),
33
34             sel_pkgs = sel_pkgs
35         }
36
37         if ok then
38                 local cmds = CmdChain.new()
39                 local pkg_seen = {}
40                 local pkg_done = {}
41                 local pkg_extra = ""
42                 local n, i = 0, 0
43                 local pr = App.ui:new_progress_bar{
44                     title = _("Calculating package dependencies...")
45                 }
46
47                 for pkg_name, selected in sel_pkgs do
48                         if selected then
49                                 n = n + 1
50                         end
51                 end
52
53                 pr:start()
54                 for pkg_name, selected in sel_pkgs do
55                         if selected then
56                                 Package.cmds_copy(
57                                     base, cmds, pkg_name, pkg_seen, pkg_done
58                                 )
59                                 i = i + 1
60                                 pr:set_amount((i * 100) / n)
61                                 pr:update()
62                         end
63                 end
64                 pr:stop()
65
66                 for pkg_name, selected in pkg_seen do
67                         if not sel_pkgs[pkg_name] then
68                                 pkg_extra = pkg_extra .. pkg_name .. "\n"
69                         end
70                 end
71
72                 if pkg_extra ~= "" then
73                         if not App.ui:confirm(_(
74                                 "The following packages are required to " ..
75                                 "support the packages you selected, and " ..
76                                 "will also be installed:\n\n%s\n" ..
77                                 "Is this acceptable?", pkg_extra
78                             )) then
79                                 return
80                         end
81                 end
82
83                 if cmds:execute() then
84                         App.ui:inform(_(
85                             "%d/%d packages were successfully installed!",
86                             num_keys(pkg_done), num_keys(pkg_seen)
87                         ))
88                 else
89                         App.ui:inform(_(
90                             "Errors occurred while installing packages. " ..
91                             "Some packages may not have been " ..
92                             "successfully installed."
93                         ))
94                 end
95         end
96 end
97
98 return {
99     name = _("Install Packages"),
100     effect = function()
101         install_packages()
102         return Menu.CONTINUE
103     end
104 }