Esempio n. 1
0
        /// <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;
 }