rev 1925 - trunk/buscador/lib/Buscador

[prev] [thread] [next] [lurker] [Date index for 2005/02/20]

From: simon
Subject: rev 1925 - trunk/buscador/lib/Buscador
Date: 20:33 on 20 Feb 2005
Author: simon
Date: 2005-02-20 20:33:47 +0000 (Sun, 20 Feb 2005)
New Revision: 1925

Modified:
   trunk/buscador/lib/Buscador/Attachment.pm
Log:
Make it so that html attachments have their inline images correctly rereferenced to 
an internal buscador url


Modified: trunk/buscador/lib/Buscador/Attachment.pm
===================================================================
--- trunk/buscador/lib/Buscador/Attachment.pm	2005-02-19 13:20:04 UTC (rev 1924)
+++ trunk/buscador/lib/Buscador/Attachment.pm	2005-02-20 20:33:47 UTC (rev 1925)
@@ -33,8 +33,8 @@
 package Email::Store::Attachment;
 use strict;
 use MIME::Base64 qw(decode_base64);
+use HTML::TokeParser::Simple;
 
-
 sub view :Exported {
     my ($self, $r, $att) = @_;
 
@@ -43,6 +43,33 @@
 
     $r->{content_type} = $att->content_type;
     $r->{output} = ($att->content_type =~ m!^text/!) ? $att->payload: decode_base64($att->payload);
+    
+    return unless $att->content_type eq 'text/html';
+
+    my $mail        = $att->mail;
+    my $id          = $mail->message_id;
+    my @attachments = $mail->attachments;
+    my $base        = Buscador->config->{uri_base}; $base =~ s!/+$!!;
+
+    my $html   = "";
+    my $parser = HTML::TokeParser::Simple->new( string => $r->{output} );
+     while (my $token = $parser->get_token) {
+
+        goto END unless $token->is_start_tag( qr/img/ );
+        my $src = $token->get_attr('src');
+        goto END unless defined $src; 
+
+        if ($src =~ m!^cid:part(\d+)!) {
+            $token->set_attr('src', "${base}/attachment/view/".$attachments[$1]->id);        
+        }
+
+        END: $html .= $token->as_is;
+     }
+    $r->{output} = $html;
+    
+    
+
+
 }
 
 1;

Generated at 21:00 on 20 Feb 2005 by mariachi 0.52