local utils = require 'mp.utils' local msg = require 'mp.msg' local options = require 'mp.options' function sleep(n) os.execute("sleep " .. tonumber(n)) end function createDir(dirname) os.execute("mkdir -p -m 711 " .. dirname) end function file_exists(name) local f = io.open(name, "r") return f ~= nil and io.close(f) end function get_url_host(s) return (s.."/"):match("://(.-)/") end function make_cache_track(url) find_uuid = "%x+-%x+-%x+-%x+-%x+" uuid = string.sub(url, string.find(url, find_uuid)) host = get_url_host(url) cache_path_file = 'cache/' .. host .. '/' .. uuid .. '' if false == file_exists(cache_path_file) then createDir('cache/' .. host .. '/') msg.verbose('Caching ' .. cache_path_file .. '') os.execute('curl -s --retry 3 "' .. url .. '" -o "' .. cache_path_file .. '"') mp.set_property("stream-open-filename", cache_path_file) else msg.verbose('Already cached ' .. cache_path_file .. '') os.execute('touch ' .. cache_path_file .. '') mp.set_property("stream-open-filename", cache_path_file) end end mp.add_hook("on_load", 11, function() msg.verbose('reusable cache hook activated') local url = mp.get_property("stream-open-filename", "") if true == (url:find("https?://") == 1) then make_cache_track(url) end end)