root/gsdl/trunk/perllib/plugins/OggVorbisPlugin.pm @ 18320

Revision 18320, 4.7 KB (checked in by ak19, 11 years ago)

Now plugins provide the option of base64 encoding or url encoding filenames that are to be renamed (when copied into the archives dir). Previously renamed files would always be url-encoded. URL-encoding is the default now for most plugins except MP3Plugin and OggVorbisPlugin?, where the default is base64 encoding. Base64 encoding filenames upon renaming them was introduced so that more files that browsers try to open in external applications can open them, since url encoding does not seem to be implemented the same everywhere (for instance, windows media player is unable to handle url-encoded wmv filenames when such files are launched in it through the browser).

  • Property svn:keywords set to Author Date Id Revision
Line 
1###########################################################################
2#
3# OggVorbisPlug.pm -- A plugin for Ogg Vorbis audio files
4#
5# Original code by Christy Kuo
6#
7# A component of the Greenstone digital library software
8# from the New Zealand Digital Library Project at the
9# University of Waikato, New Zealand.
10#
11# Copyright 1999-2004 New Zealand Digital Library Project
12#
13# This program is free software; you can redistribute it and/or modify
14# it under the terms of the GNU General Public License as published by
15# the Free Software Foundation; either version 2 of the License, or
16# (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21# GNU General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26#
27###########################################################################
28
29package OggVorbisPlugin;
30
31
32use BasePlugin;
33use Ogg::Vorbis::Header::PurePerl;
34
35use strict;
36no strict 'refs'; # allow filehandles to be variables and viceversa
37no strict 'subs';
38
39sub BEGIN {
40    @OggVorbisPlugin::ISA = ('BasePlugin');
41}
42
43
44my $arguments =
45    [ { 'name' => "process_exp",
46    'desc' => "{BasePlugin.process_exp}",
47    'type' => "string",
48    'deft' => &get_default_process_exp(),
49    'reqd' => "no" },
50      { 'name' => "add_technical_metadata",
51    'desc' => "{OggVorbisPlugin.add_technical_metadata}",
52    'type' => "flag",
53    'deft' => "" },
54      { 'name' => "file_rename_method",
55    'desc' => "{BasePlugin.file_rename_method}",
56    'type' => "enum",
57    'deft' => &get_default_file_rename_method(), # by default rename imported files and assoc files using this encoding
58    'list' => $BasePlugin::file_rename_method_list,
59    'reqd' => "no"
60      } ];
61
62my $options = { 'name'     => "OggVorbisPlugin",
63        'desc'     => "{OggVorbisPlugin.desc}",
64        'inherits' => "yes",
65        'abstract' => "no",
66        'args'     => $arguments };
67
68
69# This plugin processes exported Ogg Vorbis files with the suffix ".ogg"
70sub get_default_process_exp
71{
72    return q^(?i)(\.ogg)$^;
73}
74
75# rename imported media files using base64 encoding by default
76# so that the urls generated will always work with external apps
77sub get_default_file_rename_method() {
78    return "base64";
79}
80
81sub new
82{
83    my ($class) = shift(@_);
84    my ($pluginlist,$inputargs,$hashArgOptLists) = @_;
85    push(@$pluginlist, $class);
86   
87    push(@{$hashArgOptLists->{"ArgList"}},@{$arguments});
88    push(@{$hashArgOptLists->{"OptList"}},$options);
89   
90    my $self = new BasePlugin($pluginlist, $inputargs, $hashArgOptLists);
91   
92    return bless $self, $class;
93}
94
95# we don't want to hash on the file
96sub get_oid_hash_type {
97    my $self = shift (@_);
98    return "hash_on_ga_xml";
99}
100
101sub process
102{
103    my $self = shift (@_);
104    my ($pluginfo, $base_dir, $file, $metadata, $doc_obj, $gli) = @_;
105
106    my ($filename_full_path, $filename_no_path) = &util::get_full_filenames($base_dir, $file);
107
108    my $top_section = $doc_obj->get_top_section();
109    # Extract metadata
110    my $ogg = Ogg::Vorbis::Header::PurePerl->new($filename_full_path);
111
112    # Comments added to the file
113    foreach my $key ($ogg->comment_tags())
114    {
115    # Convert key to title case
116    my $keytc = uc(substr($key, 0, 1)) . substr($key, 1, length($key));
117    foreach my $value ($ogg->comment($key))
118    {
119        if (defined $value && $value ne "") {
120        $doc_obj->add_metadata($top_section, $keytc, $value);
121        }
122    }
123    }
124
125    # Technical data (optional)
126    if ($self->{'add_technical_metadata'}) {
127    foreach my $key (keys %{$ogg->info})
128    {
129        # Convert key to title case
130        my $keytc = uc(substr($key, 0, 1)) . substr($key, 1, length($key));
131        my $value = $ogg->info->{$key};
132        if (defined $value && $value ne "") {
133        $doc_obj->add_metadata($top_section, $keytc, $value);
134        }
135    }
136    }
137
138    $doc_obj->add_metadata ($top_section, "FileFormat", "OggVorbis");
139    $doc_obj->add_metadata ($top_section, "srclink", "<a href=\"_httpprefix_/collect/[collection]/index/assoc/[assocfilepath]/[SourceFile]\">");
140    $doc_obj->add_metadata ($top_section, "/srclink", "</a>");
141    # srcicon (need to include "iogg.gif" in the greenstone images directory
142    $doc_obj->add_metadata ($top_section, "srcicon", "<img src=\"_httpprefix_/images/iogg.gif\" title=\"Download\" border=0>");
143
144    # add dummy text and NoText metadata which can be used to suppress the dummy text
145    $self->add_dummy_text($doc_obj, $top_section);
146
147    # Add the actual file as an associated file
148    my $assoc_file = $doc_obj->add_assocfile_from_sourcefile();
149    $doc_obj->associate_file($filename_full_path, $assoc_file, "VORBIS", $top_section);
150
151}
152
153
1541;
Note: See TracBrowser for help on using the browser.