From c2ff04f0adea82902decfa08d437c15a070191ab Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Mon, 18 Dec 2023 00:30:18 -0600 Subject: [PATCH] add a safety check for getproperty --- .../ChromiumBookmarkLoader.cs | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs index 14b791c4898..1e4f3f9acf7 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -2,12 +2,14 @@ using System.Collections.Generic; using System.IO; using System.Text.Json; +using Flow.Launcher.Infrastructure.Logger; namespace Flow.Launcher.Plugin.BrowserBookmark { public abstract class ChromiumBookmarkLoader : IBookmarkLoader { public abstract List GetBookmarks(); + protected List LoadBookmarks(string browserDataPath, string name) { var bookmarks = new List(); @@ -19,53 +21,63 @@ protected List LoadBookmarks(string browserDataPath, string name) var bookmarkPath = Path.Combine(profile, "Bookmarks"); if (!File.Exists(bookmarkPath)) continue; - + Main.RegisterBookmarkFile(bookmarkPath); var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); } + return bookmarks; } protected List LoadBookmarksFromFile(string path, string source) { if (!File.Exists(path)) - return new(); + return new List(); var bookmarks = new List(); using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) - return new(); + return new List(); foreach (var folder in rootElement.EnumerateObject()) { if (folder.Value.ValueKind == JsonValueKind.Object) EnumerateFolderBookmark(folder.Value, bookmarks, source); } + return bookmarks; } - private void EnumerateFolderBookmark(JsonElement folderElement, List bookmarks, string source) + private void EnumerateFolderBookmark(JsonElement folderElement, ICollection bookmarks, + string source) { if (!folderElement.TryGetProperty("children", out var childrenElement)) return; foreach (var subElement in childrenElement.EnumerateArray()) { - switch (subElement.GetProperty("type").GetString()) + if (subElement.TryGetProperty("type", out var type)) { - case "folder": - case "workspace": // Edge Workspace - EnumerateFolderBookmark(subElement, bookmarks, source); - break; - default: - bookmarks.Add(new Bookmark( - subElement.GetProperty("name").GetString(), - subElement.GetProperty("url").GetString(), - source)); - break; + switch (type.GetString()) + { + case "folder": + case "workspace": // Edge Workspace + EnumerateFolderBookmark(subElement, bookmarks, source); + break; + default: + bookmarks.Add(new Bookmark( + subElement.GetProperty("name").GetString(), + subElement.GetProperty("url").GetString(), + source)); + break; + } + } + else + { + Log.Error( + $"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}"); } } - } } }