Differences From
Artifact [83917dbbe9]:
34 34 retweeter = co.actorcache:insert(co.srv:actor_fetch_uid(p.rtdby)).ptr
35 35 end
36 36
37 37 ::foundauth::
38 38 var timestr: int8[26] lib.osclock.ctime_r(&p.posted, ×tr[0])
39 39 for i=0,26 do if timestr[i] == @'\n' then timestr[i] = 0 break end end -- 🙄
40 40
41 - var bhtml = lib.smackdown.html([lib.mem.ptr(int8)] {ptr=p.body,ct=0},false)
42 - defer bhtml:free()
41 + var bhtml = lib.smackdown.html(&co.srv.pool, [lib.mem.ptr(int8)] {ptr=p.body,ct=0},false)
42 + --defer bhtml:free()
43 43
44 44 var idbuf: int8[lib.math.shorthand.maxlen]
45 45 var idlen = lib.math.shorthand.gen(p.id, idbuf)
46 - var permalink: lib.str.acc permalink:compose('/post/',{idbuf,idlen})
46 + var permalink: lib.str.acc permalink:pool(&co.srv.pool, 7+idlen):lpush('/post/'):push(idbuf,idlen)
47 47 var fullname = lib.render.nym(author,0,nil, false) defer fullname:free()
48 48 var tpl = data.view.tweet {
49 49 text = bhtml;
50 50 subject = cs(lib.coalesce(p.subject,''));
51 51 nym = fullname;
52 52 when = cs(×tr[0]);
53 53 avatar = cs(author.avatar);
................................................................................
61 61 var parent = co.srv:post_fetch(p.parent) defer parent:free()
62 62 if not parent then
63 63 lib.bail('schema integrity violation - could not match post to parent')
64 64 end
65 65 var pauth = co.srv:actor_fetch_uid(parent(0).author) defer pauth:free()
66 66 var pidbuf: int8[lib.math.shorthand.maxlen]
67 67 var pidlen = lib.math.shorthand.gen(p.parent, pidbuf)
68 - var pa: lib.str.acc pa:init(128)
68 + var pa: lib.str.acc pa:pool(&co.srv.pool, 128)
69 69 pa:lpush('<small>in reply to <a class="username" href="/post/'):push(&pidbuf[0],pidlen):lpush('">')
70 70 lib.render.nym(pauth.ptr,0,&pa,true)
71 71 pa:lpush('</a></small>')
72 72 tpl.extra = pa:finalize()
73 73 end
74 74 if p.rts + p.likes > 0 then
75 - var s: lib.str.acc s:init(128)
75 + var s: lib.str.acc s:pool(&co.srv.pool,128)
76 76 s:lpush('<div class="stats">')
77 77 if p.rts > 0 then s:lpush('<div class="rt">' ):dpush(p.rts ):lpush('</div>') end
78 78 if p.likes > 0 then s:lpush('<div class="like">'):dpush(p.likes):lpush('</div>') end
79 79 s:lpush('</div>')
80 80 tpl.stats = s:finalize()
81 81 end
82 82
................................................................................
91 91 attrcur = lib.str.cpy(attrcur, '"')
92 92 end
93 93 if co.aid ~= 0 and p.author == co.who.id then attrcur = lib.str.cpy(attrcur, ' data-own') end
94 94 if retweeter ~= nil then attrcur = lib.str.cpy(attrcur, ' data-rt') end
95 95
96 96 if attrcur ~= &attrbuf[0] then tpl.attr = &attrbuf[0] end
97 97
98 - defer tpl.permalink:free()
98 + --defer tpl.permalink:free()
99 99 if acc ~= nil then
100 100 if retweeter ~= nil then push_promo_header(co, acc, retweeter, p.rtact) end
101 101 tpl:append(acc)
102 102 if retweeter ~= nil then acc:lpush('</div>') end
103 - if p.rts + p.likes > 0 then tpl.stats:free() end
104 - if tpl.extra.ct > 0 then tpl.extra:free() end
103 + --if p.rts + p.likes > 0 then tpl.stats:free() end
104 + --if tpl.extra.ct > 0 then tpl.extra:free() end
105 105 return [lib.mem.ptr(int8)]{ptr=nil,ct=0}
106 106 end
107 107
108 108 if retweeter ~= nil then
109 - var rta: lib.str.acc rta:init(512)
109 + var rta: lib.str.acc rta:pool(&co.srv.pool,512)
110 110 push_promo_header(co, &rta, retweeter, p.rtact)
111 111 tpl:append(&rta) rta:lpush('</div>')
112 - if tpl.extra.ct > 0 then tpl.extra:free() end
112 + --if tpl.extra.ct > 0 then tpl.extra:free() end
113 113 return rta:finalize()
114 114 else
115 - var txt = tpl:tostr()
116 - if tpl.extra.ct > 0 then tpl.extra:free() end
117 - if p.rts + p.likes > 0 then tpl.stats:free() end
115 + var txt = tpl:poolstr(&co.srv.pool)
116 + --if tpl.extra.ct > 0 then tpl.extra:free() end
117 + --if p.rts + p.likes > 0 then tpl.stats:free() end
118 118 return txt
119 119 end
120 120 end
121 121 return render_tweet