use of com.appspot.tbatv_prod_hrd.model.ModelsMobileApiMessagesModelPreferenceMessage in project the-blue-alliance-android by the-blue-alliance.
the class MyTbaDatafeed method updateModelSettings.
@WorkerThread
@ModelPrefsResult
public int updateModelSettings(ModelNotificationFavoriteSettings settings) {
String modelKey = settings.modelKey;
List<String> notifications = settings.enabledNotifications;
boolean isFavorite = settings.isFavorite;
String user = mAccountController.getSelectedAccount();
String key = MyTBAHelper.createKey(user, modelKey);
ModelType modelType = settings.modelType;
ModelsMobileApiMessagesModelPreferenceMessage request = new ModelsMobileApiMessagesModelPreferenceMessage();
request.model_key = modelKey;
request.device_key = mGcmController.getRegistrationId();
request.notifications = notifications;
request.favorite = isFavorite;
request.model_type = modelType.getEnum();
SubscriptionsTable subscriptionsTable = mDb.getSubscriptionsTable();
FavoritesTable favoritesTable = mDb.getFavoritesTable();
// Determine if we have to do anything
List<String> existingNotificationsList = new ArrayList<>();
Subscription existingSubscription = subscriptionsTable.get(key);
if (existingSubscription != null) {
existingNotificationsList = existingSubscription.getNotificationList();
}
Collections.sort(notifications);
Collections.sort(existingNotificationsList);
TbaLogger.d("New notifications: " + notifications.toString());
TbaLogger.d("Existing notifications: " + existingNotificationsList.toString());
boolean notificationsHaveChanged = !(notifications.equals(existingNotificationsList));
// and if the existing notification mSettings equal the new ones, do nothing.
if (((isFavorite && favoritesTable.exists(key)) || (!isFavorite && !favoritesTable.exists(key))) && !notificationsHaveChanged) {
// nothing has changed, no-op
return MODEL_PREF_NOOP;
} else {
try {
String authHeader = mAuthController.getAuthHeader();
Response<ModelsMobileApiMessagesBaseResponse> response = mModelApi.setPreferences(authHeader, request).execute();
if (response == null) {
TbaLogger.w("Null response for mytba update");
return MODEL_PREF_FAIL;
}
if (!response.isSuccessful()) {
TbaLogger.w("mytba update error " + response.code() + ": " + response.message());
return MODEL_PREF_FAIL;
}
ModelsMobileApiMessagesBaseResponse prefResponse = response.body();
TbaLogger.d("Mytba result: " + prefResponse.code + "/" + prefResponse.message);
if (response.code() == 401 || prefResponse.code == 401) {
TbaLogger.e(prefResponse.message);
return MODEL_PREF_FAIL;
}
JsonObject responseJson = JSONHelper.getasJsonObject(prefResponse.message);
if (responseJson == null || responseJson.isJsonNull()) {
return MODEL_PREF_FAIL;
}
JsonObject fav = responseJson.get("favorite").getAsJsonObject(), sub = responseJson.get("subscription").getAsJsonObject();
int favCode = fav.get("code").getAsInt(), subCode = sub.get("code").getAsInt();
if (subCode == 200) {
// Request was successful, update the local databases
if (notifications.isEmpty()) {
subscriptionsTable.remove(key);
} else if (subscriptionsTable.exists(key)) {
subscriptionsTable.update(key, new Subscription(user, modelKey, notifications, modelType.getEnum()));
} else {
subscriptionsTable.add(new Subscription(user, modelKey, notifications, modelType.getEnum()));
}
} else if (subCode == 500) {
Toast.makeText(mApplicationContext, mApplicationContext.getString(R.string.mytba_error, subCode, sub.get("message").getAsString()), Toast.LENGTH_SHORT).show();
}
if (favCode == 200) {
if (!isFavorite) {
favoritesTable.remove(key);
} else if (!favoritesTable.exists(key)) {
favoritesTable.add(new Favorite(user, modelKey, modelType.getEnum()));
}
} else if (favCode == 500) {
Toast.makeText(mApplicationContext, mApplicationContext.getString(R.string.mytba_error, favCode, fav.get("message").getAsString()), Toast.LENGTH_SHORT).show();
}
return MODEL_PREF_SUCCESS;
} catch (IOException e) {
TbaLogger.e("IO Exception while updating model preferences!", e);
e.printStackTrace();
return MODEL_PREF_FAIL;
}
}
}
Aggregations