sufia 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile +1 -1
  4. data/History.md +77 -0
  5. data/README.md +26 -11
  6. data/SUFIA_VERSION +1 -1
  7. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +4 -3
  8. data/app/helpers/sufia_helper.rb +7 -5
  9. data/app/jobs/ingest_local_file_job.rb +34 -0
  10. data/app/views/catalog/_facet_selected.html.erb +1 -1
  11. data/app/views/generic_files/_local_file_import.html.erb +3 -0
  12. data/app/views/generic_files/new.html.erb +10 -0
  13. data/app/views/generic_files/upload/_alerts.html.erb +2 -2
  14. data/app/views/generic_files/upload/_local_file_import_chooser.html.erb +27 -0
  15. data/app/views/generic_files/upload/_script_templates.html.erb +1 -1
  16. data/lib/generators/sufia/sufia_generator.rb +1 -0
  17. data/lib/generators/sufia/templates/config/resque_config.rb +3 -20
  18. data/lib/sufia/files_controller/local_ingest_behavior.rb +54 -0
  19. data/lib/sufia/files_controller/upload_complete_behavior.rb +7 -0
  20. data/lib/sufia/files_controller_behavior.rb +31 -11
  21. data/lib/sufia/version.rb +1 -1
  22. data/spec/active_fedora/unsaved_digital_object_spec.rb +1 -1
  23. data/spec/controllers/authorities_controller_spec.rb +1 -1
  24. data/spec/controllers/batch_controller_spec.rb +4 -4
  25. data/spec/controllers/batch_edits_controller_spec.rb +1 -1
  26. data/spec/controllers/catalog_controller_spec.rb +1 -1
  27. data/spec/controllers/dashboard_controller_spec.rb +2 -2
  28. data/spec/controllers/downloads_controller_spec.rb +2 -3
  29. data/spec/controllers/generic_files_controller_spec.rb +113 -31
  30. data/spec/controllers/mailbox_controller_spec.rb +1 -1
  31. data/spec/controllers/single_use_link_controller_spec.rb +4 -5
  32. data/spec/controllers/users_controller_spec.rb +3 -3
  33. data/spec/features/browse_dashboard_files.rb +1 -1
  34. data/spec/features/browse_files.rb +1 -1
  35. data/spec/features/contact_form.rb +1 -1
  36. data/spec/features/display_dashboard.rb +1 -1
  37. data/spec/features/ingest_upload_files.rb +1 -1
  38. data/spec/features/users_spec.rb +1 -1
  39. data/spec/helpers/generic_file_helper_spec.rb +1 -1
  40. data/spec/helpers/render_constraints_helper_behavior_spec.rb +42 -0
  41. data/spec/helpers/sufia_helper_spec.rb +40 -1
  42. data/spec/jobs/import_url_job_spec.rb +45 -0
  43. data/spec/jobs/ingest_local_file_job_spec.rb +35 -0
  44. data/spec/lib/sufia/id_service_spec.rb +1 -1
  45. data/spec/lib/sufia/upload_complete_behavior_spec.rb +26 -0
  46. data/spec/models/audit_job_spec.rb +2 -2
  47. data/spec/models/batch_spec.rb +1 -1
  48. data/spec/models/batch_update_job_spec.rb +2 -4
  49. data/spec/models/characterize_job_spec.rb +17 -14
  50. data/spec/models/checksum_audit_log_spec.rb +2 -2
  51. data/spec/models/event_jobs_spec.rb +2 -2
  52. data/spec/models/file_content_datastream_spec.rb +5 -5
  53. data/spec/models/fits_datastream_spec.rb +2 -2
  54. data/spec/models/generic_file/actions_spec.rb +25 -0
  55. data/spec/models/generic_file/web_form_spec.rb +1 -1
  56. data/spec/models/generic_file_spec.rb +16 -33
  57. data/spec/models/local_authority_spec.rb +1 -1
  58. data/spec/models/properties_datastream_spec.rb +1 -1
  59. data/spec/models/single_use_link_spec.rb +1 -1
  60. data/spec/models/solr_document_spec.rb +1 -1
  61. data/spec/models/transcode_audio_job_spec.rb +22 -18
  62. data/spec/models/transcode_video_job_spec.rb +4 -3
  63. data/spec/models/trophy_spec.rb +1 -1
  64. data/spec/models/unzip_job_spec.rb +2 -2
  65. data/spec/models/user_spec.rb +1 -1
  66. data/spec/rake/sufia_fixtures_spec.rb +1 -1
  67. data/spec/routing/route_spec.rb +1 -1
  68. data/spec/spec_helper.rb +2 -2
  69. data/spec/views/batch_edits/check_all_spec.rb +1 -1
  70. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -15
  71. data/sufia-models/app/models/geo_names_resource.rb +0 -2
  72. data/sufia-models/lib/sufia/models.rb +1 -1
  73. data/sufia-models/lib/sufia/models/engine.rb +12 -1
  74. data/sufia-models/lib/sufia/models/file_content.rb +0 -3
  75. data/sufia-models/lib/sufia/models/generic_file.rb +6 -10
  76. data/sufia-models/lib/sufia/models/generic_file/actions.rb +1 -1
  77. data/sufia-models/lib/sufia/models/generic_file/characterization.rb +1 -1
  78. data/sufia-models/lib/sufia/models/generic_file/derivatives.rb +31 -0
  79. data/sufia-models/lib/sufia/models/generic_file/mime_types.rb +27 -0
  80. data/sufia-models/lib/sufia/models/generic_file/thumbnail.rb +6 -60
  81. data/sufia-models/lib/sufia/models/jobs/active_fedora_pid_based_job.rb +19 -0
  82. data/sufia-models/lib/sufia/models/jobs/audit_job.rb +12 -8
  83. data/sufia-models/lib/sufia/models/jobs/characterize_job.rb +3 -10
  84. data/sufia-models/lib/sufia/models/jobs/import_url_job.rb +2 -9
  85. data/sufia-models/lib/sufia/models/jobs/resolrize_job.rb +8 -1
  86. data/sufia-models/lib/sufia/models/jobs/transcode_audio_job.rb +4 -28
  87. data/sufia-models/lib/sufia/models/jobs/transcode_video_job.rb +4 -28
  88. data/sufia-models/lib/sufia/models/jobs/unzip_job.rb +5 -19
  89. data/sufia-models/lib/sufia/models/model_methods.rb +2 -16
  90. data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +29 -0
  91. data/sufia-models/lib/sufia/models/version.rb +1 -1
  92. data/sufia-models/sufia-models.gemspec +1 -1
  93. data/sufia.gemspec +2 -1
  94. data/tasks/sufia-dev.rake +1 -1
  95. metadata +26 -10
  96. data/app/assets/stylesheets/jquery-ui-1.8.1.custom.css +0 -486
  97. data/app/assets/stylesheets/jquery-ui-1.8.23.custom.css +0 -340
  98. data/sufia-models/lib/sufia/models/file_content/extract_metadata.rb +0 -60
  99. data/sufia-models/lib/sufia/models/jobs/ffmpeg_transcode_job.rb +0 -61
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  # Don't run the tests if activerecord-import isn't installed.
4
4
  # The 0.3.1 version doesn't work with rails 4, so suppress these tests
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe PropertiesDatastream do
4
4
 
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe SingleUseLink do
4
4
  before (:all) do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe SolrDocument do
