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