internal void OnTickRefresh() { List <string> toRefresh; bool fullRefresh; lock (_toRefresh) { _refreshScheduled = false; if (_fullRefresh) { fullRefresh = true; toRefresh = null; } else { fullRefresh = false; toRefresh = new List <string>(_toRefresh); } _toRefresh.Clear(); _fullRefresh = false; _extraFiles.UniqueAddRange(_toMonitor); _toMonitor.Clear(); } if (fullRefresh) { InnerRefresh(); } else { using (BatchStartedEventArgs br = SmartRefresh(toRefresh.Count)) { foreach (string path in toRefresh) { if (br != null) { br.Tick(); } ItemRefresh(path); } } } }
void InnerRefresh() { using (BatchStartedEventArgs br = BatchRefresh()) { HybridCollection <string> mapped = new HybridCollection <string>(StringComparer.OrdinalIgnoreCase); ISvnStatusCache cache = Cache; foreach (string file in Mapper.GetAllFilesOfAllProjects()) { br.Tick(); _extraFiles.Remove(file); // If we find it here; it is no longer 'extra'! SvnItem item = cache[file]; if (item == null) { continue; } PendingChange pc = UpdatePendingChange(item); if (pc != null) { mapped.Add(pc.FullPath); } } foreach (string file in new List <string>(_extraFiles)) { br.Tick(); SvnItem item = cache[file]; if (item == null) { _extraFiles.Remove(file); continue; } PendingChange pc = UpdatePendingChange(item); if (pc != null) { mapped.Add(pc.FullPath); } else { _extraFiles.Remove(file); } } for (int i = 0; i < _pendingChanges.Count; i++) { br.Tick(); PendingChange pc = _pendingChanges[i]; if (mapped.Contains(pc.FullPath)) { continue; } _pendingChanges.RemoveAt(i--); } } }