@@ -33,20 +33,32 @@ protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
33
33
34
34
protected List < Bookmark > LoadBookmarksFromFile ( string path , string source )
35
35
{
36
+ var bookmarks = new List < Bookmark > ( ) ;
37
+
36
38
if ( ! File . Exists ( path ) )
37
- return new List < Bookmark > ( ) ;
39
+ return bookmarks ;
38
40
39
- var bookmarks = new List < Bookmark > ( ) ;
40
41
using var jsonDocument = JsonDocument . Parse ( File . ReadAllText ( path ) ) ;
41
42
if ( ! jsonDocument . RootElement . TryGetProperty ( "roots" , out var rootElement ) )
42
- return new List < Bookmark > ( ) ;
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
+ {
43
50
foreach ( var folder in rootElement . EnumerateObject ( ) )
44
51
{
45
- if ( folder . Value . ValueKind == JsonValueKind . Object )
52
+ if ( folder . Value . ValueKind != JsonValueKind . Object )
53
+ continue ;
54
+
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
46
60
EnumerateFolderBookmark ( folder . Value , bookmarks , source ) ;
47
61
}
48
-
49
- return bookmarks ;
50
62
}
51
63
52
64
private void EnumerateFolderBookmark ( JsonElement folderElement , ICollection < Bookmark > bookmarks ,
0 commit comments