diff --git a/app/src/main/java/awais/instagrabber/activities/MainActivity.kt b/app/src/main/java/awais/instagrabber/activities/MainActivity.kt index 39b24edf..90be552a 100644 --- a/app/src/main/java/awais/instagrabber/activities/MainActivity.kt +++ b/app/src/main/java/awais/instagrabber/activities/MainActivity.kt @@ -104,6 +104,7 @@ class MainActivity : BaseLanguageActivity(), FragmentManager.OnBackStackChangedL } } private val mediaRepository: MediaRepository by lazy { MediaRepository.getInstance() } + private val graphQLRepository: GraphQLRepository by lazy { GraphQLRepository.getInstance() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -638,7 +639,7 @@ class MainActivity : BaseLanguageActivity(), FragmentManager.OnBackStackChangedL alertDialog.show() lifecycleScope.launch(Dispatchers.IO) { try { - val media = if (isLoggedIn) mediaRepository.fetch(shortcodeToId(shortCode)) else GraphQLRepository.fetchPost(shortCode) + val media = if (isLoggedIn) mediaRepository.fetch(shortcodeToId(shortCode)) else graphQLRepository.fetchPost(shortCode) withContext(Dispatchers.Main) { if (media == null) { Toast.makeText(applicationContext, R.string.post_not_found, Toast.LENGTH_SHORT).show() diff --git a/app/src/main/java/awais/instagrabber/asyncs/HashtagPostFetchService.java b/app/src/main/java/awais/instagrabber/asyncs/HashtagPostFetchService.java index fd7f1c34..87b38bb7 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/HashtagPostFetchService.java +++ b/app/src/main/java/awais/instagrabber/asyncs/HashtagPostFetchService.java @@ -25,7 +25,7 @@ public class HashtagPostFetchService implements PostFetcher.PostFetchService { this.hashtagModel = hashtagModel; this.isLoggedIn = isLoggedIn; tagsService = isLoggedIn ? TagsService.getInstance() : null; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); } @Override diff --git a/app/src/main/java/awais/instagrabber/asyncs/LocationPostFetchService.java b/app/src/main/java/awais/instagrabber/asyncs/LocationPostFetchService.java index e9b323b1..31b9f90c 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/LocationPostFetchService.java +++ b/app/src/main/java/awais/instagrabber/asyncs/LocationPostFetchService.java @@ -25,7 +25,7 @@ public class LocationPostFetchService implements PostFetcher.PostFetchService { this.locationModel = locationModel; this.isLoggedIn = isLoggedIn; locationService = isLoggedIn ? LocationService.getInstance() : null; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); } @Override diff --git a/app/src/main/java/awais/instagrabber/asyncs/ProfilePostFetchService.java b/app/src/main/java/awais/instagrabber/asyncs/ProfilePostFetchService.java index 92699441..2c609dcb 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/ProfilePostFetchService.java +++ b/app/src/main/java/awais/instagrabber/asyncs/ProfilePostFetchService.java @@ -25,7 +25,7 @@ public class ProfilePostFetchService implements PostFetcher.PostFetchService { public ProfilePostFetchService(final User profileModel, final boolean isLoggedIn) { this.profileModel = profileModel; this.isLoggedIn = isLoggedIn; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); profileService = isLoggedIn ? ProfileService.getInstance() : null; } diff --git a/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java b/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java index 5c7da579..a84f960a 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java +++ b/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java @@ -29,7 +29,7 @@ public class SavedPostFetchService implements PostFetcher.PostFetchService { this.type = type; this.isLoggedIn = isLoggedIn; this.collectionId = collectionId; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); profileService = isLoggedIn ? ProfileService.getInstance() : null; } diff --git a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java index d67471ba..f9f68b91 100644 --- a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java @@ -299,7 +299,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) > 0; tagsService = isLoggedIn ? TagsService.getInstance() : null; storiesRepository = isLoggedIn ? StoriesRepository.Companion.getInstance() : null; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); setHasOptionsMenu(true); } diff --git a/app/src/main/java/awais/instagrabber/fragments/LikesViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/LikesViewerFragment.java index ebdfba44..5b3ca53d 100644 --- a/app/src/main/java/awais/instagrabber/fragments/LikesViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/LikesViewerFragment.java @@ -113,7 +113,7 @@ public final class LikesViewerFragment extends BottomSheetDialogFragment impleme final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie); if (csrfToken == null) return; mediaRepository = isLoggedIn ? MediaRepository.Companion.getInstance() : null; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); // setHasOptionsMenu(true); } diff --git a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java index 4b941186..0f87318f 100644 --- a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java @@ -292,7 +292,7 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) > 0; locationService = isLoggedIn ? LocationService.getInstance() : null; storiesRepository = StoriesRepository.Companion.getInstance(); - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); setHasOptionsMenu(true); } diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index 4f1b7b1e..85b2c908 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -338,7 +338,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe storiesRepository = isLoggedIn ? StoriesRepository.Companion.getInstance() : null; mediaRepository = isLoggedIn ? MediaRepository.Companion.getInstance() : null; userRepository = isLoggedIn ? UserRepository.Companion.getInstance() : null; - graphQLRepository = isLoggedIn ? null : GraphQLRepository.INSTANCE; + graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance(); final Context context = getContext(); if (context == null) return; accountRepository = AccountRepository.getInstance(AccountDataSource.getInstance(context)); diff --git a/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java index b4227844..a8bdedeb 100644 --- a/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java +++ b/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java @@ -121,7 +121,7 @@ public class CommentsViewerViewModel extends ViewModel { }; public CommentsViewerViewModel() { - graphQLRepository = GraphQLRepository.INSTANCE; + graphQLRepository = GraphQLRepository.Companion.getInstance(); final String cookie = settingsHelper.getString(Constants.COOKIE); final String deviceUuid = Utils.settingsHelper.getString(Constants.DEVICE_UUID); final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie); diff --git a/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt b/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt index 1e0b39d9..5c7405cf 100644 --- a/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt +++ b/app/src/main/java/awais/instagrabber/webservices/GraphQLRepository.kt @@ -7,13 +7,11 @@ import awais.instagrabber.repositories.responses.* import awais.instagrabber.utils.Constants import awais.instagrabber.utils.ResponseBodyUtils import awais.instagrabber.utils.extensions.TAG -import awais.instagrabber.webservices.RetrofitFactory.retrofitWeb import org.json.JSONException import org.json.JSONObject import java.util.* -object GraphQLRepository { - private val service: GraphQLService = retrofitWeb.create(GraphQLService::class.java) +class GraphQLRepository(private val service: GraphQLService) { // TODO convert string response to a response class private suspend fun fetch( @@ -145,14 +143,16 @@ object GraphQLRepository { val userModels: MutableList = ArrayList() for (j in 0 until usersLen) { val userObject = users.getJSONObject(j).getJSONObject("node") - userModels.add(User( - userObject.getLong("id"), - userObject.getString("username"), - userObject.optString("full_name"), - userObject.optBoolean("is_private"), - userObject.getString("profile_pic_url"), - userObject.optBoolean("is_verified") - )) + userModels.add( + User( + userObject.getLong("id"), + userObject.getString("username"), + userObject.optString("full_name"), + userObject.optBoolean("is_private"), + userObject.getString("profile_pic_url"), + userObject.optBoolean("is_verified") + ) + ) } return GraphQLUserListFetchResponse(newEndCursor, status, userModels) } @@ -240,7 +240,8 @@ object GraphQLRepository { body.getString("name"), timelineMedia.getLong("count"), if (body.optBoolean("is_following")) FollowingType.FOLLOWING else FollowingType.NOT_FOLLOWING, - null) + null + ) } // TODO convert string response to a response class @@ -263,4 +264,16 @@ object GraphQLRepository { body.optDouble("lat", 0.0) ) } + + companion object { + @Volatile + private var INSTANCE: GraphQLRepository? = null + + fun getInstance(): GraphQLRepository { + return INSTANCE ?: synchronized(this) { + val service: GraphQLService = RetrofitFactory.retrofitWeb.create(GraphQLService::class.java) + GraphQLRepository(service).also { INSTANCE = it } + } + } + } } \ No newline at end of file