mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-31 03:25:34 +00:00 
			
		
		
		
	Add GraphQl error handling
This commit is contained in:
		
							parent
							
								
									f7b918d91b
								
							
						
					
					
						commit
						07f41a8a8c
					
				| @ -142,8 +142,8 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
| 
 | ||||
|     @Override | ||||
|     protected void onCreate(@Nullable final Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         RetrofitFactory.setup(this); | ||||
|         super.onCreate(savedInstanceState); | ||||
|         binding = ActivityMainBinding.inflate(getLayoutInflater()); | ||||
|         final String cookie = settingsHelper.getString(Constants.COOKIE); | ||||
|         CookieUtils.setupCookies(cookie); | ||||
| @ -253,7 +253,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
|             Log.e(TAG, "onDestroy: ", e); | ||||
|         } | ||||
|         unbindActivityCheckerService(); | ||||
|          RetrofitFactory.getInstance().destroy(); | ||||
|         RetrofitFactory.getInstance().destroy(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
| @ -853,4 +853,8 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
|     public Toolbar getToolbar() { | ||||
|         return binding.toolbar; | ||||
|     } | ||||
| 
 | ||||
|     public View getRootView() { | ||||
|         return binding.getRoot(); | ||||
|     } | ||||
| } | ||||
| @ -13,15 +13,11 @@ import awais.instagrabber.repositories.NewsRepository; | ||||
| import awais.instagrabber.repositories.responses.AymlResponse; | ||||
| import awais.instagrabber.repositories.responses.AymlUser; | ||||
| import awais.instagrabber.repositories.responses.NewsInboxResponse; | ||||
| import awais.instagrabber.repositories.responses.Notification; | ||||
| import awais.instagrabber.repositories.responses.NotificationArgs; | ||||
| import awais.instagrabber.repositories.responses.NotificationCounts; | ||||
| import awais.instagrabber.repositories.responses.NewsInboxResponse; | ||||
| import awais.instagrabber.repositories.responses.User; | ||||
| import awais.instagrabber.repositories.responses.UserSearchResponse; | ||||
| import awais.instagrabber.repositories.responses.notification.Notification; | ||||
| import awais.instagrabber.repositories.responses.notification.NotificationArgs; | ||||
| import awais.instagrabber.repositories.responses.notification.NotificationCounts; | ||||
| import awais.instagrabber.repositories.responses.User; | ||||
| import awais.instagrabber.repositories.responses.UserSearchResponse; | ||||
| import awais.instagrabber.utils.Constants; | ||||
| import retrofit2.Call; | ||||
| import retrofit2.Callback; | ||||
|  | ||||
| @ -1,16 +1,10 @@ | ||||
| package awais.instagrabber.webservices; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| 
 | ||||
| import com.google.common.collect.ImmutableMap; | ||||
| 
 | ||||
| import awais.instagrabber.repositories.SearchRepository; | ||||
| import awais.instagrabber.repositories.responses.search.SearchResponse; | ||||
| import awais.instagrabber.utils.TextUtils; | ||||
| import retrofit2.Call; | ||||
| import retrofit2.Callback; | ||||
| import retrofit2.Response; | ||||
| import retrofit2.Retrofit; | ||||
| 
 | ||||
| public class SearchService extends BaseService { | ||||
|     private static final String TAG = "LocationService"; | ||||
| @ -20,10 +14,9 @@ public class SearchService extends BaseService { | ||||
|     private static SearchService instance; | ||||
| 
 | ||||
|     private SearchService() { | ||||
|         final Retrofit retrofit = getRetrofitBuilder() | ||||
|                 .baseUrl("https://www.instagram.com") | ||||
|                 .build(); | ||||
|         repository = retrofit.create(SearchRepository.class); | ||||
|         repository = RetrofitFactory.getInstance() | ||||
|                                     .getRetrofitWeb() | ||||
|                                     .create(SearchRepository.class); | ||||
|     } | ||||
| 
 | ||||
|     public static SearchService getInstance() { | ||||
| @ -43,8 +36,8 @@ public class SearchService extends BaseService { | ||||
|         builder.put("context", context); | ||||
|         builder.put("count", "50"); | ||||
|         return repository.search(isLoggedIn | ||||
|                 ? "https://i.instagram.com/api/v1/fbsearch/topsearch_flat/" | ||||
|                 : "https://www.instagram.com/web/search/topsearch/", | ||||
|                 builder.build()); | ||||
|                                  ? "https://i.instagram.com/api/v1/fbsearch/topsearch_flat/" | ||||
|                                  : "https://www.instagram.com/web/search/topsearch/", | ||||
|                                  builder.build()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,13 @@ | ||||
| package awais.instagrabber.webservices.interceptors; | ||||
| 
 | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.StringRes; | ||||
| 
 | ||||
| import com.google.android.material.snackbar.Snackbar; | ||||
| 
 | ||||
| import org.json.JSONObject; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| @ -51,6 +54,16 @@ public class IgErrorsInterceptor implements Interceptor { | ||||
|                 // show dialog? | ||||
|                 Log.e(TAG, "Network error: " + getMessage(errorCode, "The request start-line and/or headers are too large to process.")); | ||||
|                 return; | ||||
|             case 404: | ||||
|                 showErrorDialog(R.string.not_found); | ||||
|                 return; | ||||
|             case 302: // redirect | ||||
|                 final String location = response.header("location"); | ||||
|                 if (location.equals("https://www.instagram.com/accounts/login/")) { | ||||
|                     // rate limited | ||||
|                     showErrorDialog(R.string.rate_limit); | ||||
|                 } | ||||
|                 return; | ||||
|         } | ||||
|         final ResponseBody body = response.body(); | ||||
|         if (body == null) return; | ||||
| @ -67,9 +80,13 @@ public class IgErrorsInterceptor implements Interceptor { | ||||
|                     case "login_required": | ||||
|                         showErrorDialog(R.string.login_required); | ||||
|                         return; | ||||
|                     case "execution failure": | ||||
|                         showSnackbar(message); | ||||
|                         return; | ||||
|                     case "not authorized to view user": // Do we handle this in profile view fragment? | ||||
|                     case "challenge_required": // Since we make users login using browser, we should not be getting this error in api requests | ||||
|                     default: | ||||
|                         showSnackbar(message); | ||||
|                         Log.e(TAG, "checkError: " + bodyString); | ||||
|                         return; | ||||
|                 } | ||||
| @ -88,6 +105,12 @@ public class IgErrorsInterceptor implements Interceptor { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void showSnackbar(final String message) { | ||||
|         final View view = mainActivity.getRootView(); | ||||
|         if (view == null) return; | ||||
|         Snackbar.make(view, message, Snackbar.LENGTH_LONG).show(); | ||||
|     } | ||||
| 
 | ||||
|     @NonNull | ||||
|     private String getMessage(final int errorCode, final String message) { | ||||
|         return String.format("code: %s, internalMessage: %s", errorCode, message); | ||||
|  | ||||
| @ -481,4 +481,6 @@ | ||||
|     <string name="inactive_user">User is inactive!</string> | ||||
|     <string name="crash_report_subject">Barinsta Crash Report</string> | ||||
|     <string name="crash_report_title">Select an email app to send crash logs</string> | ||||
|     <string name="not_found">Not found!</string> | ||||
|     <string name="rate_limit">Your IP has been rate limited by Instagram. Wait for an hour and try again.</string> | ||||
| </resources> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user