parsav  Diff

Differences From Artifact [826b7b2edb]:

To Artifact [6a947d38ca]:


    45     45   			for j=0, lst.ct do all:push(lst.ptr[j]) end
    46     46   			lst:free()
    47     47   		end
    48     48   	end
    49     49   	return all
    50     50   end
    51     51   
    52         -terra srv:timeline_instance_fetch(r: lib.store.range): lib.mem.vec(lib.mem.ptr(lib.store.post))
    53         -	var all: lib.mem.vec(lib.mem.ptr(lib.store.post)) all:init(64)
    54         -	for i=0,self.sources.ct do var src = self.sources.ptr + i
    55         -		if src.handle ~= nil and src.backend.timeline_instance_fetch ~= nil then
    56         -			var lst = src:timeline_instance_fetch(r)
    57         -			all:assure(all.sz + lst.ct)
    58         -			for j=0, lst.ct do all:push(lst.ptr[j]) end
    59         -			lst:free()
           52  +local function deftlfetch(fnname, ...)
           53  +	local args = {}
           54  +	for i,ty in ipairs{...} do args[#args + 1] = symbol(ty) end
           55  +	args[#args + 1] = symbol(lib.store.range)
           56  +	fnname = 'timeline_' .. fnname
           57  +	srv.methods[fnname] = terra(self: &srv, [args]): lib.mem.vec(lib.mem.ptr(lib.store.post))
           58  +		var all: lib.mem.vec(lib.mem.ptr(lib.store.post)) all:init(64)
           59  +		for i=0,self.sources.ct do var src = self.sources.ptr + i
           60  +			if src.handle ~= nil and src.backend.[fnname] ~= nil then
           61  +				var lst = src:[fnname]([args])
           62  +				all:assure(all.sz + lst.ct)
           63  +				for j=0, lst.ct do all:push(lst.ptr[j]) end
           64  +				lst:free()
           65  +			end
    60     66   		end
           67  +		return all
    61     68   	end
    62         -	return all
    63     69   end
    64     70   
           71  +deftlfetch('instance_fetch')
           72  +deftlfetch('actor_fetch_uid', uint64)
           73  +
    65     74   srv.metamethods.__methodmissing = macro(function(meth, self, ...)
    66     75   	local primary, ptr, stat, simple, oid = 0,1,2,3,4
    67     76   	local tk, rt = primary
    68     77   	local expr = {...}
    69     78   	for _,f in pairs(lib.store.backend.entries) do
    70     79   		local fn = f.field or f[1]
    71     80   		local ft = f.type or f[2]
................................................................................
   168    177   		mgr: &lib.net.mg_mgr
   169    178   		peer: lib.net.mg_addr
   170    179   	}
   171    180   	terra getpeer(con: &lib.net.mg_connection)
   172    181   		return [&strucheader](con).peer
   173    182   	end
   174    183   end
          184  +
          185  +terra convo:uid2actor_live(uid: uint64)
          186  +	var actor = self.srv:actor_fetch_uid(uid)
          187  +	if actor:ref() then
          188  +		if self.aid ~= 0 and self.who.id ~= uid then
          189  +			actor(0).relationship = self.srv:actor_rel_calc(self.who.id, uid)
          190  +		else -- defensive branch
          191  +			actor(0).relationship = lib.store.relationship {
          192  +				agent = 0, patient = uid;
          193  +				rel   = [lib.store.relation.null],
          194  +				recip = [lib.store.relation.null],
          195  +			}
          196  +		end
          197  +	end
          198  +	return actor
          199  +end
          200  +
          201  +terra convo:uid2actor(uid: uint64)
          202  +	var actor: &lib.store.actor = nil
          203  +	for j = 0, self.actorcache.top do
          204  +		if uid == self.actorcache(j).ptr.id then
          205  +			actor = self.actorcache(j).ptr
          206  +			break
          207  +		end
          208  +	end
          209  +	if actor == nil then
          210  +		actor = self.actorcache:insert(self:uid2actor_live(uid)).ptr
          211  +	end
          212  +	return actor
          213  +end
   175    214   
   176    215   terra convo:rawpage(code: uint16, pg: convo.page, hdrs: lib.mem.ptr(lib.http.header))
   177    216   	var doc = data.view.docskel {
   178    217   		instance = self.srv.cfg.instance;
   179    218   		title = pg.title;
   180    219   		body = pg.body;
   181    220   		class = pg.class;