root/trunk/plagger/lib/Plagger/Entry.pm

Revision 1741 (checked in by miyagawa, 5 years ago)

merge from hackathon-summary

  • Property svn:keywords set to Id Revision
Line 
1 package Plagger::Entry;
2 use strict;
3
4 use base qw( Plagger::Thing );
5 __PACKAGE__->mk_accessors(qw( tags link feed_link rate icon meta source language ));
6 __PACKAGE__->mk_text_accessors(qw( title author summary body ));
7 __PACKAGE__->mk_date_accessors(qw( date ));
8
9 use Digest::MD5;
10 use DateTime::Format::Mail;
11 use Storable;
12 use Plagger::Util;
13
14 sub new {
15     my $class = shift;
16     bless {
17         rate    => 0,
18         widgets => [],
19         tags    => [],
20         meta    => {},
21         enclosures => [],
22     }, $class;
23 }
24
25 sub add_rate {
26     my($self, $rate) = @_;
27     $self->rate( $self->rate + $rate );
28 }
29
30 sub text {
31     my $self = shift;
32     join "\n", $self->link, $self->title, $self->body;
33 }
34
35 sub add_widget {
36     my($self, $widget) = @_;
37     push @{ $self->{widgets} }, $widget;
38 }
39
40 sub widgets {
41     my $self = shift;
42     wantarray ? @{ $self->{widgets} } : $self->{widgets};
43 }
44
45 sub permalink {
46     my $self = shift;
47     $self->{permalink} = shift if @_;
48     $self->{permalink} || $self->link;
49 }
50
51 sub id {
52     my $self = shift;
53     $self->{id} = shift if @_;
54     $self->{id} || $self->permalink || do {
55         my $id = $self->feed_link;
56         $id .= $self->date ? $self->date->epoch : $self->title;
57         $id;
58     };
59 }
60
61 sub id_safe {
62     my $self = shift;
63     Plagger::Util::safe_id($self->id);
64 }
65
66 sub title_text {
67     my $self = shift;
68     $self->title ? $self->title->plaintext : undef;
69 }
70
71 sub body_text {
72     my $self = shift;
73     $self->body ? $self->body->plaintext : undef;
74 }
75
76 sub add_enclosure {
77     my($self, $enclosure) = @_;
78
79     # don't add enclosure with the same URL again and again
80     unless ($enclosure->url && grep { $_->url && $_->url eq $enclosure->url } $self->enclosures) {
81         push @{ $self->{enclosures} }, $enclosure;
82     }
83 }
84
85 sub enclosure {
86     my $self = shift;
87     wantarray ? @{$self->{enclosures}} : $self->{enclosures}->[0];
88 }
89
90 sub enclosures {
91     my $self = shift;
92     wantarray ? @{$self->{enclosures}} : $self->{enclosures};
93 }
94
95 sub has_enclosure {
96     my $self = shift;
97     scalar @{$self->{enclosures}} > 0;
98 }
99
100 sub digest {
101     my $self = shift;
102     my $data = $self->title . ($self->body || '');
103     Encode::_utf8_off($data);
104     Digest::MD5::md5_hex($data);
105 }
106
107 1;
108
Note: See TracBrowser for help on using the browser.