コード例 #1
0
 public void SimpleStructure()
 {
     var container = Helpers.GetSimpleStructure();
     container.Add(new BookmarkLink("test", "test123") {Description = "<br>"});
     var writter = new NetscapeBookmarksWritter(container);
     var reader = new NetscapeBookmarksReader();
     var write1 = writter.ToString();
     var readed = reader.Read(write1);
     writter = new NetscapeBookmarksWritter(readed);
     var write2 = writter.ToString();
     readed = reader.Read(write2);
     Assert.AreEqual(write1, write2, true);
     Assert.IsNotNull(readed.AllLinks.FirstOrDefault(l => l.Title == "test123" && l.Description == "<br>"), "Description must be preserved between reads and writes");
 }
コード例 #2
0
        public void GetBookMark()
        {
            var bookmarksString = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData\\Roaming\\Google\\Chrome\\Default\\Bookmarks");
            var bookmarksfile   = "E:\\bookmarks_5_17_16.html";


            //var reader = new NetscapeBookmarksReader();
            //var bookmarks = reader.Read(bookmarksString);
            //foreach (var b in bookmarks.AllLinks)
            //{
            //    Console.WriteLine("Url: {0}; Title: {1}", b.Url, b.Title);
            //}

            //Read bookmarks from file
            using (var file = File.OpenRead(bookmarksfile))
            {
                var reader1 = new NetscapeBookmarksReader();
                //supports encoding detection when reading from stream
                var bookmarks2 = reader1.Read(file);
                foreach (var b in bookmarks2.AllLinks.Where(l => l.LastVisit < DateTime.Today))
                {
                    Console.WriteLine("Type {0}, Title: {1}", b.GetType().Name, b.Title);
                }
            }
        }
コード例 #3
0
        public void CustomAttributes()
        {
            var container = new BookmarkFolder
            {
                new BookmarkLink("a", "b")
                {
                    Attributes = new Dictionary <string, string> {
                        { "custom", "1" }
                    }
                },
                new BookmarkFolder("folder")
                {
                    Attributes = new Dictionary <string, string> {
                        { "custom", "2" }, { "add_date", "ę" }
                    }
                }
            };
            var writter = new NetscapeBookmarksWritter(container);
            var reader  = new NetscapeBookmarksReader();
            var write1  = writter.ToString();
            var readed  = reader.Read(write1);

            Assert.AreEqual("1", readed.AllLinks.First().Attributes["custom"]);
            Assert.AreEqual("2", readed.GetAllItems <BookmarkFolder>().First().Attributes["custom"]);
            Assert.IsFalse(readed.GetAllItems <BookmarkFolder>().First().Attributes.ContainsKey("add_date"), "add_date is ignored attribute, it must not be written");
        }
