Implemented necessary functionality so binary files no longer render literally.
[catagits/Gitalist.git] / lib / Gitalist / Controller / Ref.pm
index e43bd98..c0e4ce3 100644 (file)
@@ -6,6 +6,9 @@ use namespace::autoclean;
 BEGIN { extends 'Gitalist::Controller' }
 with 'Gitalist::URIStructure::Ref';
 
+use File::Type;
+use File::Type::WebImages ();
+
 sub base : Chained('/repository/find') PathPart('') CaptureArgs(0) {}
 
 after commit => sub {
@@ -20,7 +23,16 @@ sub raw : Chained('find') Does('FilenameArgs') Args() {
     my ($self, $c) = @_;
     $c->forward('find_blob');
 
-    $c->response->content_type('text/plain; charset=utf-8');
+    if(-T $c->stash->{blob}) {
+       $c->response->content_type('text/plain; charset=utf-8');
+    } else {
+       my $ft = File::Type->new();
+       $c->response->content_type(
+           File::Type::WebImages::mime_type($c->stash->{blob})
+        || File::Type->new->mime_type($c->stash->{blob})
+       );
+    }
+
     $c->response->body(delete $c->stash->{blob});
 }