private List <CommitStripItem> ParseRss(string rss)
        {
            var xdoc = XDocument.Parse(rss);

            var        comics    = new List <CommitStripItem>();
            var        items     = xdoc.Descendants("item");
            XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/";

            foreach (var item in items)
            {
                var categoryList = item.Elements("category").Select(category => (string)category).ToList();
                var comic        = new CommitStripItem()
                {
                    Title       = (string)item.Element("title"),
                    Description = (string)item.Element(nsContent + "encoded"),
                    Link        = (string)item.Element("link"),
                    PubDate     = parseTime((string)item.Element("pubDate")),
                    ImageLink   = ComicParser.GetImageLink((string)item.Element(nsContent + "encoded")),
                    Id          = StringHelper.RemoveSpecialCharacters((string)item.Element("link")),
                    Categories  = categoryList
                };
                comics.Add(comic);
            }
            return(comics);
        }
Ejemplo n.º 2
0
        public void GetUrlGeneratorSmbc()
        {
            var smbcUrl    = "http://www.smbc-comics.com/index.php?db=comics&id=614";
            var smbcUrl0   = "http://www.smbc-comics.com/comics/20061010.gif";
            var smbcUrl1   = "http://www.smbc-comics.com/comics/20061011.gif";
            var smbcUrl2   = "http://www.smbc-comics.com/comics/20061012.gif";
            var smbcParser = new ComicParser(smbcUrl);

            // get the generator object
            DateGenerator urlGen = (DateGenerator)smbcParser.GetUrlGenerator();

            urlGen.Days = DateGenerator.EveryDay;

            // generate 10 urls, going backwards, including the original (and starting from the original)
            List <string> backUrls = urlGen.Get(-1, 10);
            // generate 10 urls, going forwards, excluding the original (and starting from the original)
            List <string> forwardUrls = urlGen.Get(0, 10);

            // each url should be the comic, directly
            // urls are sorted
            Assert.AreEqual(smbcUrl0, backUrls [0]);
            Assert.AreEqual(smbcUrl1, backUrls [1]);
            Assert.AreEqual(10, backUrls.Count());
            Assert.AreEqual(smbcUrl1, forwardUrls [0]);
            Assert.AreEqual(smbcUrl2, forwardUrls [1]);
            Assert.AreEqual(10, forwardUrls.Count());
        }
Ejemplo n.º 3
0
        public void DownloadMany()
        {
            // choose target files to download
            var url = "http://www.smbc-comics.com/comics/20061001.gif";
//			var url = "http://www.irregularwebcomic.net/55.html";
            var parser = new ComicParser(url);
            var urlGen = parser.GetUrlGenerator() as DateGenerator;

            urlGen.Days = DateGenerator.EveryDay;
            var urls = urlGen.Get(0, 20);

            foreach (var x in urls)
            {
                Console.WriteLine(x);
            }

            var numComics = urls.Where <string> (x => x != String.Empty).Count();

            using (var repo = new Repository()) {
                // set the gate
                AutoResetEvent auto = new AutoResetEvent(false);

                // event handler allows program to progress
                repo.MultipleDownloadsCompleted += delegate(object sender, EventArgs e) {
                    auto.Set();
                };

                // begin the download and block
                repo.Download(urls);
//				auto.WaitOne ();

                // check that it worked
                Assert.AreEqual(numComics, repo.Files.Count);
            }
        }
        public void GetDirectly()
        {
            var url    = "http://comic.com/009.png";
            var parser = new ComicParser(url);
            var img0   = "http://comic.com/613.png";
            var img1   = "http://comic.com/614.png";
            var img2   = "http://comic.com/615.png";

            // get the generator object
            UrlGenerator urlGen = parser.GetUrlGenerator();

            Assert.AreEqual("1", urlGen.Start);

            // generate 10 urls, starting from 605
            List <string> backUrls = urlGen.Get(612, 10);
            // generate 10 urls, starting from 615
            List <string> forwardUrls = urlGen.Get(614, 10);

            // each url should be the comic, directly
            // urls are sorted
            Assert.AreEqual(10, backUrls.Count());
            Assert.AreEqual(img0, backUrls [0]);
            Assert.AreEqual(img1, backUrls [1]);
            Assert.AreEqual(img2, backUrls [2]);
            Assert.AreEqual(10, forwardUrls.Count());
            Assert.AreEqual(img2, forwardUrls [0]);
        }
