Changeset 1668

Show
Ignore:
Timestamp:
09/07/06 19:23:48
Author:
miyagawa
Message:
  • merged [1621] from hackathon-summary branch
  • autoload Filter::FloatingDateTime? from Publish::Feed to address invalid RFC date format. Fixes #400
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Entry.pm

    r1173 r1668  
    33 
    44use base qw( Plagger::Thing ); 
    5 __PACKAGE__->mk_accessors(qw( title author tags link feed_link id summary body rate icon meta source )); 
     5__PACKAGE__->mk_accessors(qw( title author tags link feed_link summary body rate icon meta source )); 
    66__PACKAGE__->mk_date_accessors(qw( date )); 
    77 
     
    4848} 
    4949 
     50sub id { 
     51    my $self = shift; 
     52    $self->{id} = shift if @_; 
     53    $self->{id} || $self->permalink || do { 
     54        my $id = $self->feed_link; 
     55        $id .= $self->date ? $self->date->epoch : $self->title; 
     56        $id; 
     57    }; 
     58} 
     59 
    5060sub id_safe { 
    5161    my $self = shift; 
    52     my $id   = $self->id || $self->permalink; 
    53  
    54     # entry without id or permalink. Try entry's date or title 
    55     unless ($id) { 
    56         $id  = $self->feed_link; 
    57         $id .= $self->date ? $self->date->epoch : $self->title; 
    58     } 
    59  
    60     $id =~ m!^https?://! ? Digest::MD5::md5_hex($id) : $id; 
     62    Plagger::Util::safe_id($self->id); 
    6163} 
    6264 
  • trunk/plagger/lib/Plagger/Feed.pm

    r1386 r1668  
    5555    my $self = shift; 
    5656    $self->{id} = shift if @_; 
    57     $self->{id} || Digest::MD5::md5_hex($self->url || $self->link)
     57    $self->{id} || $self->url || $self->link
    5858} 
    5959 
    6060sub id_safe { 
    6161    my $self = shift; 
    62     my $id = $self->id; 
    63     $id =~ s![^\w\s]+!_!g; 
    64     $id =~ s!\s+!_!g; 
    65     $id; 
     62    Plagger::Util::safe_id($self->id); 
    6663} 
    6764 
  • trunk/plagger/lib/Plagger/Plugin/Notify/Audio.pm

    r1406 r1668  
    2222    $context->register_hook( 
    2323        $self, 
    24         'publish.entry.fixup' => \&update, 
     24        'publish.entry' => \&update, 
    2525        'publish.finalize' => \&finalize, 
    2626    ); 
  • trunk/plagger/lib/Plagger/Plugin/Publish/CSV.pm

    r304 r1668  
    2828    } 
    2929 
    30     my $file = $self->gen_filename($args->{feed}) || $args->{feed}->id . ".csv"
     30    my $file = Plagger::Util::filename_for($args->{feed}, $self->conf->{filename} || "%i.csv")
    3131    my $path = File::Spec->catfile($dir, $file); 
    3232    my $io = IO::File->new($append  ? ">> $path" : "> $path"); 
     
    5353    utf8::decode($str) unless utf8::is_utf8($str); 
    5454    return encode($self->conf->{encoding} || 'utf8', $str); 
    55 } 
    56  
    57 my %formats = ( 
    58     'u' => sub { my $s = $_[0]->url;  $s =~ s!^https?://!!; $s }, 
    59     'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 
    60     't' => sub { $_[0]->title }, 
    61     'i' => sub { $_[0]->id }, 
    62 ); 
    63  
    64 my $format_re = qr/%(u|l|t|i)/; 
    65  
    66 sub gen_filename { 
    67     my($self, $feed) = @_; 
    68  
    69     my $file = $self->conf->{filename} || ''; 
    70     $file =~ s{$format_re}{ 
    71         $self->safe_filename($formats{$1}->($feed)) 
    72     }egx; 
    73  
    74     $file; 
    75 } 
    76  
    77 sub safe_filename { 
    78     my($self, $path) = @_; 
    79     $path =~ s![^\w\s]+!_!g; 
    80     $path =~ s!\s+!_!g; 
    81     $path; 
    8255} 
    8356 
  • trunk/plagger/lib/Plagger/Plugin/Publish/Delicious.pm

    r647 r1668  
    1010    $context->register_hook( 
    1111        $self, 
    12         'publish.init'        => \&initialize, 
    13         'publish.entry.fixup' => \&add_entry, 
     12        'plugin.init'   => \&initialize, 
     13        'publish.entry' => \&add_entry, 
    1414    ); 
    1515} 
     16 
     17sub rule_hook { 'publish.entry' } 
    1618 
    1719sub initialize { 
  • trunk/plagger/lib/Plagger/Plugin/Publish/Feed.pm

    r1636 r1668  
    1313sub register { 
    1414    my($self, $context) = @_; 
     15    $context->autoload_plugin('Filter::FloatingDateTime'); 
    1516    $context->register_hook( 
    1617        $self, 
     
    105106 
    106107    # generate file path 
    107     my $filepath = File::Spec->catfile($self->conf->{dir}, $self->gen_filename($f)); 
     108    my $tmpl = '%i.' . ($feed_format eq 'RSS' ? 'rss' : 'atom'); 
     109    my $file = Plagger::Util::filename_for($f, $self->conf->{filename} || $tmpl); 
     110    my $filepath = File::Spec->catfile($self->conf->{dir}, $file); 
    108111 
    109112    $context->log(info => "save feed for " . $f->link . " to $filepath"); 
     
    114117    print $output $xml; 
    115118    close $output; 
    116 } 
    117  
    118 my %formats = ( 
    119     'u' => sub { my $s = $_[0]->url;  $s =~ s!^https?://!!; $s }, 
    120     'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 
    121     't' => sub { $_[0]->title }, 
    122     'i' => sub { $_[0]->id }, 
    123 ); 
    124  
    125 my $format_re = qr/%(u|l|t|i)/; 
    126  
    127 sub gen_filename { 
    128     my($self, $feed) = @_; 
    129  
    130     my $file = $self->conf->{filename} || 
    131         '%i.' . ($self->conf->{format} eq 'RSS' ? 'rss' : 'atom'); 
    132     $file =~ s{$format_re}{ 
    133         $self->safe_filename($formats{$1}->($feed)) 
    134     }egx; 
    135     $file; 
    136 } 
    137  
    138 sub safe_filename { 
    139     my($self, $path) = @_; 
    140     $path =~ s![^\w\s]+!_!g; 
    141     $path =~ s!\s+!_!g; 
    142     $path; 
    143119} 
    144120 
  • trunk/plagger/lib/Plagger/Plugin/Publish/HatenaBookmark.pm

    r746 r1668  
    1212    $context->register_hook( 
    1313        $self, 
    14         'publish.init'        => \&initialize, 
    15         'publish.entry.fixup' => \&add_entry, 
     14        'plugin.init'   => \&initialize, 
     15        'publish.entry' => \&add_entry, 
    1616    ); 
    1717} 
    1818 
    19 sub rule_hook { 'publish.entry.fixup' } 
     19sub rule_hook { 'publish.entry' } 
    2020 
    2121sub initialize { 
  • trunk/plagger/lib/Plagger/Plugin/Publish/IMAP.pm

    r1173 r1668  
    1717    $context->register_hook( 
    1818      $self, 
    19       'publish.init' => \&initialize, 
    20       'publish.entry.fixup' => \&store_entry, 
     19      'plugin.init' => \&initialize, 
     20      'publish.entry' => \&store_entry, 
    2121      'publish.finalize' => \&finalize, 
    2222    ); 
    2323} 
     24 
     25sub rule_hook { 'publish.entry' } 
    2426 
    2527sub initialize { 
  • trunk/plagger/lib/Plagger/Plugin/Publish/JavaScript.pm

    r1173 r1668  
    2727    my($self, $context, $args) = @_; 
    2828 
    29     my $file = $self->gen_filename($args->{feed}, $self->conf->{filename} || '%i.js'); 
     29    my $file = Plagger::Util::filename_for($args->{feed}, $self->conf->{filename} || '%i.js'); 
    3030    my $path = File::Spec->catfile($self->conf->{dir}, $file); 
    3131    $context->log(info => "writing output to $path"); 
     
    3636    print $out $body; 
    3737    close $out; 
    38 } 
    39  
    40 my %formats = ( 
    41     'u' => sub { my $s = $_[0]->url;  $s =~ s!^https?://!!; $s }, 
    42     'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 
    43     't' => sub { $_[0]->title }, 
    44     'i' => sub { $_[0]->id }, 
    45 ); 
    46  
    47 my $format_re = qr/%(u|l|t|i)/; 
    48  
    49 sub gen_filename { 
    50     my($self, $feed, $file) = @_; 
    51  
    52     $file =~ s{$format_re}{ 
    53         $self->safe_filename($formats{$1}->($feed)) 
    54     }egx; 
    55  
    56     $file; 
    57 } 
    58  
    59 sub safe_filename { 
    60     my($self, $path) = @_; 
    61     $path =~ s![^\w\s]+!_!g; 
    62     $path =~ s!\s+!_!g; 
    63     $path; 
    6438} 
    6539 
  • trunk/plagger/lib/Plagger/Plugin/Publish/LivedoorClip.pm

    r1081 r1668  
    1212    $context->register_hook( 
    1313        $self, 
    14         'publish.entry.fixup' => \&add_entry, 
    15         'publish.init'        => \&initialize, 
     14        'publish.entry' => \&add_entry, 
     15        'publish.init'  => \&initialize, 
    1616    ); 
    1717} 
  • trunk/plagger/lib/Plagger/Plugin/Publish/Maildir.pm

    r1173 r1668  
    1212use File::Find; 
    1313 
    14 our $VERSION = '0.3'; 
    15  
    1614sub register { 
    1715    my($self, $context) = @_; 
    1816    $context->register_hook( 
    1917      $self, 
    20       'publish.init' => \&initialize, 
    21       'publish.entry.fixup' => \&store_entry, 
    22       'publish.finalize' => \&finalize, 
     18      'plugin.init'  => \&initialize, 
     19      'publish.entry' => \&store_entry, 
     20      'publish.finalize' => \&finalize, 
    2321    ); 
    2422} 
     23 
     24sub rule_hook { 'publish.entry' } 
    2525 
    2626sub initialize { 
  • trunk/plagger/lib/Plagger/Plugin/Publish/PowerPoint.pm

    r1432 r1668  
    1212    $context->register_hook( 
    1313        $self, 
    14         'publish.init' => \&connect_powerpoint, 
    1514        'publish.feed' => \&publish_presentation, 
     15        'publish.init'  => \&connect_powerpoint, 
    1616    ); 
    1717} 
     
    4545    # generate file path; 
    4646    my $file = File::Spec->catfile( 
    47         $self->conf->{dir}, $self->gen_filename($feed) 
     47        $self->conf->{dir}, Plagger::Util::filename_for($feed, $self->conf->{filename} || '%i.pps'), 
    4848    ); 
    4949 
     
    6565    $context->log(debug => "hello, PowerPoint"); 
    6666    $self->{powerpoint} = Win32::PowerPoint->new; 
    67 } 
    68  
    69 # stolen from ::Publish::Feed 
    70  
    71 my %formats = ( 
    72     'u' => sub { my $s = $_[0]->url;  $s =~ s!^https?://!!; $s }, 
    73     'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 
    74     't' => sub { $_[0]->title }, 
    75     'i' => sub { $_[0]->id }, 
    76 ); 
    77  
    78 my $format_re = qr/%(u|l|t|i)/; 
    79  
    80 sub gen_filename { 
    81     my($self, $feed) = @_; 
    82  
    83     my $file = $self->conf->{filename} || '%i.pps'; 
    84     $file =~ s{$format_re}{ 
    85         $self->safe_filename($formats{$1}->($feed)) 
    86     }egx; 
    87     $file; 
    88 } 
    89  
    90 sub safe_filename { 
    91     my($self, $path) = @_; 
    92     $path =~ s![^\w\s]+!_!g; 
    93     $path =~ s!\s+!_!g; 
    94     $path; 
    9567} 
    9668 
  • trunk/plagger/lib/Plagger/Plugin/Publish/Takahashi.pm

    r1656 r1668  
    2222    my($self, $context, $args) = @_; 
    2323 
    24     my $file  = $args->{feed}->id . '.xul'; 
     24    my $file  = $args->{feed}->id_safe . '.xul'; 
    2525    my $path  = File::Spec->catfile($self->conf->{dir}, $file); 
    2626    $context->log(info => "writing output to $path"); 
  • trunk/plagger/lib/Plagger/Util.pm

    r1606 r1668  
    172172    'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 
    173173    't' => sub { $_[0]->title }, 
    174     'i' => sub { $_[0]->id }, 
     174    'i' => sub { $_[0]->id_safe }, 
    175175); 
    176176 
     
    192192} 
    193193 
     194sub safe_id { 
     195    my $id = shift; 
     196    $id =~ s/^urn:guid://; 
     197    $id =~ /^([\w\-]+)$/ ? $1 : Digest::MD5::md5_hex($id); 
     198} 
     199 
    1942001; 
  • trunk/plagger/t/plugins/Bundle-Planet/feedvalidator.t

    r1311 r1668  
    1818 
    1919END { 
    20     rmtree $dir if $dir && -e $dir; 
     20#    rmtree $dir if $dir && -e $dir; 
    2121} 
    2222