helix icon indicating copy to clipboard operation
helix copied to clipboard

C-Sharp LSP not starting when opening .cs files

Open MAST1999 opened this issue 3 years ago • 14 comments

Summary

I have installed omnisharp and checked with hx --health c-sharp to make sure it is ok.

But when I open a .cs file in a c-sharp project the LSP doesn't start.

Do I have to open a special file or in a special directory for it to work?

Reproduction Steps

I built from the source and checked with hx --health c-sharp and it showed that the LSP was found.

I also fetched the grammar and built them.

Then I opened a .cs file in a project but nothing worked and trying code actions told me that no LSP was running for the current buffer.

Helix log

2022-05-31T00:41:23.562 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:23.875 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:23.875 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.174 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.174 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.485 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.485 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.975 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:24.975 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.287 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.287 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.671 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.671 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.953 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:41:25.953 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T00:44:26.843 helix_view::theme [WARN] Theme: malformed hexcode: fg
2022-05-31T00:44:26.843 helix_view::theme [WARN] Theme: malformed hexcode: form

Platform

Windows

Terminal Emulator

Windows Terminal Version: 1.12.10983.0

Helix Version

helix 22.05 (370a16d0)

MAST1999 avatar May 30 '22 20:05 MAST1999

That message is coming from this block: https://github.com/helix-editor/helix/blob/eba82250bb4403fcb2e3ade74ba7301a680bc561/helix-term/src/application.rs#L401-L410

So it looks like the language server is sending an invalid Notification. You can read the communication between helix and the language server in the log file when running helix in verbose mode (-v, up to three -vvv for more verbosity) to see what the language server is sending.

the-mikedavis avatar May 31 '22 01:05 the-mikedavis

Thanks, @the-mikedavis I check with hx -vvv and I think most things are working correctly until these two lines (I didn't include a lot of the glob and file selection to avoid making this too big):

helix_lsp::transport [INFO] Language server not initialized, delaying request
2022-05-31T06:14:38.382 helix_term::application [ERROR] Timed out waiting for language servers to shutdown

The second line is the only error in the log.

I don't know what it means, but if there is a problem with omnisharp, I can open an issue over there.

2022-05-31T06:14:30.388 helix_term::ui::picker [DEBUG] picker score 28.6µs
2022-05-31T06:14:31.754 mio::poll [TRACE] registering event source with poller: token=Token(0), interests=READABLE | WRITABLE
2022-05-31T06:14:31.754 mio::poll [TRACE] registering event source with poller: token=Token(1), interests=READABLE | WRITABLE
2022-05-31T06:14:31.754 mio::poll [TRACE] registering event source with poller: token=Token(2), interests=READABLE | WRITABLE
2022-05-31T06:14:31.754 helix_lsp::transport [INFO] -> {"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"completion":{"completionItem":{"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"snippetSupport":false},"completionItemKind":{}},"hover":{"contentFormat":["markdown"]},"publishDiagnostics":{},"rename":{"dynamicRegistration":false,"honorsChangeAnnotations":false,"prepareSupport":false}},"window":{"workDoneProgress":true},"workspace":{"configuration":true,"didChangeConfiguration":{"dynamicRegistration":false},"workspaceFolders":true}},"processId":31856,"rootPath":"H:\\work-repos\\Beyond\\gplus-gallery","rootUri":"file:///H:/work-repos/Beyond/gplus-gallery","workspaceFolders":[{"name":"gplus-gallery","uri":"file:///H:/work-repos/Beyond/gplus-gallery"}]},"id":0}
2022-05-31T06:14:32.841 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: Checking the 'DOTNET_ROOT' environment variable to find a .NET SDK | "}}
2022-05-31T06:14:32.842 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: Checking the 'DOTNET_ROOT' environment variable to find a .NET SDK | " }
2022-05-31T06:14:32.842 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: Checking the 'DOTNET_ROOT' environment variable to find a .NET SDK | "}}
2022-05-31T06:14:32.842 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: Using the 'dotnet' on the PATH. | "}}
2022-05-31T06:14:32.842 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: Using the 'dotnet' on the PATH. | "}}
2022-05-31T06:14:32.842 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: DotNetPath set to dotnet | "}}
2022-05-31T06:14:32.842 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.Services.DotNetCliService: DotNetPath set to dotnet | "}}
2022-05-31T06:14:32.843 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: Checking the 'DOTNET_ROOT' environment variable to find a .NET SDK | " }
2022-05-31T06:14:32.843 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: Using the 'dotnet' on the PATH. | " }
2022-05-31T06:14:32.843 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: Using the 'dotnet' on the PATH. | " }
2022-05-31T06:14:32.843 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: DotNetPath set to dotnet | " }
2022-05-31T06:14:32.843 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.Services.DotNetCliService: DotNetPath set to dotnet | " }
2022-05-31T06:14:33.019 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.MSBuild.Discovery.MSBuildLocator: Located 2 MSBuild instance(s)\r\n            1: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\"\r\n            2: Visual Studio Community 2022 17.1.32210.238 17.1.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\" | "}}
2022-05-31T06:14:33.019 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.MSBuild.Discovery.MSBuildLocator: Located 2 MSBuild instance(s)\r\n            1: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\"\r\n            2: Visual Studio Community 2022 17.1.32210.238 17.1.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\" | "}}
2022-05-31T06:14:33.019 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.MSBuild.Discovery.MSBuildLocator: Located 2 MSBuild instance(s)\r\n            1: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\"\r\n            2: Visual Studio Community 2022 17.1.32210.238 17.1.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\" | " }
2022-05-31T06:14:33.021 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.MSBuild.Discovery.MSBuildLocator: Located 2 MSBuild instance(s)\r\n            1: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\"\r\n            2: Visual Studio Community 2022 17.1.32210.238 17.1.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\" | " }
2022-05-31T06:14:33.027 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.MSBuild.Discovery.MSBuildLocator: Registered MSBuild instance: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\" | "}}
2022-05-31T06:14:33.027 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"OmniSharp.MSBuild.Discovery.MSBuildLocator: Registered MSBuild instance: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\" | "}}
2022-05-31T06:14:33.027 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.MSBuild.Discovery.MSBuildLocator: Registered MSBuild instance: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\" | " }
2022-05-31T06:14:33.027 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Info, message: "OmniSharp.MSBuild.Discovery.MSBuildLocator: Registered MSBuild instance: Visual Studio Enterprise 2022 17.3.32505.426 17.3.0 - \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\" | " }
2022-05-31T06:14:37.867 helix_lsp::transport [INFO] Language server not initialized, delaying request
2022-05-31T06:14:38.382 helix_term::application [ERROR] Timed out waiting for language servers to shutdown
2022-05-31T06:14:38.385 mio::poll [TRACE] deregistering event source from poller
2022-05-31T06:14:38.385 mio::poll [TRACE] deregistering event source from poller
2022-05-31T06:14:38.385 mio::poll [TRACE] deregistering event source from poller
2022-05-31T06:14:45.804 helix_view::theme [WARN] Theme: malformed hexcode: form
2022-05-31T06:14:45.804 helix_view::theme [WARN] Theme: malformed hexcode: fg

MAST1999 avatar May 31 '22 01:05 MAST1999

The duplicate back-to-back messages from the server are a bit odd but I don't see anything bad in that log. In that case it looks like it didn't send the malformed notification messages since this log doesn't have any of those error messages. Instead it looks like the language server timed out initializing. Can you give it a few more runs and see if you can provoke that "received malformed notification from Language Server: Unhandled" error message?

the-mikedavis avatar May 31 '22 02:05 the-mikedavis

I did manage to get the malformed notification.

