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 }