@@ -25,30 +25,53 @@ class Api::UloggerController < ApplicationController
2525 :stroke => "#62a0ea"
2626 }
2727
28+ # params: {"pass" => "pwd", "user" => "user@mail.com"}
2829 def auth
2930 session [ "email" ] = params [ :user ]
3031 render json : { error : false }
3132 end
3233
34+ # Called by the app on first waypoint upload
35+ # params: { "track" => "tom_2026-03-24_11.08" }
36+ # When track name matches "<private_map_id>#<track name>", you can log into an existing map/track
3337 def addtrack
3438 @user = User . find_by ( email : session [ "email" ] )
35- map_id , padded_id = create_numeric_map_id
36- @map = Map . create! ( private_id : padded_id , name : params [ :track ] ,
37- public_id : params [ :track ] ,
38- view_permission : "link" ,
39- edit_permission : "link" ,
40- user : @user )
41- @map . save!
42- render json : { error : false , trackid : map_id }
39+ if params [ :track ] =~ /^(\d +)#(\S +)/
40+ session [ "track_name" ] = $2
41+ @map = Map . find_by ( private_id : $1)
42+ else
43+ session [ "track_name" ] = params [ :track ]
44+ @map = Map . create! ( private_id : random_map_id , name : params [ :track ] ,
45+ view_permission : "link" ,
46+ edit_permission : "link" ,
47+ user : @user )
48+ end
49+ if @map
50+ render json : { error : false , trackid : @map . private_id . to_i }
51+ else
52+ Rails . logger . error ( "Cannot create map for track '#{ params [ :track ] } '" )
53+ render json : { error : true , message : "Invalid trackid" }
54+ end
4355 end
4456
57+ # params: {"altitude" => "384.600006103516", "provider" => "network",
58+ # "trackid" => "123", "accuracy" => "12.3999996185303",
59+ # "lon" => "11.0871855", "time" => "1774346910", "lat" => "49.428361"}
60+ #
61+ # Uses/Creates track with track name from 'addtrack' call before
4562 def addpos
4663 coords = [ params [ :lon ] . to_f , params [ :lat ] . to_f , params [ :altitude ] . to_f . round ( 2 ) ]
47- features = @map . layers . geojson . first . features
4864
49- # if the map has no track yet, create one, else append
50- track = features . line_string . first
51- track ||= Feature . new ( layer : @map . layers . first , geometry : { "coordinates" => [ ] } , properties : TRACK_PROPERTIES )
65+ # Find track layer, fallback to map name which also has the initial track name by default
66+ track_name = session [ "track_name" ] || @map . name
67+ layer = @map . layers . geojson . find { |l | l . name == track_name } || @map . layers . create ( name : track_name )
68+ features = layer . features
69+
70+ # Find track with current name on map, or create new
71+ track = features . line_string . find { |l | l . properties [ 'title' ] == track_name }
72+ track ||= Feature . new ( layer : layer , geometry : { "coordinates" => [ ] } , properties : TRACK_PROPERTIES )
73+ track . update ( properties : track . properties . merge ( { 'title' => track_name } ) )
74+
5275 track_coords = track . geometry [ "coordinates" ] << coords
5376 track . update ( geometry : { "type" => "LineString" ,
5477 "coordinates" => track_coords } )
@@ -96,7 +119,7 @@ def addpos
96119 private
97120
98121 def set_map
99- @map = Map . find_by ( private_id : "%024d" % [ params [ :trackid ] ] )
122+ @map = Map . find_by ( private_id : params [ :trackid ] )
100123 render json : { error : true , message : "Invalid trackid" } unless @map
101124 end
102125
@@ -123,8 +146,8 @@ def image_properties(img)
123146
124147 def location_properties
125148 { "marker-size" : "8" ,
126- "marker-color" : "#ff7800" ,
127- stroke : "#000000" }
149+ "marker-color" : "#ff7800" ,
150+ " stroke" : "#000000" }
128151 end
129152
130153 def description
@@ -138,13 +161,9 @@ def description
138161 end . join ( "\n " )
139162 end
140163
141- # mongoid needs a BSON::ObjectId (24 char hex) as primary key,
142- # which we use as map id currently
143- def create_numeric_map_id
144- id = SecureRandom . rand ( 1 ..JAVA_MAXINT )
145- padded = "%024d" % [ id ]
146- return create_numeric_map_id if Map . exists? ( private_id : padded )
147- [ id , padded ]
164+ # ulogger needs a numeric map id
165+ def random_map_id
166+ SecureRandom . rand ( 1 ..JAVA_MAXINT )
148167 end
149168 end
150169end
0 commit comments