diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/WeatherDatabase.java b/app/src/main/java/de/apps4ics/mountainnavigation/WeatherDatabase.java index 1e4bb1b..18b7625 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/WeatherDatabase.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/WeatherDatabase.java @@ -163,8 +163,7 @@ return rowId; } - //TODO CORE use offset and and check for timestamp - public MyWeather getWeather(double lat, double lon, int offset) { + public MyWeather getWeather(double lat, double lon, long timestamp, int offset) { SQLiteDatabase db = this.getReadableDatabase(); Cursor locCursor = db.query(TABLE_LOCATION, new String[]{"*", "(6371 * acos(cos(radians(" + lat + ")) * cos(radians(" + KEY_LAT + ")) * cos(radians(" + KEY_LON + ") - radians(" + lon + ")) + sin(radians(" + lat + ")) * sin(radians(" + KEY_LAT + ")))) AS distance"}, @@ -185,8 +184,8 @@ Cursor weatherCursor = db.query(TABLE_WEATHER, null, - "WHERE " + KEY_LOCATION_ID + " =?", - new String[]{String.valueOf(locId)}, null, null, null, "1"); + "WHERE " + KEY_LOCATION_ID + " =? AND ABS(" + KEY_TIMESTAMP + "-?) < ?", + new String[]{String.valueOf(locId), String.valueOf(timestamp), String.valueOf(offset*1000*60*60)}, null, null, null, "1"); if(weatherCursor == null) { return null; } @@ -210,6 +209,10 @@ return weather; } + public MyWeather getWeather(double lat, double lon, int offset) { + return getWeather(lat, lon, System.currentTimeMillis(), offset); + } + private ContentValues getLocationValues(MyWeather weather){ ContentValues values = new ContentValues(); values.put(KEY_LAT, weather.getLocation().getLatitude()); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java index 04bfbba..f15bfdd 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java @@ -75,6 +75,8 @@ private static int MAX_DAYS_FORECAST; private static float MIN_WINDY_SPEED; + private final static long DAY_IN_MS = 5184000000l; //1000*60*60*24 + private static Activity activity; private static FragmentManager fragmentManager; @@ -230,8 +232,14 @@ }); } - //TODO CORE public void getForecastCached(double lat, double lon, int days, int offset, OnWeatherRetrieved callback) { + long timestamp = System.currentTimeMillis(); + List weathers = new ArrayList<>(); + for(int i=0; i