yadm-config/.config/nvim-notes/lua/addons/optolith.lua
2025-01-02 19:25:01 +01:00

77 lines
2.2 KiB
Lua

local nio = require("nio")
vim.api.nvim_create_user_command("Optolith", function()
local LAUNCH_COMMAND = vim.fs.normalize("~/.local/share/appimages/OptolithInsider.AppImage")
local OPTOLITH_DIRECTORY = "~/.config/Optolith Insider"
local absOptolithDirectory = vim.fs.normalize(OPTOLITH_DIRECTORY)
local directoryExists = vim.fn.isdirectory(absOptolithDirectory)
local currentHeroFile = vim.fn.expand("%")
if currentHeroFile:find(".json$") == nil then
vim.notify("Invalid hero", "error", {
title = "Optolith",
})
return
end
if directoryExists == 0 then
vim.notify("Can't find folder. Please start the application once.\nFolder: " .. OPTOLITH_DIRECTORY, "error", {
title = "Optolith",
})
return
end
local heroesPath = vim.fs.joinpath(absOptolithDirectory, "heroes.json")
local heroesGlob = vim.fn.glob(heroesPath)
local heroesFileExists = vim.fn.empty(heroesGlob) == 0
if heroesFileExists and vim.fn.filewritable(heroesPath) == 0 then
vim.notify("Can't modify heroes file... Can't inject hero.", "error", {
title = "Optolith",
})
return
end
if heroesFileExists then
local mvCommand = os.execute(string.format('mv "%s" "%s.swp"', heroesPath, heroesPath))
if mvCommand ~= 0 then
vim.notify("Can not move heroes file.", "error", {
title = "Optolith",
})
return
end
end
local linkCommand = os.execute(string.format('ln -s "%s" "%s"', currentHeroFile, heroesPath))
if linkCommand ~= 0 then
vim.notify("Can't create link...", "error", {
title = "Optolith",
})
return
end
local file = table.concat(vim.fn.readfile(currentHeroFile))
local fileData = vim.fn.json_decode(file)
if fileData["id"] ~= nil then
local newData = {}
newData[fileData["id"]] = fileData
vim.fn.writefile({ vim.fn.json_encode(newData) }, currentHeroFile)
end
local swapFileExists = vim.fn.empty(vim.fn.glob(heroesPath .. ".swp")) == 0
local task = nio.run(function()
local process = nio.process.run({
cmd = LAUNCH_COMMAND,
})
process.result()
end, function()
print("Execute")
os.remove(heroesPath)
if swapFileExists then
os.execute(string.format('mv "%s.swp" "%s"', heroesPath, heroesPath))
end
end)
end, {})