batch_updater.lua

196 lines ยท 7.3 KB

Open raw

eHydra Batch Updater

Copy & run

wget https://perlytiara.github.io/turtles.tips/raw/programs/perlytiara/eHydra_wip/batch_updater.lua
1-- eHydra Batch Updater
2-- Updates multiple programs from a configuration file or predefined list
3
4local baseUrl = "https://raw.githubusercontent.com/perlytiara/CC-Tweaked-TurtsAndComputers/refs/heads/main/programs/perlytiara/"
5
6-- Predefined programs to update - organized by folders
7local programs = {
8 -- eHydra Management System (ALL FILES)
9 {url = baseUrl .. "eHydra/autoupdater.lua", folder = "eHydra", name = "autoupdater"},
10 {url = baseUrl .. "eHydra/batch_updater.lua", folder = "eHydra", name = "batch_updater"},
11 {url = baseUrl .. "eHydra/init.lua", folder = "eHydra", name = "init"},
12 {url = baseUrl .. "eHydra/turtle_deployer.lua", folder = "eHydra", name = "turtle_deployer"},
13 {url = baseUrl .. "eHydra/startup.lua", folder = "eHydra", name = "startup"},
14 {url = baseUrl .. "eHydra/self_update.lua", folder = "eHydra", name = "self_update"},
15 {url = baseUrl .. "eHydra/restore_backups.lua", folder = "eHydra", name = "restore_backups"},
16 {url = baseUrl .. "eHydra/turtle_client.lua", folder = "eHydra", name = "turtle_client"},
17 {url = baseUrl .. "eHydra/mining_setup.lua", folder = "eHydra", name = "mining_setup"},
18 {url = baseUrl .. "eHydra/launcher.lua", folder = "eHydra", name = "launcher"},
19 {url = baseUrl .. "eHydra/README.md", folder = "eHydra", name = "README"},
20
21 -- Stairs programs
22 {url = baseUrl .. "stairs/multi.lua", folder = "stairs", name = "multi"},
23 {url = baseUrl .. "stairs/client.lua", folder = "stairs", name = "client"},
24 {url = baseUrl .. "stairs/stairs.lua", folder = "stairs", name = "stairs"},
25 {url = baseUrl .. "stairs/download.lua", folder = "stairs", name = "download"},
26 {url = baseUrl .. "stairs/startup.lua", folder = "stairs", name = "startup"},
27
28 -- Mining programs
29 {url = baseUrl .. "tClear/tClear.lua", folder = "tClear", name = "tClear"},
30 {url = baseUrl .. "tClear/tClearChunky.lua", folder = "tClear", name = "tClearChunky"},
31 {url = baseUrl .. "tClear/AdvancedMiningTurtle.lua", folder = "tClear", name = "AdvancedMiningTurtle"},
32 {url = baseUrl .. "tClear/AdvancedChunkyTurtle.lua", folder = "tClear", name = "AdvancedChunkyTurtle"},
33
34 -- Quarry programs
35 {url = baseUrl .. "quarry/quarry.lua", folder = "quarry", name = "quarry"},
36 {url = baseUrl .. "quarry/quarry_multi.lua", folder = "quarry", name = "quarry_multi"},
37
38 -- GPS programs
39 {url = baseUrl .. "gps/gps.lua", folder = "gps", name = "gps"},
40 {url = baseUrl .. "gps/gps_host.lua", folder = "gps", name = "gps_host"},
41
42 -- Epic Mining programs
43 {url = baseUrl .. "EpicMiningTurtle/EpicMiningTurtle_remote.lua", folder = "EpicMiningTurtle", name = "EpicMiningTurtle_remote"},
44
45 -- Platform and building programs
46 {url = baseUrl .. "tPlatform/tPlatform_fixed.lua", folder = "tPlatform", name = "tPlatform_fixed"},
47 {url = baseUrl .. "dome_tunnels/dome_tunnels.lua", folder = "dome_tunnels", name = "dome_tunnels"},
48 {url = baseUrl .. "room_carver.lua", folder = "building", name = "room_carver"},
49 {url = baseUrl .. "entrance_carver.lua", folder = "building", name = "entrance_carver"},
50}
51
52-- Function to ensure directory exists
53local function ensureDirectory(path)
54 if not fs.exists(path) then
55 fs.makeDir(path)
56 return true
57 end
58 return false
59end
60
61-- Ensure programs directory exists
62ensureDirectory("programs")
63
64-- Count unique folders for display
65local folders = {}
66for _, program in ipairs(programs) do
67 folders[program.folder] = true
68end
69local folderCount = 0
70for _ in pairs(folders) do
71 folderCount = folderCount + 1
72end
73
74print("eHydra Batch Updater v2.0")
75print("=========================")
76print("Repository: " .. baseUrl)
77print("Programs to update: " .. #programs .. " across " .. folderCount .. " folders")
78print("๐Ÿ“ Organized by program categories")
79print()
80
81-- Ask for confirmation
82write("Proceed with batch update? (y/n) [y]: ")
83local confirm = string.lower(read())
84if confirm == "n" then
85 print("Update cancelled.")
86 return
87end
88
89print()
90print("๐Ÿš€ Starting batch update...")
91
92local success = 0
93local failed = 0
94local startTime = os.clock()
95
96for i, program in ipairs(programs) do
97 local folderPath = "programs/" .. program.folder
98 local fileExtension = program.name == "README" and ".md" or ".lua"
99 local programPath = folderPath .. "/" .. program.name .. fileExtension
100
101 print("[" .. i .. "/" .. #programs .. "] " .. program.folder .. "/" .. program.name .. fileExtension .. "...")
102
103 -- Ensure folder exists
104 if ensureDirectory(folderPath) then
105 print(" ๐Ÿ“ Created folder: " .. program.folder)
106 end
107
108 -- Delete existing file
109 if fs.exists(programPath) then
110 fs.delete(programPath)
111 end
112
113 -- Download with timeout handling
114 local response = http.get(program.url, nil, nil, 10) -- 10 second timeout
115 if response then
116 -- Check if response is valid
117 local content = response.readAll()
118 response.close()
119
120 if content and content ~= "" then
121 local file = fs.open(programPath, "w")
122 if file then
123 file.write(content)
124 file.close()
125 print(" โœ… " .. program.folder .. "/" .. program.name .. fileExtension .. " - downloaded " .. #content .. " bytes")
126 success = success + 1
127 else
128 print(" โŒ " .. program.name .. " - failed to write file")
129 failed = failed + 1
130 end
131 else
132 print(" โŒ " .. program.name .. " - empty response")
133 failed = failed + 1
134 end
135 else
136 print(" โŒ " .. program.name .. " - download failed/timeout")
137 failed = failed + 1
138 end
139
140 -- Small delay to be nice to the server
141 sleep(0.1)
142end
143
144local endTime = os.clock()
145local duration = endTime - startTime
146
147print()
148print("๐Ÿ“Š Batch Update Complete!")
149print("========================")
150print("โœ… Successfully updated: " .. success .. " programs")
151print("โŒ Failed updates: " .. failed .. " programs")
152print("โฑ๏ธ Total time: " .. string.format("%.1f", duration) .. " seconds")
153print("๐Ÿ“ Programs organized in: programs/<folder>/<program>.lua")
154
155if success > 0 then
156 print()
157 print("๐ŸŽ‰ Updated programs are ready to use!")
158 print(" ๐Ÿ“ Program structure:")
159
160 -- Show folder organization
161 local folderList = {}
162 for folder in pairs(folders) do
163 table.insert(folderList, folder)
164 end
165 table.sort(folderList)
166
167 for _, folder in ipairs(folderList) do
168 print(" programs/" .. folder .. "/")
169 -- Show programs in this folder
170 for _, program in ipairs(programs) do
171 if program.folder == folder then
172 print(" " .. program.name .. ".lua")
173 end
174 end
175 end
176
177 print()
178 print(" ๐Ÿ’ก Usage examples:")
179 print(" programs/eHydra/startup.lua")
180 print(" programs/quarry/quarry.lua")
181 print(" programs/stairs/multi.lua")
182end
183
184if failed > 0 then
185 print()
186 print("โš ๏ธ Some downloads failed. This could be due to:")
187 print(" โ€ข Network connectivity issues")
188 print(" โ€ข File not found on repository")
189 print(" โ€ข Server timeout")
190 print(" Try running batch_updater again later")
191end
192
193print()
194print("๐Ÿ”„ All programs organized by category!")
195print(" Navigate to programs/<folder>/ to find specific programs")
196