Ejemplo n.º 5
0
        public void GetUrlGeneratorIrregularWebcomic()
        {
            var pageUrl  = "http://www.irregularwebcomic.net/32.html";
            var comicUrl = "http://www.irregularwebcomic.net/comics/irreg0032.jpg";
            var parser   = new ComicParser(pageUrl);
            var urlGen   = parser.GetUrlGenerator();

            Assert.AreEqual(comicUrl, urlGen.Comic.AbsoluteUri);
        }
Ejemplo n.º 6
0
        public void GetUrlGeneratorXkcd()
        {
            var xkcdUrl    = "http://xkcd.com/614";
            var xkcdParser = new ComicParser(xkcdUrl);

            // get the generator object - should be the right type
            UrlGenerator urlGen = xkcdParser.GetUrlGenerator();

            Assert.IsTrue(urlGen.ToString().Contains("SequentialGenerator"));
        }
Ejemplo n.º 7
0
        public void TryRedirectToImgIrregularWebcomic()
        {
            var url    = "http://www.irregularwebcomic.net/32.html";
            var imgUrl = "http://www.irregularwebcomic.net/comics/irreg0032.jpg";
            var parser = new ComicParser(url);
            var urlGen = parser.GetUrlGenerator();

            Assert.AreEqual(imgUrl, urlGen.Comic.AbsoluteUri);

            parser = new ComicParser(imgUrl);
            urlGen = parser.GetUrlGenerator();
            Assert.AreEqual(imgUrl, urlGen.Comic.AbsoluteUri);
        }
Ejemplo n.º 8
0
        public void TryRedirectToImgSmbc()
        {
            var url    = "http://www.smbc-comics.com/index.php?db=comics&id=614";
            var imgUrl = "http://www.smbc-comics.com/comics/20061011.gif";
            var parser = new ComicParser(url);
            var urlGen = parser.GetUrlGenerator();

            Assert.AreEqual(imgUrl.Substring(10), urlGen.Comic.AbsoluteUri.Substring(10));

            parser = new ComicParser(imgUrl);
            urlGen = parser.GetUrlGenerator();
            Assert.AreEqual(imgUrl.Substring(10), urlGen.Comic.AbsoluteUri.Substring(10));
        }
Ejemplo n.º 9
0
        private UrlGenerator SetupTask()
        {
            var comic = new ComicUri(InputUrl);

            var parser = new ComicParser(InputUrl);

            var urlGen = parser.GetUrlGenerator();

            // in the interests of simplicity, just start from given comicå
            urlGen.Start = comic.Indices [0];

            return(urlGen);
        }
        public void GetFromPageIrregularWebcomic()
        {
            var url    = "http://www.irregularwebcomic.net/55.html";
            var parser = new ComicParser(url);
            var urlGen = parser.GetUrlGenerator();
            var urls   = urlGen.Get(0, 20);

            Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0001.jpg", urls[0]);
            Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0002.jpg", urls[1]);
            Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0003.jpg", urls[2]);
            Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0004.jpg", urls[3]);
            Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0005.jpg", urls[4]);
        }
Ejemplo n.º 11
0
        public void GetResponse_ReturnsSuccessFalse_OnAuthError()
        {
            // Arrange
            dynamic json = JObject.Parse(TestJson.Get("auth-error"));

            var sut = new ComicParser();

            // Act
            Response <Comic> result = sut.GetResponse <Comic>(json);

            // Assert
            Assert.AreEqual(false, result.Success);
            Assert.AreEqual("InvalidCredentials", result.Code);
            Assert.AreEqual("The passed API key is invalid.", result.Status);
            Assert.IsNull(result.Data);
        }
Ejemplo n.º 12
0
        public void GetResponse_ReturnsSuccessFalse_OnError()
        {
            // Arrange
            dynamic json = JObject.Parse(TestJson.Get("api-error"));

            var sut = new ComicParser();

            // Act
            Response <Comic> result = sut.GetResponse <Comic>(json);

            // Assert
            Assert.AreEqual(false, result.Success);
            Assert.AreEqual("409", result.Code);
            Assert.AreEqual("Limit greater than 100.", result.Status);
            Assert.IsNull(result.Data);
        }
Ejemplo n.º 13
0
        public void GetResponse_ReturnsSuccessTrue_OnSuccess()
        {
            // Arrange
            dynamic json = JObject.Parse(TestJson.Get("comic-success"));

            var sut = new ComicParser();

            // Act
            Response <Comic> result = sut.GetResponse <Comic>(json);

            // Assert
            Assert.AreEqual(true, result.Success);
            Assert.AreEqual("200", result.Code);
            Assert.AreEqual("Success.", result.Status);
            Assert.IsNotNull(result.Data);
        }
