scala-news-reader

rss/atom news reader in scala

git clone https://9o.is/git/scala-news-reader.git

BlogWriterVideoSnip.scala

(1428B)


      1 package com.joereader
      2 package snippet
      3 
      4 import lib._
      5 import config._
      6 import model._
      7 
      8 import net.liftweb._
      9 import common._
     10 import http._
     11 import SHtml._
     12 import util.Helpers._
     13 import js._
     14 import JsCmds._
     15 import scala.xml._
     16 
     17 /**
     18  * Snippet to change blog writer's youtube video.
     19  */
     20 object BlogWriterVideoSnip extends BlogWriterSnip {
     21 
     22   // video snippet is located beside categories snippet.
     23   override def blog = Site.categoriesLoc.currentValue
     24   
     25   override def blogWriter: Box[BlogWriter] =
     26     for {
     27       blog <- blog
     28       user <- User.currentUser
     29       blogWriter <- blog.writers.find(user)
     30     } yield blogWriter
     31     
     32   private def test: Boolean = blogWriter.exists(
     33     bw => User.currentUser.exists(_.id.get == bw.user.get))
     34     
     35   def render(html: NodeSeq) = serve(html) {
     36     (blog, blogWriter) =>
     37 
     38       def check(id: String): JsCmd = {
     39         import VideoService._, dispatch._
     40         if (id.isEmpty) Noop
     41         else {
     42           Youtube.video.duration(id)() match {
     43             case Left(msg) => S.error(msg)
     44             case Right(time) =>
     45               if (time <= 30) {
     46                 blogWriter.introVid(id)
     47                 blog.save
     48                 Noop
     49               } else
     50                 S.error("Video duration must be " +
     51                 		"30 seconds or less")
     52           }
     53         }
     54       }
     55       "*" #> ajaxText(blogWriter.introVid.get, {
     56         s => check(s); Noop
     57       })
     58   }(test, NodeSeq.Empty)
     59 }