Differences From
Artifact [da27a31f83]:
14 14 var owner = false
15 15 if co.aid ~= 0 and co.who.id == uid then owner = true end
16 16 var ou = co.srv:actor_fetch_uid(uid)
17 17 if not ou then goto e404 end
18 18 do defer ou:free()
19 19 var pfx = pstr.null()
20 20 if not owner then
21 - var pa: lib.str.acc pa:init(32)
21 + var pa = co:stra(32)
22 22 pa:lpush('/')
23 23 if ou(0).origin ~= 0 then pa:lpush('@') end
24 24 pa:push(ou(0).xid,0)
25 25 pfx = pa:finalize()
26 26 end
27 27
28 28 if path.ct >= 3 and path(1):cmp(lib.str.lit'a') then
................................................................................
31 31 var art = co.srv:artifact_fetch(uid, id)
32 32 if not art then goto e404 end
33 33 if path.ct == 3 then
34 34 -- sniff out the artifact type and display the appropriate viewer
35 35 var artid = cs(art(0).url)
36 36 var btns: lib.str.acc
37 37 if owner then
38 - btns:compose('<a class="neg button" href="',pfx,'/media/a/',artid,'/del">delete</a><a class="button" href="',pfx,'/media/a/',artid,'/edit">alter</a>')
38 + btns:pcompose(&co.srv.pool,'<a class="neg button" href="',pfx,'/media/a/',artid,'/del">delete</a><a class="button" href="',pfx,'/media/a/',artid,'/edit">alter</a>')
39 39 else
40 - btns:compose('<a class="pos button" href="',pfx,'/media/a/',artid,'/collect">collect</a>')
40 + btns:pcompose(&co.srv.pool,'<a class="pos button" href="',pfx,'/media/a/',artid,'/collect">collect</a>')
41 41 end
42 - var btntxt = btns:finalize() defer btntxt:free()
43 - var desc = lib.smackdown.html(pstr{art(0).desc,0}, true) defer desc:free()
42 + var btntxt = btns:finalize() -- defer btntxt:free()
43 + var desc = lib.smackdown.html(&co.srv.pool, pstr{art(0).desc,0}, true) -- defer desc:free()
44 44 var viewerprops = {
45 45 pfx = pfx, desc = desc;
46 46 id = artid; btns = btntxt;
47 47 }
48 48 if lib.str.ncmp(art(0).mime, 'image/', 6) == 0 then
49 49 var view = data.view.media_image(viewerprops)
50 - var pg = view:tostr()
50 + var pg = view:poolstr(&co.srv.pool)
51 51 co:stdpage([lib.srv.convo.page] {
52 52 title = lib.str.plit'media :: image';
53 53 class = lib.str.plit'media viewer img';
54 54 cache = false, body = pg;
55 55 })
56 - pg:free()
56 + --pg:free()
57 57 elseif lib.str.cmp(art(0).mime, 'text/markdown') == 0 then
58 58 var view = data.view.media_text(viewerprops)
59 59 var text, mime = co.srv:artifact_load(id) mime:free()
60 - view.text = lib.smackdown.html(pstr{[rawstring](text.ptr),text.ct}, false)
60 + view.text = lib.smackdown.html(&co.srv.pool, pstr{[rawstring](text.ptr),text.ct}, false)
61 61 text:free()
62 - var pg = view:tostr()
63 - view.text:free()
62 + var pg = view:poolstr(&co.srv.pool)
63 + --view.text:free()
64 64 co:stdpage([lib.srv.convo.page] {
65 65 title = lib.str.plit'media :: text';
66 66 class = lib.str.plit'media viewer text';
67 67 cache = false, body = pg;
68 68 })
69 - pg:free()
69 + --pg:free()
70 70 elseif
71 71 lib.str.ncmp(art(0).mime, 'text/', 5) == 0 or
72 72 lib.str.cmp(art(0).mime, 'application/x-perl') == 0 or
73 73 lib.str.cmp(art(0).mime, 'application/sql') == 0
74 74 -- and so on (we need a mimelib at some point) --
75 75 then
76 76 var view = data.view.media_text(viewerprops)
77 77 var text, mime = co.srv:artifact_load(id) mime:free()
78 - var san = lib.html.sanitize(pstr{[rawstring](text.ptr),text.ct}, false)
78 + var san = lib.html.sanitize(&co.srv.pool,pstr{[rawstring](text.ptr),text.ct}, false)
79 79 text:free()
80 80 view.text = lib.str.acc{}:compose('<pre>',san,'</pre>'):finalize()
81 81 san:free()
82 82 var pg = view:tostr()
83 83 view.text:free()
84 84 co:stdpage([lib.srv.convo.page] {
85 85 title = lib.str.plit'media :: text';
................................................................................
123 123 folders = pstr{'',0};
124 124 directory = pstr{'',0};
125 125 images = pstr{'',0};
126 126 pfx = pfx;
127 127 }
128 128
129 129 if folders.ct > 0 then
130 - var fa: lib.str.acc fa:init(128)
130 + var fa: lib.str.acc fa:pool(&co.srv.pool,128)
131 131 var fldr = co:pgetv('folder')
132 132 for i=0,folders.ct do
133 - var ule = lib.html.urlenc(folders(i), true) defer ule:free()
134 - var san = lib.html.sanitize(folders(i), true) defer san:free()
133 + var ule = lib.html.urlenc(&co.srv.pool,folders(i), true) -- defer ule:free()
134 + var san = lib.html.sanitize(&co.srv.pool,folders(i), true) -- defer san:free()
135 135 fa:lpush('<a href="'):ppush(pfx):lpush('/media?folder='):ppush(ule)
136 136 :lpush('">'):ppush(san):lpush('</a>')
137 137 lib.dbg('checking folder ',{fldr.ptr,fldr.ct},' against ',{folders(i).ptr,folders(i).ct})
138 138 if fldr:ref() and folders(i):cmp(fldr)
139 139 then folder = folders(i) lib.dbg('folder match ',{fldr.ptr,fldr.ct})
140 140 else folders(i):free()
141 141 end
................................................................................
146 146 end
147 147
148 148 if owner then
149 149 view.menu = P'<a class="pos" href="/media/upload">upload</a><hr>'
150 150 end
151 151
152 152 var md = co.srv:artifact_enum_uid(uid, folder)
153 - var gallery: lib.str.acc gallery:init(256)
154 - var files: lib.str.acc files:init(256)
153 + var gallery: lib.str.acc gallery:pool(&co.srv.pool,256)
154 + var files: lib.str.acc files:pool(&co.srv.pool,256)
155 155 for i=0,md.ct do
156 - var desc = lib.smackdown.html(pstr{md(i)(0).desc,0}, true) defer desc:free()
156 + var desc = lib.smackdown.html(&co.srv.pool,pstr{md(i)(0).desc,0}, true) --defer desc:free()
157 157 if lib.str.ncmp(md(i)(0).mime, 'image/', 6) == 0 then
158 158 gallery:lpush('<a class="thumb" href="'):ppush(pfx):lpush('/media/a/')
159 159 :push(md(i)(0).url,0):lpush('"><img src="/file/'):push(md(i)(0).url,0)
160 160 :lpush('"><div class="caption">'):ppush(desc)
161 161 :lpush('</div></a>')
162 162 else
163 - var mime = lib.html.sanitize(pstr{md(i)(0).mime,0}, true) defer mime:free() --just in case
163 + var mime = lib.html.sanitize(&co.srv.pool,pstr{md(i)(0).mime,0}, true) --defer mime:free() --just in case
164 164 files:lpush('<a class="file" href="'):ppush(pfx):lpush('/media/a/')
165 165 :push(md(i)(0).url,0):lpush('"><span class="label">'):ppush(desc)
166 166 :lpush('</span> <span class="mime">'):ppush(mime)
167 167 :lpush('</span></a>')
168 168 end
169 169 md(i):free()
170 170 end
................................................................................
171 171
172 172 view.images = gallery:finalize()
173 173 view.directory = files:finalize()
174 174
175 175 if acc ~= nil then
176 176 view:append(acc)
177 177 else
178 - lib.dbg('emitting page')
179 - var pg = view:tostr() defer pg:free()
180 - lib.dbg('compiled page')
178 + var pg = view:poolstr(&co.srv.pool) -- defer pg:free()
181 179 co:stdpage([lib.srv.convo.page] {
182 180 title = P'media';
183 181 class = P'media manager';
184 182 cache = false;
185 183 body = pg;
186 184 })
187 - lib.dbg('sent page')
188 185 end
189 186
190 - view.images:free()
191 - view.directory:free()
192 - if view.folders.ct > 0 then view.folders:free() end
187 + --view.images:free()
188 + --view.directory:free()
189 + --if view.folders.ct > 0 then view.folders:free() end
193 190 if folder.ct > 0 then folder:free() end
194 191 if md:ref() then md:free() end
195 192 end
196 - if not owner then pfx:free() end
193 + --if not owner then pfx:free() end
197 194 return end
198 195
199 196 ::e404:: co:complain(404,'media not found','no such media exists on this server')
200 197 end
201 198
202 199 return render_media_gallery