Differences From
Artifact [3525ca58bc]:
9 9 co: &lib.srv.convo,
10 10 actor: &lib.store.actor,
11 11 relationship: &lib.store.relationship
12 12 ): pstr
13 13 var aux: lib.str.acc
14 14 var followed = false -- FIXME
15 15 if co.aid ~= 0 and co.who.id == actor.id then
16 - aux:compose('<a accesskey="a" class="button" href="/conf/profile?go=/@',actor.handle,'">alter</a>')
16 + aux:pcompose(&co.srv.pool,'<a accesskey="a" class="button" href="/conf/profile?go=/@',actor.handle,'">alter</a>')
17 17 elseif co.aid ~= 0 then
18 18 if not relationship.rel.follow() then
19 - aux:compose('<button accesskey="f" method="post" class="pos" name="act" value="follow">follow</button>')
19 + aux:pcompose(&co.srv.pool,'<button accesskey="f" method="post" class="pos" name="act" value="follow">follow</button>')
20 20 elseif relationship.rel.follow() then
21 - aux:compose('<button accesskey="f" method="post" class="neg" name="act" value="unfollow">unfollow</button>')
21 + aux:pcompose(&co.srv.pool,'<button accesskey="f" method="post" class="neg" name="act" value="unfollow">unfollow</button>')
22 22 end
23 23 aux:lpush('<a accesskey="h" class="button" href="/'):push(actor.xid,0):lpush('/chat">chat</a>')
24 24 if co.who.rights.powers:affect_users() and co.who:overpowers(actor) then
25 25 aux:lpush('<a accesskey="n" class="button" href="/'):push(actor.xid,0):lpush('/ctl">control</a>')
26 26 end
27 27 else
28 - aux:compose('<a accesskey="f" class="button" href="/', actor.xid, '/follow">remote follow</a>')
28 + aux:pcompose(&co.srv.pool,'<a accesskey="f" class="button" href="/', actor.xid, '/follow">remote follow</a>')
29 29 end
30 30 var auxp = aux:finalize()
31 31 var timestr: int8[26] lib.osclock.ctime_r(&actor.knownsince, ×tr[0])
32 32
33 33 var strfbuf: int8[28*4]
34 34 var stats = co.srv:actor_stats(actor.id)
35 35 var sn_posts = cs(lib.math.decstr_friendly(stats.posts, &strfbuf[ [strfbuf.type.N - 1] ]))
36 36 var sn_follows = cs(lib.math.decstr_friendly(stats.follows, sn_posts.ptr - 1))
37 37 var sn_followers = cs(lib.math.decstr_friendly(stats.followers, sn_follows.ptr - 1))
38 38 var sn_mutuals = cs(lib.math.decstr_friendly(stats.mutuals, sn_followers.ptr - 1))
39 39 var bio = lib.str.plit '<em style="opacity:0.6">tall, dark, and mysterious</em>'
40 40 if actor.bio ~= nil then
41 - bio = lib.smackdown.html(cs(actor.bio),false)
41 + bio = lib.smackdown.html(&co.srv.pool,cs(actor.bio),false)
42 42 end
43 43 var fullname = lib.render.nym(actor,0,nil,false) defer fullname:free()
44 - var comments: lib.str.acc comments:init(64)
44 + var comments: lib.str.acc comments:pool(&co.srv.pool,64)
45 45
46 46 if co.srv.cfg.master == actor.id then
47 47 var foundertxt = lib.str.plit 'founder'
48 48 if co.srv.cfg.ui_cue_founder:ref() then
49 49 if co.srv.cfg.ui_cue_founder.ct == 0 -- empty string, suppress field
50 50 then foundertxt = pstr.null()
51 51 else foundertxt = co.srv.cfg.ui_cue_founder
................................................................................
94 94
95 95 remarks = '';
96 96
97 97 auxbtn = auxp;
98 98 }
99 99 if comments.sz > 0 then profile.remarks = comments:finalize() end
100 100
101 - var ret = profile:tostr()
102 - auxp:free()
103 - if actor.bio ~= nil then bio:free() end
101 + var ret = profile:poolstr(&co.srv.pool)
102 + -- auxp:free()
103 + --if actor.bio ~= nil then bio:free() end
104 104 if comments.sz > 0 then profile.remarks:free() end
105 105 return ret
106 106 end
107 107
108 108 return render_profile