From d0414892c386e8e46589195034fae6d85c8cc1a2 Mon Sep 17 00:00:00 2001 From: Phoenix Date: Fri, 1 Mar 2024 21:28:25 +0300 Subject: [PATCH] Fix opera bookmarks Fix opera bookmarks - comment Fix opera bookmarks - comment --- .../ChromiumBookmarkLoader.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs index 1e4f3f9ac..8ce597b30 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -33,20 +33,32 @@ namespace Flow.Launcher.Plugin.BrowserBookmark protected List LoadBookmarksFromFile(string path, string source) { - if (!File.Exists(path)) - return new List(); - var bookmarks = new List(); + + if (!File.Exists(path)) + return bookmarks; + using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) - return new List(); + return bookmarks; + EnumerateRoot(rootElement, bookmarks, source); + return bookmarks; + } + + private void EnumerateRoot(JsonElement rootElement, ICollection bookmarks, string source) + { foreach (var folder in rootElement.EnumerateObject()) { - if (folder.Value.ValueKind == JsonValueKind.Object) + if (folder.Value.ValueKind != JsonValueKind.Object) + continue; + + // Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details. + // If various exceptions start to build up here consider splitting this Loader into multiple separate ones. + if (folder.Name == "custom_root") + EnumerateRoot(folder.Value, bookmarks, source); + else EnumerateFolderBookmark(folder.Value, bookmarks, source); } - - return bookmarks; } private void EnumerateFolderBookmark(JsonElement folderElement, ICollection bookmarks,