/// <summary> /// Creates bookmarks container from DB rows /// </summary> /// <returns></returns> protected virtual FirefoxBookmarkFolder ConvertRowsToBookmarksContainer(IList <FirefoxBookmarkRow> rows) { var bookmarks = new FirefoxBookmarkFolder(); int?bookmarksToolbarId = GetFolderIdByType("toolbar"); //gets firefox root bookmarks folder id from moz_bookmarks_roots table. If that doesn't exist, finds most root folder int rootFolderId = GetFolderIdByType("places") ?? (int)rows.OrderBy(r => r.Parent).First().Id; var folderIndexer = new Dictionary <long, FirefoxBookmarkFolder> { { rootFolderId, bookmarks } }; foreach (var row in rows) //folders { FirefoxBookmarkFolder parent; if (folderIndexer.TryGetValue(row.Parent, out parent)) { //firefox treats livemarks (RSS bookmarks) as folders, we want them to be links if (row.Attributes != null && row.Attributes.Any(r => r.AttributeName.Contains("livemark"))) { row.Type = 1; } if (row.Type == 2) //folder { var folder = RowToFolder(row, bookmarksToolbarId); if ((!folder.Internal || IncludeInternal) && !row.Hidden) { bookmarks.Add(folder); } folderIndexer.Add(row.Id, folder); } else if (row.Type == 1) //link { var link = RowToLink(row); if ((!link.Internal || IncludeInternal) && (!row.Hidden || link.Internal)) { parent.Add(link); } } } } return(bookmarks); }
private FirefoxBookmarkFolder RowToFolder(FirefoxBookmarkRow row, int?bookmarksToolbarId) { var folder = new FirefoxBookmarkFolder() { Title = row.Title, LastModified = DateTimeHelper.FromUnixTimeStamp(row.LastModified), Added = DateTimeHelper.FromUnixTimeStamp(row.DateAdded), Id = row.Id, }; if (row.Id == bookmarksToolbarId) { folder.IsBoomarksToolbar = true; folder.Attributes.Add("personal_toolbar_folder", "true"); } if (row.Attributes != null) { foreach (var attr in row.Attributes) { var attrName = attr.AttributeName.ToLower(); switch (attrName) { case "bookmarkproperties/description": folder.Description = attr.AttributeValue; break; case "places/excludefrombackup": folder.ExcludeFromBackup = attr.AttributeValue == "1"; break; } if (attrName.StartsWith("places", StringComparison.CurrentCultureIgnoreCase)) { folder.Internal = true; } } } return(folder); }
/// <summary> /// Creates bookmarks container from DB rows /// </summary> /// <returns></returns> protected virtual FirefoxBookmarkFolder ConvertRowsToBookmarksContainer(IList<FirefoxBookmarkRow> rows) { var bookmarks = new FirefoxBookmarkFolder(); int? bookmarksToolbarId = GetFolderIdByType("toolbar"); //gets firefox root bookmarks folder id from moz_bookmarks_roots table. If that doesn't exist, finds most root folder int rootFolderId = GetFolderIdByType("places") ?? (int)rows.OrderBy(r => r.Parent).First().Id; var folderIndexer = new Dictionary<long, FirefoxBookmarkFolder> { { rootFolderId, bookmarks } }; foreach (var row in rows) //folders { FirefoxBookmarkFolder parent; if (folderIndexer.TryGetValue(row.Parent, out parent)) { //firefox treats livemarks (RSS bookmarks) as folders, we want them to be links if (row.Attributes != null && row.Attributes.Any(r => r.AttributeName.Contains("livemark"))) row.Type = 1; if (row.Type == 2) //folder { var folder = RowToFolder(row,bookmarksToolbarId); if ((!folder.Internal || IncludeInternal) && !row.Hidden) bookmarks.Add(folder); folderIndexer.Add(row.Id, folder); } else if (row.Type == 1) //link { var link = RowToLink(row); if ((!link.Internal || IncludeInternal) && (!row.Hidden || link.Internal)) parent.Add(link); } } } return bookmarks; }
private FirefoxBookmarkFolder RowToFolder(FirefoxBookmarkRow row, int? bookmarksToolbarId) { var folder = new FirefoxBookmarkFolder() { Title = row.Title, LastModified = DateTimeHelper.FromUnixTimeStamp(row.LastModified), Added = DateTimeHelper.FromUnixTimeStamp(row.DateAdded), Id = row.Id, }; if (row.Id == bookmarksToolbarId) { folder.IsBoomarksToolbar = true; folder.Attributes.Add("personal_toolbar_folder", "true"); } if (row.Attributes != null) { foreach (var attr in row.Attributes) { var attrName = attr.AttributeName.ToLower(); switch (attrName) { case "bookmarkproperties/description": folder.Description = attr.AttributeValue; break; case "places/excludefrombackup": folder.ExcludeFromBackup = attr.AttributeValue == "1"; break; } if (attrName.StartsWith("places", StringComparison.CurrentCultureIgnoreCase)) { folder.Internal = true; } } } return folder; }