input('show', null); /* * If there is a file in the local cache that is less than 1–3 hours old * (depending on whether it was actively tracking at last check), use that. */ $tripFileName = ( $tripId ?? config('app.current_trip_id') ) . '.json'; if (Storage::disk('local')->exists($tripFileName)) { $cachedData = json_decode(Storage::disk('local')->get($tripFileName)); if ($cachedData->trip->is_active) { $cachedDataUpdatedAt = new DateTime($cachedData->trip->updated_at); $now = new DateTime(); if (intval(($now->getTimestamp() - $cachedDataUpdatedAt->getTimestamp()) / 3600) <= (($cachedData->trip->is_tracking) ? 1 : 3)) { return view('tracker', ['trip' => $cachedData->trip, 'showAllCheckins' => ($viewMode === 'all')]); } } else { return view('tracker', ['trip' => $cachedData->trip, 'showAllCheckins' => ($viewMode === 'all')]); } } /* * Otherwise, download the latest tracking data. */ $client = new Client([ 'base_uri' => 'https://app.wayward.travel/', 'timeout' => 3.0 ]); $response = $client->get('trip/'.($tripId ?? config('app.current_trip_id')).'/user/zmld8ko6qy7d9j3xvq10/json'); if ($response->getStatusCode() == 200) { $data = json_decode($response->getBody()); // Cache the downloaded file if it does not exist locally. if (Storage::disk('local')->missing($tripFileName)) { Storage::disk('local')->put($tripFileName, json_encode($data)); } else { $cachedData = json_decode(Storage::disk('local')->get($tripFileName)); if ($data->trip->updated_at !== $cachedData->trip->updated_at) { Storage::disk('local')->put($tripFileName, json_encode($data)); // TODO: Cache photos locally } else { $data = $cachedData; } } return view('tracker', ['trip' => $data->trip, 'showAllCheckins' => ($viewMode === 'all')]); } else { return 'Something went wrong'; } })->where('tripId', '[0-9a-z]{20}');