Пример #1
0
        /// <summary>
        /// Asynchronously tries to populate the marker collection, returns true if there was a change in marker count and the callee should update
        /// </summary>
        /// <param name="forceUpdate">When set to true, ignores if the collection is empty</param>
        /// <returns></returns>
        public async System.Threading.Tasks.Task <bool> TrySetMarkersAsync(bool forceUpdate = false)
        {
            Uri  uri    = null;
            bool result = false;

            using (var metrics = Log.WithMetrics($"{nameof(DocumentMarkerManager)}:{nameof(TrySetMarkersAsync)}")) {
                try {
                    if (_markers != null && _markers.Markers.AnySafe() == false && !forceUpdate)
                    {
                        Log.Verbose($"Codemarks are empty and forceUpdate={forceUpdate}", forceUpdate);
                        return(false);
                    }

                    uri = _virtualTextDocument.Uri;
                    if (uri == null)
                    {
                        Log.Verbose($"Could not get virtual text document");
                        return(false);
                    }

                    _markers = await _agentService.GetMarkersForDocumentAsync(uri);

                    bool?previousResult = null;
                    if (_markers?.Markers.AnySafe() == true || forceUpdate)
                    {
                        if (_wpfTextView.Properties.TryGetProperty(PropertyNames
                                                                   .DocumentMarkers, out List <DocumentMarker> previousMarkersResponse))
                        {
                            previousResult = previousMarkersResponse.AnySafe();
                        }
                        _wpfTextView.Properties.RemovePropertySafe(PropertyNames.DocumentMarkers);
                        _wpfTextView.Properties.AddProperty(PropertyNames.DocumentMarkers, _markers?.Markers);
                        Log.Verbose($"Setting Markers({_markers?.Markers.Count}) for {uri}");

                        var current = _markers?.Markers.Any() == true;
                        if (previousResult == true && current == false)
                        {
                            result = true;
                        }
                        else if (current)
                        {
                            result = true;
                        }
                    }
                    else
                    {
                        Log.Verbose("No Codemarks from agent");
                    }
                    if (_markers?.MarkersNotLocated?.AnySafe() == true)
                    {
                        Log.Verbose($"There are {_markers?.MarkersNotLocated.Count()} markers not located");
                    }
                }
                catch (OverflowException ex) {
                    Log.Error(ex, uri?.ToString());
                }
                catch (Exception ex) {
                    Log.Error(ex, nameof(TrySetMarkersAsync));
                }
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// Asynchronously tries to populate the marker collection, returns true if there was a change in marker count and the callee should update
        /// </summary>
        /// <param name="forceUpdate">When set to true, ignores if the collection is empty</param>
        /// <returns></returns>
        public async System.Threading.Tasks.Task <bool> TrySetMarkersAsync(bool forceUpdate = false)
        {
            Uri  fileUri = null;
            bool result  = false;

            try {
                if (_markers != null && _markers.Markers.AnySafe() == false && !forceUpdate)
                {
                    Log.Verbose($"Codemarks are empty and forceUpdate={forceUpdate}", forceUpdate);
                    return(false);
                }

                fileUri = _textDocument.FilePath.ToUri();
                if (fileUri == null)
                {
                    Log.Verbose($"Could not parse file path as uri={_textDocument.FilePath}");
                    return(false);
                }

                _markers = await _agentService.GetMarkersForDocumentAsync(fileUri, true);

                bool?previousResult = null;
                if (_markers?.Markers.AnySafe() == true || forceUpdate)
                {
                    if (_wpfTextView.Properties.TryGetProperty(PropertyNames
                                                               .DocumentMarkers, out List <DocumentMarker> previousMarkersResponse))
                    {
                        previousResult = previousMarkersResponse.AnySafe();
                    }
                    _wpfTextView.Properties.RemovePropertySafe(PropertyNames.DocumentMarkers);
                    _wpfTextView.Properties.AddProperty(PropertyNames.DocumentMarkers, _markers?.Markers);
                    Log.Verbose($"Setting Markers({_markers?.Markers.Count}) for {fileUri}");

                    var current = _markers?.Markers.Any() == true;
                    if (previousResult == true && current == false)
                    {
                        result = true;
                    }
                    else if (current)
                    {
                        result = true;
                    }
                }
                else
                {
                    Log.Verbose("No Codemarks from agent");
                }
                if (_markers?.MarkersNotLocated?.AnySafe() == true)
                {
                    Log.Verbose($"There are {_markers?.MarkersNotLocated.Count()} markers not located");
                }
            }
            catch (OverflowException ex) {
                Log.Error(ex, fileUri?.ToString());
            }
            catch (Exception ex) {
                Log.Error(ex, nameof(TrySetMarkersAsync));
            }

            return(result);
        }