Differences From
Artifact [33ecd773b1]:
213 213 elseif self.mode == 3 then
214 214 return 0,0,self.to_idx,self.from_idx
215 215 else lib.bail('invalid mode on timeline range!') end
216 216 end
217 217
218 218 struct m.post {
219 219 id: uint64
220 + uri: str
220 221 author: uint64
221 222 subject: str
222 223 body: str
223 224 acl: str
224 225 posted: m.timepoint
225 226 discovered: m.timepoint
226 227 edited: m.timepoint
................................................................................
489 490 circle_destroy: {&m.source, uint64, uint64} -> {}
490 491 circle_members_fetch_cid: {&m.source, &lib.mem.pool, uint64} -> lib.mem.ptr(uint64)
491 492 circle_members_fetch_name: {&m.source, &lib.mem.pool, uint64, pstring} -> lib.mem.ptr(uint64)
492 493 circle_members_add_uid: {&m.source, uint64, uint64} -> {}
493 494 circle_members_del_uid: {&m.source, uint64, uint64} -> {}
494 495 circle_memberships_uid: {&m.source, &lib.mem.pool, uint64, uint64} -> lib.mem.ptr(m.circle)
495 496
497 + thread_top_find: {&m.source, uint64} -> uint64
498 + -- NOTE: this won't work if conversations are broken across multiple data sources!
499 + -- if this is a thing that's likely to happen, the overlord-side wrapper for this
500 + -- function (srv.t) should implement a more sophisticated algorithm over all the
501 + -- data sources, instead of just stopping when one parent is found
496 502 thread_latest_arrival_calc: {&m.source, uint64} -> m.timepoint
497 503
498 504 artifact_instantiate: {&m.source, lib.mem.ptr(uint8), lib.mem.ptr(int8)} -> uint64
499 505 -- instantiate an artifact in the database, either installing a new
500 506 -- artifact or returning the id of an existing artifact with the same hash
501 507 -- artifact: bytea
502 508 -- mime: pstring