2022-05-31T16:29:31.889 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:31.904 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:31.905 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.082 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","id":0,"result":{"capabilities":{"textDocumentSync":{"openClose":true,"change":1,"save":{"includeText":true}},"hoverProvider":{},"completionProvider":{"resolveProvider":true,"triggerCharacters":["."," "]},"signatureHelpProvider":{"triggerCharacters":["(",",","<","{","["]},"definitionProvider":{},"referencesProvider":{},"documentSymbolProvider":{},"workspaceSymbolProvider":{},"codeActionProvider":{"codeActionKinds":["source.organizeImports","refactor","refactor.extract"]},"codeLensProvider":{"resolveProvider":true},"documentFormattingProvider":{},"documentRangeFormattingProvider":{},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":";","moreTriggerCharacter":["}",")"]},"renameProvider":{},"executeCommandProvider":{"commands":["omnisharp/executeCodeAction","omnisharp/executeCodeAction"]},"experimental":{},"implementationProvider":{},"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":true},"fileOperations":{}}},"serverInfo":{"name":"OmniSharp","version":"1.39.0+Branch.tags-v1.39.0.Sha.c6f1e848202d7fff16d52b81496b6980b436952d.c6f1e848202d7fff16d52b81496b6980b436952d"}}}
2022-05-31T16:29:32.082 helix_lsp::transport [INFO] <- {"capabilities":{"codeActionProvider":{"codeActionKinds":["source.organizeImports","refactor","refactor.extract"]},"codeLensProvider":{"resolveProvider":true},"completionProvider":{"resolveProvider":true,"triggerCharacters":["."," "]},"definitionProvider":{},"documentFormattingProvider":{},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":";","moreTriggerCharacter":["}",")"]},"documentRangeFormattingProvider":{},"documentSymbolProvider":{},"executeCommandProvider":{"commands":["omnisharp/executeCodeAction","omnisharp/executeCodeAction"]},"experimental":{},"hoverProvider":{},"implementationProvider":{},"referencesProvider":{},"renameProvider":{},"signatureHelpProvider":{"triggerCharacters":["(",",","<","{","["]},"textDocumentSync":{"change":1,"openClose":true,"save":{"includeText":true}},"workspace":{"fileOperations":{},"workspaceFolders":{"changeNotifications":true,"supported":true}},"workspaceSymbolProvider":{}},"serverInfo":{"name":"OmniSharp","version":"1.39.0+Branch.tags-v1.39.0.Sha.c6f1e848202d7fff16d52b81496b6980b436952d.c6f1e848202d7fff16d52b81496b6980b436952d"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] -> {"jsonrpc":"2.0","method":"initialized","params":{}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] -> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"csharp","text":"using Beyond.GPlusGallery.Controls.Popup.ConfirmationPopup;\r\nusing Beyond.GPlusGallery.Controls.Popup.InputPopup;\r\nusing Beyond.GPlusGallery.Events;\r\nusing Beyond.GPlusGallery.Models;\r\nusing Beyond.GPlusGallery.Resources.Strings.Toasts;\r\nusing Beyond.GPlusGallery.Resources.Strings.Popups;\r\nusing Beyond.GPlusGallery.Services.Contracts;\r\nusing Beyond.GPlusGallery.ViewModels.Extensions;\r\n\r\nusing Bit.Core.Exceptions;\r\nusing Bit.ViewModel;\r\n\r\nusing Prism.Events;\r\nusing Prism.Navigation;\r\n\r\nusing Sharpnado.CollectionView.Paging;\r\nusing Sharpnado.CollectionView.Services;\r\nusing Sharpnado.CollectionView.ViewModels;\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\n\r\nusing Xamarin.Essentials;\r\nusing Xamarin.Forms;\r\nusing Rg.Plugins.Popup.Services;\r\n\r\nnamespace Beyond.GPlusGallery.ViewModels.Main\r\n{\r\n    public abstract class PhotosViewModelBase : GPlusViewModel\r\n    {\r\n        #region Properties\r\n\r\n        public BitDelegateCommand ShareImageCommand { get; set; }\r\n        public BitDelegateCommand<bool?> ZoomInOutCommand { get; set; }\r\n\r\n        public BitDelegateCommand DeleteCommand { get; set; }\r\n        public BitDelegateCommand ShowDetailsCommand { get; set; }\r\n        public BitDelegateCommand RenameCommand { get; set; }\r\n        public BitDelegateCommand AddToAlbumCommand { get; set; }\r\n\r\n        public BitDelegateCommand SelectAllCommand { get; set; }\r\n        public BitDelegateCommand ClearSelectionCommand { get; set; }\r\n\r\n        public BitDelegateCommand OnScrollBeginCommand { get; set; }\r\n        public BitDelegateCommand OnScrollEndCommand { get; set; }\r\n\r\n        public BitDelegateCommand<GPlusImage> ImageLongPressCommand { get; set; }\r\n        public BitDelegateCommand<GPlusImage> ImageTapCommand { get; set; }\r\n\r\n        public virtual bool ShowGroup => false;\r\n\r\n        public IGPlusImageProvider ImageProvider { get; set; }\r\n        public IPreferencesService PreferencesService { get; set; }\r\n        public IEventAggregator EventAggregator { get; set; }\r\n        public IGPlusBackButtonService BackButtonService { get; set; }\r\n        public IGPlusStorageService StorageService { get; set; }\r\n        public IGPlusAndroidGetUserPermission GetWritePermissionFromUserService { get; set; }\r\n\r\n        public SubscriptionToken ImagesChangedSubscription { get; set; }\r\n\r\n        public SubscriptionToken ChangingOrientationSubscription { get; set; }\r\n\r\n        public bool IsViewerLocked { get; set; } = false;\r\n\r\n        public bool ShowSharpnado { get; set; } = true;\r\n\r\n        public abstract Task<int> GetTotalImageCount();\r\n\r\n        private int TotalImagesCount;\r\n\r\n        public int SelectedImageCount\r\n        {\r\n            get\r\n            {\r\n                return IsAllSelected\r\n                    ? TotalImagesCount - DisplayImages.OfType<GPlusImage>().Count(i => !i.IsSelected)\r\n                    : SelectedImages.Count;\r\n            }\r\n        }\r\n\r\n        public ObservableRangeCollection<GPlusImage> DisplayImages { get; set; }\r\n\r\n        public SelectionMode SelectionMode { get; set; } = SelectionMode.None;\r\n\r\n        public List<GPlusImage> SelectedImages { get; set; } = new List<GPlusImage> { };\r\n\r\n        public bool IsAllSelected { get; set; } = false;\r\n        public int SpanCount { get; set; } = 4;\r\n        public virtual bool ShowHeader { get; set; } = true;\r\n        public GPlusImage ScrollToImage { get; set; }\r\n        public int ItemSpacing { get; set; } = 1;\r\n\r\n        public int CurrentIndex { get; set; }\r\n\r\n        #endregion Properties\r\n\r\n        public PhotosViewModelBase()\r\n        {\r\n            ZoomInOutCommand = new BitDelegateCommand<bool?>(ZoomInOutAsync);\r\n            ShareImageCommand = new BitDelegateCommand(ShareImageAsync);\r\n            DeleteCommand = new BitDelegateCommand(DeletePopupAsync);\r\n            ShowDetailsCommand = new BitDelegateCommand(DetailsPopupAsync);\r\n            RenameCommand = new BitDelegateCommand(RenamePopupAsync);\r\n            AddToAlbumCommand = new BitDelegateCommand(AddToAlbumAsync);\r\n\r\n            SelectAllCommand = new BitDelegateCommand(SelectAllAsync);\r\n            ClearSelectionCommand = new BitDelegateCommand(ClearSelectionAsync);\r\n            ImageLongPressCommand = new BitDelegateCommand<GPlusImage>(ActivateImageSelectionAsync);\r\n            ImageTapCommand = new BitDelegateCommand<GPlusImage>(HandleImageTapAsync);\r\n\r\n            DisplayImages = new ObservableRangeCollection<GPlusImage>();\r\n        }\r\n\r\n        protected async IAsyncEnumerable<GPlusImage> PopulateSelectedImagesAsync()\r\n        {\r\n            if (IsAllSelected)\r\n            {\r\n                var unselectedImages = DisplayImages.OfType<GPlusImage>().Where(img => !img.IsSelected).ToList();\r\n                var allImages = GetImagesStream();\r\n                await foreach (var item in allImages)\r\n                {\r\n                    if (unselectedImages.Any(img => img.AndroidImageId == item.AndroidImageId))\r\n                        continue;\r\n\r\n                    yield return item;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var selectedImages = DisplayImages.OfType<GPlusImage>().Where(img => img.IsSelected).ToList();\r\n                foreach (var item in selectedImages)\r\n                {\r\n                    yield return item;\r\n                }\r\n            }\r\n        }\r\n\r\n        protected virtual IAsyncEnumerable<GPlusImage> GetImagesStream()\r\n        {\r\n            var images = ImageProvider.GetGPlusImages();\r\n            return images;\r\n        }\r\n\r\n        public async Task InitializeImages()\r\n        {\r\n            TotalImagesCount = await GetTotalImageCount();\r\n\r\n            _ = Task.Run(() => LoadRemainingItems());\r\n        }\r\n\r\n        private async Task LoadRemainingItems()\r\n        {\r\n#if Local || Development || QA\r\n            Stopwatch stopwatch = Stopwatch.StartNew();\r\n#endif\r\n            var totalBlocks = new List<GPlusImage>();\r\n\r\n            int pageSize = 100;\r\n            int pageNumber = 1;\r\n\r\n            await foreach (var image in GetImagesStream())\r\n            {\r\n                totalBlocks.Add(image);\r\n\r\n                if (totalBlocks.Count >= pageSize * Math.Pow(pageNumber, 2))\r\n                {\r\n                    await MainThread.InvokeOnMainThreadAsync(async () =>\r\n                    {\r\n                        DisplayImages.AddRange(totalBlocks.Where(i => !i.IsDeleted).ToList());\r\n                        await Task.Yield();\r\n                    });\r\n\r\n                    await Task.Yield();\r\n                    totalBlocks.Clear();\r\n\r\n                    pageNumber++;\r\n                }\r\n            }\r\n\r\n            await MainThread.InvokeOnMainThreadAsync(() =>\r\n            {\r\n                DisplayImages.AddRange(totalBlocks.Where(i => !i.IsDeleted).ToList());\r\n            });\r\n\r\n#if Local || Development || QA\r\n            stopwatch.Stop();\r\n            Statistics.StatisticsViewModel.SetNumberOfImges(DisplayImages.Count);\r\n            Statistics.StatisticsViewModel.SetLoadTime(stopwatch.ElapsedMilliseconds);\r\n            Statistics.StatisticsViewModel.SetAndroidTotalImagesCount(TotalImagesCount);\r\n#endif\r\n        }\r\n\r\n        private async Task GetMediaCountByDate(GPlusImage gplusImage, GplusImageGroupHeader groupHeader)\r\n        {\r\n            groupHeader.ImageCount = GetGroupCount(gplusImage);\r\n        }\r\n\r\n        private ImageGroupType GetImageGroupType()\r\n        {\r\n            return SpanCount switch\r\n            {\r\n                4 => ImageGroupType.ByDay,\r\n                8 => ImageGroupType.ByMonth,\r\n                17 => ImageGroupType.ByYear,\r\n                _ => ImageGroupType.ByDay\r\n            };\r\n        }\r\n\r\n        protected virtual int GetGroupCount(GPlusImage gplusImage)\r\n        {\r\n            return ImageProvider.GetMediaCountByDate(gplusImage.DateAdded.Value.Date);\r\n        }\r\n\r\n        protected virtual string GetImageGroupTitle(GPlusImage image, ImageGroupType imageGroupType)\r\n        {\r\n            var imageDate = image.DateAdded.Value;\r\n\r\n            switch (imageGroupType)\r\n            {\r\n                case ImageGroupType.ByDay:\r\n                    if (imageDate.Date == DateTime.Now.Date)\r\n                        return \"Today\";\r\n\r\n                    if (imageDate.Date == DateTime.Now.AddDays(-1).Date)\r\n                        return \"Yesterday\";\r\n\r\n                    if (imageDate.Year == DateTime.Now.Year)\r\n                        return imageDate.ToString(\"MMMM dd\");\r\n\r\n                    return imageDate.ToString(\"yyyy MMMM dd\");\r\n\r\n                case ImageGroupType.ByMonth:\r\n                    return imageDate.ToString(\"MMMM yyyy\");\r\n\r\n                case ImageGroupType.ByYear:\r\n                    return imageDate.ToString(\"yyyy\");\r\n\r\n                default:\r\n                    return \"N/A\";\r\n            }\r\n        }\r\n\r\n        public virtual void OnSelectionStatusUpdated()\r\n        {\r\n        }\r\n\r\n        public async Task ActivateImageSelectionAsync(GPlusImage image)\r\n        {\r\n            if (SpanCount == 8)\r\n                return;\r\n\r\n            if (SelectionMode == SelectionMode.None)\r\n            {\r\n                await ToggleSelectionModeAsync();\r\n\r\n                BackButtonService.PressedBackButtonAction = async () =>\r\n                {\r\n                    await ClearSelectionAsync();\r\n                };\r\n\r\n                image.IsSelected = true;\r\n                SelectedImages = new List<GPlusImage>() { image };\r\n                IsAllSelected = DisplayImages.OfType<GPlusImage>().All(i => i.IsSelected);\r\n                OnSelectionStatusUpdated();\r\n            }\r\n        }\r\n\r\n        public virtual async Task HandleImageTapAsync(GPlusImage image)\r\n        {\r\n            if (SelectionMode == SelectionMode.None)\r\n            {\r\n                if (!IsViewerLocked)\r\n                {\r\n                    IsViewerLocked = true;\r\n\r\n                    var navigationParams = new NavigationParameters()\r\n                    {\r\n                        { \"DisplayImages\", DisplayImages },\r\n                        { \"selectedItem\", image }\r\n                    };\r\n\r\n                    await NavigationService.NavigateAsync(NavNames.PhotoDetail, navigationParams);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                image.IsSelected = !image.IsSelected;\r\n                IsAllSelected = DisplayImages.OfType<GPlusImage>().All(i => i.IsSelected);\r\n\r\n                SelectedImages = DisplayImages.Where(img => img.IsSelected).ToList();\r\n\r\n                OnSelectionStatusUpdated();\r\n            }\r\n        }\r\n\r\n        public async Task ToggleSelectionModeAsync()\r\n        {\r\n            if (SelectionMode == SelectionMode.None)\r\n            {\r\n                SelectionMode = SelectionMode.Multiple;\r\n            }\r\n            else\r\n            {\r\n                SelectionMode = SelectionMode.None;\r\n                SelectedImages = new List<GPlusImage>();\r\n            }\r\n\r\n            OnSelectionStatusUpdated();\r\n\r\n            await Task.CompletedTask;\r\n        }\r\n\r\n        public virtual async Task ZoomInOutAsync(bool? isZoomIn)\r\n        {\r\n            if (SelectionMode == SelectionMode.Multiple)\r\n                return;\r\n\r\n            if (isZoomIn is true)\r\n            {\r\n                switch (SpanCount)\r\n                {\r\n                    case 4:\r\n                        ItemSpacing = 1;\r\n                        SpanCount = 8;\r\n                        GroupImagesBy(ImageGroupType.ByMonth);\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                switch (SpanCount)\r\n                {\r\n                    case 8:\r\n                        ItemSpacing = 1;\r\n                        SpanCount = 4;\r\n                        GroupImagesBy(ImageGroupType.ByDay);\r\n                        break;\r\n\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n\r\n            await Task.CompletedTask;\r\n        }\r\n\r\n        private void GroupImagesBy(ImageGroupType imageGroupType)\r\n        {\r\n\r\n        }\r\n\r\n        private async Task SelectAllAsync()\r\n        {\r\n            IsAllSelected = !IsAllSelected;\r\n            foreach (var img in DisplayImages)\r\n            {\r\n                img.IsSelected = IsAllSelected;\r\n            }\r\n\r\n            if (!IsAllSelected)\r\n                SelectedImages = new List<GPlusImage>();\r\n            else\r\n                SelectedImages = new List<GPlusImage>(DisplayImages);\r\n\r\n            OnSelectionStatusUpdated();\r\n        }\r\n\r\n        public async Task ClearSelectionAsync()\r\n        {\r\n            foreach (var img in DisplayImages)\r\n            {\r\n                if (img is GPlusImage gplusImage)\r\n                {\r\n                    gplusImage.IsSelected = false;\r\n                }\r\n            }\r\n\r\n            SelectedImages = new List<GPlusImage>();\r\n            SelectionMode = SelectionMode.None;\r\n            IsAllSelected = false;\r\n\r\n            OnSelectionStatusUpdated();\r\n\r\n            BackButtonService.PressedBackButtonAction = null;\r\n\r\n            await Task.CompletedTask;\r\n        }\r\n\r\n        private async Task ShareImageAsync()\r\n        {\r\n            await Share.RequestAsync(new ShareMultipleFilesRequest\r\n            {\r\n                Files = DisplayImages.OfType<GPlusImage>().Where(img => img.IsSelected).Select(img => new ShareFile(img.FilePath)).ToList()\r\n            });\r\n        }\r\n\r\n        private async Task DeletePopupAsync()\r\n        {\r\n            Func<Task<object?>> deleteMedia = DeleteImagesAsync;\r\n            List<GPlusImage> mediaToDelete = new();\r\n            var currentSelectedMedia = PopulateSelectedImagesAsync();\r\n            await foreach (var media in currentSelectedMedia)\r\n            {\r\n                mediaToDelete.Add(media);\r\n            }\r\n\r\n            GetWritePermissionFromUserService.OnGetUserPermissionSuccessAsync = deleteMedia;\r\n            GetWritePermissionFromUserService.StartGettingWritePermission(mediaToDelete);\r\n\r\n            //var messageText = PreferencesService.Get(\"RecycleBin\", true) ? PopupsStrings.DeleteItemsPopupBodyText : PopupsStrings.PermanentlyDeleteItemsPopupBodyText;\r\n            //var popupHight = PreferencesService.Get(\"RecycleBin\", true) ? 285 : 265;\r\n\r\n            //var navParams = new NavigationParameters\r\n            //{\r\n            //    { ConfirmationPopupKeys.Title, PopupsStrings.DeletePopupTitle },\r\n            //    { ConfirmationPopupKeys.Message, messageText },\r\n            //    { ConfirmationPopupKeys.ConfirmButtonText, PopupsStrings.DeleteOption },\r\n            //    { ConfirmationPopupKeys.RejectButtonText, PopupsStrings.CancelOption },\r\n            //    { ConfirmationPopupKeys.SuccessMessage, ToastsStrings.FilesDeletedMessage },\r\n            //    { ConfirmationPopupKeys.ConfirmFunc, deleteImages },\r\n            //    { ConfirmationPopupKeys.FailureMessage, ToastsStrings.ErrorMessage },\r\n            //    { ConfirmationPopupKeys.PopupHight, popupHight }\r\n            //};\r\n\r\n            //await NavigationService.NavigateAsync(NavNames.PopupConfirmation, navParams);\r\n        }\r\n\r\n        private async Task<object?> DeleteImagesAsync()\r\n        {\r\n            var currentSelectedImages = PopulateSelectedImagesAsync();\r\n\r\n            var navPrams = new NavigationParameters\r\n            {\r\n                { \"Title\", PopupsStrings.ProgressivePopupTitle },\r\n                { \"Description\", String.Format(PopupsStrings.DeleteProgressivePopupBodyText, SelectedImageCount) },\r\n                { \"MaxProgress\", SelectedImageCount },\r\n                { \"CurrentProgress\", 0 }\r\n            };\r\n\r\n            await NavigationService.NavigateAsync(NavNames.ProgressivePopup, navPrams);\r\n\r\n            CancellationTokenSource source = new CancellationTokenSource();\r\n            CancellationToken token = source.Token;\r\n\r\n            bool isRecycleBinEnabled = PreferencesService.Get(\"RecycleBin\", true);\r\n\r\n            List<int> albumIds = new List<int>();\r\n            List<GPlusImage> deletedImages = new List<GPlusImage>();\r\n            Exception? exception = null;\r\n            await foreach (var image in currentSelectedImages)\r\n            {\r\n                try\r\n                {\r\n                    if (token.IsCancellationRequested) break;\r\n\r\n                    if (isRecycleBinEnabled)\r\n                    {\r\n                        await ImageProvider.MoveSingleImageToRecycleBinAsync(image);\r\n                    }\r\n                    else\r\n                    {\r\n                        await ImageProvider.PermanentlyDeleteSingleFileAsync(image);\r\n                    }\r\n                    deletedImages.Add(image);\r\n                    if (!albumIds.Any(id => id == image.AlbumId))\r\n                        albumIds.Add(image.AlbumId);\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    exception = e;\r\n                }\r\n                finally\r\n                {\r\n                    EventAggregator.GetEvent<ProgressionNewStatusEvent>()\r\n                        .Publish(new ProgressionNewStatusEvent\r\n                        {\r\n                            ProgressByValue = 1,\r\n                            CancellationToken = source\r\n                        });\r\n\r\n                    await Task.Yield();\r\n                }\r\n\r\n                if (exception is not null)\r\n                {\r\n                    throw exception;\r\n                }\r\n            }\r\n\r\n            EventAggregator.GetEvent<ImagesChangedEvent>()\r\n                       .Publish(new ImagesChangedEvent() { ChangeType = ImageChangeType.Removed, Images = deletedImages });\r\n\r\n            _ = Task.Run(async () =>\r\n            {\r\n                try\r\n                {\r\n                    await ImageProvider.RefreshAlbumFoldersAsync(albumIds);\r\n                }\r\n                catch (Exception exp)\r\n                {\r\n                    ExceptionHandler.OnExceptionReceived(exp);\r\n                }\r\n            });\r\n\r\n            await PopupNavigation.Instance.PopAllAsync();\r\n            await ClearSelectionAsync();\r\n            await NavigationService.NavigateAsync(NavNames.ResultToast, (\"bodyText\", ToastsStrings.FilesDeletedMessage));\r\n\r\n            return null;\r\n        }\r\n\r\n        private async Task DetailsPopupAsync()\r\n        {\r\n            var currentSelectedImages = PopulateSelectedImagesAsync();\r\n            GPlusImage? imageToGetDetails = await FirstOrDefaultFromIAsyncEnumerable(currentSelectedImages);\r\n\r\n            if (imageToGetDetails is null)\r\n                throw new UnknownException(\"No images in selected images when trying to open details\");\r\n\r\n            await NavigationService.NavigateAsync(NavNames.DetailsPhotoPopup, (\"selectedItem\", imageToGetDetails));\r\n        }\r\n\r\n        private async Task RenamePopupAsync()\r\n        {\r\n            var currentSelectedImages = PopulateSelectedImagesAsync();\r\n            GPlusImage? imageToBeRenamed = await FirstOrDefaultFromIAsyncEnumerable(currentSelectedImages);\r\n\r\n            if (imageToBeRenamed is null)\r\n                throw new UnknownException(\"No Media was selected when trying to rename\");\r\n\r\n            Func<string, Task<bool>> renameFunc = RenameImageAsync;\r\n\r\n            var navParams = new NavigationParameters\r\n            {\r\n                { InputPopupKeys.Title, PopupsStrings.RenameTitle },\r\n                { InputPopupKeys.OkFunc, renameFunc},\r\n                { InputPopupKeys.OkButtonText, PopupsStrings.OkOption},\r\n                { InputPopupKeys.DefaultInput, Path.GetFileNameWithoutExtension(imageToBeRenamed.FilePath) },\r\n                { InputPopupKeys.CancelButtonText, PopupsStrings.CancelOption },\r\n                { InputPopupKeys.FailureMessage, ToastsStrings.ErrorMessage },\r\n            };\r\n\r\n            await NavigationService.NavigateAsync(NavNames.PopupInput, navParams);\r\n        }\r\n\r\n        private async Task<bool> RenameImageAsync(string newImageName)\r\n        {\r\n            var currentSelectedImages = PopulateSelectedImagesAsync();\r\n            var imageToBeRenamed = await FirstOrDefaultFromIAsyncEnumerable(currentSelectedImages);\r\n\r\n            GetWritePermissionFromUserService.OnGetUserPermissionSuccessAsync = async () =>\r\n            {\r\n\r\n                if (imageToBeRenamed is null)\r\n                    throw new UnknownException(\"No images in selected images when trying to open details\");\r\n\r\n                if (newImageName == Path.GetFileNameWithoutExtension(imageToBeRenamed.FilePath))\r\n                {\r\n                    await ClearSelectionAsync();\r\n                    return true;\r\n                }\r\n\r\n                await ImageProvider.RenameFileAsync(imageToBeRenamed, newImageName);\r\n\r\n                EventAggregator.GetEvent<ImagesChangedEvent>().Publish(new ImagesChangedEvent() { ChangeType = ImageChangeType.Renamed, Images = new[] { imageToBeRenamed } });\r\n\r\n                await ClearSelectionAsync();\r\n\r\n                var SuccessMessage = imageToBeRenamed.ImageType == GPlusImageType.Image ? ToastsStrings.RenameImageMessage : ToastsStrings.RenameVideoMessage;\r\n                await NavigationService.NavigateAsync(NavNames.ResultToast, (\"bodyText\", SuccessMessage));\r\n\r\n                return true;\r\n            };\r\n\r\n            if (imageToBeRenamed is not null)\r\n            {\r\n                GetWritePermissionFromUserService.StartGettingWritePermission(new[] { imageToBeRenamed });\r\n            }\r\n\r\n            await Task.CompletedTask;\r\n\r\n            return true;\r\n        }\r\n\r\n        private async Task AddToAlbumAsync()\r\n        {\r\n            var currentSelectedImages = PopulateSelectedImagesAsync();\r\n            Func<Task> clearSelection = ClearSelectionAsync;\r\n            var navParams = new NavigationParameters\r\n            {\r\n                { \"selectedImages\", currentSelectedImages },\r\n                { \"selectedImagesCount\", SelectedImageCount },\r\n                { \"onSuccess\", clearSelection }\r\n            };\r\n\r\n            await NavigationService.NavigateAsync(NavNames.AddToAlbum, navParams);\r\n        }\r\n\r\n        public override void OnInitialize(INavigationParameters parameters)\r\n        {\r\n            ImagesChangedSubscription = EventAggregator\r\n                    .GetEvent<ImagesChangedEvent>()\r\n                    .SubscribeAsync(\r\n                        OnImagesChanedAsync,\r\n                        ThreadOption.UIThread, keepSubscriberReferenceAlive: true);\r\n\r\n            ChangingOrientationSubscription = EventAggregator\r\n                  .GetEvent<ChangingOrientationEvent>()\r\n                  .SubscribeAsync(\r\n                      OnOrentationChangeAsync,\r\n                      ThreadOption.UIThread, keepSubscriberReferenceAlive: true);\r\n\r\n            base.OnInitialize(parameters);\r\n        }\r\n\r\n        private async Task OnOrentationChangeAsync(ChangingOrientationEvent arg)\r\n        {\r\n            ShowSharpnado = arg.IsPortrait;\r\n        }\r\n\r\n        public override async Task OnDestroyAsync()\r\n        {\r\n            _semaphoreImageChanged.Dispose();\r\n            ImagesChangedSubscription.Dispose();\r\n            ChangingOrientationSubscription.Dispose();\r\n            BackButtonService.PressedBackButtonAction = null;\r\n            await base.OnDestroyAsync();\r\n        }\r\n\r\n        private readonly SemaphoreSlim _semaphoreImageChanged = new SemaphoreSlim(1);\r\n\r\n        private async Task OnImagesChanedAsync(ImagesChangedEvent args)\r\n        {\r\n            var recyclebinId = (await ImageProvider.GetAlbumFromCacheAsync()).FirstOrDefault(i => i.Type == GPlusAlbumType.RecycleBin).Id;\r\n            var images = args.Images;\r\n            var changeType = args.ChangeType;\r\n            switch (changeType)\r\n            {\r\n                case ImageChangeType.Added:\r\n\r\n                    foreach (var image in images)\r\n                    {\r\n                        try\r\n                        {\r\n                            await _semaphoreImageChanged.WaitAsync();\r\n\r\n                            if (image.AlbumId == recyclebinId)\r\n                            {\r\n                                await CreateOrUpateAlbum(image);\r\n                            }\r\n                            else\r\n                            {\r\n                                await OnImageAdded(image);\r\n                            }\r\n                        }\r\n                        finally\r\n                        {\r\n                            _semaphoreImageChanged.Release();\r\n                        }\r\n                    }\r\n                    break;\r\n\r\n                case ImageChangeType.Removed:\r\n                    foreach (var image in images)\r\n                    {\r\n                        try\r\n                        {\r\n                            await _semaphoreImageChanged.WaitAsync();\r\n                            OnImageDeleted(image);\r\n                        }\r\n                        finally\r\n                        {\r\n                            _semaphoreImageChanged.Release();\r\n                        }\r\n                    }\r\n                    break;\r\n\r\n                case ImageChangeType.Modified:\r\n                    foreach (var image in images)\r\n                    {\r\n                        OnImageModified(image);\r\n                    }\r\n                    break;\r\n\r\n                case ImageChangeType.Renamed:\r\n                    foreach (var image in images)\r\n                    {\r\n                        OnImageRenamed(image);\r\n                    }\r\n                    break;\r\n\r\n                case ImageChangeType.RenamedAlbum:\r\n                    await OnAlbumRenamedAsync(args.RenameAlbumInfo.OldAlbumId, args.RenameAlbumInfo.NewAlbum);\r\n                    break;\r\n\r\n                case ImageChangeType.DeleteAlbum:\r\n                    foreach (var item in args.DeletedAblumId)\r\n                    {\r\n                        OnAlbumDelete(item);\r\n                    }\r\n                    break;\r\n\r\n                case ImageChangeType.SystemDateChange:\r\n\r\n                    DisplayImages.Clear();\r\n                    await InitializeImages();\r\n                    break;\r\n\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            TotalImagesCount = await GetTotalImageCount();\r\n        }\r\n\r\n        protected virtual async Task OnAlbumRenamedAsync(int oldAlbumId, GPlusAlbum newAlbum)\r\n        {\r\n            var renamedImages = new Dictionary<string, GPlusImage>();\r\n\r\n            await foreach (var newImage in ImageProvider.GetImages(newAlbum))\r\n            {\r\n                var newImageName = Path.GetFileName(newImage.FilePath);\r\n                renamedImages.Add(newImageName, newImage);\r\n            }\r\n\r\n            for (int index = 0; index < DisplayImages.Count; index++)\r\n            {\r\n                var item = DisplayImages[index];\r\n                if (item is GPlusImage gPlusImage)\r\n                {\r\n                    var imageName = Path.GetFileName(gPlusImage.FilePath);\r\n                    if (renamedImages.ContainsKey(imageName))\r\n                    {\r\n                        var newImage = renamedImages[imageName];\r\n                        await ImageProvider.CreateOrUpateAlbum(newImage);\r\n\r\n                        DisplayImages.RemoveAt(index);\r\n                        DisplayImages.Insert(index, newImage);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        protected virtual void OnAlbumDelete(int albumId)\r\n        {\r\n            var deletedImage = DisplayImages.OfType<GPlusImage>().Where(i => i.AlbumId == albumId).ToList();\r\n            foreach (var item in deletedImage)\r\n            {\r\n                OnImageDeleted(item);\r\n            }\r\n        }\r\n\r\n        protected virtual async Task OnImageAdded(GPlusImage image)\r\n        {\r\n            if (image == null) return;\r\n\r\n            if (DisplayImages.OfType<GPlusImage>().Any(i => i.AndroidImageId == image.AndroidImageId))\r\n            {\r\n                return;\r\n            }\r\n\r\n            var nextImage = DisplayImages.OfType<GPlusImage>().Where(i => i.DateAdded <= image.DateAdded).FirstOrDefault();\r\n\r\n            int imageIndex;\r\n\r\n            if (nextImage != null)\r\n            {\r\n                imageIndex = DisplayImages.IndexOf(nextImage);\r\n            }\r\n            else\r\n            {\r\n                if (DisplayImages.Count > 0)\r\n                {\r\n                    imageIndex = DisplayImages.Count;\r\n                }\r\n                else\r\n                {\r\n                    imageIndex = 0;\r\n                }\r\n            }\r\n\r\n            await CreateOrUpateAlbum(image);\r\n\r\n            var existImage = DisplayImages.OfType<GPlusImage>().FirstOrDefault(i => i.FilePath == image.FilePath);\r\n            if (existImage != null)\r\n            {\r\n                var currentIndex = DisplayImages.IndexOf(existImage);\r\n                image.IsFavorite = existImage.IsFavorite;\r\n                DisplayImages.Remove(existImage);\r\n                DisplayImages.Insert(currentIndex, image);\r\n            }\r\n            else if (!ShowGroup)\r\n            {\r\n                image.IsFavorite = await ImageProvider.IsFavoriteImageAsync(image);\r\n                DisplayImages.Insert(imageIndex, image);\r\n            }\r\n        }\r\n\r\n        private async Task CreateOrUpateAlbum(GPlusImage image)\r\n        {\r\n            var result = await ImageProvider.CreateOrUpateAlbum(image);\r\n\r\n            EventAggregator.GetEvent<AlbumChangedEvent>().Publish(new AlbumChangedEvent()\r\n            {\r\n                Album = result.Album,\r\n                AlbumChangeType = result.ChangeType\r\n            });\r\n        }\r\n\r\n        protected virtual void OnImageDeleted(GPlusImage image)\r\n        {\r\n            var imageIndex = DisplayImages.IndexOf(image);\r\n            OnImageDeleted(imageIndex);\r\n        }\r\n\r\n        private void OnImageDeleted(int imageIndex)\r\n        {\r\n            if (imageIndex == -1)\r\n            {\r\n                return;\r\n            }\r\n            if (!ShowGroup)\r\n            {\r\n                DisplayImages.RemoveAt(imageIndex);\r\n            }\r\n        }\r\n\r\n        protected virtual void OnImageModified(GPlusImage image)\r\n        {\r\n            var media = DisplayImages.OfType<GPlusImage>().FirstOrDefault(i => i.AndroidImageId == image.AndroidImageId);\r\n\r\n            if(media is not null)\r\n                media.IsFavorite = image.IsFavorite;\r\n            //int imageIndex = -1;\r\n\r\n            //for (int i = 0; i < DisplayImages.Count; i++)\r\n            //{\r\n            //    if (image.LocalDbId == DisplayImages[i].LocalDbId)\r\n            //    {\r\n            //        imageIndex = i;\r\n            //        break;\r\n            //    }\r\n            //}\r\n\r\n            //if (imageIndex != -1)\r\n            //{\r\n            //    var oldImage = DisplayImages[imageIndex];\r\n            //    DisplayImages.RemoveAt(imageIndex);\r\n            //    DisplayImages.Insert(imageIndex, image);\r\n            //}\r\n        }\r\n\r\n        protected virtual void OnImageRenamed(GPlusImage renamedMedia)\r\n        {\r\n            var media = DisplayImages.OfType<GPlusImage>().FirstOrDefault(i => i.AndroidImageId == renamedMedia.AndroidImageId);\r\n\r\n            media.FilePath = renamedMedia.FilePath;\r\n            media.OriginalFilePath = renamedMedia.OriginalFilePath;\r\n        }\r\n    }\r\n}","uri":"file:///H:/work-repos/Beyond/gplus-gallery/src/Beyond.GPlusGallery/Beyond.GPlusGallery/ViewModels/Main/PhotosViewModelBase.cs","version":0}}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.083 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"window/logMessage","params":{"type":2,"message":"OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'"}}
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.084 helix_term::application [INFO] window/logMessage: LogMessageParams { typ: Warning, message: "OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification | @Request='OmniSharp.Extensions.JsonRpc.Client.OutgoingNotification'" }
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Beyond.GPlusGallery\\Beyond - Backup.GPlusGallery.csproj","Warnings":[],"Errors":[]}}
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Beyond.GPlusGallery\\Beyond.GPlusGallery.csproj","Warnings":[],"Errors":[]}}
2022-05-31T16:29:32.233 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Beyond.GPlusGallery.Android\\Beyond.GPlusGallery.Android.csproj","Warnings":[],"Errors":[]}}
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Beyond.GPlusGallery.GpuImageBindingLibrary\\Beyond.GPlusGallery.GpuImageBindingLibrary.csproj","Warnings":[],"Errors":[]}}
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Beyond.GPlusGallery.Test\\Beyond.GPlusGallery.Test.csproj","Warnings":[],"Errors":[]}}
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Sharpnado.CollectionView\\Sharpnado.CollectionView.csproj","Warnings":[],"Errors":[{"LogLevel":"Error","FileName":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.CSharp.CurrentVersion.targets","Text":"Could not find rule set file \"..\\StyleCopRules.ruleset\".","StartLine":130,"StartColumn":9,"EndLine":0,"EndColumn":0}]}}
2022-05-31T16:29:32.233 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/msbuildprojectdiagnostics","params":{"FileName":"H:\\work-repos\\Beyond\\gplus-gallery\\src\\Beyond.GPlusGallery\\Sharpnado.CollectionView.Droid\\Sharpnado.CollectionView.Droid.csproj","Warnings":[],"Errors":[{"LogLevel":"Error","FileName":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.CSharp.CurrentVersion.targets","Text":"Could not find rule set file \"..\\StyleCopRules.ruleset\".","StartLine":130,"StartColumn":9,"EndLine":0,"EndColumn":0}]}}
2022-05-31T16:29:32.234 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"621e9fe207b2978a","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["GenerateDocumentationFile","RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","PackageReferences","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","Publish","FolderPublish","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor","Pack"],"TargetFrameworks":["netstandard2.1","netstandard2.0"],"SdkVersion":"-1103605569","References":["a650b002a55ee732","ca01f9c6c9519128","a7db6d4c13eb109a","4787ec450370cdc","faae3cd2329a5f23","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","51d17f0bd2990e1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","13bbf2cbcdb96469","a8b1d9f359d7b4f","5faa84ffcc646d16","3dd9e1e713ce28c1","bc70a3688f03b546","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","22d24df113118e04","6a8ada60e30e6abf","6001a9b860f7e43","e94e5ff7b2eb39a9","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","4bca77302b767821","b42e3bf9c2caf9d","11d6a5981dd09f1d","2528657f041a0f71","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","1fdb3be137e7c8ab","d8d06e6254ff9a8","7a37191fa2429c0","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","28889d355be716fb","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","4b3556ed143bb1a1","990c07b3a694f061","16f3b3c6aa66dbea","bbc2c7fb9307d0f8","cae96c695fa0a849","23af2e185bf7f884","10682f5180926917","531413e8ae8921e9","cbb2e2956b8bc5a1","abb76040f918f212","d753dc831058d377","5d5ab2fae13c7cd7","6f36e9e201c8abbc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","b740561cbe999190","6f6cd086b29443f","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","f9081118726c671d","1dc6ba4b51a92fe2","96ae799a9cd65a64","53da3fcaf9d4a664","7143cd55e6267a10","9c4f1e8060c475b4","c074fd9cba688aec","5d25704a6a0be6ed","7de0d61ed8a595ec","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","5d957776a3bc8463","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","d373f3c4566c70c6","3017ef0c38e2d837","92e480fdaacc79e0","3159cfd5553fa1b8","6a5eaa177b0b8d54","add48a46678bd09d","c70f2a1b237f229d","3beb376886d63c97","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251"],"FileExtensions":["-1257278712"],"FileCounts":[229]}}
2022-05-31T16:29:32.234 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"a9e91345658b880d","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["GenerateDocumentationFile","RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","PackageReferences","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","Publish","FolderPublish","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor","XamarinForms","Pack"],"TargetFrameworks":["netstandard2.0"],"SdkVersion":"-1103605569","References":["e10ae39458b7762","a67351e51e27bf79","a47c3a60722e77c5","63d539e428291f28","ff234bbc468f3e2f","321975f63d5394f1","f695d07d34ea30ba","fc93ebeb576d6e92","a65bef85177bbf7e","25b0878d6dbcc376","c08c0e2410a8d34c","1b4be1cdcad5d299","2e8ba3db1637b464","f60507a54bf35ddd","fb7fc35c16d36bd","2ea5ef1d5848f6f0","9e24e9903791d38","f9b57385e04dcef1","2d2c0eef6c100734","d4fc1b0d7a67d94b","a650b002a55ee732","ca01f9c6c9519128","a7db6d4c13eb109a","54e24c103f927e3e","656a3ee8ded5a7da","dec7521b964e5930","cb1f84683b85012","4d1083e03d090967","ed50ed178bae719d","de31443761954506","66b6405e49d3b0a6","bfc258dcbf3b3978","bc796f9d4dbf8199","1380f0c10f3425c","ee96cb5f9d01d4f5","8ff832542a52ab2","36cd5367e12f29d6","71e0b87530704fa1","9c500cbef9f3eee1","4787ec450370cdc","faae3cd2329a5f23","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","fc8f31a851b2f1e","51d17f0bd2990e1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","13bbf2cbcdb96469","a8b1d9f359d7b4f","5faa84ffcc646d16","3dd9e1e713ce28c1","bc70a3688f03b546","3e025539204a5d59","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","22d24df113118e04","6a8ada60e30e6abf","6001a9b860f7e43","e94e5ff7b2eb39a9","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","4bca77302b767821","b42e3bf9c2caf9d","11d6a5981dd09f1d","2528657f041a0f71","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","1fdb3be137e7c8ab","d8d06e6254ff9a8","7a37191fa2429c0","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","28889d355be716fb","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","4b3556ed143bb1a1","990c07b3a694f061","16f3b3c6aa66dbea","cae96c695fa0a849","23af2e185bf7f884","10682f5180926917","531413e8ae8921e9","cbb2e2956b8bc5a1","abb76040f918f212","d753dc831058d377","5d5ab2fae13c7cd7","6f36e9e201c8abbc","2c2215284100c1bc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","b740561cbe999190","6f6cd086b29443f","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","f9081118726c671d","1dc6ba4b51a92fe2","96ae799a9cd65a64","53da3fcaf9d4a664","7143cd55e6267a10","9c4f1e8060c475b4","c074fd9cba688aec","5d25704a6a0be6ed","7de0d61ed8a595ec","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","34cfcce7d574a410","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","5d957776a3bc8463","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","d373f3c4566c70c6","3017ef0c38e2d837","92e480fdaacc79e0","3159cfd5553fa1b8","6a5eaa177b0b8d54","add48a46678bd09d","c70f2a1b237f229d","3beb376886d63c97","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251","8a005027c244a09d","9174b3507c2cb22b","6a0fbf7a45f85e5f","f7e7ba1002cc14ac","12002482b093e6b7","99f2f3385b8492a7","2eb66546c9634e42"],"FileExtensions":["-1257278712"],"FileCounts":[281]}}
2022-05-31T16:29:32.234 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"880cd29b391221bf","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","Publish","FolderPublish","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor","XamarinForms"],"TargetFrameworks":["v12.0"],"SdkVersion":"-1103605569","References":["e10ae39458b7762","a67351e51e27bf79","a47c3a60722e77c5","63d539e428291f28","321975f63d5394f1","f695d07d34ea30ba","fc93ebeb576d6e92","a65bef85177bbf7e","25b0878d6dbcc376","26108a62ab21c78b","87a093141520c022","bf46659512678122","a185f7806cfd2339","c08c0e2410a8d34c","1b4be1cdcad5d299","a3c89064dd3232ce","2e8ba3db1637b464","9b0c80ea782e810b","7aa066eef2cdec30","f60507a54bf35ddd","fb7fc35c16d36bd","2ea5ef1d5848f6f0","9e24e9903791d38","f9b57385e04dcef1","2d2c0eef6c100734","d4fc1b0d7a67d94b","2ce44b6756024b49","ca01f9c6c9519128","187dd4ed27cbac84","b52e43a686da9679","54e24c103f927e3e","656a3ee8ded5a7da","dec7521b964e5930","4253d8b3040de9","cb1f84683b85012","4d1083e03d090967","ed50ed178bae719d","de31443761954506","66b6405e49d3b0a6","bfc258dcbf3b3978","bc796f9d4dbf8199","1380f0c10f3425c","7884ad5dce98dd54","ee96cb5f9d01d4f5","8ff832542a52ab2","36cd5367e12f29d6","f86f1c60b625c7cf","71e0b87530704fa1","41f5a23bf575340","9c500cbef9f3eee1","4d6588ff0745fc3","3d1fab7a1546aa70","13bbf2cbcdb96469","5faa84ffcc646d16","3e025539204a5d59","6001a9b860f7e43","7a37191fa2429c0","4b3556ed143bb1a1","990c07b3a694f061","2c2215284100c1bc","34cfcce7d574a410","6a5eaa177b0b8d54","add48a46678bd09d","8a005027c244a09d","7237fa6a408afe88","3562ab527ae1094e","e41ea78d34e61b7b","222bd61688d3ff6a","5c1be7136e7cd166","647c551ec0669620","65fbbee234e602ae","99f9587bf4383465","c3486259286806c1","61a377145a5b5b9","7d4a8238e2c0aa3d","fe3ddc7b27ca3888","662b84684abbffa8","24798c4efd07c2e4","566cbb00252b71e9","ba5a263c9721ac18","77bce34bf1725864","cb322c7994c2b8a","ec62a9d3f61c132f","3b896bc6f0943473","a5c4637c31a90345","50fc9ac27d5e17b1","85f59b319cdce93a","d249a4ea099f0fd6","c0cb3e7011a0f87b","57bd4abfef761f82","6c1fb8d763327758","f266c6f5bd56f946","2e03a9a798a79ac6","7031132f84ba8853","445bb13b11c72317","824d29cbb287f6f7","f6ec096328980e74","18b6ad05258a7e59","65d0d628ed9877a4","20e5f2ba4409394d","7652404349034ff0","e717f97c769f80a0","fa24731389ae04e2","e17ad7bff1cad156","8b14ac0ccbf6e14e","97e3b630eea88503","3d283dd5d94abb94","b115942b3627a2cd","71f7662569babd9e","e6b6851b998cc3ff","aaf1b356a590365c","eedb751df3bc9092","688502725304b3f2","177b345dad379e92","30265a093d4b3e80","d4f246ebf9e554d5","6cbf6d4f6ebabcaf","554357449ad0f76f","36489132be104196","9174b3507c2cb22b","6a0fbf7a45f85e5f","176698fdba0df2ae","61a3a744f7af961d","afc495aa2202c58e","ee1ab8daf5e61cde","a267a87abd277ed4","d7ae807fa0447b08","86aadcff92e7b0ff","6a3b3c9473ddf97a","f8cb856cb4ac92a9","b574c7e65b4f502a","d9a63da7120cba49","2257dbc257181654","ae95e477696fedd4","572d4d04a21cab2a","f7e7ba1002cc14ac","8cbf2a344f8ff245","12002482b093e6b7","677fbe79e20b646a","99f2f3385b8492a7","2eb66546c9634e42","40d6aa4d230254fc","6cb1ce6086afdafe","682218bf8e3e3a57","c12b5e9b4efa4b8b","cdd0029f1c236756","56b82ae898bbf61f","e13fbd0625b4e934","e1b028c94b2b4cfb","2873e1c7e17e7ec4","8ee829c053b99e33","c875368727eec69f","ca981632a87f4faf","e7ffa5ed5477ac24","8de863be78d2735b","c19204047ce945da","3b35a43f24815316","6789e4c6e08e8114","32c63de7d6e7d364","ccf0c3c5fa7d8b9f","d886d0be4588ded3","a49f78aeb8ce177","3683ea8f3b57587b","72ffa99f6390f29f","329bcae42bb13286","a650b002a55ee732","a119de5ff13f5df2","8bb25cdfa9f58d95","a7db6d4c13eb109a","4787ec450370cdc","faae3cd2329a5f23","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","fc8f31a851b2f1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","a8b1d9f359d7b4f","72b3de8ddcb65bda","3dd9e1e713ce28c1","bc70a3688f03b546","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","aa8b29268538bc95","22d24df113118e04","6a8ada60e30e6abf","cbed519ae516bdce","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","11d6a5981dd09f1d","2528657f041a0f71","1a4910e7928d2be4","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","1fdb3be137e7c8ab","58fad007b1c7f68e","214cef57aa3af43b","732e2f41e1ec328f","cc0b8a0dc4b5cc17","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","d795c4b069f42de2","28889d355be716fb","fe43cc66409afc11","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","16f3b3c6aa66dbea","bbc2c7fb9307d0f8","cae96c695fa0a849","23af2e185bf7f884","10682f5180926917","531413e8ae8921e9","cbb2e2956b8bc5a1","abb76040f918f212","2978ebe3fa017619","d753dc831058d377","a7225a66a133d220","5d5ab2fae13c7cd7","6f36e9e201c8abbc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","3cab585c38879c80","d31ae060adc0cf68","b740561cbe999190","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","82365a1d92723ea2","f9081118726c671d","1dc6ba4b51a92fe2","480fcc9a46d59829","96ae799a9cd65a64","5d75030332528674","53da3fcaf9d4a664","f9eb7e1b4bd864e9","3d3de12efafc840f","5c0bbacee81d7dff","f373ef37e444be4e","b3f3189cab947e82","edbfd1d8bf11e6cd","762862983c40286f","c48d6f3db6f810a3","7143cd55e6267a10","2d11c1de0c9ccb76","41f600207e621c69","51b9cebf5642d1e2","9c4f1e8060c475b4","c074fd9cba688aec","6b8a7cd56172fed1","5d25704a6a0be6ed","55adb5562371b224","7e16bbec65685114","13aae114db6e8320","1972b85a4d8ed452","fe62129d588ad9b9","8c16422e534b9804","ec2dac2bf194d54a","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","4d9b25b5312a81c5","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","5d957776a3bc8463","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","3017ef0c38e2d837","c70f2a1b237f229d","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251","81fd088ac01fc370","5ba77289e596639a"],"FileExtensions":["-1257278712"],"FileCounts":[44]}}
2022-05-31T16:29:32.235 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"93becae324edfe9a","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","PackageReferences","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","Publish","FolderPublish","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor"],"TargetFrameworks":["v12.0"],"SdkVersion":"-1103605569","References":["bf46659512678122","2ce44b6756024b49","ca01f9c6c9519128","13bbf2cbcdb96469","6001a9b860f7e43","a650b002a55ee732","a119de5ff13f5df2","8bb25cdfa9f58d95","a7db6d4c13eb109a","4787ec450370cdc","faae3cd2329a5f23","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","fc8f31a851b2f1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","a8b1d9f359d7b4f","72b3de8ddcb65bda","3dd9e1e713ce28c1","bc70a3688f03b546","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","aa8b29268538bc95","22d24df113118e04","6a8ada60e30e6abf","cbed519ae516bdce","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","11d6a5981dd09f1d","2528657f041a0f71","1a4910e7928d2be4","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","1fdb3be137e7c8ab","58fad007b1c7f68e","214cef57aa3af43b","732e2f41e1ec328f","cc0b8a0dc4b5cc17","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","d795c4b069f42de2","28889d355be716fb","fe43cc66409afc11","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","16f3b3c6aa66dbea","bbc2c7fb9307d0f8","cae96c695fa0a849","23af2e185bf7f884","10682f5180926917","531413e8ae8921e9","cbb2e2956b8bc5a1","abb76040f918f212","2978ebe3fa017619","d753dc831058d377","a7225a66a133d220","5d5ab2fae13c7cd7","6f36e9e201c8abbc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","3cab585c38879c80","d31ae060adc0cf68","b740561cbe999190","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","82365a1d92723ea2","f9081118726c671d","1dc6ba4b51a92fe2","480fcc9a46d59829","96ae799a9cd65a64","5d75030332528674","53da3fcaf9d4a664","f9eb7e1b4bd864e9","3d3de12efafc840f","5c0bbacee81d7dff","f373ef37e444be4e","b3f3189cab947e82","edbfd1d8bf11e6cd","762862983c40286f","c48d6f3db6f810a3","7143cd55e6267a10","2d11c1de0c9ccb76","41f600207e621c69","51b9cebf5642d1e2","9c4f1e8060c475b4","c074fd9cba688aec","6b8a7cd56172fed1","5d25704a6a0be6ed","55adb5562371b224","7e16bbec65685114","13aae114db6e8320","1972b85a4d8ed452","fe62129d588ad9b9","8c16422e534b9804","ec2dac2bf194d54a","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","4d9b25b5312a81c5","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","5d957776a3bc8463","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","3017ef0c38e2d837","c70f2a1b237f229d","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251","81fd088ac01fc370","5ba77289e596639a"],"FileExtensions":["-1257278712"],"FileCounts":[101]}}
2022-05-31T16:29:32.235 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"581bec4a16070bc9","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["GenerateDocumentationFile","RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","PackageReferences","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","COMReferences","AppSettings","Publish","FolderPublish","DataSourceWindow","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor","Pack"],"TargetFrameworks":["net48"],"SdkVersion":"-1103605569","References":["ca01f9c6c9519128","13bbf2cbcdb96469","5faa84ffcc646d16","6001a9b860f7e43","e94e5ff7b2eb39a9","b42e3bf9c2caf9d","4b3556ed143bb1a1","6f6cd086b29443f","6a5eaa177b0b8d54","add48a46678bd09d","a650b002a55ee732","a7db6d4c13eb109a","4787ec450370cdc","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","fc8f31a851b2f1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","a8b1d9f359d7b4f","3dd9e1e713ce28c1","bc70a3688f03b546","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","22d24df113118e04","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","11d6a5981dd09f1d","2528657f041a0f71","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","6553a0926bd69582","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","28889d355be716fb","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","16f3b3c6aa66dbea","cae96c695fa0a849","23af2e185bf7f884","10682f5180926917","531413e8ae8921e9","cbb2e2956b8bc5a1","abb76040f918f212","d753dc831058d377","5d5ab2fae13c7cd7","6f36e9e201c8abbc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","3cab585c38879c80","b740561cbe999190","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","f9081118726c671d","1dc6ba4b51a92fe2","96ae799a9cd65a64","53da3fcaf9d4a664","7143cd55e6267a10","9c4f1e8060c475b4","c074fd9cba688aec","5d25704a6a0be6ed","55adb5562371b224","7e16bbec65685114","13aae114db6e8320","1972b85a4d8ed452","fe62129d588ad9b9","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","3017ef0c38e2d837","c70f2a1b237f229d","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251"],"FileExtensions":["-1257278712"],"FileCounts":[14]}}
2022-05-31T16:29:32.235 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T16:29:32.235 helix_lsp::transport [INFO] <- {"jsonrpc":"2.0","method":"o#/projectconfiguration","params":{"ProjectId":"1bb31e58f24160b8","SessionId":"-1258041029","OutputKind":2,"ProjectCapabilities":["GenerateDocumentationFile","RelativePathDerivedDefaultNamespace",".NET","UseFileGlobs","DynamicDependentFile","ConfigurableFileNesting","DependenciesTree","ProjectImportsTree","LaunchProfiles","NoGeneralDependentFileIcon","PackageReferences","AssemblyReferences","ProjectReferences","WinRTReferences","OutputGroups","AllTargetOutputGroups","VisualStudioWellKnownOutputGroups","SingleFileGenerators","DeclaredSourceItems","UserSourceItems","SupportAvailableItemName","IntegratedConsoleDebugging","DisableBuiltInDebuggerServices","PersistDesignTimeDataOutOfProject","Publish","FolderPublish","CSharp","Managed","ClassDesigner","SharedProjectReferences","ProjectPropertiesEditor","XamarinForms","Pack"],"TargetFrameworks":["netstandard2.0"],"SdkVersion":"-1103605569","References":["a650b002a55ee732","ca01f9c6c9519128","a7db6d4c13eb109a","bc796f9d4dbf8199","4787ec450370cdc","b136c9057d0eac41","a4be57a67913d9f2","9221249557edf7da","ac08b9147e6c6cc1","51d17f0bd2990e1e","75c42701c310d265","6eac5906d797823f","51b6b65db45d8317","977562ede61122d1","782a823a2d8cd40","13bbf2cbcdb96469","a8b1d9f359d7b4f","5faa84ffcc646d16","3dd9e1e713ce28c1","bc70a3688f03b546","12bec27505c61c10","65e9cc7358ddee2e","7df5bfe00323a6a8","ce3f444652eead51","feebdde9a00fe94b","22d24df113118e04","6a8ada60e30e6abf","6001a9b860f7e43","e94e5ff7b2eb39a9","46b5412910b12f1a","eac4975c939bd705","d574426ce261f3cd","2620772be337bacb","ce4b86769789bfd2","4bca77302b767821","b42e3bf9c2caf9d","11d6a5981dd09f1d","2528657f041a0f71","385f6cb9a1a92341","8a6a053fd546c4b9","4bd5d70d9487a7","546da94a433dd46b","c8cd67501180cdb3","99380cc3f9cb0f62","6d26f5b6d581bb7a","e99748daf45287f7","88a79e3fbc9be5a5","baed534980001b3e","a094f278ebd28638","f02b6f1120327ed5","d8d06e6254ff9a8","7a37191fa2429c0","b3ec78066692ce40","b633596fb5206911","b1c086ddba588d7f","3935c25fc587591d","1fe2caf02ff5116","d1e401c8e175f133","28889d355be716fb","a93a13f245d3dbf5","f40e391e11837c28","1f1effdb4f95fef","4b3556ed143bb1a1","16f3b3c6aa66dbea","cae96c695fa0a849","cbb2e2956b8bc5a1","abb76040f918f212","d753dc831058d377","5d5ab2fae13c7cd7","6f36e9e201c8abbc","abef39459b5f8089","58b2ccb5d5268768","f4c238ed95a4c9e0","463559064b820a89","f46a5248555641f3","d9a0d90fcf36b125","b740561cbe999190","6f6cd086b29443f","3e2b84419c2678fe","16aa5cd16608904e","88efed4970ce8fb","525af1cb4f8c1ef","f9081118726c671d","1dc6ba4b51a92fe2","96ae799a9cd65a64","53da3fcaf9d4a664","7143cd55e6267a10","9c4f1e8060c475b4","c074fd9cba688aec","5d25704a6a0be6ed","7de0d61ed8a595ec","baae63d2bc6dd501","6e18d5f5513ced07","3297b865f846bd0a","762c57508db7a1c2","81016cf6be9235ed","bc2ea691e56496f8","4fcdd50549f35f69","1613d6b76156e26a","609f5396c0534146","31be6951d8a1de6e","d373f3c4566c70c6","3017ef0c38e2d837","92e480fdaacc79e0","3159cfd5553fa1b8","6a5eaa177b0b8d54","add48a46678bd09d","c70f2a1b237f229d","3beb376886d63c97","363b07840a344182","f638dfb632c7bb3e","4fc1e02f10ba6dcc","7f7e058ceeba44c4","76fdeb10eb04a251","f7e7ba1002cc14ac","99f2f3385b8492a7","2eb66546c9634e42"],"FileExtensions":["-1257278712"],"FileCounts":[24]}}
2022-05-31T16:29:32.235 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T16:29:32.235 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T16:29:32.235 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled
2022-05-31T16:29:32.236 helix_term::application [ERROR] received malformed notification from Language Server: Unhandled

