source: gsdl/trunk/perllib/plugins/OggVorbisPlugin.pm@ 18320

Last change on this file since 18320 was 18320, checked in by ak19, 12 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
File size: 4.7 KB
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 repository browser.