Example #1
0
 /// <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);
       }
 }
Example #2
0
        /// <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);
              }
        }