4
4
  describe "when mime-type is 'application/mxf'" do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe TranscodeAudioJob, :if => Sufia.config.enable_ffmpeg do
4
4
  before do
@@ -7,18 +7,18 @@ describe TranscodeAudioJob, :if => Sufia.config.enable_ffmpeg do
7
7
  @generic_file.stub(:characterize_if_changed).and_yield
8
8
  end
9
9
 
10
- after do
11
- @generic_file.delete
12
- end
13
-
14
- subject { TranscodeAudioJob.new(@generic_file.id, 'content')}
10
+ subject { TranscodeAudioJob.new(@generic_file.id)}
15
11
 
16
12
 
17
13
  describe "with a wav file" do
18
14
  before do
19
- @generic_file.add_file_datastream(File.new(fixture_path + '/piano_note.wav'), :dsid=>'content')
15
+ @generic_file.add_file(File.open(fixture_path + '/piano_note.wav'), 'content', 'piano_note.wav')
20
16
  @generic_file.save!
21
17
  end
18
+ after do
19
+ @generic_file.delete
20
+ end
21
+
22
22
 
23
23
  it "should transcode to mp3 and ogg" do
24
24
  subject.run
@@ -26,7 +26,7 @@ describe TranscodeAudioJob, :if => Sufia.config.enable_ffmpeg do
26
26
  derivative = reloaded.datastreams['mp3']
