parsav  Diff

Differences From Artifact [83917dbbe9]:

To Artifact [57f4f6bb5e]:


    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, &timestr[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(&timestr[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