diff options
author | Squibid <me@zacharyscheiman.com> | 2023-07-09 21:40:42 -0400 |
---|---|---|
committer | Squibid <me@zacharyscheiman.com> | 2023-07-09 21:40:42 -0400 |
commit | 663110af1ee4073b55b1893050a1c36989ba56fc (patch) | |
tree | d07932a91175798b320408432931fe1577eadd19 /modules/lssi | |
parent | 7f409007184d0d3ea5ae880f708b6284f99844d6 (diff) | |
download | eat-it-663110af1ee4073b55b1893050a1c36989ba56fc.tar.gz eat-it-663110af1ee4073b55b1893050a1c36989ba56fc.tar.bz2 eat-it-663110af1ee4073b55b1893050a1c36989ba56fc.zip |
add modules directory and lssi, the first module!
Diffstat (limited to 'modules/lssi')
-rw-r--r-- | modules/lssi/LSSI.md | 16 | ||||
-rw-r--r-- | modules/lssi/lssi.lua | 133 |
2 files changed, 149 insertions, 0 deletions
diff --git a/modules/lssi/LSSI.md b/modules/lssi/LSSI.md new file mode 100644 index 0000000..5bcd65d --- /dev/null +++ b/modules/lssi/LSSI.md @@ -0,0 +1,16 @@ +# Using lssi +Any plugin can be modified by lssi by doing the following in the eatit-cfg.lua: +```lua +plugins = { -- the plugins you want to load + { 'https://git.squi.bid/eat-it', + file = 'eatit.lua', + dir = 'scripts', + lssi = { + -- code line + { 'print("hello world")', 'G' }, + } + }, +} +``` +The line option can be 'g' for top of file, 'G' for bottom of file, or any +number in between. diff --git a/modules/lssi/lssi.lua b/modules/lssi/lssi.lua new file mode 100644 index 0000000..cc01f0f --- /dev/null +++ b/modules/lssi/lssi.lua @@ -0,0 +1,133 @@ +--[[ +Eat It - a Mpv plugin manager + +Copyright © 2023 squibid + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +]] + +-- NOTE: This is a POC and will most likely be reimplimented using diff files +-- with git +-- or we might want to generate a diff file from the requested changes +-- and check if the diffs match in content + +--[[ + Lua Script Script Injector +Takes an input file and code then, it outputs a file with your code in there. +]]-- + +local mp = require('mp') + +mod = { + version = 'ALPHA 1', -- the current version of lssi + author = 'squibid', +} + +-- load the eatit config file +dofile(mp.command_native({'expand-path', '~~/eatit-cfg.lua'})) + +-- helper functions +local function tablelength(T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count +end + +local function fileexists(name) + local f = io.open(name, 'r') + if f ~= nil then io.close(f) return true else return false end +end + +local function logwrite(string) + if opts.logging.log then + io.write(os.date(opts.logging.logdate) .. ' ' .. string .. '\n') + end +end + +local function openlog() + if opts.logging.log then -- log if asked to + -- get our logfile's full path + fn = mp.command_native({'expand-path', opts.logging.logfile}) + + f = io.open(fn, 'a') -- open file buffer + io.output(f) -- set it as default + end +end + +local function closelog() + if opts.logging.log then + io.close(f) + end +end + +local function inject(infile, l, outfile) + local inf = io.open(infile, 'r') + local infcont = {} + for i in inf:lines() do + table.insert(infcont, i) + end + inf:close() + + -- don't do anything if there is already code injected into the file + if string.find(infcont[1], "-- code injected by lssi") then + logwrite('code is already injected into ' .. infile) + return + end + logwrite('Injecting code into ' .. infile) + + for i in pairs(l) do + -- add requested line below existing line + if l[i][2] == 'G' then + infcont[tablelength(infcont)] = infcont[tablelength(infcont)] .. '\n' .. l[i][1] + elseif l[i][2] == 'g' then + infcont[1] = l[i][1] .. '\n' .. infcont[1] + else + infcont[l[i][2]] = (infcont[l[i][2]]) .. '\n' .. l[i][1] + end + end + + local outf = io.open(outfile, 'w') + + -- we inject metadata to prevent writing to the file more than once + infcont[1] = "-- code injected by lssi " .. mod.version .. '\n' .. infcont[1] + for i, v in ipairs(infcont) do + outf:write(v .. '\n') + end + + io.close(outf) +end + +local function checkandinject() + openlog() + + for i = 1, tablelength(plugins) do + -- get the file we want to inject our code into + local f = mp.command_native({'expand-path', '~~/'}) .. + '/' .. plugins[i]['dir'] .. + '/' .. plugins[i]['file'] + + -- check if the plugin has been configured with lssi + if plugins[i]['lssi'] then + -- and the file we are trying to modify actually exists + if fileexists(f) then + -- inject it! no going back now + inject(f, plugins[i]['lssi'], f) + else + logwrite('Failed to inject code into "' .. + plugins[i]['file'] .. '" file does not exist') + end + end + end + + closelog() +end + +checkandinject() |