27
27
  derivative.should_not be_nil
28
28
  derivative.content.should_not be_nil
29
- derivative.mimeType.should == 'audio/mp3'
29
+ derivative.mimeType.should == 'audio/mpeg'
30
30
 
31
31
  derivative2 = reloaded.datastreams['ogg']
32
32
  derivative2.should_not be_nil
@@ -36,13 +36,15 @@ describe TranscodeAudioJob, :if => Sufia.config.enable_ffmpeg do
36
36
  end
37
37
 
38
38
  describe "with an mp3 file" do
39
- before do
40
- @generic_file.add_file_datastream(File.new(fixture_path + '/sufia/sufia_test5.mp3'), :dsid=>'content')
41
- @generic_file.characterize # so that the mime_type is set
42
- @generic_file.save!
43
- end
39
+ # Uncomment when this is nolonger pending
40
+ # before do
41
+ # @generic_file.add_file(File.open(fixture_path + '/sufia/sufia_test5.mp3'), 'content', 'sufia_test5.mp3')
42
+ # @generic_file.characterize # so that the mime_type is set
43
+ # @generic_file.save!
44
+ # end
44
45
 
45
46
  it "should copy the content to the mp3 datastream and transcode to ogg" do
47
+ pending "Need a way to do this in hydra-derivatives"
46
48
  subject.run
47
49
  reloaded = GenericFile.find(@generic_file.pid)
48
50
  derivative = reloaded.datastreams['mp3']
@@ -57,13 +59,15 @@ describe TranscodeAudioJob, :if => Sufia.config.enable_ffmpeg do
57
59
  end
58
60
  end
59
61
  describe "with an ogg file" do
60
- before do
61
- @generic_file.add_file_datastream(File.new(fixture_path + '/Example.ogg'), :dsid=>'content')
62
- @generic_file.characterize # so that the mime_type is set
63
- @generic_file.save!
64
- end
62
+ # Uncomment when this is nolonger pending
63
+ # before do
64
+ # @generic_file.add_file(File.open(fixture_path + '/Example.ogg'), 'content', 'Example.ogg')
65
+ # @generic_file.characterize # so that the mime_type is set
66
+ # @generic_file.save!
67
+ # end
65
68
 
66
69
  it "should copy the content to the ogg datastream and transcode to mp3" do
70
+ pending "Need a way to do this in hydra-derivatives"
67
71
  subject.run
68
72
  reloaded = GenericFile.find(@generic_file.pid)
69
73
  derivative = reloaded.datastreams['mp3']
@@ -1,11 +1,12 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe TranscodeVideoJob, :if => Sufia.config.enable_ffmpeg do
4
4
  before do
5
5
  @generic_file = GenericFile.new
6
6
  @generic_file.apply_depositor_metadata('jcoyne@example.com')
7
- @generic_file.add_file_datastream(File.new(fixture_path + '/countdown.avi'), :dsid=>'content')
7
+ @generic_file.add_file(File.open(fixture_path + '/countdown.avi'), 'content', 'countdown.avi')
8
8
  @generic_file.stub(:characterize_if_changed).and_yield
9
+ @generic_file.mime_type = 'video/avi'
9
10
  @generic_file.save!
10
11
  end
11
12
 
@@ -13,7 +14,7 @@ describe TranscodeVideoJob, :if => Sufia.config.enable_ffmpeg do
13
14
  @generic_file.delete
14
15
  end
15
16
 
16
- subject { TranscodeVideoJob.new(@generic_file.id, 'content')}
17
+ subject { TranscodeVideoJob.new(@generic_file.id)}
17
18
  it "should put content in datastream_out" do
18
19
  subject.run
19
20
  reloaded = GenericFile.find(@generic_file.pid)
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Trophy do
4
4
  before(:all) do
@@ -1,10 +1,10 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe UnzipJob do
4
4
  before do
5
5
  @batch = Batch.create
6
6
  @generic_file = GenericFile.new(:batch=>@batch)
