Skip to content

Commit 3554136

Browse files
Merge pull request #2652 from Flow-Launcher/code-cleanup/Flow.Launcher.Plugin.BrowserBookmark
Code cleanup: Flow.Launcher.Plugin.BrowserBookmark
2 parents 1596c59 + 507a126 commit 3554136

17 files changed

+640
-658
lines changed

.github/actions/spelling/allow.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ https
33
ssh
44
ubuntu
55
runcount
6+
Firefox
7+
Português
8+
Português (Brasil)

.github/actions/spelling/expect.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ WCA_ACCENT_POLICY
7474
HGlobal
7575
dopusrt
7676
firefox
77+
Firefox
7778
msedge
7879
svgc
7980
ime

Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@
33
using System.Collections.Generic;
44
using System.IO;
55

6-
namespace Flow.Launcher.Plugin.BrowserBookmark
6+
namespace Flow.Launcher.Plugin.BrowserBookmark;
7+
8+
public class ChromeBookmarkLoader : ChromiumBookmarkLoader
79
{
8-
public class ChromeBookmarkLoader : ChromiumBookmarkLoader
10+
public override List<Bookmark> GetBookmarks()
911
{
10-
public override List<Bookmark> GetBookmarks()
11-
{
12-
return LoadChromeBookmarks();
13-
}
12+
return LoadChromeBookmarks();
13+
}
1414

15-
private List<Bookmark> LoadChromeBookmarks()
16-
{
17-
var bookmarks = new List<Bookmark>();
18-
var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
19-
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome"));
20-
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary"));
21-
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium"));
22-
return bookmarks;
23-
}
15+
private List<Bookmark> LoadChromeBookmarks()
16+
{
17+
var bookmarks = new List<Bookmark>();
18+
var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
19+
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome"));
20+
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary"));
21+
bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium"));
22+
return bookmarks;
2423
}
25-
}
24+
}

Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs

Lines changed: 64 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -4,92 +4,91 @@
44
using System.Text.Json;
55
using Flow.Launcher.Infrastructure.Logger;
66

7-
namespace Flow.Launcher.Plugin.BrowserBookmark
7+
namespace Flow.Launcher.Plugin.BrowserBookmark;
8+
9+
public abstract class ChromiumBookmarkLoader : IBookmarkLoader
810
{
9-
public abstract class ChromiumBookmarkLoader : IBookmarkLoader
11+
public abstract List<Bookmark> GetBookmarks();
12+
13+
protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
1014
{
11-
public abstract List<Bookmark> GetBookmarks();
15+
var bookmarks = new List<Bookmark>();
16+
if (!Directory.Exists(browserDataPath)) return bookmarks;
17+
var paths = Directory.GetDirectories(browserDataPath);
1218

13-
protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
19+
foreach (var profile in paths)
1420
{
15-
var bookmarks = new List<Bookmark>();
16-
if (!Directory.Exists(browserDataPath)) return bookmarks;
17-
var paths = Directory.GetDirectories(browserDataPath);
18-
19-
foreach (var profile in paths)
20-
{
21-
var bookmarkPath = Path.Combine(profile, "Bookmarks");
22-
if (!File.Exists(bookmarkPath))
23-
continue;
24-
25-
Main.RegisterBookmarkFile(bookmarkPath);
21+
var bookmarkPath = Path.Combine(profile, "Bookmarks");
22+
if (!File.Exists(bookmarkPath))
23+
continue;
2624

27-
var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})");
28-
bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source));
29-
}
25+
Main.RegisterBookmarkFile(bookmarkPath);
3026

31-
return bookmarks;
27+
var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})");
28+
bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source));
3229
}
3330

34-
protected List<Bookmark> LoadBookmarksFromFile(string path, string source)
35-
{
36-
var bookmarks = new List<Bookmark>();
31+
return bookmarks;
32+
}
3733

38-
if (!File.Exists(path))
39-
return bookmarks;
34+
protected List<Bookmark> LoadBookmarksFromFile(string path, string source)
35+
{
36+
var bookmarks = new List<Bookmark>();
4037

41-
using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path));
42-
if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement))
43-
return bookmarks;
44-
EnumerateRoot(rootElement, bookmarks, source);
38+
if (!File.Exists(path))
4539
return bookmarks;
46-
}
4740

