mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-31 11:35:34 +00:00 
			
		
		
		
	v17.2
This commit is contained in:
		
							parent
							
								
									8421b498bb
								
							
						
					
					
						commit
						5baf2701b0
					
				| @ -12,8 +12,8 @@ android { | |||||||
|         // REMEMBER TO CHANGE versionCode AS WELL |         // REMEMBER TO CHANGE versionCode AS WELL | ||||||
|         // 16.7 is 32, 16.9 is 35 (34 is public beta) |         // 16.7 is 32, 16.9 is 35 (34 is public beta) | ||||||
| 
 | 
 | ||||||
|         versionCode 37 |         versionCode 38 | ||||||
|         versionName '17.1' |         versionName '17.2' | ||||||
| 
 | 
 | ||||||
|         multiDexEnabled true |         multiDexEnabled true | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -238,15 +238,19 @@ public final class MainHelper implements SwipeRefreshLayout.OnRefreshListener { | |||||||
|             final Object tag = v.getTag(); |             final Object tag = v.getTag(); | ||||||
|             if (tag instanceof FeedStoryModel) { |             if (tag instanceof FeedStoryModel) { | ||||||
|                 final FeedStoryModel feedStoryModel = (FeedStoryModel) tag; |                 final FeedStoryModel feedStoryModel = (FeedStoryModel) tag; | ||||||
|                 StoryModel[] storyModels = feedStoryModel.getStoryModels(); |  | ||||||
|                 final int index = indexOfIntArray(stories, feedStoryModel); |                 final int index = indexOfIntArray(stories, feedStoryModel); | ||||||
|  |                 new iStoryStatusFetcher(feedStoryModel.getStoryMediaId(), null, false, false, result -> { | ||||||
|  |                     if (result != null && result.length > 0) | ||||||
|  |                         main.startActivity(new Intent(main, StoryViewer.class) | ||||||
|  |                             .putExtra(Constants.EXTRAS_STORIES, result) | ||||||
|  |                             .putExtra(Constants.EXTRAS_USERNAME, feedStoryModel.getProfileModel().getUsername()) | ||||||
|  |                             .putExtra(Constants.FEED, stories) | ||||||
|  |                             .putExtra(Constants.FEED_ORDER, index) | ||||||
|  |                         ); | ||||||
|  |                     else Toast.makeText(main, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); | ||||||
|  |                 }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|                 main.startActivity(new Intent(main, StoryViewer.class) |  | ||||||
|                         .putExtra(Constants.EXTRAS_STORIES, storyModels) |  | ||||||
|                         .putExtra(Constants.EXTRAS_USERNAME, feedStoryModel.getProfileModel().getUsername()) |  | ||||||
|                         .putExtra(Constants.FEED, stories) |  | ||||||
|                         .putExtra(Constants.FEED_ORDER, index) |  | ||||||
|                 ); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  | |||||||
| @ -48,7 +48,7 @@ public final class DirectMessages extends BaseLanguageActivity implements SwipeR | |||||||
|                 // todo get request / unseen count from inboxModel |                 // todo get request / unseen count from inboxModel | ||||||
| 
 | 
 | ||||||
|                 final InboxThreadModel[] threads = inboxModel.getThreads(); |                 final InboxThreadModel[] threads = inboxModel.getThreads(); | ||||||
|                 if (threads != null) { |                 if (threads != null && threads.length > 0) { | ||||||
|                     final int oldSize = inboxThreadModelList.size(); |                     final int oldSize = inboxThreadModelList.size(); | ||||||
|                     inboxThreadModelList.addAll(Arrays.asList(threads)); |                     inboxThreadModelList.addAll(Arrays.asList(threads)); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -55,6 +55,7 @@ import awais.instagrabber.BuildConfig; | |||||||
| import awais.instagrabber.R; | import awais.instagrabber.R; | ||||||
| import awais.instagrabber.adapters.StoriesAdapter; | import awais.instagrabber.adapters.StoriesAdapter; | ||||||
| import awais.instagrabber.asyncs.DownloadAsync; | import awais.instagrabber.asyncs.DownloadAsync; | ||||||
|  | import awais.instagrabber.asyncs.i.iStoryStatusFetcher; | ||||||
| import awais.instagrabber.customviews.helpers.SwipeGestureListener; | import awais.instagrabber.customviews.helpers.SwipeGestureListener; | ||||||
| import awais.instagrabber.databinding.ActivityStoryViewerBinding; | import awais.instagrabber.databinding.ActivityStoryViewerBinding; | ||||||
| import awais.instagrabber.interfaces.SwipeEvent; | import awais.instagrabber.interfaces.SwipeEvent; | ||||||
| @ -150,14 +151,18 @@ public final class StoryViewer extends BaseLanguageActivity { | |||||||
|                                     (index == 0 ? null : storyFeed[index - 1]) : |                                     (index == 0 ? null : storyFeed[index - 1]) : | ||||||
|                                     (storyFeed.length == index + 1 ? null : storyFeed[index + 1]); |                                     (storyFeed.length == index + 1 ? null : storyFeed[index + 1]); | ||||||
|                             if (feedStoryModel != null) { |                             if (feedStoryModel != null) { | ||||||
|                                 final StoryModel[] nextStoryModels = feedStoryModel.getStoryModels(); |                                 new iStoryStatusFetcher(feedStoryModel.getStoryMediaId(), null, false, false, result -> { | ||||||
|                                 final Intent newIntent = new Intent(getApplicationContext(), StoryViewer.class) |                                     if (result != null && result.length > 0) { | ||||||
|                                         .putExtra(Constants.EXTRAS_STORIES, nextStoryModels) |                                         final Intent newIntent = new Intent(getApplicationContext(), StoryViewer.class) | ||||||
|                                         .putExtra(Constants.EXTRAS_USERNAME, feedStoryModel.getProfileModel().getUsername()) |                                                 .putExtra(Constants.EXTRAS_STORIES, result) | ||||||
|                                         .putExtra(Constants.FEED, storyFeed) |                                                 .putExtra(Constants.EXTRAS_USERNAME, feedStoryModel.getProfileModel().getUsername()) | ||||||
|                                         .putExtra(Constants.FEED_ORDER, isRightSwipe ? (index - 1) : (index + 1)); |                                                 .putExtra(Constants.FEED, storyFeed) | ||||||
|                                 newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); |                                                 .putExtra(Constants.FEED_ORDER, isRightSwipe ? (index - 1) : (index + 1)); | ||||||
|                                 startActivity(newIntent); |                                         newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); | ||||||
|  |                                         startActivity(newIntent); | ||||||
|  |                                     } | ||||||
|  |                                     else Toast.makeText(getApplicationContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); | ||||||
|  |                                 }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -67,24 +67,6 @@ public final class FeedStoriesFetcher extends AsyncTask<Void, Void, FeedStoryMod | |||||||
|                     feedStoryIDs[i] = id; |                     feedStoryIDs[i] = id; | ||||||
|                     feedStoryModels[i] = new FeedStoryModel(id, profileModel); |                     feedStoryModels[i] = new FeedStoryModel(id, profileModel); | ||||||
|                 } |                 } | ||||||
| 
 |  | ||||||
|                 for (int s = 0; s <= Math.ceil(feedStoryIDs.length / 20); ++s) { |  | ||||||
|                     String[] shard = new String[Math.min(20, (feedStoryIDs.length - s*20))]; |  | ||||||
|                     FeedStoryModel[] feedStoryShard = new FeedStoryModel[Math.min(20, (feedStoryIDs.length - s*20))]; |  | ||||||
|                     System.arraycopy(feedStoryIDs, s*20, shard, 0, shard.length); |  | ||||||
|                     System.arraycopy(feedStoryModels, s*20, feedStoryShard, 0, shard.length); |  | ||||||
|                     url = "https://i.instagram.com/api/v1/feed/reels_media/?reel_ids=" + Utils.iHighlightIdsMerger(shard); |  | ||||||
|                     conn = (HttpURLConnection) new URL(url).openConnection(); |  | ||||||
|                     conn.setRequestProperty("User-Agent", Constants.USER_AGENT); |  | ||||||
|                     conn.setInstanceFollowRedirects(false); |  | ||||||
|                     conn.setUseCaches(false); |  | ||||||
|                     conn.setReadTimeout(2000); |  | ||||||
|                     conn.connect(); |  | ||||||
|                     if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { |  | ||||||
|                         Utils.iPutFeedStoryModels(conn, feedStoryShard, shard); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 result = feedStoryModels; |                 result = feedStoryModels; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ import awais.instagrabber.BuildConfig; | |||||||
| import awais.instagrabber.interfaces.FetchListener; | import awais.instagrabber.interfaces.FetchListener; | ||||||
| import awais.instagrabber.models.NotificationModel; | import awais.instagrabber.models.NotificationModel; | ||||||
| import awais.instagrabber.utils.Constants; | import awais.instagrabber.utils.Constants; | ||||||
|  | import awais.instagrabber.utils.LocaleUtils; | ||||||
| import awais.instagrabber.utils.Utils; | import awais.instagrabber.utils.Utils; | ||||||
| import awaisomereport.LogCollector; | import awaisomereport.LogCollector; | ||||||
| 
 | 
 | ||||||
| @ -34,6 +35,7 @@ public final class NotificationsFetcher extends AsyncTask<Void, Void, Notificati | |||||||
|             final HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); |             final HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); | ||||||
|             conn.setInstanceFollowRedirects(false); |             conn.setInstanceFollowRedirects(false); | ||||||
|             conn.setUseCaches(false); |             conn.setUseCaches(false); | ||||||
|  |             conn.setRequestProperty("Accept-Language", LocaleUtils.getCurrentLocale().getLanguage() + ",en-US;q=0.8"); | ||||||
|             conn.connect(); |             conn.connect(); | ||||||
| 
 | 
 | ||||||
|             if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { |             if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { | ||||||
|  | |||||||
| @ -1160,23 +1160,6 @@ public final class Utils { | |||||||
|         return "[]"; |         return "[]"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @NonNull |  | ||||||
|     public static String iHighlightIdsMerger(final String... strings) { |  | ||||||
|         if (strings != null) { |  | ||||||
|             int iMax = strings.length - 1; |  | ||||||
|             if (iMax != -1) { |  | ||||||
|                 final StringBuilder builder = new StringBuilder(); |  | ||||||
|                 for (int i = 0; ; i++) { |  | ||||||
|                     builder.append(strings[i]); |  | ||||||
|                     if (i == iMax) return builder.toString(); |  | ||||||
|                     builder.append("&reel_ids="); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|         return ""; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static void putHighlightModels(final HttpURLConnection conn, final Object[] model) throws Exception { |     public static void putHighlightModels(final HttpURLConnection conn, final Object[] model) throws Exception { | ||||||
|         final boolean isHighlightModel = model instanceof HighlightModel[]; |         final boolean isHighlightModel = model instanceof HighlightModel[]; | ||||||
|         final boolean isFeedStoryModel = model instanceof FeedStoryModel[]; |         final boolean isFeedStoryModel = model instanceof FeedStoryModel[]; | ||||||
| @ -1246,75 +1229,6 @@ public final class Utils { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static void iPutFeedStoryModels(final HttpURLConnection conn, final FeedStoryModel[] model, final String[] ids) throws Exception { |  | ||||||
|         final JSONObject highlightsMediaReel = new JSONObject(Utils.readFromConnection(conn)).getJSONObject("reels"); |  | ||||||
|         final int mediaLength = highlightsMediaReel.length(); |  | ||||||
| 
 |  | ||||||
|         for (int i = 0; i < mediaLength; ++i) { |  | ||||||
|             final JSONArray items = highlightsMediaReel.getJSONObject(ids[i]).getJSONArray("items"); |  | ||||||
|             final int itemsLen = items.length(); |  | ||||||
| 
 |  | ||||||
|             final StoryModel[] storyModels = new StoryModel[itemsLen]; |  | ||||||
|             for (int j = 0; j < itemsLen; ++j) { |  | ||||||
|                 final JSONObject data = items.getJSONObject(j); |  | ||||||
|                 final boolean isVideo = data.has("video_duration"); |  | ||||||
| 
 |  | ||||||
|                 storyModels[j] = new StoryModel(data.getString("pk"), |  | ||||||
|                         data.getJSONObject("image_versions2").getJSONArray("candidates").getJSONObject(0).getString("url"), |  | ||||||
|                         isVideo ? MediaItemType.MEDIA_TYPE_VIDEO : MediaItemType.MEDIA_TYPE_IMAGE, |  | ||||||
|                         data.optLong("taken_at", 0), |  | ||||||
|                         model[i].getProfileModel().getUsername()); |  | ||||||
| 
 |  | ||||||
|                 final JSONArray videoResources = data.optJSONArray("video_versions"); |  | ||||||
|                 if (isVideo && videoResources != null) |  | ||||||
|                     storyModels[j].setVideoUrl(Utils.getHighQualityPost(videoResources, true, true)); |  | ||||||
| 
 |  | ||||||
|                 if (data.has("story_feed_media")) { |  | ||||||
|                     storyModels[j].setTappableShortCode(data.getJSONArray("story_feed_media").getJSONObject(0).optString("media_id")); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (!data.isNull("story_app_attribution")) |  | ||||||
|                     storyModels[j].setSpotify(data.getJSONObject("story_app_attribution").optString("content_url").split("\\?")[0]); |  | ||||||
| 
 |  | ||||||
|                 if (data.has("story_polls")) { |  | ||||||
|                     JSONObject tappableObject = data.optJSONArray("story_polls").getJSONObject(0).optJSONObject("poll_sticker"); |  | ||||||
|                     if (tappableObject != null) storyModels[j].setPoll(new PollModel( |  | ||||||
|                             String.valueOf(tappableObject.getLong("poll_id")), |  | ||||||
|                             tappableObject.getString("question"), |  | ||||||
|                             tappableObject.getJSONArray("tallies").getJSONObject(0).getString("text"), |  | ||||||
|                             tappableObject.getJSONArray("tallies").getJSONObject(0).getInt("count"), |  | ||||||
|                             tappableObject.getJSONArray("tallies").getJSONObject(1).getString("text"), |  | ||||||
|                             tappableObject.getJSONArray("tallies").getJSONObject(1).getInt("count"), |  | ||||||
|                             tappableObject.optInt("viewer_vote", -1) |  | ||||||
|                     )); |  | ||||||
|                 } |  | ||||||
|                 if (data.has("story_questions")) { |  | ||||||
|                     JSONObject tappableObject = data.getJSONArray("story_questions").getJSONObject(0).optJSONObject("question_sticker"); |  | ||||||
|                     if (tappableObject != null) storyModels[j].setQuestion(new QuestionModel( |  | ||||||
|                             String.valueOf(tappableObject.getLong("question_id")), |  | ||||||
|                             tappableObject.getString("question") |  | ||||||
|                     )); |  | ||||||
|                 } |  | ||||||
|                 JSONArray hashtags = data.optJSONArray("story_hashtags"); |  | ||||||
|                 JSONArray atmarks = data.optJSONArray("reel_mentions"); |  | ||||||
|                 String[] mentions = new String[(hashtags == null ? 0 : hashtags.length()) + (atmarks == null ? 0 : atmarks.length())]; |  | ||||||
|                 if (hashtags != null) { |  | ||||||
|                     for (int h = 0; h < hashtags.length(); ++h) { |  | ||||||
|                         mentions[h] = "#"+hashtags.getJSONObject(h).getJSONObject("hashtag").getString("name"); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 if (atmarks != null) { |  | ||||||
|                     for (int h = 0; h < atmarks.length(); ++h) { |  | ||||||
|                         mentions[h + (hashtags == null ? 0 : hashtags.length())] = |  | ||||||
|                                 "@"+atmarks.getJSONObject(h).getJSONObject("user").getString("username"); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 storyModels[j].setMentions(mentions); |  | ||||||
|             } |  | ||||||
|             model[i].setStoryModels(storyModels); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static String sign(final String message) { |     public static String sign(final String message) { | ||||||
|         try { |         try { | ||||||
|             Mac hasher = Mac.getInstance("HmacSHA256"); |             Mac hasher = Mac.getInstance("HmacSHA256"); | ||||||
|  | |||||||
| @ -58,7 +58,7 @@ | |||||||
|     <string name="post_viewer_download_album">整个图集</string> |     <string name="post_viewer_download_album">整个图集</string> | ||||||
|     <string name="show_stories">显示快拍</string> |     <string name="show_stories">显示快拍</string> | ||||||
|     <string name="no_more_stories">到底啦!</string> |     <string name="no_more_stories">到底啦!</string> | ||||||
|     <string name="view_story_post">浏览快拍</string> |     <string name="view_story_post">浏览帖子</string> | ||||||
|     <string name="view_post">查看帖子</string> |     <string name="view_post">查看帖子</string> | ||||||
|     <string name="spotify">Spotify</string> |     <string name="spotify">Spotify</string> | ||||||
|     <string name="vote_story_poll">投票</string> |     <string name="vote_story_poll">投票</string> | ||||||
| @ -185,4 +185,8 @@ | |||||||
|     <string name="updated">感谢阁下更新InstaGrabber!</string> |     <string name="updated">感谢阁下更新InstaGrabber!</string> | ||||||
|     <string name="crash_title">应用崩溃了</string> |     <string name="crash_title">应用崩溃了</string> | ||||||
|     <string name="crash_descr">糟糕.. 应用崩溃了,不过别担心,你可以向开发者发送错误报告来帮助他修复问题。(:</string> |     <string name="crash_descr">糟糕.. 应用崩溃了,不过别担心,你可以向开发者发送错误报告来帮助他修复问题。(:</string> | ||||||
|  |     <string name="answer_story">回答</string> | ||||||
|  |     <string name="answer_hint">在此回答...</string> | ||||||
|  |     <string name="answered_story">回答完成!</string> | ||||||
|  |     <string name="story_mentions">提及</string> | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
| @ -61,7 +61,7 @@ | |||||||
|     <string name="post_viewer_download_album">Whole Album</string> |     <string name="post_viewer_download_album">Whole Album</string> | ||||||
|     <string name="show_stories">Show stories</string> |     <string name="show_stories">Show stories</string> | ||||||
|     <string name="no_more_stories">No more stories!</string> |     <string name="no_more_stories">No more stories!</string> | ||||||
|     <string name="view_story_post">View Story Post</string> |     <string name="view_story_post">View Post</string> | ||||||
|     <string name="view_post">View Post</string> |     <string name="view_post">View Post</string> | ||||||
|     <string name="spotify">Spotify</string> |     <string name="spotify">Spotify</string> | ||||||
|     <string name="vote_story_poll">Vote</string> |     <string name="vote_story_poll">Vote</string> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user