MAST1999 avatar May 31 '22 13:05 MAST1999

The o#/ messages aren't part of the LSP spec AFAIK, I assume those are specific to the C# language server. That shouldn't be a problem since we're discarding them, unless the language server is expecting responses to those messages. Maybe that behavior can be turned off by some configuration? https://github.com/OmniSharp/omnisharp-roslyn/wiki/Configuration-Options

the-mikedavis avatar May 31 '22 14:05 the-mikedavis

Yes!! It was one of the settings, I had copied the settings from their examples but the locationPaths setting in the RoslynExtensionsOptions was causing the problem.

It doesn't show that the LSP is preparing though, so it was confusing and I had to wait for it for some time.

Now it works and shows me the refactoring options, but now when I try to apply a code action it crashes with this error:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Char range out of bounds: char range 18446744073709551538..18446744073709551599, Rope/RopeSlice char length 31489', C:\Users\mast\.cargo\registry\src\github.com-1ecc6299db9ec823\ropey-1.5.0\src\rope.rs:546:37
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

MAST1999 avatar May 31 '22 15:05 MAST1999

Can you give us a full backtrace again?

archseer avatar May 31 '22 15:05 archseer

Ah ok, one is in https://github.com/helix-editor/helix/issues/2430#issuecomment-1120706243=

