Mercurial Hosting > linkmystyle
view src/lib/Uploadcare.luan @ 3:b016e4b7c8da default tip
add read_me
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 12 Jul 2025 12:51:36 -0600 |
parents | 8f4df159f06b |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local parse = Luan.parse or error() local stringify = Luan.stringify or error() local Io = require "luan:Io.luan" local uri = Io.uri or error() local Parsers = require "luan:Parsers.luan" local json_parse = Parsers.json_parse or error() local Time = require "luan:Time.luan" local time_now = Time.now or error() local parse_time = Time.parse or error() local Utils = require "site:/lib/Utils.luan" local list_to_set = Utils.list_to_set or error() local Config = require "site:/private/Config.luan" local keys = Config.uploadcare or error() local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Uploadcare" local Uploadcare = {} function Uploadcare.url(uuid) uuid or error() return "https://ucarecdn.com/"..uuid.."/-/quality/smart/" end function Uploadcare.thumb_url(uuid) uuid or error() return "https://ucarecdn.com/"..uuid.."/-/crop/1:1/-/preview/400x400/-/quality/smart/" end local function used_uuids() local list = {} local Pic = require "site:/lib/Pic.luan" local pics = Pic.search("type:pic") for _, pic in ipairs(pics) do list[#list+1] = pic.uuid end local User = require "site:/lib/User.luan" local users = User.search("type:user") for _, user in ipairs(users) do list[#list+1] = user.pic_uuid local data = user.theme_data if data ~= nil then data = parse(data) list[#list+1] = data.background_img_uuid end end return list_to_set(list) end local headers = { Accept = "application/vnd.uploadcare-v0.7+json" Authorization = "Uploadcare.Simple "..keys.public_key..":"..keys.secret_key } local delete_options = { method = "DELETE" headers = headers } local function delete(uuid) local url = "https://api.uploadcare.com/files/"..uuid.."/storage/" local result = uri(url,delete_options).read_text() end local options = { headers = headers } local date_ptn = "yyyy-MM-dd'T'HH:mm:ss" local day = Time.period{days=1} function Uploadcare.gc() logger.warn "start gc" local used = used_uuids() local count = 0 local url = "https://api.uploadcare.com/files/?limit=1000" while url ~= nil do local result = uri(url,options).read_text() result = json_parse(result) -- logger.info(stringify(result)) local results = result.results or error() local now = time_now() for _, r in ipairs(results) do count = count + 1 local uuid = r.uuid or error() local datetime_uploaded = r.datetime_uploaded or error() local date = parse_time( date_ptn, datetime_uploaded, "GMT" ) if used[uuid] then -- logger.info(uuid.." is in use") elseif now - date < day then logger.info(uuid.." is less than a day old") else logger.warn(uuid.." delete") delete(uuid) end end url = result.next end logger.info("count = "..count) logger.warn "end gc" end return Uploadcare