@@ -33,20 +33,32 @@ protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
3333
3434 protected List < Bookmark > LoadBookmarksFromFile ( string path , string source )
3535 {
36+ var bookmarks = new List < Bookmark > ( ) ;
37+
3638 if ( ! File . Exists ( path ) )
37- return new List < Bookmark > ( ) ;
39+ return bookmarks ;
3840
39- var bookmarks = new List < Bookmark > ( ) ;
4041 using var jsonDocument = JsonDocument . Parse ( File . ReadAllText ( path ) ) ;
4142 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+ {
4350 foreach ( var folder in rootElement . EnumerateObject ( ) )
4451 {
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
4660 EnumerateFolderBookmark ( folder . Value , bookmarks , source ) ;
4761 }
48-
49- return bookmarks ;
5062 }
5163
5264 private void EnumerateFolderBookmark ( JsonElement folderElement , ICollection < Bookmark > bookmarks ,
0 commit comments