2
2
using System . Collections . Generic ;
3
3
using System . IO ;
4
4
using System . Text . Json ;
5
+ using Flow . Launcher . Infrastructure . Logger ;
5
6
6
7
namespace Flow . Launcher . Plugin . BrowserBookmark
7
8
{
8
9
public abstract class ChromiumBookmarkLoader : IBookmarkLoader
9
10
{
10
11
public abstract List < Bookmark > GetBookmarks ( ) ;
12
+
11
13
protected List < Bookmark > LoadBookmarks ( string browserDataPath , string name )
12
14
{
13
15
var bookmarks = new List < Bookmark > ( ) ;
@@ -19,53 +21,63 @@ protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
19
21
var bookmarkPath = Path . Combine ( profile , "Bookmarks" ) ;
20
22
if ( ! File . Exists ( bookmarkPath ) )
21
23
continue ;
22
-
24
+
23
25
Main . RegisterBookmarkFile ( bookmarkPath ) ;
24
26
25
27
var source = name + ( Path . GetFileName ( profile ) == "Default" ? "" : $ " ({ Path . GetFileName ( profile ) } )") ;
26
28
bookmarks . AddRange ( LoadBookmarksFromFile ( bookmarkPath , source ) ) ;
27
29
}
30
+
28
31
return bookmarks ;
29
32
}
30
33
31
34
protected List < Bookmark > LoadBookmarksFromFile ( string path , string source )
32
35
{
33
36
if ( ! File . Exists ( path ) )
34
- return new ( ) ;
37
+ return new List < Bookmark > ( ) ;
35
38
36
39
var bookmarks = new List < Bookmark > ( ) ;
37
40
using var jsonDocument = JsonDocument . Parse ( File . ReadAllText ( path ) ) ;
38
41
if ( ! jsonDocument . RootElement . TryGetProperty ( "roots" , out var rootElement ) )
39
- return new ( ) ;
42
+ return new List < Bookmark > ( ) ;
40
43
foreach ( var folder in rootElement . EnumerateObject ( ) )
41
44
{
42
45
if ( folder . Value . ValueKind == JsonValueKind . Object )
43
46
EnumerateFolderBookmark ( folder . Value , bookmarks , source ) ;
44
47
}
48
+
45
49
return bookmarks ;
46
50
}
47
51
48
- private void EnumerateFolderBookmark ( JsonElement folderElement , List < Bookmark > bookmarks , string source )
52
+ private void EnumerateFolderBookmark ( JsonElement folderElement , ICollection < Bookmark > bookmarks ,
53
+ string source )
49
54
{
50
55
if ( ! folderElement . TryGetProperty ( "children" , out var childrenElement ) )
51
56
return ;
52
57
foreach ( var subElement in childrenElement . EnumerateArray ( ) )
53
58
{
54
- switch ( subElement . GetProperty ( "type" ) . GetString ( ) )
59
+ if ( subElement . TryGetProperty ( "type" , out var type ) )
55
60
{
56
- case "folder" :
57
- case "workspace" : // Edge Workspace
58
- EnumerateFolderBookmark ( subElement , bookmarks , source ) ;
59
- break ;
60
- default :
61
- bookmarks . Add ( new Bookmark (
62
- subElement . GetProperty ( "name" ) . GetString ( ) ,
63
- subElement . GetProperty ( "url" ) . GetString ( ) ,
64
- source ) ) ;
65
- break ;
61
+ switch ( type . GetString ( ) )
62
+ {
63
+ case "folder" :
64
+ case "workspace" : // Edge Workspace
65
+ EnumerateFolderBookmark ( subElement , bookmarks , source ) ;
66
+ break ;
67
+ default :
68
+ bookmarks . Add ( new Bookmark (
69
+ subElement . GetProperty ( "name" ) . GetString ( ) ,
70
+ subElement . GetProperty ( "url" ) . GetString ( ) ,
71
+ source ) ) ;
72
+ break ;
73
+ }
74
+ }
75
+ else
76
+ {
77
+ Log . Error (
78
+ $ "ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for { subElement . GetString ( ) } ") ;
66
79
}
67
80
}
68
-
69
81
}
70
82
}
71
83
}
0 commit comments