示例#1
0
        private UrlGenerator ChooseGenerator(string comicUrl)
        {
            var aComic = new ComicUri(comicUrl);

            UrlGenerator gen;

            if (aComic.Indices.Length == 1)
            {
                // option A or B

                var dateCount = new DateGenerator(aComic);

                // identify if it's a valid date
                if (dateCount.Format != DateType.NotRecognized)
                {
                    // B of some kind
                    gen = dateCount;
                }
                else
                {
                    // A of some kind
                    var seqCount = new SequentialGenerator(aComic);
                    gen = seqCount;
                }
            }
            else
            {
                // option C or D
                throw new NotImplementedException();
            }
            return(gen);
        }
示例#2
0
        public UrlGenerator GetUrlGenerator()
        {
            // start with the input URL
            var comic = new ComicUri(inputUrl);
            // choose appropriate generator type
            var urlGen = ChooseGenerator(inputUrl);

            if (!comic.IsRemoteFile)
            {
                // find the img src URL
                var    someUrls = urlGen.GenerateSome();
                string srcUrl   = "";
                UrlGenerator.IdentifyImg(someUrls, out srcUrl);
                try {
                    // try to create a generator for img src URLs
                    return(ChooseGenerator(srcUrl));
                } catch (NotImplementedException) {
                    // if not possible, just return page URL generator
                    return(urlGen);
                }
            }
            else
            {
                // return page URL generator
                return(urlGen);
            }
        }
        public void GenerateRange()
        {
            var xkcdPages = new string[5];
            xkcdPages [0] = "http://xkcd.com/610";
            xkcdPages [1] = "http://xkcd.com/611";
            xkcdPages [2] = "http://xkcd.com/612";
            xkcdPages [3] = "http://xkcd.com/613";
            xkcdPages [4] = "http://xkcd.com/614";
            var comic = new ComicUri ("http://xkcd.com/614");
            var xkcdRules = new SequentialGenerator (comic);
            Assert.AreEqual (xkcdPages, xkcdRules.Generate (Enumerable.Range (610, 5)));

            xkcdPages = new string[5];
            xkcdPages [0] = "http://xkcd.com/1";
            xkcdPages [1] = "http://xkcd.com/2";
            xkcdPages [2] = "http://xkcd.com/3";
            xkcdPages [3] = "http://xkcd.com/4";
            xkcdPages [4] = "http://xkcd.com/5";
            comic = new ComicUri ("http://xkcd.com/614");
            xkcdRules = new SequentialGenerator (comic);
            Assert.AreEqual (xkcdPages, xkcdRules.Generate (Enumerable.Range (1, 5)));

            xkcdPages = new string[5];
            xkcdPages [0] = "http://xkcd.com/001";
            xkcdPages [1] = "http://xkcd.com/002";
            xkcdPages [2] = "http://xkcd.com/003";
            xkcdPages [3] = "http://xkcd.com/004";
            xkcdPages [4] = "http://xkcd.com/005";
            comic = new ComicUri ("http://xkcd.com/614");
            xkcdRules = new SequentialGenerator (comic);
            xkcdRules.Padded = true;
            Assert.AreEqual (xkcdPages, xkcdRules.Generate (Enumerable.Range (1, 5)));
        }
        public void GenerateSome()
        {
            var xkcdPages = new string[7];
            xkcdPages [0] = "http://xkcd.com/608";
            xkcdPages [1] = "http://xkcd.com/609";
            xkcdPages [2] = "http://xkcd.com/610";
            xkcdPages [3] = "http://xkcd.com/611";
            xkcdPages [4] = "http://xkcd.com/612";
            xkcdPages [5] = "http://xkcd.com/613";
            xkcdPages [6] = "http://xkcd.com/614";
            var comic = new ComicUri ("http://xkcd.com/608");
            var seqCount = new SequentialGenerator (comic);
            Assert.AreEqual (xkcdPages, seqCount.GenerateSome ());

            xkcdPages = new string[7];
            xkcdPages [0] = "http://xkcd.com/3";
            xkcdPages [1] = "http://xkcd.com/4";
            xkcdPages [2] = "http://xkcd.com/5";
            xkcdPages [3] = "http://xkcd.com/6";
            xkcdPages [4] = "http://xkcd.com/7";
            xkcdPages [5] = "http://xkcd.com/8";
            xkcdPages [6] = "http://xkcd.com/9";
            comic = new ComicUri ("http://xkcd.com/5");
            seqCount = new SequentialGenerator (comic);
            Assert.AreEqual (xkcdPages, seqCount.GenerateSome ());
        }
        private UrlGenerator ChooseGenerator(string comicUrl)
        {
            var aComic = new ComicUri (comicUrl);

            UrlGenerator gen;

            if (aComic.Indices.Length == 1) {
                // option A or B

                var dateCount = new DateGenerator (aComic);

                // identify if it's a valid date
                if (dateCount.Format != DateType.NotRecognized) {
                    // B of some kind
                    gen = dateCount;
                } else {
                    // A of some kind
                    var seqCount = new SequentialGenerator (aComic);
                    gen = seqCount;
                }
            } else {
                // option C or D
                throw new NotImplementedException ();
            }
            return gen;
        }
 public void ParameterizeUrlXkcd()
 {
     var xkcdUrl = "http://xkcd.com/614";
     var xkcdSplit = new ComicUri (xkcdUrl);
     var xkcdUrlBase = xkcdSplit.Base;
     string[] xkcdUrlIndices = xkcdSplit.Indices;
     Assert.AreEqual ("http://xkcd.com/{0}", xkcdUrlBase);
     Assert.AreEqual (1, xkcdUrlIndices.Length);
     Assert.AreEqual ("614", xkcdUrlIndices [0]);
 }
 public void ParameterizeUrlPennyArcade()
 {
     var paUrl = "http://penny-arcade.com/comic/2012/01/04";
     var paSplit = new ComicUri (paUrl);
     var paUrlBase = paSplit.Base;
     var paUrlIndices = paSplit.Indices;
     Assert.AreEqual ("http://penny-arcade.com/comic/{0}/{1}/{2}", paUrlBase);
     Assert.AreEqual (3, paUrlIndices.Length);
     Assert.AreEqual ("2012", paUrlIndices [0]);
     Assert.AreEqual ("01", paUrlIndices [1]);
     Assert.AreEqual ("04", paUrlIndices [2]);
 }
        public void FindDays()
        {
            var comic = new ComicUri ("http://www.smbc-comics.com/comics/20061011.gif");
            var dateCount = new DateGenerator (comic);

            //			// by chance, two consecutive Thursdays were missed here
            //			Assert.AreEqual (6, dateCount.Days.Count);
            //			Assert.IsFalse (dateCount.Days.Contains ("Thursday"));

            // Behaviour changed:
            // FindDays is no longer called to calculate what days the comic runs
            // Every day is assumed
            // This is quicker and simpler: if URL not found, download quietly fails
            Assert.AreEqual (7, dateCount.Days.Count);
        }
        public SequentialGenerator(ComicUri comic)
            : base(comic)
        {
            this.Comic = comic;
            if (comic.Indices.Length != 1) {
                throw new ArgumentException ("Sequential Count cannot accept a comic with > 1 index");
            }

            if (comic.Indices [0].Substring (0, 1) == "0" && comic.Indices [0].Length > 1) {
                Padded = true;
            }

            if (comic.Indices [0].Length == 1) {
                Padded = false;
            }
        }
        public void ParameterizeUrlSmbc()
        {
            var smbcUrl = "http://www.smbc-comics.com/index.php?db=comics&id=614";
            var smbcSplit = new ComicUri (smbcUrl);
            var smbcUrlBase = smbcSplit.Base;
            var smbcUrlIndices = smbcSplit.Indices;
            Assert.AreEqual ("http://www.smbc-comics.com/index.php?db=comics&id={0}", smbcUrlBase);
            Assert.AreEqual (1, smbcUrlIndices.Length);
            Assert.AreEqual ("614", smbcUrlIndices [0]);

            smbcUrl = "http://www.smbc-comics.com/comics/20061011.gif";
            smbcSplit = new ComicUri (smbcUrl);
            smbcUrlBase = smbcSplit.Base;
            smbcUrlIndices = smbcSplit.Indices;
            Assert.AreEqual ("http://www.smbc-comics.com/comics/{0}.gif", smbcUrlBase);
            Assert.AreEqual (1, smbcUrlIndices.Length);
            Assert.AreEqual ("20061011", smbcUrlIndices [0]);
        }
        public SequentialGenerator(ComicUri comic) : base(comic)
        {
            this.Comic = comic;
            if (comic.Indices.Length != 1)
            {
                throw new ArgumentException("Sequential Count cannot accept a comic with > 1 index");
            }

            if (comic.Indices [0].Substring(0, 1) == "0" && comic.Indices [0].Length > 1)
            {
                Padded = true;
            }

            if (comic.Indices [0].Length == 1)
            {
                Padded = false;
            }
        }
示例#12
0
        public UrlGenerator GetUrlGenerator()
        {
            // start with the input URL
            var comic = new ComicUri (inputUrl);
            // choose appropriate generator type
            var urlGen = ChooseGenerator (inputUrl);

            if (!comic.IsRemoteFile) {
                // find the img src URL
                var someUrls = urlGen.GenerateSome ();
                string srcUrl = "";
                UrlGenerator.IdentifyImg (someUrls, out srcUrl);
                try {
                    // try to create a generator for img src URLs
                    return ChooseGenerator (srcUrl);
                } catch (NotImplementedException) {
                    // if not possible, just return page URL generator
                    return urlGen;
                }
            } else {
                // return page URL generator
                return urlGen;
            }
        }
        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;
        }
 protected UrlGenerator(ComicUri comic)
 {
     this.Comic = comic;
 }
 public DateGenerator(ComicUri comic)
     : base(comic)
 {
     this.Comic = comic;
 }
 public DateGenerator(ComicUri comic) : base(comic)
 {
     this.Comic = comic;
 }
 protected UrlGenerator(ComicUri comic)
 {
     this.Comic = comic;
 }