@@ -1102,17 +1102,25 @@ def _message_fetch(self, domain, search_term=None, before=None, after=None, arou
11021102 [("subtype_id.description" , "ilike" , search_term )],
11031103 ])])
11041104 res ["count" ] = self .search_count (domain )
1105- if around is not None :
1106- messages_before = self .search (domain = [* domain , ('id' , '<=' , around )], limit = limit // 2 , order = "id DESC" )
1107- messages_after = self .search (domain = [* domain , ('id' , '>' , around )], limit = limit // 2 , order = 'id ASC' )
1108- return {** res , "messages" : (messages_after + messages_before ).sorted ('id' , reverse = True )}
1109- if before :
1110- domain = expression .AND ([domain , [('id' , '<' , before )]])
1111- if after :
1112- domain = expression .AND ([domain , [('id' , '>' , after )]])
1113- res ["messages" ] = self .search (domain , limit = limit , order = 'id ASC' if after else 'id DESC' )
1105+
1106+ def _domain (message , date_oper , id_oper ):
1107+ return expression .OR ([
1108+ [('date' , date_oper , message .date )],
1109+ expression .AND ([
1110+ [('date' , '=' , message .date )],
1111+ [('id' , id_oper , message .id )]])])
1112+
1113+ if around and (around := self .browse (around )):
1114+ messages_before = self .search (expression .AND ([domain , _domain (around , '<' , '<=' )]), limit = limit // 2 , order = 'date DESC, id DESC' )
1115+ messages_after = self .search (expression .AND ([domain , _domain (around , '>' , '>' )]), limit = limit // 2 , order = 'date ASC, id ASC' ).sorted (lambda m : (m .date , m .id ), reverse = True )
1116+ return {** res , "messages" : (messages_after + messages_before )}
1117+ if before and (before := self .browse (before )):
1118+ domain = expression .AND ([domain , _domain (before , '<' , '<' )])
1119+ if after and (after := self .browse (after )):
1120+ domain = expression .AND ([domain , _domain (after , '>' , '>' )])
1121+ res ["messages" ] = self .search (domain , limit = limit , order = 'date ASC, id ASC' if after else 'date DESC, id DESC' )
11141122 if after :
1115- res ["messages" ] = res ["messages" ].sorted ('id' , reverse = True )
1123+ res ["messages" ] = res ["messages" ].sorted (lambda m : ( m . date , m . id ) , reverse = True )
11161124 return res
11171125
11181126 def _message_notifications_to_store (self , store : Store ):
0 commit comments