MCPcopy
hub / github.com/syncthing/syncthing / processUpdate

Method processUpdate

lib/model/folder_summary.go:227–305  ·  view source on GitHub ↗
(ev events.Event)

Source from the content-addressed store, hash-verified

225}
226
227func (c *folderSummaryService) processUpdate(ev events.Event) {
228 var folder string
229
230 switch ev.Type {
231 case events.DeviceConnected, events.ClusterConfigReceived:
232 // When a device connects we schedule a refresh of all
233 // folders shared with that device.
234
235 var deviceID protocol.DeviceID
236 if ev.Type == events.DeviceConnected {
237 data := ev.Data.(map[string]string)
238 deviceID, _ = protocol.DeviceIDFromString(data["id"])
239 } else {
240 data := ev.Data.(ClusterConfigReceivedEventData)
241 deviceID = data.Device
242 }
243
244 c.foldersMut.Lock()
245 nextFolder:
246 for _, folder := range c.cfg.Folders() {
247 for _, dev := range folder.Devices {
248 if dev.DeviceID == deviceID {
249 c.folders[folder.ID] = struct{}{}
250 continue nextFolder
251 }
252 }
253 }
254 c.foldersMut.Unlock()
255
256 return
257
258 case events.DownloadProgress:
259 data := ev.Data.(map[string]map[string]*PullerProgress)
260 c.foldersMut.Lock()
261 for folder := range data {
262 c.folders[folder] = struct{}{}
263 }
264 c.foldersMut.Unlock()
265 return
266
267 case events.StateChanged:
268 data := ev.Data.(map[string]interface{})
269 if data["to"].(string) != "idle" {
270 return
271 }
272 if from := data["from"].(string); from != "syncing" && from != "sync-preparing" {
273 return
274 }
275
276 // The folder changed to idle from syncing. We should do an
277 // immediate refresh to update the GUI. The send to
278 // c.immediate must be nonblocking so that we can continue
279 // handling events.
280
281 folder = data["folder"].(string)
282 select {
283 case c.immediate <- folder:
284 c.foldersMut.Lock()

Callers 1

listenForUpdatesMethod · 0.95

Calls 3

DeviceIDFromStringFunction · 0.92
UnlockMethod · 0.80
FoldersMethod · 0.65

Tested by

no test coverage detected