104 lines
3.0 KiB
Lua
104 lines
3.0 KiB
Lua
local function _sanitize(content)
|
|
if type(content)=='boolean' then
|
|
content=content and 'true' or 'false'
|
|
end
|
|
if type(content)=='nil' then
|
|
content=''
|
|
end
|
|
if type(content)=='number' then
|
|
content=tostring(content)
|
|
end
|
|
if type(content)~='string' then
|
|
MES.new('error',"Invalid content type!")
|
|
MES.traceback()
|
|
return ''
|
|
end
|
|
return content
|
|
end
|
|
|
|
if SYSTEM~='Web' then
|
|
local get=love.system.getClipboardText
|
|
local set=love.system.setClipboardText
|
|
return {
|
|
get=function() return get() or '' end,
|
|
set=function(content) set(_sanitize(content)) end,
|
|
setFreshInterval=NULL,
|
|
_update=NULL,
|
|
}
|
|
end
|
|
|
|
if WEB_COMPAT_MODE then
|
|
local _clipboardBuffer=''
|
|
return {
|
|
get=function()
|
|
JS.newPromiseRequest(
|
|
JS.stringFunc(
|
|
[[
|
|
window.navigator.clipboard
|
|
.readText()
|
|
.then((text) => _$_(text))
|
|
.catch((e) => {
|
|
console.warn(e);
|
|
_$_('');
|
|
});
|
|
]]
|
|
),
|
|
function(data) _clipboardBuffer=data end,
|
|
function() _clipboardBuffer='' end,
|
|
3,
|
|
'getClipboardText'
|
|
)
|
|
if TASK.lock('clipboard_compat_interval',2.6) then
|
|
_clipboardBuffer=''
|
|
MES.new('warn',"Web-Compat mode, paste again to confirm",2.6)
|
|
end
|
|
return _clipboardBuffer
|
|
end,
|
|
set=function(str)
|
|
JS.callJS(JS.stringFunc(
|
|
[[
|
|
window.navigator.clipboard
|
|
.writeText('%s')
|
|
.then(() => console.log('Copied to clipboard'))
|
|
.catch((e) => console.warn(e));
|
|
]],
|
|
_sanitize(str)
|
|
))
|
|
end,
|
|
setFreshInterval=NULL,
|
|
_update=NULL,
|
|
}
|
|
end
|
|
|
|
local getCHN=love.thread.getChannel('CLIP_get')
|
|
local setCHN=love.thread.getChannel('CLIP_set')
|
|
local trigCHN=love.thread.getChannel('CLIP_trig')
|
|
|
|
local clipboard_thread=love.thread.newThread('Zframework/clipboard_thread.lua')
|
|
local isStarted,errorMessage=clipboard_thread:start()
|
|
|
|
if not isStarted then
|
|
MES.new("error",errorMessage,26)
|
|
end
|
|
|
|
local freshInterval=1
|
|
local timer=-.626
|
|
return {
|
|
get=function() return getCHN:peek() or '' end,
|
|
set=function(content) setCHN:push(_sanitize(content)) end,
|
|
setFreshInterval=function(val)
|
|
freshInterval=val
|
|
end,
|
|
_update=function(dt)
|
|
timer=timer+dt
|
|
if timer>freshInterval then
|
|
if isStarted and not clipboard_thread:isRunning() then
|
|
MES.new("warn",clipboard_thread:getError(),26)
|
|
isStarted=false
|
|
end
|
|
trigCHN:push(timer)
|
|
timer=0
|
|
end
|
|
end,
|
|
}
|