diff --git a/Installer/Installer.lua b/Installer/Installer.lua index 5f1ce6ed..9daee1cf 100644 --- a/Installer/Installer.lua +++ b/Installer/Installer.lua @@ -28,14 +28,14 @@ if fs.get("bin/edit.lua") == nil or fs.get("bin/edit.lua").isReadOnly() then tab --Если нашло какое-то несоответствие сис. требованиям, то написать, что именно не так if #govno > 0 then - print(" ") - print("Analyzing computer for matching system requirements.") - print(" ") - for i = 1, #govno do - print(govno[i]) - end - print(" ") - return + print(" ") + print("Analyzing computer for matching system requirements.") + print(" ") + for i = 1, #govno do + print(govno[i]) + end + print(" ") + return end ------------------------------------------------------------------------------------------ @@ -54,72 +54,76 @@ local timing = 0.2 --ЗАГРУЗОЧКА С ГИТХАБА local function getFromGitHub(url, path) - local sContent = "" - local result, response = pcall(internet.request, url) - if not result then - return nil - end + local sContent = "" + local result, response = pcall(internet.request, url) + if not result then + return nil + end - if fs.exists(path) then fs.remove(path) end - fs.makeDirectory(fs.path(path)) - local file = io.open(path, "w") + if fs.exists(path) then fs.remove(path) end + fs.makeDirectory(fs.path(path)) + local file = io.open(path, "w") - for chunk in response do - file:write(chunk) - sContent = sContent .. chunk - end + for chunk in response do + file:write(chunk) + sContent = sContent .. chunk + end - file:close() + file:close() - return sContent + return sContent end --БЕЗОПАСНАЯ ЗАГРУЗОЧКА local function getFromGitHubSafely(url, path) - local success, sRepos = pcall(getFromGitHub, url, path) - if not success then - io.stderr:write("Could not connect to the Internet. Please ensure you have an Internet connection.") - return -1 - end - return sRepos + local success, sRepos = pcall(getFromGitHub, url, path) + if not success then + io.stderr:write("Can't download \"" .. url .. "\"!\n") + return -1 + end + return sRepos end --ЗАГРУЗОЧКА С ПАСТЕБИНА local function getFromPastebin(paste, filename) - local cyka = "" - local f, reason = io.open(filename, "w") - if not f then - io.stderr:write("Failed opening file for writing: " .. reason) - return - end - --io.write("Downloading from pastebin.com... ") - local url = "http://pastebin.com/raw.php?i=" .. paste - local result, response = pcall(internet.request, url) - if result then - --io.write("success.\n") - for chunk in response do - --if not options.k then - --string.gsub(chunk, "\r\n", "\n") - --end - f:write(chunk) - cyka = cyka .. chunk - end - f:close() - --io.write("Saved data to " .. filename .. "\n") - else - f:close() - fs.remove(filename) - io.stderr:write("HTTP request failed: " .. response .. "\n") - end + local cyka = "" + local f, reason = io.open(filename, "w") + if not f then + io.stderr:write("Failed opening file for writing: " .. reason) + return + end + --io.write("Downloading from pastebin.com... ") + local url = "http://pastebin.com/raw.php?i=" .. paste + local result, response = pcall(internet.request, url) + if result then + --io.write("success.\n") + for chunk in response do + --if not options.k then + --string.gsub(chunk, "\r\n", "\n") + --end + f:write(chunk) + cyka = cyka .. chunk + end + f:close() + --io.write("Saved data to " .. filename .. "\n") + else + f:close() + fs.remove(filename) + io.stderr:write("HTTP request failed: " .. response .. "\n") + end - return cyka + return cyka end local GitHubUserUrl = "https://raw.githubusercontent.com/" -getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/lib/ECSAPI.lua", "lib/ECSAPI.lua") +local cyka +print(" ") +cyka = "colorlib.lua"; print("Downloading must-have libraries (" .. cyka .. ")"); getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/lib/" .. cyka, "lib/" .. cyka) +cyka = "image.lua"; print("Downloading must-have libraries (" .. cyka .. ")"); getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/lib/" .. cyka, "lib/" .. cyka) +cyka = "ECSAPI.lua"; print("Downloading must-have libraries (" .. cyka .. ")"); getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/lib/" .. cyka, "lib/" .. cyka) +print(" ") ---Вот тут такой пиздец был! _G.ecs = require("ECSAPI") ecs.setScale(installerScale) @@ -134,127 +138,125 @@ local xWindowEnd, yWindowEnd = xWindow + windowWidth - 1, yWindow + windowHeight ------------------------------------------------------------------------------------------- local function clear() - ecs.blankWindow(xWindow, yWindow, windowWidth, windowHeight) + ecs.blankWindow(xWindow, yWindow, windowWidth, windowHeight) end --ОБЪЕКТЫ local obj = {} local function newObj(class, name, ...) - obj[class] = obj[class] or {} - obj[class][name] = {...} + obj[class] = obj[class] or {} + obj[class][name] = {...} end local function drawButton(name, isPressed) - local buttonColor = 0x888888 - if isPressed then buttonColor = ecs.colors.blue end - local d = {ecs.drawAdaptiveButton("auto", yWindowEnd - 3, 2, 1, name, buttonColor, 0xffffff)} - newObj("buttons", name, d[1], d[2], d[3], d[4]) + local buttonColor = 0x888888 + if isPressed then buttonColor = ecs.colors.blue end + local d = {ecs.drawAdaptiveButton("auto", yWindowEnd - 3, 2, 1, name, buttonColor, 0xffffff)} + newObj("buttons", name, d[1], d[2], d[3], d[4]) end local function waitForClickOnButton(buttonName) - while true do - local e = { event.pull() } - if e[1] == "touch" then - if ecs.clickedAtArea(e[3], e[4], obj["buttons"][buttonName][1], obj["buttons"][buttonName][2], obj["buttons"][buttonName][3], obj["buttons"][buttonName][4]) then - drawButton(buttonName, true) - os.sleep(timing) - break - end - end - end + while true do + local e = { event.pull() } + if e[1] == "touch" then + if ecs.clickedAtArea(e[3], e[4], obj["buttons"][buttonName][1], obj["buttons"][buttonName][2], obj["buttons"][buttonName][3], obj["buttons"][buttonName][4]) then + drawButton(buttonName, true) + os.sleep(timing) + break + end + end + end end --------------------------СТАДИЯ ЗАГРУЗКИ НУЖНЫХ ПАКЕТОВ----------------------- - + ecs.clearScreen(padColor) -if not fs.exists("System/OS/Installer/OK.pic") or not fs.exists("System/OS/Installer/Downloading.pic") or not fs.exists("System/OS/Installer/OS_Logo.pic") or not fs.exists("System/OS/Installer/Languages.pic") then +if not fs.exists("MineOS/System/OS/Installer/OK.pic") or not fs.exists("MineOS/System/OS/Installer/Downloading.pic") or not fs.exists("MineOS/System/OS/Installer/OS_Logo.pic") or not fs.exists("MineOS/System/OS/Installer/Languages.pic") then - local barWidth = math.floor(windowWidth / 2) - local xBar = math.floor(xSize/2-barWidth/2) - local yBar = math.floor(ySize/2) + 1 + local barWidth = math.floor(windowWidth / 2) + local xBar = math.floor(xSize/2-barWidth/2) + local yBar = math.floor(ySize/2) + 1 - --создание первичного экрана чистенького + --создание первичного экрана чистенького - clear() + clear() - gpu.setBackground(ecs.windowColors.background) - gpu.setForeground(ecs.colors.gray) - ecs.centerText("x", yBar - 2, "Loading installer data") + gpu.setBackground(ecs.windowColors.background) + gpu.setForeground(ecs.colors.gray) + ecs.centerText("x", yBar - 2, "Loading installer data") - ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, 0) - os.sleep(timing) + ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, 0) + os.sleep(timing) - --local response = getSafe(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/Applications.txt", "System/OS/Applications.txt") - - local preLoadApi = { - { paste = "IgorTimofeev/OpenComputers/master/lib/image.lua", path = "lib/image.lua" }, - { paste = "IgorTimofeev/OpenComputers/master/lib/config.lua", path = "lib/config.lua" }, - { paste = "IgorTimofeev/OpenComputers/master/Installer/Languages.pic", path = "System/OS/Installer/Languages.pic" }, - { paste = "IgorTimofeev/OpenComputers/master/Installer/OK.pic", path = "System/OS/Installer/OK.pic" }, - { paste = "IgorTimofeev/OpenComputers/master/Installer/Downloading.pic", path = "System/OS/Installer/Downloading.pic" }, - { paste = "IgorTimofeev/OpenComputers/master/Installer/OS_Logo.pic", path = "System/OS/Installer/OS_Logo.pic" }, - --{ paste = "IgorTimofeev/OpenComputers/master/MineOS/License.txt", path = "System/OS/License.txt" }, - } + --local response = getSafe(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/Applications.txt", "MineOS/System/OS/Applications.txt") + + local preLoadApi = { + { paste = "IgorTimofeev/OpenComputers/master/lib/config.lua", path = "lib/config.lua" }, + { paste = "IgorTimofeev/OpenComputers/master/Installer/Languages.pic", path = "MineOS/System/OS/Icons/Languages.pic" }, + { paste = "IgorTimofeev/OpenComputers/master/Installer/OK.pic", path = "MineOS/System/OS/Icons/OK.pic" }, + { paste = "IgorTimofeev/OpenComputers/master/Installer/Downloading.pic", path = "MineOS/System/OS/Icons/Downloading.pic" }, + { paste = "IgorTimofeev/OpenComputers/master/Installer/OS_Logo.pic", path = "MineOS/System/OS/Icons/OS_Logo.pic" }, + } - local countOfAll = #preLoadApi + local countOfAll = #preLoadApi - for i = 1, countOfAll do + for i = 1, countOfAll do - local percent = i / countOfAll * 100 - ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent) + local percent = i / countOfAll * 100 + ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent) - if fs.exists(preLoadApi[i]["path"]) then fs.remove(preLoadApi[i]["path"]) end - fs.makeDirectory(fs.path(preLoadApi[i]["path"])) - getFromGitHubSafely(GitHubUserUrl .. preLoadApi[i]["paste"], preLoadApi[i]["path"]) + if fs.exists(preLoadApi[i]["path"]) then fs.remove(preLoadApi[i]["path"]) end + fs.makeDirectory(fs.path(preLoadApi[i]["path"])) + getFromGitHubSafely(GitHubUserUrl .. preLoadApi[i]["paste"], preLoadApi[i]["path"]) - end + end end -applications = seri.unserialize(getFromPastebin("3j2x4dDn", "System/OS/Applications.txt")) +applications = seri.unserialize(getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/Applications.txt", "MineOS/System/OS/Applications.txt")) _G.image = require("image") local config = require("config") -local imageOS = image.load("System/OS/Installer/OS_Logo.pic") -local imageLanguages = image.load("System/OS/Installer/Languages.pic") -local imageDownloading = image.load("System/OS/Installer/Downloading.pic") -local imageOK = image.load("System/OS/Installer/OK.pic") +local imageOS = image.load("MineOS/System/OS/Icons/OS_Logo.pic") +local imageLanguages = image.load("MineOS/System/OS/Icons/Languages.pic") +local imageDownloading = image.load("MineOS/System/OS/Icons/Downloading.pic") +local imageOK = image.load("MineOS/System/OS/Icons/OK.pic") ------------------------------ВЫБОР ЯЗЫКА------------------------------------ do - clear() + clear() - image.draw(math.ceil(xSize / 2 - 30), yWindow + 2, imageLanguages) + image.draw(math.ceil(xSize / 2 - 30), yWindow + 2, imageLanguages) - --кнопа - drawButton("Select language",false) + --кнопа + drawButton("Select language",false) - waitForClickOnButton("Select language") + waitForClickOnButton("Select language") - local language = ecs.universalWindow("auto", "auto", 30, ecs.windowColors.background, true, {"EmptyLine"}, {"CenterText", 0x262626, "Select language"}, {"Select", 0x262626, 0x880000, "Russian", "English"}, {"Button", {0xffffff, 0x262626, "OK"}}) - language = language[1] - --УСТАНАВЛИВАЕМ НУЖНЫЙ ЯЗЫК - local path = "System/OS/Language.lua" - fs.remove(path) - fs.makeDirectory(fs.path(path)) - local file = io.open(path, "w") - file:write("return \"" .. language .. "\"") - file:close() - _G._OSLANGUAGE = language + local language = ecs.universalWindow("auto", "auto", 30, ecs.windowColors.background, true, {"EmptyLine"}, {"CenterText", 0x262626, "Select language"}, {"Select", 0x262626, 0x880000, "Russian", "English"}, {"Button", {0xffffff, 0x262626, "OK"}}) + language = language[1] + --УСТАНАВЛИВАЕМ НУЖНЫЙ ЯЗЫК + local path = "MineOS/System/OS/Language.lua" + fs.remove(path) + fs.makeDirectory(fs.path(path)) + local file = io.open(path, "w") + file:write("return \"" .. language .. "\"") + file:close() + _G._OSLANGUAGE = language - --Качаем язык - ecs.info("auto", "auto", " ", " Installing language packages...") - local pathToLang = "System/OS/Installer/Language.lang" - getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/Installer/" .. _G._OSLANGUAGE .. ".lang", pathToLang) - getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/MineOS/License/" .. _G._OSLANGUAGE .. ".txt", "System/OS/License.txt") - - --Ставим язык - lang = config.readAll(pathToLang) + --Качаем язык + ecs.info("auto", "auto", " ", " Installing language packages...") + local pathToLang = "MineOS/System/OS/Installer/Language.lang" + getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/Installer/" .. _G._OSLANGUAGE .. ".lang", pathToLang) + getFromGitHubSafely(GitHubUserUrl .. "IgorTimofeev/OpenComputers/master/MineOS/License/" .. _G._OSLANGUAGE .. ".txt", "MineOS/System/OS/License.txt") + + --Ставим язык + lang = config.readAll(pathToLang) end @@ -263,121 +265,121 @@ end ------------------------------СТАВИТЬ ЛИ ОСЬ------------------------------------ do - clear() + clear() - image.draw(math.ceil(xSize / 2 - 15), yWindow + 2, imageOS) + image.draw(math.ceil(xSize / 2 - 15), yWindow + 2, imageOS) - --Текстик по центру - gpu.setBackground(ecs.windowColors.background) - gpu.setForeground(ecs.colors.gray) - ecs.centerText("x", yWindowEnd - 5 , lang.beginOsInstall) + --Текстик по центру + gpu.setBackground(ecs.windowColors.background) + gpu.setForeground(ecs.colors.gray) + ecs.centerText("x", yWindowEnd - 5 , lang.beginOsInstall) - --кнопа - drawButton("->",false) + --кнопа + drawButton("->",false) - waitForClickOnButton("->") + waitForClickOnButton("->") end ------------------------------ЛИЦ СОГЛАЩЕНЬКА------------------------------------------ do - clear() - - --Откуда рисовать условия согл - local from = 1 - local xText, yText, TextWidth, TextHeight = xWindow + 4, yWindow + 2, windowWidth - 8, windowHeight - 7 + clear() + + --Откуда рисовать условия согл + local from = 1 + local xText, yText, TextWidth, TextHeight = xWindow + 4, yWindow + 2, windowWidth - 8, windowHeight - 7 - --Читаем файл с лиц соглл - local lines = {} - local file = io.open("System/OS/License.txt", "r") - for line in file:lines() do - table.insert(lines, line) - end - file:close() + --Читаем файл с лиц соглл + local lines = {} + local file = io.open("MineOS/System/OS/License.txt", "r") + for line in file:lines() do + table.insert(lines, line) + end + file:close() - --Штуку рисуем - ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) + --Штуку рисуем + ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) - --Инфо рисуем - --ecs.centerText("x", yWindowEnd - 5 ,"Принимаете ли вы условия лицензионного соглашения?") + --Инфо рисуем + --ecs.centerText("x", yWindowEnd - 5 ,"Принимаете ли вы условия лицензионного соглашения?") - --кнопа - drawButton(lang.acceptLicense, false) + --кнопа + drawButton(lang.acceptLicense, false) - while true do - local e = { event.pull() } - if e[1] == "touch" then - if ecs.clickedAtArea(e[3], e[4], obj["buttons"][lang.acceptLicense][1], obj["buttons"][lang.acceptLicense][2], obj["buttons"][lang.acceptLicense][3], obj["buttons"][lang.acceptLicense][4]) then - drawButton(lang.acceptLicense, true) - os.sleep(timing) - break - end - elseif e[1] == "scroll" then - if e[5] == -1 then - if from < #lines then from = from + 1; ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) end - else - if from > 1 then from = from - 1; ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) end - end - end - end + while true do + local e = { event.pull() } + if e[1] == "touch" then + if ecs.clickedAtArea(e[3], e[4], obj["buttons"][lang.acceptLicense][1], obj["buttons"][lang.acceptLicense][2], obj["buttons"][lang.acceptLicense][3], obj["buttons"][lang.acceptLicense][4]) then + drawButton(lang.acceptLicense, true) + os.sleep(timing) + break + end + elseif e[1] == "scroll" then + if e[5] == -1 then + if from < #lines then from = from + 1; ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) end + else + if from > 1 then from = from - 1; ecs.textField(xText, yText, TextWidth, TextHeight, lines, from, 0xffffff, 0x262626, 0x888888, ecs.colors.blue) end + end + end + end end --------------------------СТАДИЯ ЗАГРУЗКИ----------------------------------- do - local barWidth = math.floor(windowWidth * 2 / 3) - local xBar = math.floor(xSize/2-barWidth/2) - local yBar = yWindowEnd - 3 + local barWidth = math.floor(windowWidth * 2 / 3) + local xBar = math.floor(xSize/2-barWidth/2) + local yBar = yWindowEnd - 3 - local function drawInfo(x, y, info) - ecs.square(x, y, barWidth, 1, ecs.windowColors.background) - ecs.colorText(x, y, ecs.colors.gray, info) - end + local function drawInfo(x, y, info) + ecs.square(x, y, barWidth, 1, ecs.windowColors.background) + ecs.colorText(x, y, ecs.colors.gray, info) + end - ecs.blankWindow(xWindow,yWindow,windowWidth,windowHeight) + ecs.blankWindow(xWindow,yWindow,windowWidth,windowHeight) - image.draw(math.floor(xSize/2 - 33), yWindow + 2, imageDownloading) + image.draw(math.floor(xSize/2 - 33), yWindow + 2, imageDownloading) - ecs.colorTextWithBack(xBar, yBar - 1, ecs.colors.gray, ecs.windowColors.background, lang.osInstallation) - ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, 0) - os.sleep(timing) + ecs.colorTextWithBack(xBar, yBar - 1, ecs.colors.gray, ecs.windowColors.background, lang.osInstallation) + ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, 0) + os.sleep(timing) - for app = 1, #applications do - --ВСЕ ДЛЯ ГРАФОНА - drawInfo(xBar, yBar + 1, lang.downloading .. " " .. applications[app]["name"]) - local percent = app / #applications * 100 - ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent) + for app = 1, #applications do + --ВСЕ ДЛЯ ГРАФОНА + drawInfo(xBar, yBar + 1, lang.downloading .. " " .. applications[app]["name"]) + local percent = app / #applications * 100 + ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent) - --ВСЕ ДЛЯ ЗАГРУЗКИ - local path = applications[app]["name"] - if fs.exists(path) then fs.remove(path) end + --ВСЕ ДЛЯ ЗАГРУЗКИ + local path = applications[app]["name"] + if fs.exists(path) then fs.remove(path) end - --Если тип = приложение - if applications[app]["type"] == "Application" then - fs.makeDirectory(path..".app/Resources") - getFromGitHubSafely(GitHubUserUrl .. applications[app]["url"], path..".app/"..fs.name(applications[app]["name"]..".lua")) - getFromGitHubSafely(GitHubUserUrl .. applications[app]["icon"], path..".app/Resources/Icon.pic") - if applications[app]["resources"] then - for i = 1, #applications[app]["resources"] do - getFromGitHubSafely(GitHubUserUrl .. applications[app]["resources"][i]["url"], path..".app/Resources/"..applications[app]["resources"][i]["name"]) - end - end + --Если тип = приложение + if applications[app]["type"] == "Application" then + fs.makeDirectory(path..".app/Resources") + getFromGitHubSafely(GitHubUserUrl .. applications[app]["url"], path..".app/"..fs.name(applications[app]["name"]..".lua")) + getFromGitHubSafely(GitHubUserUrl .. applications[app]["icon"], path..".app/Resources/Icon.pic") + if applications[app]["resources"] then + for i = 1, #applications[app]["resources"] do + getFromGitHubSafely(GitHubUserUrl .. applications[app]["resources"][i]["url"], path..".app/Resources/"..applications[app]["resources"][i]["name"]) + end + end - --Если тип = другой, чужой, а мб и свой пастебин - elseif applications[app]["type"] == "Pastebin" then - fs.remove(applications[app]["name"]) - fs.makeDirectory(fs.path(applications[app]["name"])) - getFromPastebin(applications[app]["url"], applications[app]["name"]) + --Если тип = другой, чужой, а мб и свой пастебин + elseif applications[app]["type"] == "Pastebin" then + fs.remove(applications[app]["name"]) + fs.makeDirectory(fs.path(applications[app]["name"])) + getFromPastebin(applications[app]["url"], applications[app]["name"]) - --А если че-то другое - else - getFromGitHubSafely(GitHubUserUrl .. applications[app]["url"], path) - end - end + --А если че-то другое + else + getFromGitHubSafely(GitHubUserUrl .. applications[app]["url"], path) + end + end - os.sleep(timing) + os.sleep(timing) end --------------------------СТАДИЯ ПЕРЕЗАГРУЗКИ КОМПА----------------------------------- @@ -394,9 +396,9 @@ ecs.centerText("x",yWindowEnd - 5, lang.needToRestart) --Кнопа drawButton(lang.restart, false) -fs.remove("System/OS/Users.cfg") -fs.remove("System/OS/Password.cfg") -fs.remove("System/OS/WithoutProtection.cfg") +fs.remove("MineOS/System/OS/Users.cfg") +fs.remove("MineOS/System/OS/Password.cfg") +fs.remove("MineOS/System/OS/WithoutProtection.cfg") waitForClickOnButton(lang.restart)