Ejemplo n.º 14
0
        public void CancelDownloads()
        {
            // choose target files to download
            var url = "http://www.smbc-comics.com/comics/20061001.gif";
//			var url = "http://www.irregularwebcomic.net/55.html";
            var parser = new ComicParser(url);
            var urlGen = parser.GetUrlGenerator() as DateGenerator;

            urlGen.Days = DateGenerator.EveryDay;
            var urls = urlGen.Get(0, 20);

            foreach (var x in urls)
            {
                Console.WriteLine(x);
            }

            using (var repo = new Repository()) {
                // set the gate
                AutoResetEvent auto = new AutoResetEvent(false);

                int num = 0;

                // event handler to count number of async downloads
                repo.DownloadFileCompleted += delegate(object sender, AsyncCompletedEventArgs e) {
                    num += 1;
                    // here we set the canceller
                    if (num == 5)
                    {
                        repo.CancelDownloads();
                        auto.Set();
                    }
                };

                // event handler allows program to progress (in case of cancel failure)
                repo.MultipleDownloadsCompleted += delegate(object sender, EventArgs e) {
                    auto.Set();
                };

                // begin the download and block
                repo.Download(urls);
                auto.WaitOne();

                // check that it worked
                Assert.AreEqual(5, repo.Files.Count);
            }
        }
        public void GetFromPageXkcd()
        {
            var xkcdUrl    = "http://xkcd.com/614";
            var xkcdParser = new ComicParser(xkcdUrl);
            var xkcdImg    = "http://imgs.xkcd.com/comics/woodpecker.png";
            var xkcdImg2   = "http://imgs.xkcd.com/comics/avoidance.png";

            // get the generator object
            UrlGenerator urlGen = xkcdParser.GetUrlGenerator();

            Assert.AreEqual("1", urlGen.Start);

            // generate 10 urls, starting from 605
            List <string> backUrls = urlGen.Get(605, 10);
            // generate 10 urls, starting from 615
            List <string> forwardUrls = urlGen.Get(615, 10);
            // generate 10 urls, starting from 614
            List <string> incUrls = urlGen.Get(614, 10);

            // each url should be the comic, directly
            // urls are sorted

//			foreach (var x in backUrls) {
//				Console.WriteLine (x);
//			}

            // Seems like this is a legitimate fail...
            // backUrls[0] is actually comic 606, expected 605
            // further investigation required
            Assert.AreEqual(10, backUrls.Count());
            Assert.AreEqual(xkcdImg, backUrls [9]);
            Assert.AreEqual(10, forwardUrls.Count());
            Assert.AreEqual(xkcdImg2, forwardUrls [0]);
            Assert.AreEqual(10, incUrls.Count());
            Assert.AreEqual(xkcdImg, incUrls [0]);
            Assert.AreEqual(xkcdImg2, incUrls [1]);
        }