7
- @generic_file.add_file_datastream(File.new(fixture_path + '/icons.zip'), :dsid=>'content')
7
+ @generic_file.add_file(File.open(fixture_path + '/icons.zip'), 'content', 'icons.zip')
8
8
  @generic_file.apply_depositor_metadata('mjg36')
9
9
  @generic_file.stub(:characterize_if_changed).and_yield #don't run characterization
10
10
  @generic_file.save
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe User do
4
4
  before(:all) do
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  # Used to test the sufia-fixtures rake task
4
4
  require "rake"
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Routes' do
4
4
  before(:each) do
@@ -19,8 +19,8 @@ $in_travis = !ENV['TRAVIS'].nil? && ENV['TRAVIS'] == 'true'
19
19
 
20
20
  if $in_travis
21
21
  # Monkey-patches the FITS runner to return the PDF FITS fixture
22
- module Sufia
23
- module FileContent
22
+ module Hydra
23
+ module Derivatives
24
24
  module ExtractMetadata
25
25
  def run_fits!(path)
26
26
  File.open(File.join(File.expand_path('../fixtures', __FILE__), 'pdf_fits.xml')).read
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Check All' do
4
4
  before (:all) do
@@ -1,18 +1,4 @@
1
- # Copyright © 2012 The Pennsylvania State University
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
1
  class FileContentDatastream < ActiveFedora::Datastream
16
- include Sufia::FileContent::ExtractMetadata
2
+ include Hydra::Derivatives::ExtractMetadata
17
3
  include Sufia::FileContent::Versions
18
4
  end
@@ -1,5 +1,3 @@
1
- require 'active_resource'
2
-
3
1
  class GeoNamesResource < ActiveResource::Base
4
2
  self.site = "http://api.geonames.org/"
5
3
  self.element_name = "searchJSON"
@@ -5,7 +5,7 @@ require 'nest'
5
5
  require 'mailboxer'
6
6
  require 'acts_as_follower'
7
7
  require 'paperclip'
8
- require 'RMagick'
8
+ require "active_resource" # used by GenericFile to catch errors & by GeoNamesResource
9
9
  begin
10
10
  # activerecord-import 0.3.1 does not support rails 4, so we don't require it.
11
11
  require 'activerecord-import'
@@ -22,6 +22,7 @@ module Sufia
22
22
  config.fits_path = "fits.sh"
23
23
  config.enable_contact_form_delivery = false
24
24
  config.dropbox_api_key = nil
25
+ config.enable_local_ingest = nil
25
26
  config.queue = Sufia::Resque::Queue
26
27
 
