lib/daengine/teamsite_metadata_parser.rb in daengine-0.2.19 vs lib/daengine/teamsite_metadata_parser.rb in daengine-0.3
- old
+ new
@@ -1,7 +1,8 @@
# https://github.com/AustinBlues/RSS-Speed-Reader/blob/master/lib/rss_speed_reader.rb
# https://github.com/tenderlove/nokogiri/pull/524
+require 'mini_exiftool'
module Daengine::TeamsiteMetadataParser
@@translation = {
'TeamSite/Metadata/web_title' => 'title',
@@ -40,11 +41,11 @@
def self.log(args)
@@logger.error(args) unless @@logger.blank?
end
- def self.parse_tuple_file(file)
+ def self.parse_tuple_file(file, last_read = nil)
time do
asset = nil
assets = {}
docpath = {}
valid = true
@@ -87,50 +88,62 @@
delete_count += 1
elsif (assets[key]['expires_at'].nil? || (assets[key]['expires_at'] < 1.minute.from_now))
DigitalAsset.where(guid: key).try :delete_all
delete_count += 1
else
- asset_docs = trim_package(assets[key]['documents_attributes'])
+ asset_docs = trim_package(assets[key]['documents_attributes'], last_read)
da = DigitalAsset.find_or_initialize_by(guid: key)
if (!asset_docs.empty?)
assets[key]['documents_attributes'] = asset_docs
creating = da.new?
da.documents = []
da.update_attributes!(assets[key])
- if (creating)
- added_count += 1
- else
- update_count += 1
- end
+ creating ? added_count += 1 : update_count += 1
else
DigitalAsset.where(guid: key).try :delete_all
delete_count += 1
end
end
rescue Exception => e
#puts "--**Exception**--- #{e}"
- error_files << "#{da.try(:guid)}, #{da.try(:errors).try(:full_messages)}"
+ error_files << "#{e} ---- #{da.try(:guid)}, #{da.try(:errors).try(:full_messages)}"
end
end
log_txt = "TeamsiteMetadataParser: Failed to save/update following DigitalAssets in database:\n"
error_files.each do |asset_file|
- log_txt = log_txt + "> #{asset_file}\n"
+ log_txt << "> #{asset_file}\n"
end
- Daengine.log(log_txt, "warn") if !error_files.empty?
+ Daengine.log(log_txt, "warn") unless error_files.empty?
DigitalAsset.purge! # if the purge criteria is met, purge anything not updated
Daengine.log("TeamsiteMetadataParser: #{added_count} records added, #{update_count} updated, #{delete_count} removed", "info")
end
end
- def self.trim_package(asset_docs)
+ def self.trim_package(asset_docs, last_read = nil)
docs = []
path = Daengine.config[:digital_assets_file_directory]
asset_docs.each do |doc|
#exclude manifest_file
unless doc['path'].match('\/manifest\/')
file = File.join(path, doc['path'])
#exclude digital_asset_files that are not in *Teamsite Staging*
- docs << doc if File::exist?(file)
+ if File::exist?(file)
+ docs << doc
+ if(File.mtime(file) > last_read)
+ begin
+ exifdata = ::MiniExiftool.new file
+ doc['pages'] = exifdata.pages # or exifdata['Slides']
+ doc['size'] = exifdata.filesize
+ doc['mime_type'] = exifdata.mimetype
+ rescue Exception => e
+ p "Error reading metadata from #{file} #{e.message}"
+ Daengine.log "Error reading metadata from #{file} #{e.message}", "error"
+ end
+ end
+ else
+ # the file was missing on disk, show a warning!
+ Daengine.log("TeamsiteMetadataParser: Unable to locate file #{file} on disk! Removing from metadata", "warn")
+ end
end
end
docs
end
\ No newline at end of file