Mercurial Hosting > linkmystyle
comparison src/lib/Uploadcare.luan @ 0:8f4df159f06b
start public repo
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 20:57:49 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:8f4df159f06b |
---|---|
1 local Luan = require "luan:Luan.luan" | |
2 local error = Luan.error | |
3 local ipairs = Luan.ipairs or error() | |
4 local parse = Luan.parse or error() | |
5 local stringify = Luan.stringify or error() | |
6 local Io = require "luan:Io.luan" | |
7 local uri = Io.uri or error() | |
8 local Parsers = require "luan:Parsers.luan" | |
9 local json_parse = Parsers.json_parse or error() | |
10 local Time = require "luan:Time.luan" | |
11 local time_now = Time.now or error() | |
12 local parse_time = Time.parse or error() | |
13 local Utils = require "site:/lib/Utils.luan" | |
14 local list_to_set = Utils.list_to_set or error() | |
15 local Config = require "site:/private/Config.luan" | |
16 local keys = Config.uploadcare or error() | |
17 local Logging = require "luan:logging/Logging.luan" | |
18 local logger = Logging.logger "Uploadcare" | |
19 | |
20 | |
21 local Uploadcare = {} | |
22 | |
23 function Uploadcare.url(uuid) | |
24 uuid or error() | |
25 return "https://ucarecdn.com/"..uuid.."/-/quality/smart/" | |
26 end | |
27 | |
28 function Uploadcare.thumb_url(uuid) | |
29 uuid or error() | |
30 return "https://ucarecdn.com/"..uuid.."/-/crop/1:1/-/preview/400x400/-/quality/smart/" | |
31 end | |
32 | |
33 local function used_uuids() | |
34 local list = {} | |
35 | |
36 local Pic = require "site:/lib/Pic.luan" | |
37 local pics = Pic.search("type:pic") | |
38 for _, pic in ipairs(pics) do | |
39 list[#list+1] = pic.uuid | |
40 end | |
41 | |
42 local User = require "site:/lib/User.luan" | |
43 local users = User.search("type:user") | |
44 for _, user in ipairs(users) do | |
45 list[#list+1] = user.pic_uuid | |
46 local data = user.theme_data | |
47 if data ~= nil then | |
48 data = parse(data) | |
49 list[#list+1] = data.background_img_uuid | |
50 end | |
51 end | |
52 | |
53 return list_to_set(list) | |
54 end | |
55 | |
56 local headers = { | |
57 Accept = "application/vnd.uploadcare-v0.7+json" | |
58 Authorization = "Uploadcare.Simple "..keys.public_key..":"..keys.secret_key | |
59 } | |
60 | |
61 local delete_options = { | |
62 method = "DELETE" | |
63 headers = headers | |
64 } | |
65 | |
66 local function delete(uuid) | |
67 local url = "https://api.uploadcare.com/files/"..uuid.."/storage/" | |
68 local result = uri(url,delete_options).read_text() | |
69 end | |
70 | |
71 local options = { | |
72 headers = headers | |
73 } | |
74 | |
75 local date_ptn = "yyyy-MM-dd'T'HH:mm:ss" | |
76 local day = Time.period{days=1} | |
77 | |
78 function Uploadcare.gc() | |
79 logger.warn "start gc" | |
80 local used = used_uuids() | |
81 local count = 0 | |
82 local url = "https://api.uploadcare.com/files/?limit=1000" | |
83 while url ~= nil do | |
84 local result = uri(url,options).read_text() | |
85 result = json_parse(result) | |
86 -- logger.info(stringify(result)) | |
87 local results = result.results or error() | |
88 local now = time_now() | |
89 for _, r in ipairs(results) do | |
90 count = count + 1 | |
91 local uuid = r.uuid or error() | |
92 local datetime_uploaded = r.datetime_uploaded or error() | |
93 local date = parse_time( date_ptn, datetime_uploaded, "GMT" ) | |
94 if used[uuid] then | |
95 -- logger.info(uuid.." is in use") | |
96 elseif now - date < day then | |
97 logger.info(uuid.." is less than a day old") | |
98 else | |
99 logger.warn(uuid.." delete") | |
100 delete(uuid) | |
101 end | |
102 end | |
103 url = result.next | |
104 end | |
105 logger.info("count = "..count) | |
106 logger.warn "end gc" | |
107 end | |
108 | |
109 return Uploadcare |