Tidy up control flow in trace creation
This commit is contained in:
parent
942e62117f
commit
80a6e8da05
1 changed files with 40 additions and 35 deletions
|
@ -110,26 +110,27 @@ class TracesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@title = t ".upload_trace"
|
||||||
|
|
||||||
logger.info(params[:trace][:gpx_file].class.name)
|
logger.info(params[:trace][:gpx_file].class.name)
|
||||||
|
|
||||||
if params[:trace][:gpx_file].respond_to?(:read)
|
if params[:trace][:gpx_file].respond_to?(:read)
|
||||||
begin
|
begin
|
||||||
do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
|
@trace = do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
|
||||||
params[:trace][:description], params[:trace][:visibility])
|
params[:trace][:description], params[:trace][:visibility])
|
||||||
rescue StandardError => ex
|
rescue StandardError => ex
|
||||||
if @trace.valid?
|
|
||||||
flash[:error] = t("traces.create.upload_failed")
|
|
||||||
logger.debug ex
|
logger.debug ex
|
||||||
end
|
end
|
||||||
render :action => "new"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if @trace.id
|
if @trace.id
|
||||||
flash[:notice] = t ".trace_uploaded"
|
flash[:notice] = t ".trace_uploaded"
|
||||||
flash[:warning] = t ".traces_waiting", :count => current_user.traces.where(:inserted => false).count if current_user.traces.where(:inserted => false).count > 4
|
flash[:warning] = t ".traces_waiting", :count => current_user.traces.where(:inserted => false).count if current_user.traces.where(:inserted => false).count > 4
|
||||||
|
|
||||||
redirect_to :action => :list, :display_name => current_user.display_name
|
redirect_to :action => :list, :display_name => current_user.display_name
|
||||||
|
else
|
||||||
|
flash[:error] = t("traces.create.upload_failed") if @trace.valid?
|
||||||
|
|
||||||
|
render :action => "new"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@trace = Trace.new(:name => "Dummy",
|
@trace = Trace.new(:name => "Dummy",
|
||||||
|
@ -140,7 +141,7 @@ class TracesController < ApplicationController
|
||||||
:timestamp => Time.now.getutc)
|
:timestamp => Time.now.getutc)
|
||||||
@trace.valid?
|
@trace.valid?
|
||||||
@trace.errors.add(:gpx_file, "can't be blank")
|
@trace.errors.add(:gpx_file, "can't be blank")
|
||||||
@title = t ".upload_trace"
|
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -314,11 +315,11 @@ class TracesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:file].respond_to?(:read)
|
if params[:file].respond_to?(:read)
|
||||||
do_create(params[:file], tags, description, visibility)
|
trace = do_create(params[:file], tags, description, visibility)
|
||||||
|
|
||||||
if @trace.id
|
if trace.id
|
||||||
render :plain => @trace.id.to_s
|
render :plain => trace.id.to_s
|
||||||
elsif @trace.valid?
|
elsif trace.valid?
|
||||||
head :internal_server_error
|
head :internal_server_error
|
||||||
else
|
else
|
||||||
head :bad_request
|
head :bad_request
|
||||||
|
@ -342,7 +343,7 @@ class TracesController < ApplicationController
|
||||||
|
|
||||||
# Create the trace object, falsely marked as already
|
# Create the trace object, falsely marked as already
|
||||||
# inserted to stop the import daemon trying to load it
|
# inserted to stop the import daemon trying to load it
|
||||||
@trace = Trace.new(
|
trace = Trace.new(
|
||||||
:name => name,
|
:name => name,
|
||||||
:tagstring => tags,
|
:tagstring => tags,
|
||||||
:description => description,
|
:description => description,
|
||||||
|
@ -352,13 +353,14 @@ class TracesController < ApplicationController
|
||||||
:timestamp => Time.now.getutc
|
:timestamp => Time.now.getutc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if trace.valid?
|
||||||
Trace.transaction do
|
Trace.transaction do
|
||||||
begin
|
begin
|
||||||
# Save the trace object
|
# Save the trace object
|
||||||
@trace.save!
|
trace.save!
|
||||||
|
|
||||||
# Rename the temporary file to the final name
|
# Rename the temporary file to the final name
|
||||||
FileUtils.mv(filename, @trace.trace_name)
|
FileUtils.mv(filename, trace.trace_name)
|
||||||
rescue StandardError
|
rescue StandardError
|
||||||
# Remove the file as we have failed to update the database
|
# Remove the file as we have failed to update the database
|
||||||
FileUtils.rm_f(filename)
|
FileUtils.rm_f(filename)
|
||||||
|
@ -369,16 +371,17 @@ class TracesController < ApplicationController
|
||||||
|
|
||||||
begin
|
begin
|
||||||
# Clear the inserted flag to make the import daemon load the trace
|
# Clear the inserted flag to make the import daemon load the trace
|
||||||
@trace.inserted = false
|
trace.inserted = false
|
||||||
@trace.save!
|
trace.save!
|
||||||
rescue StandardError
|
rescue StandardError
|
||||||
# Remove the file as we have failed to update the database
|
# Remove the file as we have failed to update the database
|
||||||
FileUtils.rm_f(@trace.trace_name)
|
FileUtils.rm_f(trace.trace_name)
|
||||||
|
|
||||||
# Pass the exception on
|
# Pass the exception on
|
||||||
raise
|
raise
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Finally save the user's preferred privacy level
|
# Finally save the user's preferred privacy level
|
||||||
if pref = current_user.preferences.where(:k => "gps.trace.visibility").first
|
if pref = current_user.preferences.where(:k => "gps.trace.visibility").first
|
||||||
|
@ -387,6 +390,8 @@ class TracesController < ApplicationController
|
||||||
else
|
else
|
||||||
current_user.preferences.create(:k => "gps.trace.visibility", :v => visibility)
|
current_user.preferences.create(:k => "gps.trace.visibility", :v => visibility)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trace
|
||||||
end
|
end
|
||||||
|
|
||||||
def offline_warning
|
def offline_warning
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue