scala-news-reader

rss/atom news reader in scala

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

ArticleShared.scala

(1536B)


      1 package com.joereader.model
      2 
      3 import com.joereader._
      4 import actor._
      5 import lib._
      6 import Helper._
      7 import rss._
      8 import java.util.Date
      9 
     10 /**
     11  * Like an article but with a sharedBy value that points
     12  * to the user that shared this article and a date to know
     13  * when it was shared.
     14  */
     15 object ArticleShared extends ArticleTrait {
     16   def createId(blog: Blog, entry: FeedEntry, date: Date) =
     17     super.createId(blog, entry) + partDivider + date.getTime
     18 
     19   def fromString(s: String): ArticleShared =
     20     s.split(partDivider).toList match {
     21       case blogId :: guidHex :: dateLong :: Nil =>
     22         val guid = guidHex.hex2bytes.bytes2str
     23         val blog = Blog.findByStringId(blogId)
     24         val entry = EntriesEngine.find(blog, guid)
     25         val date = new Date(dateLong.toLong)
     26         val bwu = BlogWriterUser.fromBlogFeedEntry(blog, entry)       
     27 
     28         entry.map (new ArticleShared(bwu, _, date)) openOr 
     29         ArticleShared.empty
     30       case a =>
     31         error("Invalid shared article in data store -> " +
     32           a.mkString(partDivider))
     33         ArticleShared.empty
     34     }
     35 
     36   def empty = new ArticleShared(
     37     BlogWriterUser.empty, FeedEntry.empty)
     38 }
     39 
     40 class ArticleShared(
     41   bwu: BlogWriterUser,
     42   entry: FeedEntry,
     43   sharedDate: Date = new Date,
     44   _sharedBy: BlogWriterUser = BlogWriterUser.empty) extends Article(bwu, entry) {
     45 
     46   override def date = sharedDate
     47   override def sharedBy = Some(_sharedBy)
     48 
     49   override def toString = {
     50     for (blog <- bwu.blog) 
     51       yield ArticleShared.createId(blog, entry, date)
     52   } getOrElse ""
     53 }