# target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces
# paging_action - the action that will be linked back to from view
def list (target_user = nil, paging_action = 'list')
+ @title = 'public GPS traces'
+ @title += " tagged with #{params[:tag]}" if params[:tag]
@traces_per_page = 20
page_index = params[:page] ? params[:page].to_i - 1 : 0 # nice 1-based page -> 0-based page index
if target_user.nil? and display_name and display_name != ''
@paging_action = 'view'
@display_name = display_name
+ @title += " from #{@display_name}"
target_user = User.find(:first, :conditions => [ "display_name = ?", display_name])
end
def data
trace = Trace.find(params[:id])
- if trace.public? or (@user and @user == trace.user)
- send_data(File.open("/home/osm/gpx/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.trace_name, :filename => "#{trace.id}.gpx", :type => trace.mime_type, :disposition => 'attachment')
+ else
+ render :nothing, :status => 404
end
end
def picture
trace = Trace.find(params[:id])
- send_data(trace.large_picture, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline') if trace.public? or (@user and @user == trace.user)
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.large_picture_name, :filename => "#{trace.id}.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :nothing, :status => 404
+ end
end
def icon
trace = Trace.find(params[:id])
- send_data(trace.icon_picture, :filename => "#{trace.id}_icon.gif", :type => 'image/gif', :disposition => 'inline') if trace.public? or (@user and @user == trace.user)
+ if trace and (trace.public? or (@user and @user == trace.user))
+ send_file(trace.icon_picture_name, :filename => "#{trace.id}_icon.gif", :type => 'image/gif', :disposition => 'inline')
+ else
+ render :nothing, :status => 404
+ end
end
def api_details