Skip to content

Commit

Permalink
move code to Media
Browse files Browse the repository at this point in the history
  • Loading branch information
vasconsaurus committed Jan 28, 2025
1 parent c00ec65 commit 384a84d
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 61 deletions.
62 changes: 1 addition & 61 deletions app/models/concerns/project_media_creators.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,67 +54,7 @@ def create_annotation

def create_original_claim
claim = self.set_original_claim.strip
if claim.match?(/\A#{URI::DEFAULT_PARSER.make_regexp(['http', 'https'])}\z/)
uri = URI.parse(claim)
content_type = fetch_content_type(uri)
ext = File.extname(uri.path)

case content_type
when /^image\//
self.media = create_media_from_url('UploadedImage', claim, ext)
when /^video\//
self.media = create_media_from_url('UploadedVideo', claim, ext)
when /^audio\//
self.media = create_media_from_url('UploadedAudio', claim, ext)
else
self.media = create_link_media(claim)
end
else
self.media = create_claim_media(claim)
end
end

def fetch_content_type(uri)
response = Net::HTTP.get_response(uri)
response['content-type']
end

def create_media_from_url(type, url, ext)
klass = type.constantize
file = download_file(url, ext)
existing_media = klass.find_by(original_claim_hash: Digest::MD5.hexdigest(url))

if existing_media
existing_media
else
m = klass.new
m.original_claim = url
m.original_claim_hash = Digest::MD5.hexdigest(url)
m.file = file
m.save!
m
end
end

def download_file(url, ext)
raise "Invalid URL when creating media from original claim attribute" unless url =~ /\A#{URI::DEFAULT_PARSER.make_regexp(['http', 'https'])}\z/

file = Tempfile.new(['download', ext])
file.binmode
file.write(URI(url).open.read)
file.rewind
file
end

def create_claim_media(text)
Claim.find_by(original_claim_hash: Digest::MD5.hexdigest(text)) || Claim.create!(quote: text, original_claim: text, original_claim_hash: Digest::MD5.hexdigest(text))
end

def create_link_media(url)
team = self.team || Team.current
pender_key = team.get_pender_key if team
url_from_pender = Link.normalized(url, pender_key)
Link.find_by(url: url_from_pender) || Link.find_by(original_claim_hash: Digest::MD5.hexdigest(url)) || Link.create!(url: url, pender_key: pender_key, original_claim: url, original_claim_hash: Digest::MD5.hexdigest(url))
self.media = Media.find_or_create_from_original_claim(claim, self.team)
end

def set_quote_metadata
Expand Down
60 changes: 60 additions & 0 deletions app/models/media.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,27 @@ def domain
''
end

def self.find_or_create_from_original_claim(claim, project_media_team)
if claim.match?(/\A#{URI::DEFAULT_PARSER.make_regexp(['http', 'https'])}\z/)
uri = URI.parse(claim)
content_type = fetch_content_type(uri)
ext = File.extname(uri.path)

case content_type
when /^image\//
create_uploaded_file_media_from_url('UploadedImage', claim, ext)
when /^video\//
create_uploaded_file_media_from_url('UploadedVideo', claim, ext)
when /^audio\//
create_uploaded_file_media_from_url('UploadedAudio', claim, ext)
else
create_link_media(claim, project_media_team)
end
else
create_claim_media(claim)
end
end

private

def set_url_nil_if_empty
Expand Down Expand Up @@ -103,4 +124,43 @@ def set_type
def set_uuid
self.update_column(:uuid, self.id)
end


def self.fetch_content_type(uri)
response = Net::HTTP.get_response(uri)
response['content-type']
end

def self.create_uploaded_file_media_from_url(media_type, url, ext)
klass = media_type.constantize
puts klass
file = download_file(url, ext)
existing_media = klass.find_by(original_claim_hash: Digest::MD5.hexdigest(url))

if existing_media
existing_media
else
klass.create!(file: file, original_claim: url, original_claim_hash: Digest::MD5.hexdigest(url))
end
end

def self.download_file(url, ext)
raise "Invalid URL when creating media from original claim attribute" unless url =~ /\A#{URI::DEFAULT_PARSER.make_regexp(['http', 'https'])}\z/

file = Tempfile.new(['download', ext])
file.binmode
file.write(URI(url).open.read)
file.rewind
file
end

def self.create_claim_media(text)
Claim.find_by(original_claim_hash: Digest::MD5.hexdigest(text)) || Claim.create!(quote: text, original_claim: text, original_claim_hash: Digest::MD5.hexdigest(text))
end

def self.create_link_media(url, project_media_team)
pender_key = project_media_team.get_pender_key if project_media_team
url_from_pender = Link.normalized(url, pender_key)
Link.find_by(url: url_from_pender) || Link.find_by(original_claim_hash: Digest::MD5.hexdigest(url)) || Link.create!(url: url, pender_key: pender_key, original_claim: url, original_claim_hash: Digest::MD5.hexdigest(url))
end
end

0 comments on commit 384a84d

Please sign in to comment.