mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
add a safety check for getproperty
This commit is contained in:
parent
15b69a2fac
commit
c2ff04f0ad
1 changed files with 28 additions and 16 deletions
|
|
@ -2,12 +2,14 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using Flow.Launcher.Infrastructure.Logger;
|
||||||
|
|
||||||
namespace Flow.Launcher.Plugin.BrowserBookmark
|
namespace Flow.Launcher.Plugin.BrowserBookmark
|
||||||
{
|
{
|
||||||
public abstract class ChromiumBookmarkLoader : IBookmarkLoader
|
public abstract class ChromiumBookmarkLoader : IBookmarkLoader
|
||||||
{
|
{
|
||||||
public abstract List<Bookmark> GetBookmarks();
|
public abstract List<Bookmark> GetBookmarks();
|
||||||
|
|
||||||
protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
|
protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
|
||||||
{
|
{
|
||||||
var bookmarks = new List<Bookmark>();
|
var bookmarks = new List<Bookmark>();
|
||||||
|
|
@ -19,53 +21,63 @@ namespace Flow.Launcher.Plugin.BrowserBookmark
|
||||||
var bookmarkPath = Path.Combine(profile, "Bookmarks");
|
var bookmarkPath = Path.Combine(profile, "Bookmarks");
|
||||||
if (!File.Exists(bookmarkPath))
|
if (!File.Exists(bookmarkPath))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Main.RegisterBookmarkFile(bookmarkPath);
|
Main.RegisterBookmarkFile(bookmarkPath);
|
||||||
|
|
||||||
var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})");
|
var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})");
|
||||||
bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source));
|
bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source));
|
||||||
}
|
}
|
||||||
|
|
||||||
return bookmarks;
|
return bookmarks;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<Bookmark> LoadBookmarksFromFile(string path, string source)
|
protected List<Bookmark> LoadBookmarksFromFile(string path, string source)
|
||||||
{
|
{
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
return new();
|
return new List<Bookmark>();
|
||||||
|
|
||||||
var bookmarks = new List<Bookmark>();
|
var bookmarks = new List<Bookmark>();
|
||||||
using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path));
|
using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path));
|
||||||
if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement))
|
if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement))
|
||||||
return new();
|
return new List<Bookmark>();
|
||||||
foreach (var folder in rootElement.EnumerateObject())
|
foreach (var folder in rootElement.EnumerateObject())
|
||||||
{
|
{
|
||||||
if (folder.Value.ValueKind == JsonValueKind.Object)
|
if (folder.Value.ValueKind == JsonValueKind.Object)
|
||||||
EnumerateFolderBookmark(folder.Value, bookmarks, source);
|
EnumerateFolderBookmark(folder.Value, bookmarks, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bookmarks;
|
return bookmarks;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnumerateFolderBookmark(JsonElement folderElement, List<Bookmark> bookmarks, string source)
|
private void EnumerateFolderBookmark(JsonElement folderElement, ICollection<Bookmark> bookmarks,
|
||||||
|
string source)
|
||||||
{
|
{
|
||||||
if (!folderElement.TryGetProperty("children", out var childrenElement))
|
if (!folderElement.TryGetProperty("children", out var childrenElement))
|
||||||
return;
|
return;
|
||||||
foreach (var subElement in childrenElement.EnumerateArray())
|
foreach (var subElement in childrenElement.EnumerateArray())
|
||||||
{
|
{
|
||||||
switch (subElement.GetProperty("type").GetString())
|
if (subElement.TryGetProperty("type", out var type))
|
||||||
{
|
{
|
||||||
case "folder":
|
switch (type.GetString())
|
||||||
case "workspace": // Edge Workspace
|
{
|
||||||
EnumerateFolderBookmark(subElement, bookmarks, source);
|
case "folder":
|
||||||
break;
|
case "workspace": // Edge Workspace
|
||||||
default:
|
EnumerateFolderBookmark(subElement, bookmarks, source);
|
||||||
bookmarks.Add(new Bookmark(
|
break;
|
||||||
subElement.GetProperty("name").GetString(),
|
default:
|
||||||
subElement.GetProperty("url").GetString(),
|
bookmarks.Add(new Bookmark(
|
||||||
source));
|
subElement.GetProperty("name").GetString(),
|
||||||
break;
|
subElement.GetProperty("url").GetString(),
|
||||||
|
source));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.Error(
|
||||||
|
$"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue