diff --git a/Applications/Autorun/Autorun.lua b/Applications/Autorun/Autorun.lua new file mode 100644 index 00000000..e96c2512 --- /dev/null +++ b/Applications/Autorun/Autorun.lua @@ -0,0 +1,268 @@ + +------------------------------------------ Библиотеки --------------------------------------------------------------- + +local ecs = require("ECSAPI") +local fs = require("filesystem") +local gpu = require("component").gpu +local unicode = require("unicode") +local event = require("event") +local serialization = require("serialization") + +------------------------------------------ Переменные --------------------------------------------------------------- + +local width, height = 70, 30 +local x, y = ecs.correctStartCoords("auto", "auto", width, height) +local oldPixels = ecs.rememberOldPixels(x, y, x + width - 1, y + height - 1) +local dataWidth, dataHeight = width - 6, height - 14 +local drawListFrom = 1 +local selectedObject = 3 +local pathToList = "System/AutorunManager/Filelist.txt" +local autorunObjects = { + -- { path = "OS.lua", enabled = true, size = 30 }, + -- { path = "Cyka/Home.lua", enabled = true, size = 30 }, + -- { path = "Pidar/Lalra/Cyka.lua", enabled = true, size = 30 }, + -- { path = "322File.lua", enabled = false, size = 30 }, + -- { path = "SasiHyu.lua", enabled = true, size = 30 }, + -- { path = "Blabla.cfg", enabled = false, size = 30 }, +} + +------------------------------------------ Функции --------------------------------------------------------------- + +--Объекты для тача +local obj = {} +local function newObj(class, name, ...) + obj[class] = obj[class] or {} + obj[class][name] = {...} +end + +local function saveAutorun() + local file = io.open("autorun.lua", "w") + file:write("local shell = require(\"shell\")\n") + for i = 1, #autorunObjects do + if autorunObjects[i].enabled then + file:write("pcall(loadfile(\"" .. autorunObjects[i].path .. "\"))\n") + end + end + file:close() +end + +local function saveList() + local file = io.open(pathToList, "w") + file:write(serialization.serialize(autorunObjects)) + file:close() +end + +local function loadList() + if fs.exists(pathToList) then + local file = io.open(pathToList, "r") + local text = file:read("*a") + autorunObjects = serialization.unserialize(text) + file:close() + else + fs.makeDirectory(fs.path(pathToList)) + saveList() + end +end + +local function drawFiles(x, y) + + local limit, from = dataHeight, drawListFrom + + obj["List"] = {} + + local yPos = y + 1 + + ecs.square(x, y, dataWidth, dataHeight, 0xFFFFFF) + ecs.square(x, y, dataWidth, 1, ecs.colors.blue) + gpu.setForeground(0xFFFFFF) + gpu.set(x + 1, y, "Запуск") + gpu.set(x + 9, y, "Файл") + gpu.set(x + 48, y, "Размер") + + ecs.srollBar(x + dataWidth - 1, yPos, 1, dataHeight - 1, #autorunObjects == 0 and from or #autorunObjects, from, 0xCCCCCC, ecs.colors.lightBlue) + + + local color, color2 + for i = from, (from + #autorunObjects - 1) do + if i > limit then break end + if i % 2 == 0 then color = 0xFFFFFF; color2 = 0x262626 else color = 0xEEEEEE; color2 = 0x262626 end + if i == selectedObject then color = ecs.colors.green; color2 = 0xFFFFFF end + + if autorunObjects[i] then + + ecs.square(x, yPos, dataWidth - 1, 1, color) + + if autorunObjects[i].enabled then + ecs.colorTextWithBack(x + 3, yPos, ecs.colors.blue, color, "✔") + else + ecs.colorTextWithBack(x + 3, yPos, ecs.colors.red, color, "❌") + end + + gpu.setBackground(color) + gpu.setForeground(color2) + gpu.set(x + 9, yPos, ecs.stringLimit("start", autorunObjects[i].path, 37)) + + gpu.set(x + 48, yPos, autorunObjects[i].size .. " КБ") + + newObj("List", i, x, yPos, x + dataWidth - 1, yPos) + + yPos = yPos + 1 + end + end +end + +local function drawWindow() + local xPos, yPos + + ecs.square(x, y, width, height, 0xDDDDDD) + + xPos = x + 3 + yPos = y + 4 + + ecs.colorText(xPos, yPos, 0x262626, "Эти объекты будут запускаться автоматически при загрузке:") + yPos = yPos + 2 + + ecs.square(x, y, width, 3, 0xCCCCCC) + + ecs.centerText("x", y + 1, "Менеджер автозагрузки") + + drawFiles(x + 3, y + 6) + + yPos = y + height - 7 + ecs.colorTextWithBack(xPos, yPos, 0x262626, 0xDDDDDD, "Чтобы отключить загрузку файла, снимите галочку рядом с именем") + yPos = yPos + 1 + gpu.set(xPos, yPos, "программы. Приоритет загузки снижается сверху вниз.") + yPos = yPos + 2 + + local name + name = "+"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2 + name = "-"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2 + + name = "Выше"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2 + name = "Ниже"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xFFFFFF, 0x262626)); xPos = obj["Buttons"][name][3] + 2 + -- if fs.isAutorunEnabled() then + -- name = "Выключить автозапуск" + -- else + -- name = "Включить автозапуск " + -- end + -- newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0xAAAAAA, 0xFFFFFF)); xPos = obj["Buttons"][name][3] + 2 + + xPos = x + width - 12 + name = "Выход"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, 2, 1, name, 0x888888, 0xFFFFFF)) +end + +------------------------------------------ Программа --------------------------------------------------------------- + +loadList() +drawWindow() + +while true do + local e = {event.pull()} + if e[1] == "touch" then + --if obj["List"] and #obj["List"] > 0 then + for key in pairs(obj["List"]) do + if ecs.clickedAtArea(e[3], e[4], obj["List"][key][1], obj["List"][key][2], obj["List"][key][3], obj["List"][key][4]) then + if selectedObject ~= key then + selectedObject = key + drawFiles(x + 3, y + 6) + else + if e[3] >= obj["List"][key][1] + 2 and e[3] <= obj["List"][key][1] + 4 then + autorunObjects[key].enabled = not autorunObjects[key].enabled + drawFiles(x + 3, y + 6) + saveList() + saveAutorun() + end + end + break + end + end + --end + + for key in pairs(obj["Buttons"]) do + if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][key][1], obj["Buttons"][key][2], obj["Buttons"][key][3], obj["Buttons"][key][4]) then + ecs.drawAdaptiveButton(obj["Buttons"][key][1], obj["Buttons"][key][2], 2, 1, key, ecs.colors.blue, 0xFFFFFF) + os.sleep(0.2) + ecs.drawAdaptiveButton(obj["Buttons"][key][1], obj["Buttons"][key][2], 2, 1, key, 0xFFFFFF, 0x262626) + + if key == "-" then + table.remove(autorunObjects, selectedObject) + if drawListFrom == selectedObject then drawListFrom = 1 end + drawFiles(x + 3, y + 6) + saveList() + saveAutorun() + elseif key == "+" then + local data = ecs.universalWindow("auto", "auto", 36, 0xeeeeee, true, {"EmptyLine"}, {"CenterText", 0x880000, "Добавить новый файл"}, {"EmptyLine"}, {"Input", 0x262626, 0x880000, "Путь к файлу"}, {"EmptyLine"}, {"Button", {0x888888, 0xffffff, "Добавить"}, {0xAAAAAA, 0xffffff, "Отмена"}}) + if data[2] == "Добавить" then + if fs.exists(data[1]) then + local cyka = false + for i = 1, #autorunObjects do + if autorunObjects[i].path == data[1] then cyka = true end + end + if not cyka then + table.insert(autorunObjects, { path = data[1], enabled = true, size = math.ceil(fs.size(data[1]) / 1024) }) + drawFiles(x + 3, y + 6) + saveList() + saveAutorun() + else + ecs.error("Файл \"" .. data[1] .. "\" уже есть в этом списке!") + end + else + ecs.error("Файл \"" .. data[1] .. "\" не существует!") + end + end + elseif key == "Выше" then + if selectedObject > 1 then + local cyka = autorunObjects[selectedObject] + table.remove(autorunObjects, selectedObject) + table.insert(autorunObjects, selectedObject - 1, cyka) + selectedObject = selectedObject - 1 + drawFiles(x + 3, y + 6) + saveList() + saveAutorun() + end + elseif key == "Ниже" then + if selectedObject < #autorunObjects then + local cyka = autorunObjects[selectedObject] + table.remove(autorunObjects, selectedObject) + table.insert(autorunObjects, selectedObject + 1, cyka) + selectedObject = selectedObject + 1 + drawFiles(x + 3, y + 6) + saveList() + saveAutorun() + end + elseif key == "Выход" then + ecs.drawOldPixels(oldPixels) + return + -- elseif key == "Включить автозапуск " then + -- fs.setAutorunEnabled(true) + -- drawWindow() + -- elseif key == "Выключить автозапуск" then + -- fs.setAutorunEnabled(false) + -- drawWindow() + end + + break + end + end + + elseif e[1] == "scroll" then + if e[5] == 1 then + if drawListFrom > 1 then drawListFrom = drawListFrom - 1; drawFiles(x + 3, y + 6) end + else + if drawListFrom < #autorunObjects then drawListFrom = drawListFrom + 1; drawFiles(x + 3, y + 6) end + end + end +end + + + + + + + + + + + + + diff --git a/Applications/Autorun/Icon.pic b/Applications/Autorun/Icon.pic new file mode 100644 index 00000000..51e00e17 Binary files /dev/null and b/Applications/Autorun/Icon.pic differ