SearchLocks returns a channel of locks which match the given name/value filter If limit > 0 then search stops at that number of locks If localOnly = true, don't query the server & report only own local locks
(filter map[string]string, limit int, localOnly bool, cached bool)
| 211 | // If limit > 0 then search stops at that number of locks |
| 212 | // If localOnly = true, don't query the server & report only own local locks |
| 213 | func (c *Client) SearchLocks(filter map[string]string, limit int, localOnly bool, cached bool) ([]Lock, error) { |
| 214 | if localOnly { |
| 215 | return c.searchLocalLocks(filter, limit) |
| 216 | } else if cached { |
| 217 | if len(filter) > 0 || limit != 0 { |
| 218 | return []Lock{}, errors.New(tr.Tr.Get("can't search cached locks when filter or limit is set")) |
| 219 | } |
| 220 | |
| 221 | locks := []Lock{} |
| 222 | err := c.readLocksFromCacheFile("remote", func(decoder *json.Decoder) error { |
| 223 | return decoder.Decode(&locks) |
| 224 | }) |
| 225 | return locks, err |
| 226 | } else { |
| 227 | locks, err := c.searchRemoteLocks(filter, limit) |
| 228 | if err != nil { |
| 229 | return locks, err |
| 230 | } |
| 231 | |
| 232 | if len(filter) == 0 && limit == 0 { |
| 233 | err = c.writeLocksToCacheFile("remote", func(writer io.Writer) error { |
| 234 | return c.EncodeLocks(locks, writer) |
| 235 | }) |
| 236 | } |
| 237 | |
| 238 | return locks, err |
| 239 | } |
| 240 | } |
| 241 | |
| 242 | func (c *Client) SearchLocksVerifiable(limit int, cached bool) (ourLocks, theirLocks []Lock, err error) { |
| 243 | ourLocks = make([]Lock, 0, limit) |