parsav  Diff

Differences From Artifact [da27a31f83]:

To Artifact [5c4e9df122]:


    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