Приложение-менеджер автозагрузки

This commit is contained in:
Igor Timofeev 2015-10-27 12:48:02 +03:00
parent e78d0bc5f2
commit 45d2f14265
2 changed files with 268 additions and 0 deletions

View File

@ -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

Binary file not shown.