diff --git a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java index f0e5f6b8..33bbb5bb 100644 --- a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java +++ b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java @@ -64,6 +64,8 @@ import org.mtransit.commons.GTFSCommons; import org.mtransit.commons.SourceUtils; +import java.io.IOException; +import java.io.InterruptedIOException; import java.net.HttpURLConnection; import java.net.SocketException; import java.net.UnknownHostException; @@ -975,15 +977,29 @@ private List loadAgencyServiceUpdateDataFromWWW(@NonNull Context setServiceUpdateLastUpdateCode(567); // SSL certificate not trusted (on this device) getStorage(context).saveServiceUpdateLastUpdateMs(TimeUtils.currentTimeMillis()); return null; + } catch (InterruptedIOException iioe) { + MTLog.w(this, iioe, "Connection timeout!"); + setServiceUpdateLastUpdateCode(567); + getStorage(context).saveServiceUpdateLastUpdateMs(TimeUtils.currentTimeMillis()); + return null; } catch (UnknownHostException uhe) { if (MTLog.isLoggable(android.util.Log.DEBUG)) { MTLog.w(this, uhe, "No Internet Connection!"); } else { MTLog.w(this, "No Internet Connection!"); } + setServiceUpdateLastUpdateCode(567); + getStorage(context).saveServiceUpdateLastUpdateMs(TimeUtils.currentTimeMillis()); return null; } catch (SocketException se) { MTLog.w(LOG_TAG, se, "No Internet Connection!"); + setServiceUpdateLastUpdateCode(567); + getStorage(context).saveServiceUpdateLastUpdateMs(TimeUtils.currentTimeMillis()); + return null; + } catch (IOException ioe) { + MTLog.w(this, ioe, "I/O error!"); + setServiceUpdateLastUpdateCode(567); + getStorage(context).saveServiceUpdateLastUpdateMs(TimeUtils.currentTimeMillis()); return null; } catch (Exception e) { // Unknown error MTLog.e(LOG_TAG, e, "INTERNAL ERROR: Unknown Exception"); @@ -1711,6 +1727,8 @@ private void initAllDbTables(@NonNull SQLiteDatabase db) { db.execSQL(T_GTFS_REAL_TIME_VEHICLE_LOCATION_SQL_CREATE); db.execSQL(T_GTFS_REAL_TIME_SERVICE_UPDATE_SQL_CREATE); storage.saveServiceUpdateLastUpdateMs(null); + storage.saveTripUpdateLastUpdateMs(null); + storage.saveVehicleLocationLastUpdateMs(null); } } } diff --git a/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt b/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt index c852b4b7..a8aa3f22 100644 --- a/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt @@ -1,7 +1,6 @@ package org.mtransit.android.commons.provider.ca.info.stm import android.content.Context -import android.util.Log import androidx.annotation.VisibleForTesting import org.mtransit.android.commons.Constants import org.mtransit.android.commons.HtmlUtils @@ -231,7 +230,7 @@ object StmInfoServiceUpdateProvider : MTLog.Loggable { getStorage(context).saveServiceUpdateLastUpdate(TimeUtilsK.currentInstant()) return null } catch (uhe: UnknownHostException) { - if (MTLog.isLoggable(Log.DEBUG)) { + if (MTLog.isLoggable(android.util.Log.DEBUG)) { MTLog.w(this@StmInfoServiceUpdateProvider, uhe, "No Internet Connection!") } else { MTLog.w(this@StmInfoServiceUpdateProvider, "No Internet Connection!") diff --git a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealTimeStorage.kt b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealTimeStorage.kt index 7960cedb..4039c997 100644 --- a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealTimeStorage.kt +++ b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealTimeStorage.kt @@ -35,8 +35,11 @@ class GtfsRealTimeStorage( prefLcl.getLong(PREF_KEY_TRIP_UPDATE_LAST_UPDATE_MS, default) @WorkerThread - fun saveTripUpdateLastUpdateMs(lastUpdateInMs: Long) { - prefLcl.edit { putLong(PREF_KEY_TRIP_UPDATE_LAST_UPDATE_MS, lastUpdateInMs) } + fun saveTripUpdateLastUpdateMs(lastUpdateInMs: Long?) { + prefLcl.edit { + lastUpdateInMs?.let { putLong(PREF_KEY_TRIP_UPDATE_LAST_UPDATE_MS, it) } + ?: remove(PREF_KEY_TRIP_UPDATE_LAST_UPDATE_MS) + } } @WorkerThread @@ -77,8 +80,11 @@ class GtfsRealTimeStorage( prefLcl.getLong(PREF_KEY_VEHICLE_LOCATION_LAST_UPDATE_MS, default) @WorkerThread - fun saveVehicleLocationLastUpdateMs(lastUpdateInMs: Long) { - prefLcl.edit { putLong(PREF_KEY_VEHICLE_LOCATION_LAST_UPDATE_MS, lastUpdateInMs) } + fun saveVehicleLocationLastUpdateMs(lastUpdateInMs: Long?) { + prefLcl.edit { + lastUpdateInMs?.let { putLong(PREF_KEY_VEHICLE_LOCATION_LAST_UPDATE_MS, it) } + ?: remove(PREF_KEY_VEHICLE_LOCATION_LAST_UPDATE_MS) + } } @WorkerThread diff --git a/src/main/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProvider.kt b/src/main/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProvider.kt index 5e822fb5..bb2b2075 100644 --- a/src/main/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProvider.kt @@ -2,7 +2,6 @@ package org.mtransit.android.commons.provider.status import android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND import android.content.Context -import android.util.Log import com.google.transit.realtime.headerOrNull import org.mtransit.android.commons.Constants import org.mtransit.android.commons.MTLog @@ -37,6 +36,7 @@ import org.mtransit.android.commons.provider.gtfs.storage import org.mtransit.commons.SourceUtils import java.io.File import java.io.IOException +import java.io.InterruptedIOException import java.net.HttpURLConnection import java.net.SocketException import java.net.UnknownHostException @@ -46,8 +46,8 @@ import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds import com.google.transit.realtime.GtfsRealtime.FeedMessage as GFeedMessage -import com.google.transit.realtime.GtfsRealtime.TripUpdate as GTripUpdate import com.google.transit.realtime.GtfsRealtime.TripDescriptor.ScheduleRelationship as GTDScheduleRelationship +import com.google.transit.realtime.GtfsRealtime.TripUpdate as GTripUpdate object GTFSRealTimeTripUpdatesProvider : MTLog.Loggable { @@ -453,15 +453,29 @@ object GTFSRealTimeTripUpdatesProvider : MTLog.Loggable { storage.saveTripUpdateLastUpdateCode(567) // SSL certificate not trusted (on this device) storage.saveTripUpdateLastUpdateMs(TimeUtils.currentTimeMillis()) return false + } catch (iioe: InterruptedIOException) { + MTLog.w(LOG_TAG, iioe, "Connection timeout!") + storage.saveTripUpdateLastUpdateCode(567) + storage.saveTripUpdateLastUpdateMs(TimeUtils.currentTimeMillis()) + return false } catch (uhe: UnknownHostException) { - if (MTLog.isLoggable(Log.DEBUG)) { + if (MTLog.isLoggable(android.util.Log.DEBUG)) { MTLog.w(LOG_TAG, uhe, "No Internet Connection!") } else { MTLog.w(LOG_TAG, "No Internet Connection!") } + storage.saveTripUpdateLastUpdateCode(567) + storage.saveTripUpdateLastUpdateMs(TimeUtils.currentTimeMillis()) return false } catch (se: SocketException) { MTLog.w(LOG_TAG, se, "No Internet Connection!") + storage.saveTripUpdateLastUpdateCode(567) + storage.saveTripUpdateLastUpdateMs(TimeUtils.currentTimeMillis()) + return false + } catch (ioe: IOException) { + MTLog.w(LOG_TAG, ioe, "I/O error!") + storage.saveTripUpdateLastUpdateCode(567) + storage.saveTripUpdateLastUpdateMs(TimeUtils.currentTimeMillis()) return false } catch (e: Exception) { // Unknown error MTLog.e(LOG_TAG, e, "INTERNAL ERROR: Unknown Exception") diff --git a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt index a27cc9ca..97cfe75e 100644 --- a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt @@ -36,6 +36,8 @@ import org.mtransit.android.commons.provider.gtfs.storage import org.mtransit.android.commons.provider.vehiclelocations.VehicleLocationProvider.Companion.getCachedVehicleLocationsS import org.mtransit.android.commons.provider.vehiclelocations.model.VehicleLocation import org.mtransit.android.commons.secsToInstant +import java.io.IOException +import java.io.InterruptedIOException import java.net.HttpURLConnection import java.net.SocketException import java.net.UnknownHostException @@ -248,15 +250,29 @@ object GTFSRealTimeVehiclePositionsProvider : MTLog.Loggable { storage.saveVehicleLocationLastUpdateCode(567) // SSL certificate not trusted (on this device) storage.saveVehicleLocationLastUpdateMs(TimeUtils.currentTimeMillis()) return null + } catch (iioe: InterruptedIOException) { + MTLog.w(LOG_TAG, iioe, "Connection timeout!") + storage.saveVehicleLocationLastUpdateCode(567) + storage.saveVehicleLocationLastUpdateMs(TimeUtils.currentTimeMillis()) + return null } catch (uhe: UnknownHostException) { if (MTLog.isLoggable(android.util.Log.DEBUG)) { MTLog.w(LOG_TAG, uhe, "No Internet Connection!") } else { MTLog.w(LOG_TAG, "No Internet Connection!") } + storage.saveVehicleLocationLastUpdateCode(567) + storage.saveVehicleLocationLastUpdateMs(TimeUtils.currentTimeMillis()) return null } catch (se: SocketException) { MTLog.w(LOG_TAG, se, "No Internet Connection!") + storage.saveVehicleLocationLastUpdateCode(567) + storage.saveVehicleLocationLastUpdateMs(TimeUtils.currentTimeMillis()) + return null + } catch (ioe: IOException) { + MTLog.w(LOG_TAG, ioe, "I/O error!") + storage.saveVehicleLocationLastUpdateCode(567) + storage.saveVehicleLocationLastUpdateMs(TimeUtils.currentTimeMillis()) return null } catch (e: Exception) { // Unknown error MTLog.e(LOG_TAG, e, "INTERNAL ERROR: Unknown Exception")