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 }