27
28
  config.autoload_paths += %W(
@@ -40,22 +41,32 @@ module Sufia
40
41
  end
41
42
 
42
43
  initializer 'requires' do
44
+ require 'hydra/derivatives'
43
45
  require 'sufia/models/model_methods'
44
46
  require 'sufia/models/noid'
45
47
  require 'sufia/models/file_content'
46
- require 'sufia/models/file_content/extract_metadata'
47
48
  require 'sufia/models/file_content/versions'
48
49
  require 'sufia/models/generic_file/actions'
49
50
  require 'sufia/models/generic_file/audit'
50
51
  require 'sufia/models/generic_file/characterization'
52
+ require 'sufia/models/generic_file/derivatives'
51
53
  require 'sufia/models/generic_file/export'
54
+ require 'sufia/models/generic_file/mime_types'
52
55
  require 'sufia/models/generic_file/permissions'
53
56
  require 'sufia/models/generic_file/thumbnail'
54
57
  require 'sufia/models/generic_file'
55
58
  require 'sufia/models/user'
59
+ require 'sufia/models/user_local_directory_behavior'
56
60
  require 'sufia/models/id_service'
57
61
  require 'sufia/models/solr_document_behavior'
58
62
  end
63
+
64
+ initializer 'configure' do
65
+ Hydra::Derivatives.ffmpeg_path = Sufia.config.ffmpeg_path
66
+ Hydra::Derivatives.temp_file_base = Sufia.config.temp_file_base
67
+ Hydra::Derivatives.fits_path = Sufia.config.fits_path
68
+ Hydra::Derivatives.enable_ffmpeg = Sufia.config.enable_ffmpeg
69
+ end
59
70
  end
60
71
  end
61
72
  end
@@ -1,9 +1,6 @@
1
1
  module Sufia
2
2
  module FileContent
3
3
  extend ActiveSupport::Autoload
4
-
5
- autoload :ExtractMetadata, 'sufia/models/file_content/extract_metadata'
6
4
  autoload :Versions, 'sufia/models/file_content/versions'
7
-
8
5
  end
9
6
  end
@@ -2,22 +2,20 @@ module Sufia
2
2
  module GenericFile
3
3
  extend ActiveSupport::Concern
4
4
  extend ActiveSupport::Autoload
5
- autoload :Export
6
- autoload :Thumbnail
7
- autoload :Characterization
8
- autoload :Audit
9
5
  autoload :Actions
10
6
  autoload :Permissions
11
7
  autoload :WebForm, 'sufia/models/generic_file/web_form'
12
8
  autoload :AccessibleAttributes, 'sufia/models/generic_file/accessible_attributes'
13
9
  include Sufia::ModelMethods
14
10
  include Sufia::Noid
11
+ include Sufia::GenericFile::MimeTypes
15
12
  include Sufia::GenericFile::Thumbnail
16
13
  include Sufia::GenericFile::Export
17
14
  include Sufia::GenericFile::Characterization
18
15
  include Sufia::GenericFile::Audit
19
16
  include Sufia::GenericFile::Permissions
20
17
  include Sufia::GenericFile::WebForm
18
+ include Sufia::GenericFile::Derivatives
21
19
 
22
20
  included do
23
21
  has_metadata :name => "descMetadata", :type => GenericFileRdfDatastream
@@ -52,21 +50,19 @@ module Sufia
52
50
  end
53
51
 
54
52
  def pdf?
55
- ['application/pdf'].include? self.mime_type
53
+ self.class.pdf_mime_types.include? self.mime_type
56
54
  end
57
55
 
58
56
  def image?
59
- ['image/png','image/jpeg', 'image/jpg', 'image/jp2', 'image/bmp', 'image/gif'].include? self.mime_type
57
+ self.class.image_mime_types.include? self.mime_type
60
58
  end
61
59
 
62
60
  def video?
63
- ['video/mpeg', 'video/mp4', 'video/webm', 'video/x-msvideo', 'video/avi', 'video/quicktime', 'application/mxf'].include? self.mime_type
61
+ self.class.video_mime_types.include? self.mime_type
64
62
  end
65
63
 
66
64
  def audio?
67
- # audio/x-wave is the mime type that fits 0.6.0 returns for a wav file.
68
- # audio/mpeg is the mime type that fits 0.6.0 returns for an mp3 file.
69
- ['audio/mp3', 'audio/mpeg', 'audio/x-wave', 'audio/x-wav', 'audio/ogg'].include? self.mime_type
65
+ self.class.audio_mime_types.include? self.mime_type
70
66
  end
71
67
 
72
68
  def persistent_url
@@ -3,7 +3,7 @@ module Sufia::GenericFile
3
3
  module Actions
4
4
  def self.create_metadata(generic_file, user, batch_id)
5
5
 
6
- generic_file.apply_depositor_metadata(user.user_key)
6
+ generic_file.apply_depositor_metadata(user)
7
7
  generic_file.date_uploaded = Date.today
8
8
  generic_file.date_modified = Date.today
9
9
  generic_file.creator = user.name
@@ -36,7 +36,7 @@ module Sufia
36
36
  self.characterization.ng_xml = self.content.extract_metadata
37
37
  self.append_metadata
38
38
  self.filename = self.label
39
- save unless self.new_object?
39
+ save
40
40
  end
41
41
 
42
42
  # Populate descMetadata with fields from FITS (e.g. Author from pdfs)
@@ -0,0 +1,31 @@
1
+ module Sufia
2
+ module GenericFile
3
+ module Derivatives
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ include Hydra::Derivatives
8
+
9
+ makes_derivatives do |obj|
10
+ case obj.mime_type
11
+ when *pdf_mime_types
12
+ obj.transform_datastream :content,
13
+ { :thumbnail => {size: "338x493", datastream: 'thumbnail'} }
14
+ when *audio_mime_types
15
+ obj.transform_datastream :content,
16
+ { :mp3 => {format: 'mp3', datastream: 'mp3'},
17
+ :ogg => {format: 'ogg', datastream: 'ogg'} }, processor: :audio
18
+ when *video_mime_types
19
+ obj.transform_datastream :content,
20
+ { :webm => {format: "webm", datastream: 'webm'},
21
+ :mp4 => {format: "mp4", datastream: 'mp4'} }, processor: :video
22
+ when *image_mime_types
23
+ obj.transform_datastream :content, { :thumbnail => {size: "200x150>", datastream: 'thumbnail'} }
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,27 @@
1
+ module Sufia
2
+ module GenericFile
3
+ module MimeTypes
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def image_mime_types
8
+ ['image/png','image/jpeg', 'image/jpg', 'image/jp2', 'image/bmp', 'image/gif']
9
+ end
10
+
11
+ def pdf_mime_types
12
+ ['application/pdf']
13
+ end
14
+
15
+ def video_mime_types
16
+ ['video/mpeg', 'video/mp4', 'video/webm', 'video/x-msvideo', 'video/avi', 'video/quicktime', 'application/mxf']
17
+ end
18
+
19
+ def audio_mime_types
20
+ # audio/x-wave is the mime type that fits 0.6.0 returns for a wav file.
21
+ # audio/mpeg is the mime type that fits 0.6.0 returns for an mp3 file.
22
+ ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/x-wave', 'audio/x-wav', 'audio/ogg']
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,17 +1,18 @@
1
1
  module Sufia
2
2
  module GenericFile
3
3
  module Thumbnail
4
+ extend ActiveSupport::Concern
4
5
  # Create thumbnail requires that the characterization has already been run (so mime_type, width and height is available)
5
6
  # and that the object is already has a pid set
6
7
  def create_thumbnail
7
8
  return unless self.content.has_content?
8
- if pdf?
9
- create_pdf_thumbnail
10
- elsif image?
11
- create_image_thumbnail
12
- elsif video?
9
+
10
+ if video?
13
11
  create_video_thumbnail
12
+ else
13
+ create_derivatives
14
14
  end
15
+ self.save
15
16
  end
16
17
 
17
18
  protected
@@ -29,61 +30,6 @@ module Sufia
29
30
 
30
31
  self.thumbnail.content = File.open(output_file, 'rb').read
31
32
  self.thumbnail.mimeType = 'image/png'
32
- self.save
33
- end
34
-
35
- def create_pdf_thumbnail
36
- retryCnt = 0
37
- stat = false;
38
- for retryCnt in 1..3
39
- begin
40
- pdf = load_image_transformer
41
- first = pdf.to_a[0]
42
- first.format = "PNG"
43
- thumb = first.scale(338, 493)
44
- self.thumbnail.content = thumb.to_blob { self.format = "PNG" }
45
- self.thumbnail.mimeType = 'image/png'
46
- self.save
47
- break
48
- rescue => e
49
- logger.warn "Rescued an error #{e.inspect} retry count = #{retryCnt}"
50
- sleep 1
51
- end
52
- end
53
- return stat
54
- end
55
-
56
- def create_image_thumbnail
57
- self.thumbnail.content = scale_image.to_blob { self.format = "PNG" }
58
- self.thumbnail.mimeType = 'image/png'
59
- #logger.debug "Has the content before saving? #{self.content.changed?}"
60
- self.save
61
- end
62
-
63
- def scale_image
64
- img = load_image_transformer
65
- height = Float(self.height.first.to_i)
66
- width = Float(self.width.first.to_i)
67
- if width > height && width > 150 && height > 105
68
- # horizontal img
69
- scale = 150 / width
70
- img.scale(150, height * scale)
71
- elsif height >= width && width > 150 && height > 200
72
- # vertical or square
73
- scale = 200 / height
74
- img.scale(width*scale, 200)
75
- else
76
- # Too small to worry about resizing
77
- img
78
- end
79
- end
80
-
81
- # Override this method if you want a different transformer, or need to load the
82
- # raw image from a different source (e.g. external datastream)
83
- def load_image_transformer
84
- xformer = Magick::ImageList.new
85
- xformer.from_blob(content.content)
86
- xformer
87
33
  end
88
34
 
89
35
  end