diff --git a/app/src/main/java/awais/instagrabber/viewmodels/ProfileFragmentViewModel.kt b/app/src/main/java/awais/instagrabber/viewmodels/ProfileFragmentViewModel.kt
index 3acd3e66..5cc85b29 100644
--- a/app/src/main/java/awais/instagrabber/viewmodels/ProfileFragmentViewModel.kt
+++ b/app/src/main/java/awais/instagrabber/viewmodels/ProfileFragmentViewModel.kt
@@ -222,7 +222,7 @@ class ProfileFragmentViewModel(
private suspend fun fetchUser(
currentUser: User?,
stateUsername: String,
- ): User {
+ ): User? {
if (currentUser != null) {
// logged in
val tempUser = userRepository.getUsernameInfo(stateUsername)
diff --git a/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt b/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt
index c151bd31..e54b6ec2 100644
--- a/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt
+++ b/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt
@@ -178,51 +178,59 @@ open class GraphQLRepository(private val service: GraphQLService) {
// TODO convert string response to a response class
open suspend fun fetchUser(
username: String,
- ): User {
+ ): User? {
val response = service.getUser(username)
- val body = JSONObject(response
- .split("").get(0)
- .trim().replace(Regex("\\};$"), "}"))
- val userJson = body
- .getJSONObject("entry_data")
- .getJSONArray("ProfilePage")
- .getJSONObject(0)
- .getJSONObject("graphql")
- .getJSONObject(Constants.EXTRAS_USER)
- val isPrivate = userJson.getBoolean("is_private")
- val id = userJson.optLong(Constants.EXTRAS_ID, 0)
- val timelineMedia = userJson.getJSONObject("edge_owner_to_timeline_media")
- // if (timelineMedia.has("edges")) {
- // final JSONArray edges = timelineMedia.getJSONArray("edges");
- // }
- var url: String? = userJson.optString("external_url")
- if (url.isNullOrBlank()) url = null
- return User(
- id,
- username,
- userJson.getString("full_name"),
- isPrivate,
- userJson.getString("profile_pic_url_hd"),
- userJson.getBoolean("is_verified"),
- friendshipStatus = FriendshipStatus(
- userJson.optBoolean("followed_by_viewer"),
- userJson.optBoolean("follows_viewer"),
- userJson.optBoolean("blocked_by_viewer"),
- false,
+ try {
+ val body = JSONObject(
+ response
+ .split("").get(0)
+ .trim().replace(Regex("\\};$"), "}")
+ )
+ val userJson = body
+ .getJSONObject("entry_data")
+ .getJSONArray("ProfilePage")
+ .getJSONObject(0)
+ .getJSONObject("graphql")
+ .getJSONObject(Constants.EXTRAS_USER)
+ val isPrivate = userJson.getBoolean("is_private")
+ val id = userJson.optLong(Constants.EXTRAS_ID, 0)
+ val timelineMedia = userJson.getJSONObject("edge_owner_to_timeline_media")
+ // if (timelineMedia.has("edges")) {
+ // final JSONArray edges = timelineMedia.getJSONArray("edges");
+ // }
+ var url: String? = userJson.optString("external_url")
+ if (url.isNullOrBlank()) url = null
+ return User(
+ id,
+ username,
+ userJson.getString("full_name"),
isPrivate,
- userJson.optBoolean("has_requested_viewer"),
- userJson.optBoolean("requested_by_viewer"),
- false,
- userJson.optBoolean("restricted_by_viewer"),
- false
- ),
- mediaCount = timelineMedia.getLong("count"),
- followerCount = userJson.getJSONObject("edge_followed_by").getLong("count"),
- followingCount = userJson.getJSONObject("edge_follow").getLong("count"),
- biography = userJson.getString("biography"),
- externalUrl = url,
- )
+ userJson.getString("profile_pic_url_hd"),
+ userJson.getBoolean("is_verified"),
+ friendshipStatus = FriendshipStatus(
+ userJson.optBoolean("followed_by_viewer"),
+ userJson.optBoolean("follows_viewer"),
+ userJson.optBoolean("blocked_by_viewer"),
+ false,
+ isPrivate,
+ userJson.optBoolean("has_requested_viewer"),
+ userJson.optBoolean("requested_by_viewer"),
+ false,
+ userJson.optBoolean("restricted_by_viewer"),
+ false
+ ),
+ mediaCount = timelineMedia.getLong("count"),
+ followerCount = userJson.getJSONObject("edge_followed_by").getLong("count"),
+ followingCount = userJson.getJSONObject("edge_follow").getLong("count"),
+ biography = userJson.getString("biography"),
+ externalUrl = url,
+ )
+ }
+ catch (e: Exception) {
+ Log.e(TAG, "fetchUser failed", e)
+ return null
+ }
}
// TODO convert string response to a response class