More work on mobile UI, changed to network 10 start date
[bus.git] / busui / schedule_viewer.py
blob:a/busui/schedule_viewer.py -> blob:b/busui/schedule_viewer.py
--- a/busui/schedule_viewer.py
+++ b/busui/schedule_viewer.py
@@ -88,8 +88,11 @@
 def StopToTuple(stop):
   """Return tuple as expected by javascript function addStopMarkerFromList"""
   return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
-          float(stop.stop_lon), stop.location_type)
-
+          float(stop.stop_lon), stop.location_type, stop.stop_code)
+def StopZoneToTuple(stop):
+  """Return tuple as expected by javascript function addStopMarkerFromList"""
+  return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
+          float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id)
 
 class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
   def do_GET(self):
@@ -256,7 +259,12 @@
     schedule = self.server.schedule
     result = []
     for r in schedule.GetRouteList():
-      result.append( (r.route_id, r.route_short_name, r.route_long_name) )
+      servicep = None
+      for t in schedule.GetTripList():
+        if t.route_id == r.route_id:
+          servicep = t.service_period
+          break
+      result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) )
     result.sort(key = lambda x: x[1:3])
     return result
 
@@ -273,8 +281,6 @@
     for t in schedule.GetTripList():
       if t.route_id == query:
         result.append ( (t.GetStartTime(), t.trip_id) )
-        """ UGH fails for 300s """
-    """return result"""
     return sorted(result, key=lambda trip: trip[0])
   
   def handle_json_GET_triprows(self, params):
@@ -298,11 +304,11 @@
     except KeyError:
        # if a non-existent trip is searched for, the return nothing
       return
-    time_stops = trip.GetTimeStops()
+    time_stops = trip.GetTimeInterpolatedStops()
     stops = []
     times = []
-    for arr,dep,stop in time_stops:
-      stops.append(StopToTuple(stop))
+    for arr,ts,is_timingpoint in time_stops:
+      stops.append(StopToTuple(ts.stop))
       times.append(arr)
     return [stops, times]
 
@@ -363,7 +369,34 @@
     query = params.get('q', None).lower()
     matches = []
     for s in schedule.GetStopList():
-      if s.stop_id.lower().find(query) != -1 or s.stop_name.lower().find(query) != -1:
+      if s.stop_name.lower().find(query) != -1 or s.stop_code.lower().find(query) != -1:
+        matches.append(StopToTuple(s))
+    return matches
+
+  def handle_json_GET_stopnamesearch(self, params):
+    schedule = self.server.schedule
+    query = params.get('q', None).lower()
+    matches = []
+    for s in schedule.GetStopList():
+      if s.stop_name.lower().find(query) != -1:
+        matches.append(StopToTuple(s))
+    return matches
+  
+  def handle_json_GET_stopcodesearch(self, params):
+    schedule = self.server.schedule
+    query = params.get('q', None).lower()
+    matches = []
+    for s in schedule.GetStopList():
+      if s.stop_code.lower().find(query) != -1:
+        matches.append(StopToTuple(s))
+    return matches
+
+  def handle_json_GET_stopzonesearch(self, params):
+    schedule = self.server.schedule
+    query = params.get('q', None).lower()
+    matches = []
+    for s in schedule.GetStopList():
+      if s.zone_id != None and s.zone_id.lower().find(query) != -1:
         matches.append(StopToTuple(s))
     return matches
 
@@ -388,7 +421,6 @@
     # Need make a tuple to find correct bisect point
     time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):]
     time_trips = time_trips[:15]
-    # TODO: combine times for a route to show next 2 departure times
     result = []
     for time, (trip, index), tp in time_trips:
       headsign = None
@@ -408,8 +440,9 @@
         if len(trip_name):
           trip_name += " - "
         trip_name += route.route_long_name
-      if headsign:
-        trip_name += " (Direction: %s)" % headsign
+        # comment out directions because we already have them in the long name
+      #if headsign:
+      #  trip_name += " (Direction: %s)" % headsign
       if service_period == None or trip.service_id == service_period:
         result.append((time, (trip.trip_id, trip_name, trip.service_id), tp))
     return result