mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 02:59:20 +01:00
229 lines
6.7 KiB
Lua
229 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({...})
|
|
local userSettings = system.getUserSettings()
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
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 = userSettings.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, userSettings.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 userSettings.securityPassword then
|
|
userSettings.securityPassword = nil
|
|
updatePasswordText()
|
|
|
|
workspace:draw()
|
|
system.saveUserSettings()
|
|
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
|
|
userSettings.securityPassword = SHA.hash(passwordInput.text)
|
|
system.saveUserSettings()
|
|
|
|
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
|