archseer avatar May 31 '22 15:05 archseer

Is the backtrace in the helix.log @archseer ?

MAST1999 avatar May 31 '22 16:05 MAST1999

To get the full backtrace, you'll need to set the RUST_BACKTRACE environment variable to full and then reproduce the crash, and it will start with

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value...

the-mikedavis avatar May 31 '22 17:05 the-mikedavis

Here is the backtrace:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Char range out of bounds: char range 18446744073709551538..18446744073709551599, Rope/RopeSlice char length 31489', C:\Users\mast\.cargo\registry\src\github.com-1ecc6299db9ec823\ropey-1.5.0\src\rope.rs:546:37
stack backtrace:
   0:     0x7ff7ff0ff154 - std::backtrace_rs::backtrace::dbghelp::trace
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
   1:     0x7ff7ff0ff154 - std::backtrace_rs::backtrace::trace_unsynchronized
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2:     0x7ff7ff0ff154 - std::sys_common::backtrace::_print_fmt
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\sys_common\backtrace.rs:66
   3:     0x7ff7ff0ff154 - std::sys_common::backtrace::_print::impl$0::fmt
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\sys_common\backtrace.rs:45
   4:     0x7ff7fe90caaa - core::fmt::write
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\core\src\fmt\mod.rs:1194
   5:     0x7ff7ff0f7d39 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\io\mod.rs:1655
   6:     0x7ff7ff10290b - std::sys_common::backtrace::_print
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\sys_common\backtrace.rs:48
   7:     0x7ff7ff10290b - std::sys_common::backtrace::print
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\sys_common\backtrace.rs:35
   8:     0x7ff7ff10290b - std::panicking::default_hook::closure$1
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:295
   9:     0x7ff7ff1025a9 - std::panicking::default_hook
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:314
  10:     0x7ff7fefbc177 - <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::take_box::h52ec70c93fbd4a4e
  11:     0x7ff7ff10304f - std::panicking::rust_panic_with_hook
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:702
  12:     0x7ff7ff102dc3 - std::panicking::begin_panic_handler::closure$0
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:588
  13:     0x7ff7ff1003a7 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure_env$0,never$>
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\sys_common\backtrace.rs:138
  14:     0x7ff7ff102a7f - std::panicking::begin_panic_handler
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:584
  15:     0x7ff7ff196e05 - core::panicking::panic_fmt
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\core\src\panicking.rs:143
  16:     0x7ff7ff196f13 - core::result::unwrap_failed
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\core\src\result.rs:1785
  17:     0x7ff7fea1a8e7 - ropey::rope::Rope::remove::h71a8c51dcd799fc0
  18:     0x7ff7fe9a8202 - helix_core::transaction::ChangeSet::apply::h2941207579129f02
  19:     0x7ff7fef4d437 - helix_view::document::Document::apply_impl::haca85cb6e25e3aa3
  20:     0x7ff7fef4f389 - helix_view::document::Document::apply::h0809faa69b10a8ea
  21:     0x7ff7fee11e6f - helix_term::commands::lsp::apply_workspace_edit::h72619662e4a1b8b4
  22:     0x7ff7fee115fc - helix_term::commands::lsp::apply_workspace_edit::h72619662e4a1b8b4
  23:     0x7ff7fefb7d00 - <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::take_box::h52ec70c93fbd4a4e
  24:     0x7ff7fefd2310 - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h7f584e36a034d767
  25:     0x7ff7fef962f4 - tokio::park::thread::CachedParkThread::block_on::h5b87153c9bac0673
  26:     0x7ff7fef83e28 - tokio::runtime::thread_pool::ThreadPool::block_on::hae968876f2d490c0
  27:     0x7ff7fefada45 - tokio::runtime::Runtime::block_on::hd01dae295923f5e9
  28:     0x7ff7fef654fc - hx::setup_logging::h0f2a86d807b38468
  29:     0x7ff7fef5aab6 - std::sys_common::backtrace::__rust_begin_short_backtrace::h60e6b2f4bf6f9de1
  30:     0x7ff7fefa92ba - std::rt::lang_start::{{closure}}::h0d05cec207e622c1
  31:     0x7ff7ff0f0f42 - core::ops::function::impls::impl$2::call_once
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\library\core\src\ops\function.rs:259
  32:     0x7ff7ff0f0f42 - std::panicking::try::do_call
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:492
  33:     0x7ff7ff0f0f42 - std::panicking::try
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:456
  34:     0x7ff7ff0f0f42 - std::panic::catch_unwind
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panic.rs:137
  35:     0x7ff7ff0f0f42 - std::rt::lang_start_internal::closure$2
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\rt.rs:128
  36:     0x7ff7ff0f0f42 - std::panicking::try::do_call
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:492
  37:     0x7ff7ff0f0f42 - std::panicking::try
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panicking.rs:456
  38:     0x7ff7ff0f0f42 - std::panic::catch_unwind
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\panic.rs:137
  39:     0x7ff7ff0f0f42 - std::rt::lang_start_internal
                               at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e\/library\std\src\rt.rs:128
  40:     0x7ff7fef65697 - main
  41:     0x7ff7ff190edc - invoke_main
                               at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  42:     0x7ff7ff190edc - __scrt_common_main_seh
                               at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  43:     0x7ff8090554e0 - BaseThreadInitThunk
  44:     0x7ff80ae2485b - RtlUserThreadStart

