From 4c848f8ac8625345454dcdc00746c66fdd8c47dc Mon Sep 17 00:00:00 2001 From: tom79 Date: Fri, 31 May 2019 17:25:17 +0200 Subject: [PATCH] Fix issue #933 --- .../java/app/fedilab/android/client/API.java | 24 ++++++++++--------- .../app/fedilab/android/client/GNUAPI.java | 3 ++- .../android/sqlite/TimelineCacheDAO.java | 10 ++------ 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 8242a4575..698d6a66c 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -819,7 +819,8 @@ public class API { String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s", statusId)), 60, null, prefKeyOauthTokenT); Status status = parseStatuses(context, new JSONObject(response)); SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - new TimelineCacheDAO(context, db).update(status.getId(), response); + Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); + new TimelineCacheDAO(context, db).update(status.getId(), response, account.getId(), account.getInstance()); statuses.add(status); } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); @@ -1078,7 +1079,7 @@ public class API { String response = httpsConnection.get(getAbsoluteUrl("/timelines/home"), 60, params, prefKeyOauthTokenT); apiResponse.setSince_id(httpsConnection.getSince_id()); apiResponse.setMax_id(httpsConnection.getMax_id()); - statuses = parseStatuses(context, new JSONArray(response), true); + statuses = parseStatusesForCache(context, new JSONArray(response)); } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); } catch (NoSuchAlgorithmException e) { @@ -2203,7 +2204,8 @@ public class API { intentBC.putExtras(b); LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - new TimelineCacheDAO(context, db).update(targetedId, resp); + Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); + new TimelineCacheDAO(context, db).update(targetedId, resp, account.getId(), account.getInstance()); } } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); @@ -2366,8 +2368,9 @@ public class API { intentBC.putExtras(b); SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); Status alreadyCached = new TimelineCacheDAO(context, db).getSingle(status.getId()); + Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); if (alreadyCached != null) { - new TimelineCacheDAO(context, db).update(status.getId(), response); + new TimelineCacheDAO(context, db).update(status.getId(), response, account.getId(), account.getInstance()); } LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); return parsePoll(context, new JSONObject(response)); @@ -3856,7 +3859,7 @@ public class API { * @param jsonArray JSONArray * @return List */ - private static List parseStatuses(Context context, JSONArray jsonArray, boolean cached){ + private List parseStatusesForCache(Context context, JSONArray jsonArray){ List statuses = new ArrayList<>(); try { @@ -3865,12 +3868,11 @@ public class API { JSONObject resobj = jsonArray.getJSONObject(i); Status status = parseStatuses(context, resobj); - if( cached) { - SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - Status alreadyCached = new TimelineCacheDAO(context, db).getSingle(status.getId()); - if (alreadyCached == null) { - new TimelineCacheDAO(context, db).insert(status.getId(), resobj.toString()); - } + SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + Status alreadyCached = new TimelineCacheDAO(context, db).getSingle(status.getId()); + if (alreadyCached == null) { + Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); + new TimelineCacheDAO(context, db).insert(status.getId(), resobj.toString(), account.getId(), account.getInstance()); } i++; statuses.add(status); diff --git a/app/src/main/java/app/fedilab/android/client/GNUAPI.java b/app/src/main/java/app/fedilab/android/client/GNUAPI.java index 483f6df4c..be9e588be 100644 --- a/app/src/main/java/app/fedilab/android/client/GNUAPI.java +++ b/app/src/main/java/app/fedilab/android/client/GNUAPI.java @@ -1395,7 +1395,8 @@ public class GNUAPI { intentBC.putExtras(b); LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - new TimelineCacheDAO(context, db).update(targetedId, resp); + Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); + new TimelineCacheDAO(context, db).update(targetedId, resp, account.getId(), account.getToken()); }else if( statusAction == API.StatusAction.UNSTATUS){ SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); new TimelineCacheDAO(context, db).remove(targetedId); diff --git a/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java b/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java index 145863a46..cd7f47186 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java +++ b/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java @@ -53,10 +53,7 @@ public class TimelineCacheDAO { * Insert a status in database * @return boolean */ - public long insert(String statusId, String jsonString) { - SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - String instance = Helper.getLiveInstance(context); + public long insert(String statusId, String jsonString, String userId, String instance) { ContentValues values = new ContentValues(); values.put(Sqlite.COL_INSTANCE, instance); values.put(Sqlite.COL_STATUS_ID, statusId); @@ -78,10 +75,7 @@ public class TimelineCacheDAO { /** * Update a status in database */ - public void update(String statusId, String jsonString) { - SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - String instance = Helper.getLiveInstance(context); + public void update(String statusId, String jsonString, String userId, String instance) { ContentValues values = new ContentValues(); values.put(Sqlite.COL_DATE, Helper.dateToString(new Date())); values.put(Sqlite.COL_CACHE, jsonString);