MCPcopy Index your code
hub / github.com/syncthing/syncthing / NeedFolderFiles

Method NeedFolderFiles

lib/model/model.go:997–1065  ·  view source on GitHub ↗

NeedFolderFiles returns paginated list of currently needed files in progress, queued, and to be queued on next puller iteration.

(folder string, page, perpage int)

Source from the content-addressed store, hash-verified

995// NeedFolderFiles returns paginated list of currently needed files in
996// progress, queued, and to be queued on next puller iteration.
997func (m *model) NeedFolderFiles(folder string, page, perpage int) ([]protocol.FileInfo, []protocol.FileInfo, []protocol.FileInfo, error) {
998 m.mut.RLock()
999 runner, runnerOk := m.folderRunners.Get(folder)
1000 cfg, cfgOK := m.folderCfgs[folder]
1001 m.mut.RUnlock()
1002
1003 if !cfgOK {
1004 return nil, nil, nil, ErrFolderMissing
1005 }
1006
1007 var progress, queued, rest []protocol.FileInfo
1008 var seen map[string]struct{}
1009
1010 p := newPager(page, perpage)
1011
1012 if runnerOk {
1013 progressNames, queuedNames, skipped := runner.Jobs(page, perpage)
1014
1015 progress = make([]protocol.FileInfo, len(progressNames))
1016 queued = make([]protocol.FileInfo, len(queuedNames))
1017 seen = make(map[string]struct{}, len(progressNames)+len(queuedNames))
1018
1019 for i, name := range progressNames {
1020 if f, ok, err := m.sdb.GetGlobalFile(folder, name); err == nil && ok {
1021 progress[i] = f
1022 seen[name] = struct{}{}
1023 }
1024 }
1025
1026 for i, name := range queuedNames {
1027 if f, ok, err := m.sdb.GetGlobalFile(folder, name); err == nil && ok {
1028 queued[i] = f
1029 seen[name] = struct{}{}
1030 }
1031 }
1032
1033 p.get -= len(seen)
1034 if p.get == 0 {
1035 return progress, queued, nil, nil
1036 }
1037 p.toSkip -= skipped
1038 }
1039
1040 if p.get > 0 {
1041 rest = make([]protocol.FileInfo, 0, p.get)
1042 it, errFn := m.sdb.AllNeededGlobalFiles(folder, protocol.LocalDeviceID, config.PullOrderAlphabetic, 0, 0)
1043 for f := range it {
1044 if cfg.IgnoreDelete && f.IsDeleted() {
1045 continue
1046 }
1047
1048 if p.skip() {
1049 continue
1050 }
1051 if _, ok := seen[f.Name]; !ok {
1052 rest = append(rest, f)
1053 p.get--
1054 }

Callers

nothing calls this directly

Calls 7

newPagerFunction · 0.85
IsDeletedMethod · 0.80
skipMethod · 0.80
GetMethod · 0.65
JobsMethod · 0.65
GetGlobalFileMethod · 0.65
AllNeededGlobalFilesMethod · 0.65

Tested by

no test coverage detected