MAST1999 avatar May 31 '22 22:05 MAST1999

Is this enough or do I need to add more? @the-mikedavis

MAST1999 avatar Jun 02 '22 21:06 MAST1999

No that looks good. archseer is taking a look at this in #2430

the-mikedavis avatar Jun 02 '22 21:06 the-mikedavis

@MAST1999 Would you mind attach your omnisharp.json file. (I'm not able to get rid off 2023-01-12T11:51:14.107 helix_lsp [ERROR] failed to initialize language server: request timed out from helix.log)

UPDATE

Ok, nevermind. it was my PATH Env Variable that was getting too long... Now i can elaborate further

fopsdev avatar Jan 12 '23 10:01 fopsdev

@fopsdev - Also suffering from this - can you provide your omnisharp.json file?

varon avatar Mar 24 '23 21:03 varon

I was experiencing a similar issue, my logs contained a timeout which I believe to be the root problem. helix_lsp [ERROR] failed to initialize language server: request 0 timed out

From what I can tell, the default timeout (20 seconds) was too short for my project. I adjusted languages.toml to the following:

[[language]]
name = "c-sharp"
scope = "source.cs"
injection-regex = "c-?sharp"
roots = ["sln", "csproj"]
file-types = ["cs"]
comment-token = "//"
indent = { tab-width = 4, unit = "    " }
language-server = { command = "omnisharp", args = ["-lsp"], timeout=10000 }

Specifically, this line: language-server = { command = "omnisharp", args = ["-lsp"], timeout=10000 }

Hope this helps someone else.

mighty-chris avatar Apr 05 '23 21:04 mighty-chris

The crash encounter here was fixed (see https://github.com/helix-editor/helix/issues/2430). There doesnt seem to be any actionable issue left here so I am closing this issue.

pascalkuthe avatar Sep 12 '23 01:09 pascalkuthe