Wrap text
Report abuse
require 'uuidtools'
class Media < Application
before :login_required
before :localize_methods, :only => [:new]
before :cleanse_empty_data_references, :only => [:create]
# This default action (see router.rb) is just fodder to feed our redirect.
# no one should be doing anything here except uploading.
def index
MERB_LOGGER.info('--BAD-URI')
redirect 'http://api.jamlab.com/'
end
# GET /media/new
def new
@upid = UUID.random_create.to_s
render
end
# POST /media
# POST /media.xml
def create
@media = [params[:medium].delete(:data)].flatten
@media.map! do |medium|
Medium.new(medium.update(params[:medium])).to_hash
end
relay = MediaRelay.new(@media, :cookies => {_session_id_key => cookies[_session_id_key]})
@media = relay.response
respond_to do |format|
if relay.success?
format.html { redirect(base_url(params[:medium][:project_id])) }
format.js { redirect(finish_url(params[:medium][:project_id])) }
format.xml { success_headers(@media, :xml); @media.to_xml }
format.yaml { success_headers(@media, :yaml); @media.to_yaml }
format.plist{ success_headers(@media, :plist);@media.to_plist }
else
session['flash'][:warning] = "#{relay.status} #{relay.reason}" if session["flash"]
format.html { redirect request.env['HTTP_REFERER'] || Merb::Server.config[:jamlab_uri] }
format.xml { @media.to_xml }
format.yaml { @media.to_yaml }
format.plist{ @media.to_plist }
end
end
end
def progress
# Mongrel::Uploads.debug = true
@upstatus = Mongrel::Uploads.check(params[:upload_id])
finishing = Mongrel::Uploads.instance_variable_get(:@counters)
return if @upstatus.nil? && finishing && !finishing.empty?
respond_to do |format|
format.yaml { @upstatus.to_yaml }
format.js { render_js 'progress' }
end
end
protected
def cleanse_empty_data_references
params[:medium][:data].delete("")
end
def base_url(project_id)
"http://#{Merb::Server.config[:jamlab_uri]}/projects/#{project_id}/versions"
end
def finish_url(project_id)
"http://#{Merb::Server.config[:jamlab_uri]}/projects/#{project_id}/media/finish"
end
def success_headers(media,format)
headers['Location'] = media.to_a.map{ |medium| location(medium,format) }.join(', ')
@status = 201
end
def location(medium,format=nil)
"#{base_url(params[:medium][:project_id])}/#{medium.id}#{format ? ".#{format}" : ''}"
end
end