48-
private void EnumerateRoot(JsonElement rootElement, ICollection<Bookmark> bookmarks, string source)
41+
using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path));
42+
if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement))
43+
return bookmarks;
44+
EnumerateRoot(rootElement, bookmarks, source);
45+
return bookmarks;
46+
}
47+
48+
private void EnumerateRoot(JsonElement rootElement, ICollection<Bookmark> bookmarks, string source)
49+
{
50+
foreach (var folder in rootElement.EnumerateObject())
4951
{
50-
foreach (var folder in rootElement.EnumerateObject())
51-
{
52-
if (folder.Value.ValueKind != JsonValueKind.Object)
53-
continue;
52+
if (folder.Value.ValueKind != JsonValueKind.Object)
53+
continue;
5454

55-
// Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details.
56-
// If various exceptions start to build up here consider splitting this Loader into multiple separate ones.
57-
if (folder.Name == "custom_root")
58-
EnumerateRoot(folder.Value, bookmarks, source);
59-
else
60-
EnumerateFolderBookmark(folder.Value, bookmarks, source);
61-
}
55+
// Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details.
56+
// If various exceptions start to build up here consider splitting this Loader into multiple separate ones.
57+
if (folder.Name == "custom_root")
58+
EnumerateRoot(folder.Value, bookmarks, source);
59+
else
60+
EnumerateFolderBookmark(folder.Value, bookmarks, source);
6261
}
62+
}
6363

64-
private void EnumerateFolderBookmark(JsonElement folderElement, ICollection<Bookmark> bookmarks,
65-
string source)
64+
private void EnumerateFolderBookmark(JsonElement folderElement, ICollection<Bookmark> bookmarks,
65+
string source)
66+
{
67+
if (!folderElement.TryGetProperty("children", out var childrenElement))
68+
return;
69+
foreach (var subElement in childrenElement.EnumerateArray())
6670
{
67-
if (!folderElement.TryGetProperty("children", out var childrenElement))
68-
return;
69-
foreach (var subElement in childrenElement.EnumerateArray())
71+
if (subElement.TryGetProperty("type", out var type))
7072
{
71-
if (subElement.TryGetProperty("type", out var type))
72-
{
73-
switch (type.GetString())
74-
{
75-
case "folder":
76-
case "workspace": // Edge Workspace
77-
EnumerateFolderBookmark(subElement, bookmarks, source);
78-
break;
79-
default:
80-
bookmarks.Add(new Bookmark(
81-
subElement.GetProperty("name").GetString(),
82-
subElement.GetProperty("url").GetString(),
83-
source));
84-
break;
85-
}
86-
}
87-
else
73+
switch (type.GetString())
8874
{
89-
Log.Error(
90-
$"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}");
75+
case "folder":
76+
case "workspace": // Edge Workspace
77+
EnumerateFolderBookmark(subElement, bookmarks, source);
78+
break;
79+
default:
80+
bookmarks.Add(new Bookmark(
81+
subElement.GetProperty("name").GetString(),
82+
subElement.GetProperty("url").GetString(),
83+
source));
84+
break;
9185
}
9286
}
87+
else
88+
{
89+
Log.Error(
90+
$"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}");
91+
}
9392
}
9493
}
9594
}

Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,56 +4,55 @@
44
using Flow.Launcher.Plugin.BrowserBookmark.Models;
55
using Flow.Launcher.Plugin.SharedModels;
66

