diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 65f63b27d..87d02f34f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,6 +55,8 @@ android:exported="false"/> + 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 64a38894f..fee34bb67 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -3195,6 +3195,46 @@ public class API { } + /** + * Retrieves notifications for the authenticated account *synchronously* + * @param max_id String id max + * @return APIResponse + */ + public APIResponse getNotifications( String max_id){ + + HashMap params = new HashMap<>(); + if( max_id != null ) + params.put("max_id", max_id); + params.put("limit","30"); + if( context == null){ + apiResponse = new APIResponse(); + Error error = new Error(); + apiResponse.setError(error); + return apiResponse; + } + List notifications = new ArrayList<>(); + + try { + HttpsConnection httpsConnection = new HttpsConnection(context, this.instance); + String response = httpsConnection.get(getAbsoluteUrl("/notifications"), 15, params, prefKeyOauthTokenT); + apiResponse.setSince_id(httpsConnection.getSince_id()); + apiResponse.setMax_id(httpsConnection.getMax_id()); + notifications = parseNotificationResponse(new JSONArray(response)); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + apiResponse.setNotifications(notifications); + return apiResponse; + } + /** * Retrieves notifications for the authenticated account *synchronously* * @param max_id String id max diff --git a/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java b/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java index 90a824f97..41ee00db9 100644 --- a/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java +++ b/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java @@ -36,9 +36,10 @@ import app.fedilab.android.activities.MainActivity; import app.fedilab.android.client.API; import app.fedilab.android.client.APIResponse; import app.fedilab.android.client.Entities.Account; -import app.fedilab.android.client.Entities.Status; +import app.fedilab.android.client.Entities.Notification; import app.fedilab.android.helper.Helper; import app.fedilab.android.sqlite.AccountDAO; +import app.fedilab.android.sqlite.NotificationCacheDAO; import app.fedilab.android.sqlite.Sqlite; import app.fedilab.android.sqlite.StatusCacheDAO; import es.dmoral.toasty.Toasty; @@ -120,27 +121,27 @@ public class BackupNotificationInDataBaseService extends IntentService { //Starts from the last recorded ID Date sinceDate = new StatusCacheDAO(BackupNotificationInDataBaseService.this, db).getLastTootDateCache(StatusCacheDAO.ARCHIVE_CACHE, userId, instance); String max_id = null; - List backupStatus = new ArrayList<>(); + List backupNotifications = new ArrayList<>(); boolean canContinue = true; do { - APIResponse apiResponse = api.getStatus(userId, max_id); + APIResponse apiResponse = api.getNotifications(max_id); max_id = apiResponse.getMax_id(); - List statuses = apiResponse.getStatuses(); - for(Status tmpStatus : statuses) { - if(sinceDate != null && max_id != null && tmpStatus.getCreated_at().before(sinceDate)){ + List notifications = apiResponse.getNotifications(); + for(Notification tmpNotification : notifications) { + if(sinceDate != null && max_id != null && tmpNotification.getCreated_at().before(sinceDate)){ canContinue = false; break; } - new StatusCacheDAO(BackupNotificationInDataBaseService.this, db).insertStatus(StatusCacheDAO.ARCHIVE_CACHE, tmpStatus, userId, instance); - backupStatus.add(tmpStatus); + new NotificationCacheDAO(BackupNotificationInDataBaseService.this, db).insertNotification(tmpNotification, userId, instance); + backupNotifications.add(tmpNotification); } }while (max_id != null && canContinue); - if(backupStatus.size() > 0){ + if(backupNotifications.size() > 0){ Intent backupIntent = new Intent(Helper.INTENT_BACKUP_FINISH); LocalBroadcastManager.getInstance(this).sendBroadcast(backupIntent); } - message = getString(R.string.data_backup_success, String.valueOf(backupStatus.size())); + message = getString(R.string.data_backup_success, String.valueOf(backupNotifications.size())); Intent mainActivity = new Intent(BackupNotificationInDataBaseService.this, MainActivity.class); mainActivity.putExtra(Helper.INTENT_ACTION, Helper.BACKUP_INTENT); String title = getString(R.string.data_backup_toots, account.getAcct()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d25c7fb7..0d075bef7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -451,6 +451,7 @@ Show pinned No matching result found! Backup toots for %1$s + Backup notifications for %1$s %1$s new toots have been imported No