8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
local terra
render_media_gallery(co: &lib.srv.convo, path: lib.mem.ptr(lib.mem.ref(int8)), uid: uint64, acc: &lib.str.acc)
-- note that when calling this function, path must be adjusted so that path(0)
-- eq "media"
var owner = false
if co.aid ~= 0 and co.who.id == uid then owner = true end
var ou = co.srv:actor_fetch_uid(uid)
if not ou then goto e404 end
do defer ou:free()
var pfx = pstr.null()
if not owner then
var pa = co:stra(32)
pa:lpush('/')
if ou(0).origin ~= 0 then pa:lpush('@') end
pa:push(ou(0).xid,0)
pfx = pa:finalize()
end
if path.ct >= 3 and path(1):cmp('a') then
var id, idok = lib.math.shorthand.parse(path(2).ptr, path(2).ct)
if not idok then goto e404 end
var art = co.srv:artifact_fetch(uid, id)
................................................................................
if folders.ct > 0 then
var fa = co:stra(128)
var fldr = co:pgetv('folder')
for i=0,folders.ct do
var ule = lib.html.urlenc(&co.srv.pool,folders(i), true) -- defer ule:free()
var san = lib.html.sanitize(&co.srv.pool,folders(i), true) -- defer san:free()
fa:lpush('<a href="'):ppush(pfx):lpush('/media?folder='):ppush(ule)
:lpush('">'):ppush(san):lpush('</a>')
lib.dbg('checking folder ',{fldr.ptr,fldr.ct},' against ',{folders(i).ptr,folders(i).ct})
if fldr:ref() and folders(i):cmp(fldr)
then folder = folders(i) lib.dbg('folder match ',{fldr.ptr,fldr.ct})
else folders(i):free()
end
end
fa:lpush('<hr>')
view.folders = fa:finalize()
folders:free()
end
if owner then
view.menu = '<a class="pos" href="/media/upload">upload</a><hr>'
end
var md = co.srv:artifact_enum_uid(uid, folder)
var gallery: lib.str.acc gallery:pool(&co.srv.pool,256)
var files: lib.str.acc files:pool(&co.srv.pool,256)
for i=0,md.ct do
var desc = lib.smackdown.html(&co.srv.pool,pstr{md(i)(0).desc,0}, true) --defer desc:free()
|
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
local terra
render_media_gallery(co: &lib.srv.convo, path: lib.mem.ptr(lib.mem.ref(int8)), uid: uint64, acc: &lib.str.acc)
-- note that when calling this function, path must be adjusted so that path(0)
-- eq "media"
var owner = false
if co.aid ~= 0 and co.who.id == uid then owner = true end
var ou = co:uid2actor(uid)
if ou == nil then goto e404 end
do -- defer ou:free()
var pfx = pstr.null()
if not owner then
var pa = co:stra(32)
pa:lpush('/')
if ou.origin ~= 0 then pa:lpush('@') end
pa:push(ou.xid,0)
pfx = pa:finalize()
end
if path.ct >= 3 and path(1):cmp('a') then
var id, idok = lib.math.shorthand.parse(path(2).ptr, path(2).ct)
if not idok then goto e404 end
var art = co.srv:artifact_fetch(uid, id)
................................................................................
if folders.ct > 0 then
var fa = co:stra(128)
var fldr = co:pgetv('folder')
for i=0,folders.ct do
var ule = lib.html.urlenc(&co.srv.pool,folders(i), true) -- defer ule:free()
var san = lib.html.sanitize(&co.srv.pool,folders(i), true) -- defer san:free()
fa:lpush('<a class="button" href="'):ppush(pfx):lpush('/media?folder='):ppush(ule)
:lpush('">'):ppush(san):lpush('</a>')
lib.dbg('checking folder ',{fldr.ptr,fldr.ct},' against ',{folders(i).ptr,folders(i).ct})
if fldr:ref() and folders(i):cmp(fldr)
then folder = folders(i) lib.dbg('folder match ',{fldr.ptr,fldr.ct})
else folders(i):free()
end
end
fa:lpush('<hr>')
view.folders = fa:finalize()
folders:free()
end
if owner then
view.menu = '<a class="pos button" href="/media/upload">upload</a><hr>'
end
var md = co.srv:artifact_enum_uid(uid, folder)
var gallery: lib.str.acc gallery:pool(&co.srv.pool,256)
var files: lib.str.acc files:pool(&co.srv.pool,256)
for i=0,md.ct do
var desc = lib.smackdown.html(&co.srv.pool,pstr{md(i)(0).desc,0}, true) --defer desc:free()
|