github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/engine/contact_sync_background.go (about) 1 // Copyright 2019 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package engine 5 6 import ( 7 "sync" 8 "time" 9 10 "github.com/keybase/client/go/libkb" 11 ) 12 13 var ContactSyncBackgroundSettings = BackgroundTaskSettings{ 14 Start: 5 * time.Second, 15 // in case we are foregrounding all the time, wait some more time because 16 // this sync is heavy, and the timer is reset so it could run more than 17 // once an hour if the mobile OS kills the app. But don't do this in 18 // background active mode, or we might not run before we are 19 // background passive'd. 20 MobileForegroundStartAddition: 1 * time.Minute, 21 StartStagger: 5 * time.Second, 22 WakeUp: 15 * time.Second, 23 Interval: 1 * time.Hour, 24 Limit: 5 * time.Minute, 25 } 26 27 type ContactSyncBackground struct { 28 libkb.Contextified 29 sync.Mutex 30 31 task *BackgroundTask 32 } 33 34 func NewContactSyncBackground(g *libkb.GlobalContext) *ContactSyncBackground { 35 task := NewBackgroundTask(g, &BackgroundTaskArgs{ 36 Name: "ContactSyncBackground", 37 F: ContactSyncBackgroundRound, 38 Settings: ContactSyncBackgroundSettings, 39 }) 40 return &ContactSyncBackground{ 41 Contextified: libkb.NewContextified(g), 42 // Install the task early so that Shutdown can be called before RunEngine. 43 task: task, 44 } 45 } 46 47 func (e *ContactSyncBackground) Name() string { 48 return "ContactSyncBackground" 49 } 50 51 func (e *ContactSyncBackground) Prereqs() Prereqs { 52 return Prereqs{} 53 } 54 55 func (e *ContactSyncBackground) RequiredUIs() []libkb.UIKind { 56 return []libkb.UIKind{} 57 } 58 59 func (e *ContactSyncBackground) SubConsumers() []libkb.UIConsumer { 60 return []libkb.UIConsumer{} 61 } 62 63 // Run starts the engine. 64 // Returns immediately, kicks off a background goroutine. 65 func (e *ContactSyncBackground) Run(m libkb.MetaContext) (err error) { 66 return RunEngine2(m, e.task) 67 } 68 69 func (e *ContactSyncBackground) Shutdown() { 70 e.task.Shutdown() 71 } 72 73 func ContactSyncBackgroundRound(mctx libkb.MetaContext) error { 74 g := mctx.G() 75 if !g.ActiveDevice.Valid() { 76 mctx.Debug("ContactSyncBackgroundRound; not logged in") 77 return nil 78 } 79 80 if mctx.G().IsMobileAppType() { 81 netState := mctx.G().MobileNetState.State() 82 if netState.IsLimited() { 83 mctx.Debug("ContactSyncBackgroundRound: not running; network state: %v", netState) 84 return nil 85 } 86 } 87 88 ui, err := mctx.G().UIRouter.GetChatUI() 89 if err != nil || ui == nil { 90 mctx.Debug("ContactSyncBackgroundRound: no chat UI found; err: %s", err) 91 return nil 92 } 93 94 return ui.TriggerContactSync(mctx.Ctx()) 95 }