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 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; } }
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; }