2019-01-19 11:31:04 +03:00

228 lines
6.7 KiB
Lua

local GUI = require("GUI")
local text = require("Text")
local filesystem = require("Filesystem")
local paths = require("Paths")
local system = require("System")
local image = require("Image")
local SHA = require("SHA-256")
local module = {}
local workspace, window, localization = table.unpack({...})
--------------------------------------------------------------------------------
module.name = localization.users
module.margin = 7
module.onTouch = function()
window.contentLayout:addChild(GUI.text(1, 1, 0x2D2D2D, localization.usersList))
local function addButton(parent, x, width, ...)
local button = parent:addChild(GUI.button(x, 1, width, 3, 0xE1E1E1, 0x696969, 0x696969, 0xE1E1E1, ...))
button.colors.disabled = {
background = 0xE1E1E1,
text = 0xB4B4B4
}
return button
end
local function addInput(parent, ...)
return parent:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0xA5A5A5, 0xE1E1E1, 0x2D2D2D, ...))
end
local function addComboBox(parent, width)
return parent:addChild(GUI.comboBox(1, 1, width, 3, 0xE1E1E1, 0x696969, 0xD2D2D2, 0xA5A5A5))
end
local usersContainer = window.contentLayout:addChild(GUI.container(1, 1, 36, 3))
local removeUserButton = addButton(usersContainer, usersContainer.width - 4, 5, "")
local addUserButton = addButton(usersContainer, removeUserButton.localX - 6, 5, "+")
local usersComboBox = addComboBox(usersContainer, addUserButton.localX - 2)
local iconButton = addButton(window.contentLayout, 1, 36, localization.usersEditIcon)
local renameButton = addButton(window.contentLayout, 1, 36, localization.usersChangeName)
local renameInput = addInput(window.contentLayout, "", localization.usersChangeNamePlaceholder)
local passwordButton = addButton(window.contentLayout, 1, 36, "")
local passwordInput = addInput(window.contentLayout, "", localization.usersAddPasswordPlaceholder1, false, "")
local submitPasswordInput = addInput(window.contentLayout, "", localization.usersAddPasswordPlaceholder2, false, "")
local passwordText = window.contentLayout:addChild(GUI.text(1, 1, 0xCC4940, localization.usersPasswordsArentEqual))
local function updatePasswordText()
passwordButton.text = system.properties.securityPassword and localization.usersRemovePassword or localization.usersAddPassword
end
local function updateRename(state)
renameButton.hidden = state
renameInput.hidden = not state
end
local function getSelected()
return usersComboBox:getItem(usersComboBox.selectedItem).text
end
local function updateRemoveAndPasswordButtons(state)
if system.getUser() == getSelected() then
removeUserButton.disabled = true
passwordButton.hidden = state
passwordInput.hidden = not state
submitPasswordInput.hidden = not state
else
removeUserButton.disabled = false
passwordButton.hidden = true
passwordInput.hidden = true
submitPasswordInput.hidden = true
passwordText.hidden = true
end
end
local function updateUserList()
usersComboBox:clear()
local list = filesystem.list(paths.system.users)
for i = 1, #list do
if filesystem.isDirectory(paths.system.users .. list[i]) then
local name = list[i]:sub(1, -2)
usersComboBox:addItem(name)
if name == system.getUser() then
usersComboBox.selectedItem = usersComboBox:count()
end
end
end
updateRemoveAndPasswordButtons()
end
usersComboBox.onItemSelected = function()
updateRemoveAndPasswordButtons()
end
updatePasswordText()
updateUserList()
renameInput.hidden = true
passwordInput.hidden = true
submitPasswordInput.hidden = true
passwordText.hidden = true
addUserButton.onTouch = function()
local name = "User #" .. math.random(0xFFFFFF)
system.createUser(name, system.properties.localizationLanguage, nil, true, true)
usersComboBox:addItem(name)
usersComboBox.selectedItem = usersComboBox:count()
end
removeUserButton.onTouch = function()
filesystem.remove(paths.system.users .. getSelected() .. "/")
updateUserList()
end
iconButton.onTouch = function()
system.execute(paths.system.applicationPictureEdit, paths.system.users .. getSelected() .. "/Icon.pic", "-o")
end
renameButton.onTouch = function()
updateRename(true)
end
passwordButton.onTouch = function()
if system.properties.securityPassword then
system.properties.securityPassword = nil
updatePasswordText()
workspace:draw()
system.saveProperties()
else
updateRemoveAndPasswordButtons(true)
end
end
renameInput.onInputFinished = function()
if #renameInput.text > 0 then
filesystem.rename(paths.system.users .. getSelected() .. "/", paths.system.users .. renameInput.text .. "/")
if getSelected() == system.getUser() then
system.setUser(renameInput.text)
computer.pushSignal("system", "updateFileList")
end
updateUserList()
renameInput.text = ""
updateRename(false)
workspace:draw()
end
end
passwordInput.onInputFinished = function()
if #passwordInput.text > 0 and #submitPasswordInput.text > 0 then
if passwordInput.text == submitPasswordInput.text then
system.properties.securityPassword = SHA.hash(passwordInput.text)
system.saveProperties()
passwordInput.text = ""
submitPasswordInput.text = ""
updatePasswordText()
updateRemoveAndPasswordButtons()
passwordText.hidden = true
else
passwordText.hidden = false
end
workspace:draw()
end
end
submitPasswordInput.onInputFinished = passwordInput.onInputFinished
window.contentLayout:addChild(GUI.text(1, 1, 0x2D2D2D, localization.usersClaim))
window.contentLayout:addChild(GUI.textBox(1, 1, 36, 1, nil, 0xA5A5A5, {localization.usersClaimInfo}, 1, 0, 0, true, true))
local claimContainer = window.contentLayout:addChild(GUI.container(1, 1, 36, 3))
local claimRemoveButton = addButton(claimContainer, claimContainer.width - 4, 5, "")
local claimComboBox = addComboBox(claimContainer, claimRemoveButton.localX - 2)
local claimInput = window.contentLayout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0xA5A5A5, 0xE1E1E1, 0x2D2D2D, "", localization.usersClaimPlaceholder))
local function update()
local users = {computer.users()}
-- local users = {"ECS", "Xylic", "Computrix", "Yan0t", "Кукарек", "Bird", "Pirnogion"}
claimContainer.hidden = #users == 0
claimComboBox:clear()
for i = 1, #users do
claimComboBox:addItem(users[i])
end
end
claimRemoveButton.onTouch = function()
computer.removeUser(claimComboBox:getItem(claimComboBox.selectedItem).text)
update()
workspace:draw()
end
claimInput.onInputFinished = function()
if #claimInput.text > 0 then
computer.addUser(claimInput.text)
claimInput.text = ""
update()
workspace:draw()
end
end
update()
end
--------------------------------------------------------------------------------
return module