コード例 #4
0
        static void Main(string[] args)
        {
            try
            {
                #region Test
                string fileToParse = "NewTL.html";
                //Read bookmarks from file
                using (var file = File.OpenRead(fileToParse))
                {
                    var reader = new NetscapeBookmarksReader();
                    //supports encoding detection when reading from stream
                    var bookmarks = reader.Read(file);
                    foreach (var b in bookmarks.AllLinks)
                    {
                        Console.WriteLine("Type: {0}, Title: {1}, Url:{2}", b.GetType().Name, b.Title, b.Url);
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }


            Console.WriteLine();
            Console.Write("Press any key to exit...");
            Console.ReadKey();
        }
コード例 #5
0
        public void EmptyContainer()
        {
            var html      = string.Format(HtmlTemplate, string.Empty, "utf-8");
            var container = _reader.Read(html);

            Assert.IsNull(container.Title);
            Assert.IsNotNull(container.Attributes);
            Assert.IsFalse(container.Any());
            Assert.IsFalse(container.AllItems.Any());
        }
コード例 #6
0
        public void FFToolbarFolder()
        {
            var html      = string.Format(HtmlTemplate, "<DT><H3 personal_toolbar_folder='true'><DL><DT><a href='#'>test</a></DL>", string.Empty);
            var reader    = new NetscapeBookmarksReader();
            var container = reader.Read(html);
            var ff        = container.GetBookmarksBar();

            Assert.IsNotNull(ff, "Firefox bookmarks toolbar was not found");
            Assert.AreEqual("test", ff.First().Title, "Firefox bookmarks toolbar was not found");
        }
コード例 #7
0
        public bool ReadHtmlFile(string vsFile)
        {
            //Read bookmarks from file
            try
            {
                cFile oFile     = new cFile(vsFile);
                var   bookmarks = oHtmlReader.Read(oFile.ReadFileStream());

                foreach (var b in bookmarks.AllLinks)
                {
                    oUrListList.Add(b.Url);
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
コード例 #8
0
 public void EncodingAutodetectHeaderLength()
 {
     var encoding = Encoding.GetEncoding(1257);
     var html = string.Format(HtmlTemplate, "<DT><a href='#;'>ĄŽ</a>", encoding.WebName);
     var bytes = encoding.GetBytes(html);
     var ms = new MemoryStream(bytes);
     var reader = new NetscapeBookmarksReader {AutoDetectEncoding = true, HeaderLength = 10};
     var container = reader.Read(ms);
     Assert.AreNotEqual("ĄŽ", container[0].Title);
 }
コード例 #9
0
        public void SimpleStructure()
        {
            var container = Helpers.GetSimpleStructure();

            container.Add(new BookmarkLink("test", "test123")
            {
                Description = "<br>"
            });
            var writter = new NetscapeBookmarksWritter(container);
            var reader  = new NetscapeBookmarksReader();
            var write1  = writter.ToString();
            var readed  = reader.Read(write1);

            writter = new NetscapeBookmarksWritter(readed);
            var write2 = writter.ToString();

            readed = reader.Read(write2);
            Assert.AreEqual(write1, write2, true);
            Assert.IsNotNull(readed.AllLinks.FirstOrDefault(l => l.Title == "test123" && l.Description == "<br>"), "Description must be preserved between reads and writes");
        }
コード例 #10
0
 public void EmptyContainer()
 {
     var emptyContainer = new BookmarkFolder();
     var writter = new NetscapeBookmarksWritter(emptyContainer);
     var reader = new NetscapeBookmarksReader();
     var write1 = writter.ToString();
     var readed = reader.Read(write1);
     writter = new NetscapeBookmarksWritter(readed);
     var write2 = writter.ToString();
     Assert.AreEqual(write1, write2, true);
 }
コード例 #11
0
 public void EncodingAutodetectAscii()
 {
     var encoding = Encoding.GetEncoding(1257);
     var html = string.Format(HtmlTemplate, "<DT><a href='#;'>ĄČĘĖįšųū τ</a>", encoding.WebName);
     var bytes = encoding.GetBytes(html);
     var ms = new MemoryStream(bytes);
     var reader = new NetscapeBookmarksReader {AutoDetectEncoding = true};
     var container = reader.Read(ms);
     var link = container[0];
     Assert.AreEqual("ĄČĘĖįšųū ?", link.Title);
 }
コード例 #12
0
 public void StreamUnicode()
 {
     var container = Helpers.GetSimpleStructure();
     container.Add(new BookmarkLink("test", "ƒ"));
     var ms = new MemoryStream();
     var writter = new NetscapeBookmarksWritter(container) { OutputEncoding = Encoding.Unicode };
     writter.Write(ms);
     ms = new MemoryStream(ms.GetBuffer());
     var reader = new NetscapeBookmarksReader { AutoDetectEncoding = true };
     var readed = reader.Read(ms);
     Assert.AreEqual(container.AllItems.Last().Title, readed.AllItems.Last().Title);
 }
コード例 #13
0
        public void EmptyContainer()
        {
            var emptyContainer = new BookmarkFolder();
            var writter        = new NetscapeBookmarksWritter(emptyContainer);
            var reader         = new NetscapeBookmarksReader();
            var write1         = writter.ToString();
            var readed         = reader.Read(write1);

            writter = new NetscapeBookmarksWritter(readed);
            var write2 = writter.ToString();

            Assert.AreEqual(write1, write2, true);
        }
コード例 #14
0
        public void InvalidCharset()
        {
            var encoding = Encoding.Unicode;
            var html     = @"<html><META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; charset=FOO-32""><dl>Nothing here</dl></html>";
            var bytes    = encoding.GetBytes(html);
            var ms       = new MemoryStream(bytes);
            var reader   = new NetscapeBookmarksReader {
                AutoDetectEncoding = true
            };

            reader.Read(ms);
            Assert.AreEqual(Encoding.UTF8, reader.InputEncoding, "Encoding must fallback to UTF8");
        }
コード例 #15
0
        public void EncodingAutodetectHeaderLength()
        {
            var encoding = Encoding.GetEncoding(1257);
            var html     = string.Format(HtmlTemplate, "<DT><a href='#;'>ĄŽ</a>", encoding.WebName);
            var bytes    = encoding.GetBytes(html);
            var ms       = new MemoryStream(bytes);
            var reader   = new NetscapeBookmarksReader {
                AutoDetectEncoding = true, HeaderLength = 10
            };
            var container = reader.Read(ms);

            Assert.AreNotEqual("ĄŽ", container[0].Title);
        }
コード例 #16
0
        public void EncodingUtf32()
        {
            var unicodeStr = Helpers.RandomUnicodeString(147);
            var html       = string.Format(HtmlTemplate, "<DT><a href='#'>" + unicodeStr + "</a>", "utf-32");
            var bytes      = Encoding.UTF32.GetBytes(html);
            var ms         = new MemoryStream(bytes);
            var reader     = new NetscapeBookmarksReader {
                AutoDetectEncoding = false, InputEncoding = Encoding.UTF32
            };
            var container = reader.Read(ms);
            var link      = container[0];

            Assert.AreEqual(unicodeStr, link.Title);
        }
コード例 #17
0
        public void EncodingAutodetectUtf16()
        {
            var encoding = Encoding.Unicode;
            var html     = string.Format(HtmlTemplate, "<DT><a href='#;'>ĄČĘĖįšųū τ</a>", encoding.WebName);
            var bytes    = encoding.GetBytes(html);
            var ms       = new MemoryStream(bytes);
            var reader   = new NetscapeBookmarksReader {
                AutoDetectEncoding = true
            };
            var container = reader.Read(ms);
            var link      = container[0];

            Assert.AreEqual("ĄČĘĖįšųū τ", link.Title);
        }
コード例 #18
0
        private List <ArticlePDF> getBookMark(string sBookmarkFilePath)
        {
            List <ArticlePDF> lista = new List <ArticlePDF>();

            string bookmarksString               = File.ReadAllText(sBookmarkFilePath);
            NetscapeBookmarksReader reader       = new NetscapeBookmarksReader();
            BookmarkFolder          bookmarksAll = reader.Read(bookmarksString);

            string          rootFolder   = "Doktorat";
            IBookmarkFolder bookmarksDoc = getDoktoratFolder(bookmarksAll, rootFolder); //pobierz wszystkie z bookmark Doktorat

            getArticleFromFolder(lista, "", bookmarksDoc);

            return(lista);
        }
コード例 #19
0
 public void CustomAttributes()
 {
     var container = new BookmarkFolder
     {
         new BookmarkLink("a", "b") {Attributes = new Dictionary<string, string> {{"custom", "1"}}},
         new BookmarkFolder("folder") {Attributes = new Dictionary<string, string> {{"custom", "2"}, {"add_date", "ę"}}}
     };
     var writter = new NetscapeBookmarksWritter(container);
     var reader = new NetscapeBookmarksReader();
     var write1 = writter.ToString();
     var readed = reader.Read(write1);
     Assert.AreEqual("1", readed.AllLinks.First().Attributes["custom"]);
     Assert.AreEqual("2", readed.GetAllItems<BookmarkFolder>().First().Attributes["custom"]);
     Assert.IsFalse(readed.GetAllItems<BookmarkFolder>().First().Attributes.ContainsKey("add_date"), "add_date is ignored attribute, it must not be written");
 }
コード例 #20
0
        public void StreamUnicode()
        {
            var container = Helpers.GetSimpleStructure();

            container.Add(new BookmarkLink("test", "ƒ"));
            var ms      = new MemoryStream();
            var writter = new NetscapeBookmarksWritter(container)
            {
                OutputEncoding = Encoding.Unicode
            };

            writter.Write(ms);
            ms = new MemoryStream(ms.GetBuffer());
            var reader = new NetscapeBookmarksReader {
                AutoDetectEncoding = true
            };
            var readed = reader.Read(ms);

            Assert.AreEqual(container.AllItems.Last().Title, readed.AllItems.Last().Title);
        }
コード例 #21
0
ファイル: IndexModule.cs プロジェクト: 06b/Dalian
        public IndexModule()
        {
            IDatabase db = new Database(ConfigurationManager.ConnectionStrings["db"].Name);

            Get["/"] = _ =>
            {
                //TODO: Maybe create some sort of dashboard? Worse case - just redirect to /sites?
                return(Response.AsRedirect("/sites"));
            };

            /// <summary>
            /// Retrieves all sites.
            /// </summary>
            Get["/sites"] = _ =>
            {
                List <Sites> sites = db.Fetch <Sites>();
                db.Dispose();

                Model = sites;

                return(View["index", Model]);
            };

            /// <summary>
            /// Retrieves a specific site
            /// </summary>
            Get["/sites/{siteId}"] = parameter =>
            {
                string Id = parameter.siteId;

                var site = db.FetchBy <Sites>(sql => sql.Where(x => x.SiteId == Id));

                List <Tags>     AllTags = db.Fetch <Tags>().ToList();
                List <SiteTags> Tags    = db.FetchBy <SiteTags>(sql => sql.Where(x => x.SiteId == Id)).ToList();

                List <Tags> tagList = AllTags.Where(allTags => Tags.Select(tags => tags.TagId).Contains(allTags.TagId)).ToList();

                bool          firstCSV = true;
                StringBuilder tagsCSV  = new StringBuilder();
                foreach (var tag in tagList)
                {
                    if (!firstCSV)
                    {
                        tagsCSV.Append(",");
                    }
                    tagsCSV.Append(tag.TagName);
                    firstCSV = false;
                }

                Model.site = site;
                Model.tags = tagsCSV.ToString();

                db.Dispose();

                return(View["update", Model]);
            };

            Post["/sites/meta"] = parameter =>
            {
                string requestedUrl = string.Empty;
                if (Request.Form.Values.Count > 0)
                {
                    foreach (var i in Request.Form.Values)
                    {
                        if (!string.IsNullOrWhiteSpace(requestedUrl))
                        {
                            break;
                        }
                        requestedUrl = i;
                    }
                }

                if (UriChecker.IsValidURI(requestedUrl))
                {
                    SitesMeta metadata = GetMetaData(requestedUrl);
                    return(Response.AsJson(metadata));
                }
                else
                {
                    return(HttpStatusCode.BadRequest);
                }
            };

            /// <summary>
            /// Update a specific site
            /// </summary>
            Put["/sites/{siteId}"] = parameter =>
            {
                string Id = parameter.siteId;

                Sites snapshot = db.FetchBy <Sites>(sql => sql.Where(x => x.SiteId == Id)).FirstOrDefault();

                Sites site = this.Bind <Sites>();

                // Don't clear out fields existing fields.
                site.Active          = snapshot.Active;
                site.DateTime        = snapshot.DateTime;
                site.MetaTitle       = snapshot.MetaTitle;
                site.MetaDescription = snapshot.MetaDescription;
                site.MetaKeywords    = snapshot.MetaKeywords;

                db.Update(site);
                db.Dispose();

                string        TagsPost = Request.Form.Tags.Value;
                List <string> Tags     = TagsPost.ToLower().Split(',').Select(s => s.Trim()).ToList();

                List <Tags> AllTags = db.Fetch <Tags>();
                db.Dispose();

                List <string> AllTagNames = AllTags.Select(tn => tn.TagName).ToList();

                //Delete all existing Tags for current site before linking up any new tags
                db.Delete <SiteTags>("where SiteId = @0", Id);
                db.Dispose();

                foreach (string tag in Tags)
                {
                    if (!AllTagNames.Contains(tag))
                    {
                        Tags newTag = new Tags();

                        newTag.TagId   = ShortGuid.NewGuid().ToString();
                        newTag.TagName = tag;
                        newTag.Active  = true;

                        db.Insert(newTag);
                        db.Dispose();

                        SiteTags newSiteTag = new SiteTags();
                        newSiteTag.SiteId = site.SiteId;
                        newSiteTag.TagId  = newTag.TagId;

                        db.Insert(newSiteTag);

                        db.Dispose();
                    }
                    else
                    {
                        try
                        {
                            var ExistingTag = db.FetchBy <Tags>(sql => sql.Where(x => x.TagName == tag)).FirstOrDefault();

                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId  = ExistingTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                        catch
                        {
                            //Move along
                        }
                    }
                }



                return(Response.AsRedirect("/sites/" + Id));
            };

            /// <summary>
            /// View for adding a new site
            /// </summary>
            Get["/sites/new"] = _ =>
            {
                return(View["sites", Model]);
            };

            Post["/sites/bulk"] = _ =>
            {
                var file = Request.Files.FirstOrDefault();

                if (file != null)
                {
                    var reader    = new NetscapeBookmarksReader();
                    var bookmarks = reader.Read(file.Value);
                    foreach (var b in bookmarks.AllLinks)
                    {
                        //Don't create new bookmark if it already exists
                        if (!CheckIfBookmarkAlreadyExists(b.Url))
                        {
                            Debug.WriteLine("Type {0}, Title: {1}", b.GetType().Name, b.Title);
                        }
                    }
                }

                return(Response.AsRedirect("/sites"));
            };

            /// <summary>
            /// Creates a new site
            /// </summary>
            Post["/sites"] = parameters =>
            {
                Sites site = this.Bind <Sites>();

                //Don't create new bookmark if it already exists
                if (!CheckIfBookmarkAlreadyExists(site.Url))
                {
                    site.SiteId   = ShortGuid.NewGuid().ToString();
                    site.Active   = true;
                    site.DateTime = DateTime.UtcNow;

                    //Get the MetaData if it is a valid URI
                    if (UriChecker.IsValidURI(site.Url))
                    {
                        SitesMeta metadata = GetMetaData(site.Url);

                        site.MetaTitle       = metadata.MetaTitle;
                        site.MetaDescription = metadata.MetaDescription;
                        site.MetaKeywords    = metadata.MetaKeywords;
                    }

                    db.Insert(site);
                    db.Dispose();

                    //Get the tags for the bookmark and split them to a list
                    string        TagsPost = Request.Form.Tags.Value;
                    List <string> Tags     = TagsPost.ToLower().Split(',').Select(s => s.Trim()).ToList();

                    //Get all of the existing tags
                    List <Tags> AllTags = db.Fetch <Tags>();
                    db.Dispose();

                    //Get a list of the TagNames from of all the existing tags
                    List <string> AllTagNames = AllTags.Select(tn => tn.TagName).ToList();

                    //Check if the tag for the current bookmark already exists in the list of tags
                    foreach (string tag in Tags)
                    {
                        //Add a new tag since it doesn't exist
                        if (!AllTagNames.Contains(tag))
                        {
                            Tags newTag = new Tags();

                            newTag.TagId   = ShortGuid.NewGuid().ToString();
                            newTag.TagName = tag;
                            newTag.Active  = true;

                            db.Insert(newTag);

                            //Link the tag with the site
                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId  = newTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                        else
                        {
                            //Since the tag already exists, just link the tag with the site
                            var ExistingTag = db.FetchBy <Tags>(sql => sql.Where(x => x.TagName == tag)).FirstOrDefault();

                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId  = ExistingTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                    }


                    //Redirect to the new site
                    return(Context.GetRedirect("~/sites/" + site.SiteId));
                }

                //TODO: Probably would be better to redirect to the existing page.
                return(Response.AsRedirect("/sites"));
            };
        }
コード例 #22
0
ファイル: IndexModule.cs プロジェクト: 06b/Dalian
        public IndexModule()
        {
            IDatabase db = new Database(ConfigurationManager.ConnectionStrings["db"].Name);

            Get["/"] = _ =>
            {
                //TODO: Maybe create some sort of dashboard? Worse case - just redirect to /sites?
                return Response.AsRedirect("/sites");
            };

            /// <summary>
            /// Retrieves all sites.
            /// </summary>
            Get["/sites"] = _ =>
            {
                List<Sites> sites = db.Fetch<Sites>();
                db.Dispose();

                Model = sites;

                return View["index", Model];
            };

            /// <summary>
            /// Retrieves a specific site
            /// </summary>
            Get["/sites/{siteId}"] = parameter =>
            {
                string Id = parameter.siteId;

                var site = db.FetchBy<Sites>(sql => sql.Where(x => x.SiteId == Id));

                List<Tags> AllTags = db.Fetch<Tags>().ToList();
                List<SiteTags> Tags = db.FetchBy<SiteTags>(sql => sql.Where(x => x.SiteId == Id)).ToList();

                List<Tags> tagList = AllTags.Where(allTags => Tags.Select(tags => tags.TagId).Contains(allTags.TagId)).ToList();

                bool firstCSV = true;
                StringBuilder tagsCSV = new StringBuilder();
                foreach (var tag in tagList)
                {
                    if (!firstCSV) { tagsCSV.Append(","); }
                    tagsCSV.Append(tag.TagName);
                    firstCSV = false;
                }

                Model.site = site;
                Model.tags = tagsCSV.ToString();

                db.Dispose();

                return View["update", Model];
            };

            Post["/sites/meta"] = parameter =>
            {

                string requestedUrl = string.Empty;
                if (Request.Form.Values.Count > 0)
                {
                    foreach (var i in Request.Form.Values)
                    {
                        if (!string.IsNullOrWhiteSpace(requestedUrl))
                        {
                            break;
                        }
                        requestedUrl = i;
                    }
                }

                if (UriChecker.IsValidURI(requestedUrl))
                {

                    SitesMeta metadata = GetMetaData(requestedUrl);
                    return Response.AsJson(metadata);
                }
                else
                {
                    return HttpStatusCode.BadRequest;
                }

            };

            /// <summary>
            /// Update a specific site
            /// </summary>
            Put["/sites/{siteId}"] = parameter =>
            {
                string Id = parameter.siteId;

                Sites snapshot = db.FetchBy<Sites>(sql => sql.Where(x => x.SiteId == Id)).FirstOrDefault();

                Sites site = this.Bind<Sites>();

                // Don't clear out fields existing fields.
                site.Active = snapshot.Active;
                site.DateTime = snapshot.DateTime;
                site.MetaTitle = snapshot.MetaTitle;
                site.MetaDescription = snapshot.MetaDescription;
                site.MetaKeywords = snapshot.MetaKeywords;

                db.Update(site);
                db.Dispose();

                string TagsPost = Request.Form.Tags.Value;
                List<string> Tags = TagsPost.ToLower().Split(',').Select(s => s.Trim()).ToList();

                List<Tags> AllTags = db.Fetch<Tags>();
                db.Dispose();

                List<string> AllTagNames = AllTags.Select(tn => tn.TagName).ToList();

                //Delete all existing Tags for current site before linking up any new tags
                db.Delete<SiteTags>("where SiteId = @0", Id);
                db.Dispose();

                foreach (string tag in Tags)
                {
                    if (!AllTagNames.Contains(tag))
                    {
                        Tags newTag = new Tags();

                        newTag.TagId = ShortGuid.NewGuid().ToString();
                        newTag.TagName = tag;
                        newTag.Active = true;

                        db.Insert(newTag);
                        db.Dispose();

                        SiteTags newSiteTag = new SiteTags();
                        newSiteTag.SiteId = site.SiteId;
                        newSiteTag.TagId = newTag.TagId;

                        db.Insert(newSiteTag);

                        db.Dispose();
                    }
                    else
                    {
                        try
                        {
                            var ExistingTag = db.FetchBy<Tags>(sql => sql.Where(x => x.TagName == tag)).FirstOrDefault();

                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId = ExistingTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                        catch
                        {
                            //Move along
                        }
                    }
                }

                return Response.AsRedirect("/sites/" + Id);
            };

            /// <summary>
            /// View for adding a new site
            /// </summary>
            Get["/sites/new"] = _ =>
            {
                return View["sites", Model];
            };

            Post["/sites/bulk"] = _ =>
            {

                var file = Request.Files.FirstOrDefault();

                if (file != null)
                {

                    var reader = new NetscapeBookmarksReader();
                    var bookmarks = reader.Read(file.Value);
                    foreach (var b in bookmarks.AllLinks)
                    {
                        //Don't create new bookmark if it already exists
                        if (!CheckIfBookmarkAlreadyExists(b.Url))
                        {
                            Debug.WriteLine("Type {0}, Title: {1}", b.GetType().Name, b.Title);
                        }
                    }
                }

                return Response.AsRedirect("/sites");
            };

            /// <summary>
            /// Creates a new site
            /// </summary>
            Post["/sites"] = parameters =>
            {
                Sites site = this.Bind<Sites>();

                //Don't create new bookmark if it already exists
                if (!CheckIfBookmarkAlreadyExists(site.Url))
                {

                    site.SiteId = ShortGuid.NewGuid().ToString();
                    site.Active = true;
                    site.DateTime = DateTime.UtcNow;

                    //Get the MetaData if it is a valid URI
                    if (UriChecker.IsValidURI(site.Url))
                    {
                        SitesMeta metadata = GetMetaData(site.Url);

                        site.MetaTitle = metadata.MetaTitle;
                        site.MetaDescription = metadata.MetaDescription;
                        site.MetaKeywords = metadata.MetaKeywords;
                    }

                    db.Insert(site);
                    db.Dispose();

                    //Get the tags for the bookmark and split them to a list
                    string TagsPost = Request.Form.Tags.Value;
                    List<string> Tags = TagsPost.ToLower().Split(',').Select(s => s.Trim()).ToList();

                    //Get all of the existing tags
                    List<Tags> AllTags = db.Fetch<Tags>();
                    db.Dispose();

                    //Get a list of the TagNames from of all the existing tags
                    List<string> AllTagNames = AllTags.Select(tn => tn.TagName).ToList();

                    //Check if the tag for the current bookmark already exists in the list of tags
                    foreach (string tag in Tags)
                    {
                        //Add a new tag since it doesn't exist
                        if (!AllTagNames.Contains(tag))
                        {
                            Tags newTag = new Tags();

                            newTag.TagId = ShortGuid.NewGuid().ToString();
                            newTag.TagName = tag;
                            newTag.Active = true;

                            db.Insert(newTag);

                            //Link the tag with the site
                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId = newTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                        else
                        {
                            //Since the tag already exists, just link the tag with the site
                            var ExistingTag = db.FetchBy<Tags>(sql => sql.Where(x => x.TagName == tag)).FirstOrDefault();

                            SiteTags newSiteTag = new SiteTags();
                            newSiteTag.SiteId = site.SiteId;
                            newSiteTag.TagId = ExistingTag.TagId;

                            db.Insert(newSiteTag);

                            db.Dispose();
                        }
                    }

                    //Redirect to the new site
                    return Context.GetRedirect("~/sites/" + site.SiteId);

                }

                    //TODO: Probably would be better to redirect to the existing page.
                    return Response.AsRedirect("/sites");

            };
        }
コード例 #23
0
 public void EncodingUtf32()
 {
     var unicodeStr = Helpers.RandomUnicodeString(147);
     var html = string.Format(HtmlTemplate, "<DT><a href='#'>" + unicodeStr + "</a>", "utf-32");
     var bytes = Encoding.UTF32.GetBytes(html);
     var ms = new MemoryStream(bytes);
     var reader = new NetscapeBookmarksReader {AutoDetectEncoding = false, InputEncoding = Encoding.UTF32};
     var container = reader.Read(ms);
     var link = container[0];
     Assert.AreEqual(unicodeStr, link.Title);
 }
コード例 #24
0
 public void FFToolbarFolder()
 {
     var html = string.Format(HtmlTemplate, "<DT><H3 personal_toolbar_folder='true'><DL><DT><a href='#'>test</a></DL>", string.Empty);
     var reader = new NetscapeBookmarksReader();
     var container = reader.Read(html);
     var ff = container.GetBookmarksBar();
     Assert.IsNotNull(ff, "Firefox bookmarks toolbar was not found");
     Assert.AreEqual("test", ff.First().Title, "Firefox bookmarks toolbar was not found");
 }
コード例 #25
0
 public void InvalidCharset()
 {
     var encoding = Encoding.Unicode;
     var html = @"<html><META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; charset=FOO-32""><dl>Nothing here</dl></html>";
     var bytes = encoding.GetBytes(html);
     var ms = new MemoryStream(bytes);
     var reader = new NetscapeBookmarksReader {AutoDetectEncoding = true};
     reader.Read(ms);
     Assert.AreEqual(Encoding.UTF8, reader.InputEncoding, "Encoding must fallback to UTF8");
 }
コード例 #26
0
        public void InvalidDocument()
        {
            var reader = new NetscapeBookmarksReader();

            reader.Read("<html><b>Nothing here</b></html>");
        }
コード例 #27
0
 public void InvalidDocument()
 {
     var reader = new NetscapeBookmarksReader();
     reader.Read("<html><b>Nothing here</b></html>");
 }