@@ -283,7 +283,61 @@ func (m *Messenger) requestAllHistoricMessages(withRetries bool, aggregateRespon
283283 return nil , nil
284284 }
285285
286- now := time .Now ()
286+ canSync , err := m .canSyncWithStoreNodes ()
287+ if err != nil {
288+ return nil , err
289+ }
290+ if ! canSync {
291+ return nil , nil
292+ }
293+
294+ return m .withHistoricSyncInFlight (time .Now (), func () (* MessengerResponse , error ) {
295+ var allResponses * MessengerResponse
296+ if aggregateResponses {
297+ allResponses = & MessengerResponse {}
298+ }
299+
300+ filters := m .messaging .ChatFilters ()
301+ err = m .updateFiltersPriority (filters )
302+ if err != nil {
303+ return nil , fmt .Errorf ("failed to update filters priority: %w" , err )
304+ }
305+ defer func () {
306+ err := m .resetFiltersPriority (filters )
307+ if err != nil {
308+ m .logger .Error ("failed to reset filters priority" , zap .Error (err ))
309+ }
310+ }()
311+
312+ peerInfo := m .messaging .GetActiveStorenode ()
313+
314+ if withRetries {
315+ response , err := m .performStorenodeTask (func () (* MessengerResponse , error ) {
316+ return m .syncFilters (peerInfo , filters )
317+ }, history .WithPeerID (peerInfo .ID ))
318+ if err != nil {
319+ return nil , err
320+ }
321+ if aggregateResponses && response != nil {
322+ allResponses .AddChats (response .Chats ())
323+ allResponses .AddMessages (response .Messages ())
324+ }
325+ return allResponses , nil
326+ }
327+
328+ response , err := m .syncFilters (peerInfo , filters )
329+ if err != nil {
330+ return nil , err
331+ }
332+ if aggregateResponses && response != nil {
333+ allResponses .AddChats (response .Chats ())
334+ allResponses .AddMessages (response .Messages ())
335+ }
336+ return allResponses , nil
337+ })
338+ }
339+
340+ func (m * Messenger ) withHistoricSyncInFlight (now time.Time , fn func () (* MessengerResponse , error )) (* MessengerResponse , error ) {
287341 m .historicSyncMu .Lock ()
288342 if m .historicSyncInFlight {
289343 m .historicSyncMu .Unlock ()
@@ -312,48 +366,7 @@ func (m *Messenger) requestAllHistoricMessages(withRetries bool, aggregateRespon
312366 m .historicSyncMu .Unlock ()
313367 }()
314368
315- var allResponses * MessengerResponse
316- if aggregateResponses {
317- allResponses = & MessengerResponse {}
318- }
319-
320- filters := m .messaging .ChatFilters ()
321- err = m .updateFiltersPriority (filters )
322- if err != nil {
323- return nil , fmt .Errorf ("failed to update filters priority: %w" , err )
324- }
325- defer func () {
326- err := m .resetFiltersPriority (filters )
327- if err != nil {
328- m .logger .Error ("failed to reset filters priority" , zap .Error (err ))
329- }
330- }()
331-
332- peerInfo := m .messaging .GetActiveStorenode ()
333-
334- if withRetries {
335- response , err := m .performStorenodeTask (func () (* MessengerResponse , error ) {
336- return m .syncFilters (peerInfo , filters )
337- }, history .WithPeerID (peerInfo .ID ))
338- if err != nil {
339- return nil , err
340- }
341- if aggregateResponses && response != nil {
342- allResponses .AddChats (response .Chats ())
343- allResponses .AddMessages (response .Messages ())
344- }
345- return allResponses , nil
346- }
347-
348- response , err := m .syncFilters (peerInfo , filters )
349- if err != nil {
350- return nil , err
351- }
352- if aggregateResponses && response != nil {
353- allResponses .AddChats (response .Chats ())
354- allResponses .AddMessages (response .Messages ())
355- }
356- return allResponses , nil
369+ return fn ()
357370}
358371
359372const missingMessageCheckPeriod = 30 * time .Second
0 commit comments