Ejemplo n.º 16
0
        public void Parse_ReturnsComic()
        {
            // Arrange
            dynamic json = JObject.Parse(TestJson.Get("comic"));

            var sut = new ComicParser();

            // Act
            Comic result = sut.Parse(json);

            // Assert
            Assert.AreEqual(21472, result.Id);
            Assert.AreEqual(0, result.DigitalId);
            Assert.AreEqual("Ultimate Spider-Man (Spanish Language Edition) (2000) #8", result.Title);
            Assert.AreEqual(8, result.IssueNumber);
            Assert.AreEqual("Variant description", result.VariantDescription);
            Assert.AreEqual("Test description", result.Description);
            Assert.AreEqual(null, result.Modified);
            Assert.AreEqual("TestIsbn0001", result.Isbn);
            Assert.AreEqual("TestUpc0001", result.Upc);
            Assert.AreEqual("TestDiamondCode0001", result.DiamondCode);
            Assert.AreEqual("TestEan0001", result.Ean);
            Assert.AreEqual("TestIssn0001", result.Issn);
            Assert.AreEqual("Comic", result.Format);
            Assert.AreEqual(0, result.PageCount);

            Assert.AreEqual(1, result.TextObjects.Count);
            Assert.AreEqual("issue_solicit_text", result.TextObjects.Single().Type);
            Assert.AreEqual("en-us", result.TextObjects.Single().Language);
            Assert.AreEqual("\"The Marvel Age of Comics continues! This time around, Spidey meets his match against such classic villains as Electro and the Lizard, and faces the return of one of his first foes: the Vulture! Plus: Spider-Man vs. the Living Brain, Peter Parker's fight with Flash Thompson, and the wall-crawler tackles the high-flying Human Torch!\"", result.TextObjects.Single().Text);

            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472", result.ResourceUri);

            Assert.AreEqual(1, result.Urls.Count);
            Assert.AreEqual("detail", result.Urls.Single().Type);
            Assert.AreEqual("http://marvel.com/comics/issue/21472/ultimate_spider-man_spanish_language_edition_2000_8?utm_campaign=apiRef&utm_source=20f18f98d97b8d7b9733fa6bdcfaea77", result.Urls.Single().Value);

            Assert.AreEqual("http://gateway.marvel.com/v1/public/series/5105", result.Series.ResourceUri);
            Assert.AreEqual("Ultimate Spider-Man (Spanish Language Edition) (2000 - 2001)", result.Series.Name);

            Assert.AreEqual(2, result.Variants.Count);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/56155", result.Variants.First().ResourceUri);
            Assert.AreEqual("Old Man Logan (2016) #8", result.Variants.First().Name);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/60075", result.Variants.Last().ResourceUri);
            Assert.AreEqual("Old Man Logan (2016) #8 (Albuquerque Death of X Variant)", result.Variants.Last().Name);

            Assert.AreEqual(0, result.Collections.Count);

            Assert.AreEqual(4, result.CollectedIssues.Count);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/546", result.CollectedIssues.First().ResourceUri);
            Assert.AreEqual("Marvel Age Spider-Man (2004) #8", result.CollectedIssues.First().Name);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/681", result.CollectedIssues.Last().ResourceUri);
            Assert.AreEqual("Marvel Age Spider-Man (2004) #5", result.CollectedIssues.Last().Name);

            Assert.AreEqual(2, result.Dates.Count);
            Assert.AreEqual("onsaleDate", result.Dates.First().Type);
            Assert.AreEqual(new DateTimeOffset(new DateTime(2029, 12, 31), new TimeSpan(-5, 0, 0)), result.Dates.First().Date);
            Assert.AreEqual("focDate", result.Dates.Last().Type);
            Assert.AreEqual(null, result.Dates.Last().Date);

            Assert.AreEqual(1, result.Prices.Count);
            Assert.AreEqual("printPrice", result.Prices.Single().Type);
            Assert.AreEqual(2.25, result.Prices.Single().Price);

            Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/b/40/image_not_available", result.Thumbnail.Path);
            Assert.AreEqual("jpg", result.Thumbnail.Extension);

            Assert.AreEqual(4, result.Images.Count);
            Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/a/40/4bc689a4ce796", result.Images.First().Path);
            Assert.AreEqual("jpg", result.Images.First().Extension);
            Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/9/20/4bc665483c3aa", result.Images.Last().Path);
            Assert.AreEqual("jpg", result.Images.Last().Extension);

            Assert.AreEqual(0, result.Creators.Available);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/creators", result.Creators.CollectionUri);
            Assert.AreEqual(0, result.Creators.Items.Count);
            Assert.AreEqual(0, result.Creators.Returned);

            Assert.AreEqual(1, result.Characters.Available);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/characters", result.Characters.CollectionUri);
            Assert.AreEqual(1, result.Characters.Items.Count);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/characters/1011010", result.Characters.Items.Single().ResourceUri);
            Assert.AreEqual("Spider-Man (Ultimate)", result.Characters.Items.Single().Name);
            Assert.AreEqual(null, result.Characters.Items.Single().Type);
            Assert.AreEqual(null, result.Characters.Items.Single().Role);
            Assert.AreEqual(1, result.Characters.Returned);

            Assert.AreEqual(2, result.Stories.Available);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/stories", result.Stories.CollectionUri);
            Assert.AreEqual(2, result.Stories.Items.Count);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/stories/48972", result.Stories.Items.First().ResourceUri);
            Assert.AreEqual("Cover #48972", result.Stories.Items.First().Name);
            Assert.AreEqual("cover", result.Stories.Items.First().Type);
            Assert.AreEqual(null, result.Stories.Items.First().Role);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/stories/48973", result.Stories.Items.Last().ResourceUri);
            Assert.AreEqual("Interior #48973", result.Stories.Items.Last().Name);
            Assert.AreEqual("interiorStory", result.Stories.Items.Last().Type);
            Assert.AreEqual(null, result.Stories.Items.Last().Role);
            Assert.AreEqual(2, result.Stories.Returned);

            Assert.AreEqual(0, result.Events.Available);
            Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/events", result.Events.CollectionUri);
            Assert.AreEqual(0, result.Events.Items.Count);
            Assert.AreEqual(0, result.Events.Returned);
        }