]> git.openstreetmap.org Git - rails.git/commitdiff
various gpx bits
authorSteve Coast <steve@asklater.com>
Thu, 10 May 2007 22:14:11 +0000 (22:14 +0000)
committerSteve Coast <steve@asklater.com>
Thu, 10 May 2007 22:14:11 +0000 (22:14 +0000)
app/controllers/trace_controller.rb
app/models/trace.rb
lib/daemons/gpx_import.rb

index b4e9d7f51aeadfbfc4306d5a4aabf50914cca694..541e0f840fe460e4c6ded2c180d62d4660d04b56 100644 (file)
@@ -123,7 +123,7 @@ class TraceController < ApplicationController
   def data
     trace = Trace.find(params[:id])
     if trace.public? or (@user and @user == trace.user)
-      send_data(File.open("/tmp/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
+      send_data(File.open("/home/osm/gpx/#{trace.id}.gpx",'r').read , :filename => "#{trace.id}.gpx", :type => 'text/plain', :disposition => 'inline')
     end
   end
 
@@ -188,7 +188,7 @@ class TraceController < ApplicationController
     @trace.timestamp = Time.now
 
     if @trace.save
-      saved_filename = "/tmp/#{@trace.id}.gpx"
+      saved_filename = "/home/osm/gpx/#{@trace.id}.gpx"
       File.rename(filename, saved_filename)
       logger.info("id is #{@trace.id}")
       flash[:notice] = "Your GPX file has been uploaded and is awaiting insertion in to the database. This will usually happen within half an hour, and an email will be sent to you on completion."
index 2ebf08e85dfed1d3bd37ad3e4666f3b1145bc9de..0d9e8861d1d8bbb4c94222a28a835270705626bd 100644 (file)
@@ -7,6 +7,7 @@ class Trace < ActiveRecord::Base
   
   belongs_to :user
   has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :destroy
+  has_many :points, :class_name => 'Tracepoint', :foreign_key => 'gpx_id', :dependent => :destroy
 
   def tagstring=(s)
     self.tags = s.split().collect {|tag|
@@ -47,12 +48,12 @@ class Trace < ActiveRecord::Base
   
   # FIXME change to permanent filestore area
   def large_picture_name
-    "/tmp/#{id}.gif"
+    "/home/osm/icons/#{id}.gif"
   end
 
   # FIXME change to permanent filestore area
   def icon_picture_name
-    "/tmp/#{id}_icon.gif"
+    "/home/osm/icons/#{id}_icon.gif"
   end
 
   def to_xml_node
index 9e7e906c846ca6ff1abafc0ba68ea39301a8c8a1..82232e496c3e47ae5bf2a94bd911d7a12b7eb7d8 100755 (executable)
@@ -13,19 +13,19 @@ end
 logger = ActiveRecord::Base.logger
 
 while($running) do
-  
+
   ActiveRecord::Base.logger.info("GPX Import daemon wake @ #{Time.now}.")
 
-  traces = Trace.find(:all) #, :conditions => ['inserted = ?', false])
+  traces = Trace.find(:all, :conditions => ['inserted = ?', false])
 
   if traces and traces.length > 0
     traces.each do |trace|
       begin
 
         logger.info("GPX Import importing #{trace.name} (#{trace.id}) from #{trace.user.email}")
-\r
+        \r
         # TODO *nix specific, could do to work on windows... would be functionally inferior though - check for '.gz'
-        gzipped = `file -b /tmp/#{trace.id}.gpx`.chomp =~/^gzip/\r
+        gzipped = `file -b /home/osm/gpx/#{trace.id}.gpx`.chomp =~/^gzip/\r
 
         if gzipped
           logger.info("gzipped")
@@ -60,12 +60,12 @@ while($running) do
           min_lat = Tracepoint.minimum('latitude', :conditions => ['gpx_id = ?', trace.id])
           max_lon = Tracepoint.maximum('longitude', :conditions => ['gpx_id = ?', trace.id])
           min_lon = Tracepoint.minimum('longitude', :conditions => ['gpx_id = ?', trace.id])
-          
+
           max_lat = max_lat.to_f / 1000000
           min_lat = min_lat.to_f / 1000000
           max_lon = max_lon.to_f / 1000000
           min_lon = min_lon.to_f / 1000000
+
           trace.latitude = f_lat
           trace.longitude = f_lon
           trace.large_picture = gpx.get_picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points)
@@ -74,20 +74,28 @@ while($running) do
           trace.inserted = true
           trace.save
 
-          logger.info "done trace #{trace.id} -------------------------------------------------------------------------------"
-    #      Notifier::deliver_gpx_success(trace, gpx.possible_points)
+          logger.info "done trace #{trace.id}"
+          Notifier::deliver_gpx_success(trace, gpx.possible_points)
         else
-          #trace.destroy
-#          Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?')
+          `rm /home/osm/gpx/#{trace.id}.gpx`
+          trace.destroy
+          Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?')
         end
 
       rescue Exception => ex
         logger.info ex
         ex.backtrace.each {|l| logger.info l }
-        #trace.destroy
- #       Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") )
+          `rm /home/osm/gpx/#{trace.id}.gpx`
+          trace.destroy
+          Notifier::deliver_gpx_failure(trace, ex.to_s + ex.backtrace.join("\n") )
       end
     end
   end
+
+  Trace.find(:all, :conditions => ['inserted = ?', false]).each do |trace|
+     `rm /home/osm/gpx/#{trace.id}.gpx`
+     trace.destroy
+  end
+  exit
   sleep 15.minutes
 end