@@ -321,10 +321,45 @@ async def on_PUT(
321321 return 200 , {}
322322
323323
324+ class BeeperInboxBatchArchiveServlet (RestServlet ):
325+ """
326+ PUT /com.beeper.inbox/batch_archive HTTP/1.1
327+ """
328+
329+ PATTERNS = list (
330+ client_patterns (
331+ "/com.beeper.inbox/batch_archive" ,
332+ releases = (), # not in the matrix spec, only include under /unstable
333+ )
334+ )
335+
336+ def __init__ (self , hs : "HomeServer" ):
337+ super ().__init__ ()
338+ self .auth = hs .get_auth ()
339+ self .clock = hs .get_clock ()
340+ self .store = hs .get_datastores ().main
341+ self .handler = hs .get_account_data_handler ()
342+
343+ async def on_POST (self , request : SynapseRequest ) -> Tuple [int , JsonDict ]:
344+ requester = await self .auth .get_user_by_req (request )
345+ ts = self .clock .time_msec ()
346+ body = parse_json_object_from_request (request )
347+
348+ done = {"updated_ts" : ts , "at_ts" : ts }
349+ for room_id in body ["room_ids" ]:
350+ # TODO in transaction
351+ await self .handler .add_account_data_to_room (
352+ requester .user .to_string (), room_id , "com.beeper.inbox.done" , done
353+ )
354+
355+ return 200 , {}
356+
357+
324358def register_servlets (hs : "HomeServer" , http_server : HttpServer ) -> None :
325359 AccountDataServlet (hs ).register (http_server )
326360 RoomAccountDataServlet (hs ).register (http_server )
327361 RoomBeeperInboxStateServlet (hs ).register (http_server )
362+ BeeperInboxBatchArchiveServlet (hs ).register (http_server )
328363
329364 if hs .config .experimental .msc3391_enabled :
330365 UnstableAccountDataServlet (hs ).register (http_server )
0 commit comments