Changeset 69

Show
Ignore:
Timestamp:
05/25/05 12:03:23 (3 years ago)
Author:
ogawa
Message:

Add "refresh" option to FlickrPublicPhotos? container.
Add FlickrAPI caching feature.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • FlickrPublicPhotos/trunk/FlickrPublicPhotos.pl

    r67 r69  
    3232MT::Template::Context->add_tag('FlickrPublicPhotoOwnerName' => \&owner_name); 
    3333 
     34# Load photos via FlickrAPI 
     35sub load_photos_fapi { 
     36    my ($user) = @_; 
     37    my $flickr = new MT::Plugin::FlickrPublicPhotos::API(); 
     38    return $flickr->photos($user); 
     39} 
     40 
     41# Load and cache photos 
     42sub load_photos { 
     43    my ($user, $refresh) = @_; 
     44    require MT::PluginData; 
     45    my $pd = MT::PluginData->load({ plugin => 'FlickrPublicPhotos', 
     46                                    key => $user }); 
     47    if (!$pd) { 
     48        $pd = new MT::PluginData(); 
     49        $pd->plugin('FlickrPublicPhotos'); 
     50        $pd->key($user); 
     51    } 
     52    my $data = $pd->data() || {}; 
     53    if (!defined($data->{last_updated}) || !defined($data->{photos}) || 
     54        (time - $data->{last_updated} >= $refresh)) { 
     55        my @photos = eval { load_photos_fapi($user); }; 
     56        # if FlickrAPI call fails, reuse cache 
     57        if (!$@ || !defined($data->{photos})) { 
     58            $data->{photos} = \@photos; 
     59            $data->{last_updated} = time; 
     60        } 
     61        $pd->data($data); 
     62        $pd->save or die $pd->errstr; 
     63    } 
     64    return @{$data->{photos}}; 
     65} 
     66 
    3467sub photos { 
    3568    my ($ctx, $args) = @_; 
    3669    my $user = $args->{user} or $ctx->error("'user' must be specified"); 
    3770 
    38     my $flickr = new MT::Plugin::FlickrPublicPhotos::API(); 
    39     my @photos = $flickr->photos($user); 
     71    my @photos = eval { load_photos($user, $args->{refresh} || 3600); }; 
     72    # if MT::PluginData is unavailable 
     73    @photos = eval { load_photos_fapi($user); } if $@; 
    4074 
    4175    my $lastn = $args->{lastn} || 0;