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() if not fs.exists("/.usrcache") then local file = fs.open("/.usrcache", "w") file.write(username) file.close() end login:setVisible(false) appFrame:setVisible(true) refresh_ui() end) if fs.exists("/.usrcache") then local file = fs.open("/.usrcache", "r") local username = file.readLine() file.close() usernameInput:setText(username) end basalt.run()