aboutsummaryrefslogtreecommitdiff
path: root/lib/GTFS.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/GTFS.hs')
-rw-r--r--lib/GTFS.hs14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/GTFS.hs b/lib/GTFS.hs
index cb9be2a..4f3a311 100644
--- a/lib/GTFS.hs
+++ b/lib/GTFS.hs
@@ -65,6 +65,8 @@ import Data.Time.LocalTime.TimeZone.Olson (getTimeZoneSeriesFromOlson
import Data.Time.LocalTime.TimeZone.Series (TimeZoneSeries,
timeZoneFromSeries)
import GHC.Float (int2Double)
+import System.OsPath (OsPath, decodeUtf,
+ encodeUtf, (</>))
-- | for some reason this doesn't exist already in cassava
@@ -499,9 +501,9 @@ data GTFS = GTFS
}
-loadRawGtfs :: FilePath -> IO RawGTFS
+loadRawGtfs :: OsPath -> IO RawGTFS
loadRawGtfs path = do
- bytes <- LB.readFile path
+ bytes <- decodeUtf path >>= LB.readFile
let zip = Zip.toArchive bytes
RawGTFS
<$> decodeTable' "stops.txt" zip
@@ -531,7 +533,7 @@ loadRawGtfs path = do
--
-- Note that this additionally needs a path to the machine's timezone info
-- (usually /etc/zoneinfo or /usr/shared/zoneinfo)
-loadGtfs :: FilePath -> FilePath -> IO GTFS
+loadGtfs :: OsPath -> OsPath -> IO GTFS
loadGtfs path zoneinforoot = do
shallow@RawGTFS{..} <- loadRawGtfs path
-- TODO: sort these according to sequence numbers
@@ -541,7 +543,11 @@ loadGtfs path zoneinforoot = do
(fromMaybe mempty rawShapePoints)
-- all agencies must have the same timezone, so just take the first's
let tzname = agencyTimezone $ V.head rawAgencies
- tzseries <- getTimeZoneSeriesFromOlsonFile (zoneinforoot<>T.unpack tzname)
+
+ tzsuffix <- encodeUtf (T.unpack tzname)
+ tzseries <- decodeUtf (zoneinforoot </> tzsuffix)
+ >>= getTimeZoneSeriesFromOlsonFile
+
let agencies' = fmap (\a -> a { agencyTimezone = tzseries }) rawAgencies
routes' <- V.mapM (pushRoute agencies') rawRoutes
<&> mapFromVector routeId