7-
namespace Flow.Launcher.Plugin.BrowserBookmark.Commands
7+
namespace Flow.Launcher.Plugin.BrowserBookmark.Commands;
8+
9+
internal static class BookmarkLoader
810
{
9-
internal static class BookmarkLoader
11+
internal static MatchResult MatchProgram(Bookmark bookmark, string queryString)
1012
{
11-
internal static MatchResult MatchProgram(Bookmark bookmark, string queryString)
12-
{
13-
var match = StringMatcher.FuzzySearch(queryString, bookmark.Name);
14-
if (match.IsSearchPrecisionScoreMet())
15-
return match;
13+
var match = StringMatcher.FuzzySearch(queryString, bookmark.Name);
14+
if (match.IsSearchPrecisionScoreMet())
15+
return match;
1616

17-
return StringMatcher.FuzzySearch(queryString, bookmark.Url);
18-
}
17+
return StringMatcher.FuzzySearch(queryString, bookmark.Url);
18+
}
1919

20-
internal static List<Bookmark> LoadAllBookmarks(Settings setting)
21-
{
22-
var allBookmarks = new List<Bookmark>();
20+
internal static List<Bookmark> LoadAllBookmarks(Settings setting)
21+
{
22+
var allBookmarks = new List<Bookmark>();
2323

24-
if (setting.LoadChromeBookmark)
25-
{
26-
// Add Chrome bookmarks
27-
var chromeBookmarks = new ChromeBookmarkLoader();
28-
allBookmarks.AddRange(chromeBookmarks.GetBookmarks());
29-
}
24+
if (setting.LoadChromeBookmark)
25+
{
26+
// Add Chrome bookmarks
27+
var chromeBookmarks = new ChromeBookmarkLoader();
28+
allBookmarks.AddRange(chromeBookmarks.GetBookmarks());
29+
}
3030

31-
if (setting.LoadFirefoxBookmark)
32-
{
33-
// Add Firefox bookmarks
34-
var mozBookmarks = new FirefoxBookmarkLoader();
35-
allBookmarks.AddRange(mozBookmarks.GetBookmarks());
36-
}
31+
if (setting.LoadFirefoxBookmark)
32+
{
33+
// Add Firefox bookmarks
34+
var mozBookmarks = new FirefoxBookmarkLoader();
35+
allBookmarks.AddRange(mozBookmarks.GetBookmarks());
36+
}
3737

38-
if (setting.LoadEdgeBookmark)
39-
{
40-
// Add Edge (Chromium) bookmarks
41-
var edgeBookmarks = new EdgeBookmarkLoader();
42-
allBookmarks.AddRange(edgeBookmarks.GetBookmarks());
43-
}
38+
if (setting.LoadEdgeBookmark)
39+
{
40+
// Add Edge (Chromium) bookmarks
41+
var edgeBookmarks = new EdgeBookmarkLoader();
42+
allBookmarks.AddRange(edgeBookmarks.GetBookmarks());
43+
}
4444

45-
foreach (var browser in setting.CustomChromiumBrowsers)
45+
foreach (var browser in setting.CustomChromiumBrowsers)
46+
{
47+
IBookmarkLoader loader = browser.BrowserType switch
4648
{
47-
IBookmarkLoader loader = browser.BrowserType switch
48-
{
49-
BrowserType.Chromium => new CustomChromiumBookmarkLoader(browser),
50-
BrowserType.Firefox => new CustomFirefoxBookmarkLoader(browser),
51-
_ => new CustomChromiumBookmarkLoader(browser),
52-
};
53-
allBookmarks.AddRange(loader.GetBookmarks());
54-
}
55-
56-
return allBookmarks.Distinct().ToList();
49+
BrowserType.Chromium => new CustomChromiumBookmarkLoader(browser),
50+
BrowserType.Firefox => new CustomFirefoxBookmarkLoader(browser),
51+
_ => new CustomChromiumBookmarkLoader(browser),
52+
};
53+
allBookmarks.AddRange(loader.GetBookmarks());
5754
}
55+
56+
return allBookmarks.Distinct().ToList();
5857
}
5958
}
Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
using Flow.Launcher.Plugin.BrowserBookmark.Models;
22
using System.Collections.Generic;
33

4-
namespace Flow.Launcher.Plugin.BrowserBookmark
4+
namespace Flow.Launcher.Plugin.BrowserBookmark;
5+
6+
public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader
57
{
6-
public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader
8+
public CustomChromiumBookmarkLoader(CustomBrowser browser)
79
{
8-
public CustomChromiumBookmarkLoader(CustomBrowser browser)
9-
{
10-
BrowserName = browser.Name;
11-
BrowserDataPath = browser.DataDirectoryPath;
12-
}
13-
public string BrowserDataPath { get; init; }
14-
public string BookmarkFilePath { get; init; }
15-
public string BrowserName { get; init; }
16-
17-
public override List<Bookmark> GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName);
10+
BrowserName = browser.Name;
11+
BrowserDataPath = browser.DataDirectoryPath;
1812
}
19-
}
13+
public string BrowserDataPath { get; init; }
14+
public string BookmarkFilePath { get; init; }
15+
public string BrowserName { get; init; }
16+
17+
public override List<Bookmark> GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName);
18+
}

Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,25 @@
22
using System.IO;
33
using Flow.Launcher.Plugin.BrowserBookmark.Models;
44

5-
namespace Flow.Launcher.Plugin.BrowserBookmark
5+
namespace Flow.Launcher.Plugin.BrowserBookmark;
6+
7+
public class CustomFirefoxBookmarkLoader : FirefoxBookmarkLoaderBase
68
{
7-
public class CustomFirefoxBookmarkLoader : FirefoxBookmarkLoaderBase
9+
public CustomFirefoxBookmarkLoader(CustomBrowser browser)
810
{
9-
public CustomFirefoxBookmarkLoader(CustomBrowser browser)
10-
{
11-
BrowserName = browser.Name;
12-
BrowserDataPath = browser.DataDirectoryPath;
13-
}
14-
15-
/// <summary>
16-
/// Path to places.sqlite
17-
/// </summary>
18-
public string BrowserDataPath { get; init; }
19-
20-
public string BrowserName { get; init; }
11+
BrowserName = browser.Name;
12+
BrowserDataPath = browser.DataDirectoryPath;
13+
}
14+
15+
/// <summary>
16+
/// Path to places.sqlite
17+
/// </summary>
18+
public string BrowserDataPath { get; init; }
2119

22-
public override List<Bookmark> GetBookmarks()
23-
{
24-
return GetBookmarksFromPath(Path.Combine(BrowserDataPath, "places.sqlite"));
25-
}
20+
public string BrowserName { get; init; }
21+
22+
public override List<Bookmark> GetBookmarks()
23+
{
24+
return GetBookmarksFromPath(Path.Combine(BrowserDataPath, "places.sqlite"));
2625
}
2726
}

0 commit comments

Comments
 (0)