parsav  Diff

Differences From Artifact [5d4cebec04]:

To Artifact [fc1c52be55]:


  1587   1587   			for i=0,res.sz do
  1588   1588   				var id = res:int(uint64,i,0)
  1589   1589   				var idbuf: int8[lib.math.shorthand.maxlen]
  1590   1590   				var idlen = lib.math.shorthand.gen(id, &idbuf[0])
  1591   1591   				var desc = res:_string(i,2)
  1592   1592   				var folder = res:_string(i,3)
  1593   1593   				var mime = res:_string(i,4)
  1594         -				var url = lib.str.acc{}:init(48):lpush('/media/a/'):push(&idbuf[0],idlen):finalize() defer url:free()
  1595   1594   				m.ptr[i] = [ lib.str.encapsulate(lib.store.artifact, {
  1596   1595   					desc =  {`desc.ptr, `desc.ct + 1};
  1597   1596   					folder = {`folder.ptr, `folder.ct + 1};
  1598   1597   					mime = {`mime.ptr, `mime.ct + 1};
  1599         -					url = {`url.ptr, `url.ct + 1};
         1598  +					url = {`&idbuf[0], `idlen + 1};
  1600   1599   				}) ]
  1601   1600   				m(i).ptr.rid = id
  1602   1601   				m(i).ptr.owner = uid
  1603   1602   			end
  1604   1603   			return m
  1605   1604   		else return [lib.mem.lstptr(lib.store.artifact)].null() end
  1606   1605   	end];
         1606  +
         1607  +	artifact_load = [terra(
         1608  +		src: &lib.store.source,
         1609  +		rid: uint64
         1610  +	): {binblob, pstring}
         1611  +		var r = queries.artifact_load.exec(src,rid)
         1612  +		if r.sz == 0 then return binblob.null(), pstring.null() end
         1613  +
         1614  +		var mime = r:String(0,1)
         1615  +		var mbin = r:bin(0,0)
         1616  +		var bin = lib.mem.heapa(uint8,mbin.ct)
         1617  +		lib.mem.cpy(bin.ptr, mbin.ptr, bin.ct)
         1618  +
         1619  +		r:free()
         1620  +		return bin, mime
         1621  +	end];
  1607   1622   
  1608   1623   	post_attach_ctl = [terra(
  1609   1624   		src: &lib.store.source,
  1610   1625   		post: uint64,
  1611   1626   		artifact: uint64,
  1612   1627   		detach: bool
  1613   1628   	): {}