helix
helix copied to clipboard
C-Sharp LSP not starting when opening .cs files
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)
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.
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
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?
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
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
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
Can you give us a full backtrace again?
Ah ok, one is in https://github.com/helix-editor/helix/issues/2430#issuecomment-1120706243=
Is the backtrace in the helix.log @archseer ?
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...
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
Is this enough or do I need to add more? @the-mikedavis
No that looks good. archseer is taking a look at this in #2430
@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 - Also suffering from this - can you provide your omnisharp.json file?
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.
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.