forked from xomf/slabOS
260 lines
6.8 KiB
Lua
260 lines
6.8 KiB
Lua
local basalt = require("/lib/basalt")
|
||
local libcredit = require("/lib/libcredit_mobile")
|
||
|
||
local username = ""
|
||
local main = basalt.getMainFrame()
|
||
|
||
function show_notification(status)
|
||
local notifFrame = main:addFrame()
|
||
:setSize(26,4)
|
||
:setBackground(colours.grey)
|
||
|
||
notifFrame:addButton()
|
||
:setText("Dismiss")
|
||
:setSize(26,1)
|
||
:setPosition(1,4)
|
||
:onClick(function()
|
||
notifFrame:destroy()
|
||
end)
|
||
|
||
local label = notifFrame:addLabel()
|
||
|
||
if status then
|
||
label:setText("Transaction successful")
|
||
:setPosition(4,2)
|
||
:setBackground(colours.lime)
|
||
:setForeground(colours.black)
|
||
notifFrame:setBackground(colours.lime)
|
||
else
|
||
label:setText("Transaction unsuccessful")
|
||
:setPosition(3,2)
|
||
:setBackground(colours.red)
|
||
:setForeground(colours.white)
|
||
notifFrame:setBackground(colours.red)
|
||
end
|
||
end
|
||
|
||
local appFrame = main:addFrame()
|
||
:setVisible(false)
|
||
:setSize(26,19)
|
||
:setBackground(colours.white)
|
||
|
||
local requestFrame = main:addFrame()
|
||
:setVisible(false)
|
||
:setSize(26,19)
|
||
:setBackground(colours.white)
|
||
|
||
|
||
requestFrame:addLabel()
|
||
:setText("Username: ")
|
||
:setPosition(2, 6)
|
||
:setSize(10, 1)
|
||
:setForeground(colours.black)
|
||
|
||
local request_user_input = requestFrame:addInput()
|
||
:setPosition(12, 6)
|
||
:setSize(12, 1)
|
||
:setBackground(colours.lightGrey)
|
||
:setForeground(colours.black)
|
||
:setText("")
|
||
|
||
requestFrame:addLabel()
|
||
:setText("Amount: ")
|
||
:setPosition(2, 8)
|
||
:setSize(10, 1)
|
||
:setForeground(colours.black)
|
||
|
||
local request_amount_input = requestFrame:addInput()
|
||
:setPosition(12, 8)
|
||
:setSize(12, 1)
|
||
:setBackground(colours.lightGrey)
|
||
:setForeground(colours.black)
|
||
:setText("")
|
||
|
||
requestFrame:addButton()
|
||
:setText("Request")
|
||
:setPosition(7, 15)
|
||
:setSize(12, 3)
|
||
:setBackground(colours.blue)
|
||
:setForeground(colours.white)
|
||
:onClick(function(request_btn)
|
||
request_btn:setBackground(colours.black)
|
||
request_btn:setText("Pending")
|
||
local target_usr = request_user_input:getText()
|
||
local target_amount = request_amount_input:getText()
|
||
target_amount = tonumber(target_amount:match("^%d+$"))
|
||
|
||
if not target_amount or target_amount <= 0 then
|
||
show_notification(false)
|
||
request_btn:setBackground(colours.blue)
|
||
request_btn:setText("Request")
|
||
return
|
||
end
|
||
|
||
libcredit.addTransaction(target_usr, target_amount, username .. " [ecash]", username, function(successful)
|
||
request_btn:setBackground(colours.blue)
|
||
request_btn:setText("Request")
|
||
show_notification(successful)
|
||
refresh_ui()
|
||
appFrame:setVisible(true)
|
||
requestFrame:setVisible(false)
|
||
|
||
if successful then
|
||
request_amount_input:setText("")
|
||
request_user_input:setText("")
|
||
end
|
||
end)
|
||
end)
|
||
|
||
local sendFrame = main:addFrame()
|
||
:setVisible(false)
|
||
:setSize(26,19)
|
||
:setBackground(colours.white)
|
||
|
||
sendFrame:addLabel()
|
||
:setText("Recipient: ")
|
||
:setPosition(2, 6)
|
||
:setSize(10, 1)
|
||
:setForeground(colours.black)
|
||
|
||
local send_user_input = sendFrame:addInput()
|
||
:setPosition(12, 6)
|
||
:setSize(12, 1)
|
||
:setBackground(colours.lightGrey)
|
||
:setForeground(colours.black)
|
||
:setText("")
|
||
|
||
sendFrame:addLabel()
|
||
:setText("Amount: ")
|
||
:setPosition(2, 8)
|
||
:setSize(10, 1)
|
||
:setForeground(colours.black)
|
||
|
||
local send_amount_input = sendFrame:addInput()
|
||
:setPosition(12, 8)
|
||
:setSize(12, 1)
|
||
:setBackground(colours.lightGrey)
|
||
:setForeground(colours.black)
|
||
:setText("")
|
||
|
||
sendFrame:addButton()
|
||
:setText("Send")
|
||
:setPosition(7, 15)
|
||
:setSize(12, 3)
|
||
:setBackground(colours.blue)
|
||
:setForeground(colours.white)
|
||
:onClick(function(send_btn)
|
||
send_btn:setBackground(colours.black)
|
||
send_btn:setText("Pending")
|
||
local target_usr = send_user_input:getText()
|
||
local target_amount = send_amount_input:getText()
|
||
target_amount = tonumber(target_amount:match("^%d+$"))
|
||
|
||
if not target_amount or target_amount <= 0 then
|
||
show_notification(false)
|
||
send_btn:setBackground(colours.blue)
|
||
send_btn:setText("Send")
|
||
return
|
||
end
|
||
|
||
libcredit.addTransaction(username, target_amount, target_usr .. " [ecash]", target_usr, function(successful)
|
||
send_btn:setBackground(colours.blue)
|
||
send_btn:setText("Send")
|
||
show_notification(successful)
|
||
refresh_ui()
|
||
appFrame:setVisible(true)
|
||
sendFrame:setVisible(false)
|
||
|
||
if successful then
|
||
send_amount_input:setText("")
|
||
send_user_input:setText("")
|
||
end
|
||
end)
|
||
end)
|
||
|
||
local cash_label = appFrame:addBigFont()
|
||
:setText("__G")
|
||
:setPosition(6,2)
|
||
:setBackground(colours.white)
|
||
:setForeground(colours.black)
|
||
|
||
local request_cash = appFrame:addButton()
|
||
:setText("Request")
|
||
:setPosition(8,10)
|
||
:setSize(10, 3)
|
||
:setBackground(colours.green)
|
||
:setForeground(colours.white)
|
||
:onClick(function()
|
||
requestFrame:setVisible(true)
|
||
appFrame:setVisible(false)
|
||
end)
|
||
|
||
local send_cash = appFrame:addButton()
|
||
:setText("Send")
|
||
:setPosition(8,15)
|
||
:setSize(10, 3)
|
||
:setBackground(colours.orange)
|
||
:setForeground(colours.white)
|
||
:onClick(function()
|
||
sendFrame:setVisible(true)
|
||
appFrame:setVisible(false)
|
||
end)
|
||
|
||
function refresh_ui()
|
||
libcredit.getCredit(username, function(amount)
|
||
local amount_str = amount .. "G"
|
||
cash_label:setText(amount_str)
|
||
|
||
if #amount_str < 6 then
|
||
cash_label:setPosition(6 - (#amount_str / 4) - 1,2)
|
||
else
|
||
cash_label:setSize(26,4)
|
||
cash_label:setPosition(1,2)
|
||
end
|
||
end)
|
||
end
|
||
|
||
local login = main:addFrame()
|
||
:setBackground(colours.grey)
|
||
:setPosition(1,1)
|
||
:setSize(26,19)
|
||
|
||
login:addLabel()
|
||
:setText("Username: ")
|
||
:setPosition(2, 3)
|
||
:setSize(10, 1)
|
||
:setForeground(colours.white)
|
||
|
||
local usernameInput = login:addInput()
|
||
:setPosition(12, 3)
|
||
:setSize(12, 1)
|
||
:setBackground(colours.lightGrey)
|
||
:setForeground(colours.black)
|
||
:setText("")
|
||
|
||
local loginButton = login:addButton()
|
||
:setText("Login")
|
||
:setPosition(9, 15)
|
||
:setSize(8, 3)
|
||
:setBackground(colours.blue)
|
||
:setForeground(colours.white)
|
||
:onClick(function()
|
||
|
||
|
||
username = usernameInput:getText()
|
||
|
||
login:setVisible(false)
|
||
appFrame:setVisible(true)
|
||
refresh_ui()
|
||
|
||
end)
|
||
|
||
if fs.exists("/config.json") then
|
||
local file = fs.open("/config.json","r")
|
||
local file_content = file.readAll()
|
||
local username = textutils.unserialiseJSON(file_content).username
|
||
file.close()
|
||
usernameInput:setText(username)
|
||
end
|
||
|
||
basalt.run() |