/// <summary> /// Action that generates a partial view for just a comic page. This method is /// meant to respond to ajax requests for a comic page. /// </summary> /// <param name="comic">The name of the comic being viewed. This value must /// match a record in the SeqBOok table with a UriContext of the same value. /// </param> /// <param name="chapter">A chapter number 1..n</param> /// <param name="page">A page number 1..n</param> /// <returns>A partial view that contains a comic page and navigation /// controls.</returns> public ActionResult TurnPage(string comic, int chapter, int page) { //If cookie then extend expires and update the value HttpCookie cookie = Request.Cookies.Get(comic + "_bookmark"); if (cookie != null) { TimeSpan expirytime = new TimeSpan(120, 0, 0, 0); cookie.Expires = DateTime.Today.Add(expirytime); cookie.Value = comic + "|" + chapter + "|" + page; } Response.Cookies.Add(cookie); try { SeqBook book = booksRep.BookUriContext(comic); SeqChapter schapter = booksRep.GetChapter(book, chapter); WebComicVModel wcvm = new WebComicVModel(); wcvm.BookName = comic; wcvm.ChapterNumber = chapter; wcvm.PageNumber = (page > schapter.PageCount) ? schapter.PageCount : page; wcvm.ChapterPageCount = schapter.PageCount; return(PartialView(wcvm)); } catch (BookNotFoundException bnfe) { return(PartialView("BookNotFound", bnfe)); } catch (ChapterNotFoundException cnfe) { return(View("ChapterNotFound", cnfe)); } }
/// <summary> /// Processes a URI that can reference a page of a comic as well as a specific /// blog article. A comic page (image) must be returned, but a specific blog /// article need not be named. /// </summary> /// <param name="comic">The name of the comic should match the <code>SeqBook /// </code> UriContext property. The value of this parameter is also used as /// the <code>SeqPost</code> BlogId for the purposes of looking up blog posts /// related to the comic.</param> /// <param name="chapter">A chapter number 1..n</param> /// <param name="page">A page number 1..n</param> /// <param name="perma">Optional. The permalink string to a blog post.</param> /// <param name="id">Optional. Blog post id that must accompany a /// permalink since this is how the system looks up the article.</param> /// <returns>A view that can be shown for any comic and/or blog article /// request.</returns> public ActionResult FullPathEntry(string comic, int chapter, int page, string perma = null, int id = -1, bool rootEntry = false) { //TODO: Check for cookie and if none then set the page number. HttpCookie cookie = Request.Cookies.Get(comic + "_bookmark"); if (cookie == null) { TimeSpan expirytime = new TimeSpan(120, 0, 0, 0); HttpCookie hc = new HttpCookie(comic + "_bookmark", comic + "|1|1"); hc.Expires = DateTime.Today.Add(expirytime); Response.Cookies.Add(hc); } else //A cookie was found...account for 2 cases... { if (rootEntry) //User typed in just the base url. { string[] parts = cookie.Value.Split('|'); comic = parts[0]; chapter = Int32.Parse(parts[1]); page = Int32.Parse(parts[2]); } else //User typed in an explicit url to get here so preserve in cookie { TimeSpan expirytime = new TimeSpan(120, 0, 0, 0); cookie.Expires = DateTime.Today.Add(expirytime); cookie.Value = comic + "|" + chapter + "|" + page; Response.Cookies.Add(cookie); } } ViewResult result; //Specific blog identified if (id > 0) { result = (ViewResult)base.GetSinglePost(comic, id); } else { result = (ViewResult)base.Index(comic); } try { SeqBook book = booksRep.BookUriContext(comic); WebComicVModel wcvm = new WebComicVModel((BlogHomeVModel)result.Model); wcvm.BookName = comic; wcvm.ChapterNumber = chapter; SeqChapter schapter = booksRep.GetChapter(book, chapter); wcvm.PageNumber = (page > schapter.PageCount) ? schapter.PageCount : page; wcvm.ChapterPageCount = schapter.PageCount; wcvm.Controller = "Post"; wcvm.Action = "AjaxPostPage"; //Need PartialView action like TurnPage return(View("Index", wcvm)); } //These should only be thrown due to unfinished configuration. catch (BookNotFoundException bnfe) { return(View("BookNotFound", bnfe)); } catch (ChapterNotFoundException cnfe) { return(View("ChapterNotFound", cnfe)); } }