(folder string, page, perpage int)
| 1081 | } |
| 1082 | |
| 1083 | func (m *model) LocalChangedFolderFiles(folder string, page, perpage int) ([]protocol.FileInfo, error) { |
| 1084 | m.mut.RLock() |
| 1085 | _, ok := m.folderCfgs[folder] |
| 1086 | m.mut.RUnlock() |
| 1087 | |
| 1088 | if !ok { |
| 1089 | return nil, ErrFolderMissing |
| 1090 | } |
| 1091 | |
| 1092 | ros, err := m.sdb.CountReceiveOnlyChanged(folder) |
| 1093 | if err != nil { |
| 1094 | return nil, err |
| 1095 | } |
| 1096 | if ros.TotalItems() == 0 { |
| 1097 | return nil, nil |
| 1098 | } |
| 1099 | |
| 1100 | p := newPager(page, perpage) |
| 1101 | files := make([]protocol.FileInfo, 0, perpage) |
| 1102 | |
| 1103 | // This could be made more efficient with a specifically targeted DB |
| 1104 | // call |
| 1105 | it, errFn := m.sdb.AllLocalFiles(folder, protocol.LocalDeviceID) |
| 1106 | for f := range it { |
| 1107 | if !f.IsReceiveOnlyChanged() { |
| 1108 | continue |
| 1109 | } |
| 1110 | if p.skip() { |
| 1111 | continue |
| 1112 | } |
| 1113 | files = append(files, f) |
| 1114 | if p.done() { |
| 1115 | break |
| 1116 | } |
| 1117 | } |
| 1118 | if err := errFn(); err != nil { |
| 1119 | return nil, err |
| 1120 | } |
| 1121 | |
| 1122 | return files, nil |
| 1123 | } |
| 1124 | |
| 1125 | type pager struct { |
| 1126 | toSkip, get int |
nothing calls this directly
no test coverage detected