mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-11-03 21:15:35 +00:00 
			
		
		
		
	v16.9 part whatever
This commit is contained in:
		
							parent
							
								
									86d94d3c97
								
							
						
					
					
						commit
						2f30eec0a3
					
				@ -870,7 +870,7 @@ public final class MainHelper implements SwipeRefreshLayout.OnRefreshListener {
 | 
			
		||||
                main.mainBinding.mainFullName.setSelected(true);
 | 
			
		||||
                main.mainBinding.mainBiography.setEnabled(true);
 | 
			
		||||
 | 
			
		||||
                if (!profileModel.isPrivate()) {
 | 
			
		||||
                if (!profileModel.isReallyPrivate()) {
 | 
			
		||||
                    main.mainBinding.mainFollowing.setClickable(true);
 | 
			
		||||
                    main.mainBinding.mainFollowers.setClickable(true);
 | 
			
		||||
                    main.mainBinding.privatePage.setVisibility(View.GONE);
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ import awais.instagrabber.utils.Utils;
 | 
			
		||||
public final class DirectMessagesUserInbox extends AppCompatActivity {
 | 
			
		||||
    private DirectItemModel directItemModel;
 | 
			
		||||
    private final ProfileModel myProfileHolder =
 | 
			
		||||
            new ProfileModel(false, false, null, null, null, null, null, null, null, 0, 0, 0, false, false, false, false);
 | 
			
		||||
            new ProfileModel(false, false, false, null, null, null, null, null, null, null, 0, 0, 0, false, false, false, false);
 | 
			
		||||
    private final ArrayList<ProfileModel> users = new ArrayList<>();
 | 
			
		||||
    private final ArrayList<DirectItemModel> directItemModels = new ArrayList<>();
 | 
			
		||||
    private final FetchListener<InboxThreadModel> fetchListener = new FetchListener<InboxThreadModel>() {
 | 
			
		||||
 | 
			
		||||
@ -317,7 +317,7 @@ public final class Main extends BaseLanguageActivity {
 | 
			
		||||
        searchView.setQueryHint(getResources().getString(R.string.action_search));
 | 
			
		||||
        searchView.setSuggestionsAdapter(suggestionAdapter);
 | 
			
		||||
        searchView.setOnSearchClickListener(v -> {
 | 
			
		||||
            searchView.setQuery(userQuery.equals(cookieModel.getUsername()) ? "" : userQuery, false);
 | 
			
		||||
            searchView.setQuery((cookieModel != null && userQuery.equals(cookieModel.getUsername())) ? "" : userQuery, false);
 | 
			
		||||
            menu.findItem(R.id.action_about).setVisible(false);
 | 
			
		||||
            menu.findItem(R.id.action_settings).setVisible(false);
 | 
			
		||||
            menu.findItem(R.id.action_dms).setVisible(false);
 | 
			
		||||
 | 
			
		||||
@ -139,11 +139,14 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
                    iconRes = R.drawable.ic_fullscreen_exit;
 | 
			
		||||
                    topPanelRoot.setVisibility(View.GONE);
 | 
			
		||||
                    viewerBinding.btnDownload.setVisibility(View.VISIBLE);
 | 
			
		||||
                    viewerBinding.bottomPanel.tvPostDate.setVisibility(View.GONE);
 | 
			
		||||
                } else {
 | 
			
		||||
                    containerLayoutParams.weight = (viewerBinding.mediaList.getVisibility() == View.VISIBLE) ? 1.35f : 1.9f;
 | 
			
		||||
                    containerLayoutParams.weight += (Utils.isEmpty(settingsHelper.getString(Constants.COOKIE))) ? 0.3f : 0;
 | 
			
		||||
                    iconRes = R.drawable.ic_fullscreen;
 | 
			
		||||
                    topPanelRoot.setVisibility(View.VISIBLE);
 | 
			
		||||
                    viewerBinding.btnDownload.setVisibility(View.GONE);
 | 
			
		||||
                    viewerBinding.bottomPanel.tvPostDate.setVisibility(View.VISIBLE);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                viewerBinding.ivToggleFullScreen.setImageResource(iconRes);
 | 
			
		||||
@ -203,7 +206,19 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
        resources = getResources();
 | 
			
		||||
 | 
			
		||||
        final View viewStoryPost = findViewById(R.id.viewStoryPost);
 | 
			
		||||
        if (viewStoryPost != null) viewStoryPost.setVisibility(View.GONE);
 | 
			
		||||
        if (viewStoryPost != null) {
 | 
			
		||||
            viewStoryPost.setOnClickListener(new View.OnClickListener() {
 | 
			
		||||
                public void onClick(View v) {
 | 
			
		||||
                    if (profileModel.isPrivate())
 | 
			
		||||
                        Toast.makeText(getApplicationContext(), R.string.share_private_post, Toast.LENGTH_LONG).show();
 | 
			
		||||
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
 | 
			
		||||
                    sharingIntent.setType("text/plain");
 | 
			
		||||
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "https://instagram.com/p/"+postShortCode);
 | 
			
		||||
                    startActivity(Intent.createChooser(sharingIntent,
 | 
			
		||||
                            (profileModel.isPrivate()) ? getString(R.string.share_private_post) : getString(R.string.share_public_post)));
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewerBinding.topPanel.title.setMovementMethod(new LinkMovementMethod());
 | 
			
		||||
        viewerBinding.topPanel.title.setMentionClickListener((view, text, isHashtag) ->
 | 
			
		||||
@ -218,7 +233,7 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
            viewerBinding.postActions.setLayoutParams(new LinearLayout.LayoutParams(
 | 
			
		||||
                    LinearLayout.LayoutParams.MATCH_PARENT, 0, 0
 | 
			
		||||
            ));
 | 
			
		||||
            containerLayoutParams.weight = 2.2f;
 | 
			
		||||
            containerLayoutParams.weight = (containerLayoutParams.weight == 3.3f) ? 3.3f : 2.2f;
 | 
			
		||||
            viewerBinding.container.setLayoutParams(containerLayoutParams);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
@ -339,6 +354,21 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
                viewerBinding.mediaList.setVisibility(View.VISIBLE);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            final View viewStoryPost = findViewById(R.id.viewStoryPost);
 | 
			
		||||
            if (viewStoryPost != null) {
 | 
			
		||||
                viewStoryPost.setOnClickListener(new View.OnClickListener() {
 | 
			
		||||
                    public void onClick(View v) {
 | 
			
		||||
                        if (profileModel.isPrivate())
 | 
			
		||||
                            Toast.makeText(getApplicationContext(), R.string.share_private_post, Toast.LENGTH_LONG).show();
 | 
			
		||||
                        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
 | 
			
		||||
                        sharingIntent.setType("text/plain");
 | 
			
		||||
                        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "https://instagram.com/p/"+postModel.getShortCode());
 | 
			
		||||
                        startActivity(Intent.createChooser(sharingIntent,
 | 
			
		||||
                                (profileModel.isPrivate()) ? getString(R.string.share_private_post) : getString(R.string.share_public_post)));
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            viewerCaptionParent.setOnTouchListener(gestureTouchListener);
 | 
			
		||||
            viewerBinding.playerView.setOnTouchListener(gestureTouchListener);
 | 
			
		||||
            viewerBinding.imageViewer.setOnSingleFlingListener((e1, e2, velocityX, velocityY) -> {
 | 
			
		||||
@ -560,10 +590,6 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
        }
 | 
			
		||||
        lastSlidePos = slidePos;
 | 
			
		||||
 | 
			
		||||
        containerLayoutParams.weight = (viewerBinding.mediaList.getVisibility() == View.VISIBLE) ? 1.35f : 1.9f;
 | 
			
		||||
        containerLayoutParams.weight += (Utils.isEmpty(settingsHelper.getString(Constants.COOKIE))) ? 0.3f : 0;
 | 
			
		||||
        viewerBinding.container.setLayoutParams(containerLayoutParams);
 | 
			
		||||
 | 
			
		||||
        postCaption = viewerPostModel.getPostCaption();
 | 
			
		||||
 | 
			
		||||
        if (Utils.hasMentions(postCaption)) {
 | 
			
		||||
@ -588,12 +614,12 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
            postModel.setLike(viewerPostModel.getLike());
 | 
			
		||||
            postModel.setBookmark(viewerPostModel.getBookmark());
 | 
			
		||||
            if (viewerPostModel.getLike() == true) {
 | 
			
		||||
                viewerBinding.btnLike.setText(resources.getString(R.string.unlike, postModel.getLikes()));
 | 
			
		||||
                viewerBinding.btnLike.setText(resources.getString(R.string.unlike, viewerPostModel.getLikes()));
 | 
			
		||||
                viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(
 | 
			
		||||
                        R.color.btn_pink_background, null)));
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                viewerBinding.btnLike.setText(resources.getString(R.string.like, postModel.getLikes()));
 | 
			
		||||
                viewerBinding.btnLike.setText(resources.getString(R.string.like, viewerPostModel.getLikes()));
 | 
			
		||||
                viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(
 | 
			
		||||
                        R.color.btn_lightpink_background, null)));
 | 
			
		||||
            }
 | 
			
		||||
@ -610,7 +636,7 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewerBinding.bottomPanel.tvPostDate.setText(viewerPostModel.getPostDate());
 | 
			
		||||
        viewerBinding.bottomPanel.tvPostDate.setVisibility(View.VISIBLE);
 | 
			
		||||
        viewerBinding.bottomPanel.tvPostDate.setVisibility(containerLayoutParams.weight != 3.3f ? View.VISIBLE : View.GONE);
 | 
			
		||||
        viewerBinding.bottomPanel.tvPostDate.setSelected(true);
 | 
			
		||||
 | 
			
		||||
        url = viewerPostModel.getDisplayUrl();
 | 
			
		||||
@ -718,7 +744,7 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
                if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
 | 
			
		||||
                    ok = true;
 | 
			
		||||
                }
 | 
			
		||||
                else Toast.makeText(getApplicationContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT);
 | 
			
		||||
                else Toast.makeText(getApplicationContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                urlConnection.disconnect();
 | 
			
		||||
            } catch (Throwable ex) {
 | 
			
		||||
                Log.e("austin_debug", action+": " + ex);
 | 
			
		||||
@ -729,8 +755,8 @@ public final class PostViewer extends BaseLanguageActivity {
 | 
			
		||||
        @Override
 | 
			
		||||
        protected void onPostExecute(Void result) {
 | 
			
		||||
            if (ok == true && action == "likes") {
 | 
			
		||||
                viewerPostModel.setLike(!postModel.getLike());
 | 
			
		||||
                postModel.setManualLike(!postModel.getLike());
 | 
			
		||||
                postModel.setLike(!postModel.getLike());
 | 
			
		||||
                viewerPostModel.setManualLike(!postModel.getLike());
 | 
			
		||||
                refreshPost();
 | 
			
		||||
            }
 | 
			
		||||
            else if (ok == true && action == "save") {
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,7 @@ import static awais.instagrabber.models.direct_messages.DirectItemModel.RavenExp
 | 
			
		||||
public final class MessageItemsAdapter extends RecyclerView.Adapter<TextMessageViewHolder> {
 | 
			
		||||
    private static final int MESSAGE_INCOMING = 69, MESSAGE_OUTGOING = 420;
 | 
			
		||||
    private final ProfileModel myProfileHolder =
 | 
			
		||||
            new ProfileModel(false, false, null, null, null, null, null, null, null, 0, 0, 0, false, false, false, false);
 | 
			
		||||
            new ProfileModel(false, false, false, null, null, null, null, null, null, null, 0, 0, 0, false, false, false, false);
 | 
			
		||||
    private final ArrayList<DirectItemModel> directItemModels;
 | 
			
		||||
    private final ArrayList<ProfileModel> users;
 | 
			
		||||
    private final View.OnClickListener onClickListener;
 | 
			
		||||
 | 
			
		||||
@ -109,8 +109,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]>
 | 
			
		||||
 | 
			
		||||
                            if (childComment != null) {
 | 
			
		||||
                                final JSONObject owner = childComment.getJSONObject("owner");
 | 
			
		||||
                                final ProfileModel profileModel = new ProfileModel(false,
 | 
			
		||||
                                        false,
 | 
			
		||||
                                final ProfileModel profileModel = new ProfileModel(false, false, false,
 | 
			
		||||
                                        owner.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                        owner.getString(Constants.EXTRAS_USERNAME),
 | 
			
		||||
                                        null, null, null,
 | 
			
		||||
@ -188,7 +187,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]>
 | 
			
		||||
                        final JSONObject comment = comments.getJSONObject(i).getJSONObject("node");
 | 
			
		||||
 | 
			
		||||
                        final JSONObject owner = comment.getJSONObject("owner");
 | 
			
		||||
                        final ProfileModel profileModel = new ProfileModel(false,
 | 
			
		||||
                        final ProfileModel profileModel = new ProfileModel(false, false,
 | 
			
		||||
                                owner.optBoolean("is_verified"),
 | 
			
		||||
                                owner.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                owner.getString(Constants.EXTRAS_USERNAME),
 | 
			
		||||
@ -229,6 +228,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]>
 | 
			
		||||
 | 
			
		||||
                                tempJsonObject = childComment.getJSONObject("owner");
 | 
			
		||||
                                final ProfileModel childProfileModel = new ProfileModel(false, false,
 | 
			
		||||
                                        tempJsonObject.optBoolean("is_verified"),
 | 
			
		||||
                                        tempJsonObject.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                        tempJsonObject.getString(Constants.EXTRAS_USERNAME),
 | 
			
		||||
                                        null, null, null,
 | 
			
		||||
 | 
			
		||||
@ -98,6 +98,7 @@ public final class FeedFetcher extends AsyncTask<Void, Void, FeedModel[]> {
 | 
			
		||||
                    if (feedItem.has("owner")) {
 | 
			
		||||
                        final JSONObject owner = feedItem.getJSONObject("owner");
 | 
			
		||||
                        profileModel = new ProfileModel(owner.optBoolean("is_private"),
 | 
			
		||||
                                false, // if you can see it then you def follow
 | 
			
		||||
                                owner.optBoolean("is_verified"),
 | 
			
		||||
                                owner.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                owner.getString(Constants.EXTRAS_USERNAME),
 | 
			
		||||
@ -153,7 +154,8 @@ public final class FeedFetcher extends AsyncTask<Void, Void, FeedModel[]> {
 | 
			
		||||
                                            node.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                            isChildVideo ? node.getString("video_url") : Utils.getHighQualityImage(node),
 | 
			
		||||
                                            null, null, null,
 | 
			
		||||
                                            node.optLong("video_view_count", -1), -1, false, false);
 | 
			
		||||
                                            node.optLong("video_view_count", -1), -1, false, false,
 | 
			
		||||
                                            feedItem.getJSONObject("edge_media_preview_like").getLong("count"));
 | 
			
		||||
 | 
			
		||||
                                    sliderItems[j].setSliderDisplayUrl(node.getString("display_url"));
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ public final class FeedStoriesFetcher extends AsyncTask<Void, Void, FeedStoryMod
 | 
			
		||||
                    final JSONObject node = feedStoriesReel.getJSONObject(i).getJSONObject("node");
 | 
			
		||||
 | 
			
		||||
                    final JSONObject user = node.getJSONObject(node.has("user") ? "user" : "owner");
 | 
			
		||||
                    final ProfileModel profileModel = new ProfileModel(false, false,
 | 
			
		||||
                    final ProfileModel profileModel = new ProfileModel(false, false, false,
 | 
			
		||||
                            user.getString("id"),
 | 
			
		||||
                            user.getString("username"),
 | 
			
		||||
                            null, null, null,
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,6 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]>
 | 
			
		||||
                    endCursor = commentObject.optString("end_cursor");
 | 
			
		||||
 | 
			
		||||
                if (mediaItemType != MediaItemType.MEDIA_TYPE_SLIDER) {
 | 
			
		||||
                    Log.d("austin_debug", "m: "+media);
 | 
			
		||||
                    final ViewerPostModel postModel = new ViewerPostModel(mediaItemType,
 | 
			
		||||
                            media.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                            isVideo ? media.getString("video_url") : Utils.getHighQualityImage(media),
 | 
			
		||||
@ -89,7 +88,8 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]>
 | 
			
		||||
                            Utils.isEmpty(postCaption) ? null : postCaption,
 | 
			
		||||
                            username,
 | 
			
		||||
                            isVideo && media.has("video_view_count") ? media.getLong("video_view_count") : -1,
 | 
			
		||||
                            timestamp, media.getBoolean("viewer_has_liked"), media.getBoolean("viewer_has_saved"));
 | 
			
		||||
                            timestamp, media.getBoolean("viewer_has_liked"), media.getBoolean("viewer_has_saved"),
 | 
			
		||||
                            media.getJSONObject("edge_media_preview_like").getLong("count"));
 | 
			
		||||
 | 
			
		||||
                    postModel.setCommentsCount(commentsCount);
 | 
			
		||||
                    postModel.setCommentsEndCursor(endCursor);
 | 
			
		||||
@ -107,13 +107,14 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]>
 | 
			
		||||
                        final boolean isChildVideo = node.getBoolean("is_video");
 | 
			
		||||
 | 
			
		||||
                        postModels[i] = new ViewerPostModel(isChildVideo ? MediaItemType.MEDIA_TYPE_VIDEO : MediaItemType.MEDIA_TYPE_IMAGE,
 | 
			
		||||
                                node.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                media.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                                isChildVideo ? node.getString("video_url") : Utils.getHighQualityImage(node),
 | 
			
		||||
                                node.getString(Constants.EXTRAS_SHORTCODE),
 | 
			
		||||
                                postCaption,
 | 
			
		||||
                                username,
 | 
			
		||||
                                isChildVideo && node.has("video_view_count") ? node.getLong("video_view_count") : -1,
 | 
			
		||||
                                timestamp, media.getBoolean("viewer_has_liked"), media.getBoolean("viewer_has_saved"));
 | 
			
		||||
                                timestamp, media.getBoolean("viewer_has_liked"), media.getBoolean("viewer_has_saved"),
 | 
			
		||||
                                media.getJSONObject("edge_media_preview_like").getLong("count"));
 | 
			
		||||
                        postModels[i].setSliderDisplayUrl(node.getString("display_url"));
 | 
			
		||||
 | 
			
		||||
                        Utils.checkExistence(downloadDir, customDir, username, true, i, postModels[i]);
 | 
			
		||||
 | 
			
		||||
@ -43,16 +43,18 @@ public final class ProfileFetcher extends AsyncTask<Void, Void, ProfileModel> {
 | 
			
		||||
                final JSONObject user = new JSONObject(Utils.readFromConnection(conn)).getJSONObject("graphql").getJSONObject(Constants.EXTRAS_USER);
 | 
			
		||||
 | 
			
		||||
                boolean isPrivate = user.getBoolean("is_private");
 | 
			
		||||
                boolean reallyPrivate = isPrivate;
 | 
			
		||||
                final JSONObject timelineMedia = user.getJSONObject("edge_owner_to_timeline_media");
 | 
			
		||||
                if (timelineMedia.has("edges")) {
 | 
			
		||||
                    final JSONArray edges = timelineMedia.getJSONArray("edges");
 | 
			
		||||
                    if (edges.length() > 0) isPrivate = false;
 | 
			
		||||
                    if (edges.length() > 0) reallyPrivate = false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                String url = user.optString("external_url");
 | 
			
		||||
                if (Utils.isEmpty(url)) url = null;
 | 
			
		||||
 | 
			
		||||
                result = new ProfileModel(isPrivate,
 | 
			
		||||
                        reallyPrivate,
 | 
			
		||||
                        user.getBoolean("is_verified"),
 | 
			
		||||
                        user.getString(Constants.EXTRAS_ID),
 | 
			
		||||
                        userName,
 | 
			
		||||
 | 
			
		||||
@ -19,14 +19,11 @@ public abstract class BasePostModel implements Serializable {
 | 
			
		||||
    protected long timestamp;
 | 
			
		||||
    protected int position;
 | 
			
		||||
    boolean liked, bookmarked;
 | 
			
		||||
    long likes;
 | 
			
		||||
 | 
			
		||||
    public boolean getLike() {
 | 
			
		||||
        return liked;
 | 
			
		||||
    }
 | 
			
		||||
    public long getLikes() {
 | 
			
		||||
        return likes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean getBookmark() {
 | 
			
		||||
        return bookmarked;
 | 
			
		||||
    }
 | 
			
		||||
@ -35,13 +32,6 @@ public abstract class BasePostModel implements Serializable {
 | 
			
		||||
        liked = like; return liked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // setManualLike means user liked from InstaGrabber
 | 
			
		||||
    public boolean setManualLike(final boolean like) {
 | 
			
		||||
        liked = like;
 | 
			
		||||
        likes = (like) ? (likes + 1) : (likes - 1);
 | 
			
		||||
        return liked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean setBookmark(final boolean bookmark) {
 | 
			
		||||
        bookmarked = bookmark; return bookmarked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,6 @@ public class PostModel extends BasePostModel {
 | 
			
		||||
        this.postCaption = postCaption;
 | 
			
		||||
        this.timestamp = timestamp;
 | 
			
		||||
        this.liked = liked;
 | 
			
		||||
        this.likes = likes;
 | 
			
		||||
        this.bookmarked = bookmarked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -35,10 +34,6 @@ public class PostModel extends BasePostModel {
 | 
			
		||||
        return endCursor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getLikes() {
 | 
			
		||||
        return likes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasNextPage() {
 | 
			
		||||
        return endCursor != null && hasNextPage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -3,15 +3,17 @@ package awais.instagrabber.models;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
public final class ProfileModel implements Serializable {
 | 
			
		||||
    private final boolean isPrivate, isVerified, following, restricted, blocked, requested;
 | 
			
		||||
    private final boolean isPrivate, reallyPrivate, isVerified, following, restricted, blocked, requested;
 | 
			
		||||
    private final long postCount, followersCount, followingCount;
 | 
			
		||||
    private final String id, username, name, biography, url, sdProfilePic, hdProfilePic;
 | 
			
		||||
 | 
			
		||||
    public ProfileModel(final boolean isPrivate, final boolean isVerified, final String id, final String username,
 | 
			
		||||
                        final String name, final String biography, final String url, final String sdProfilePic, final String hdProfilePic,
 | 
			
		||||
                        final long postCount, final long followersCount, final long followingCount, final boolean following,
 | 
			
		||||
                        final boolean restricted, final boolean blocked, final boolean requested) {
 | 
			
		||||
    public ProfileModel(final boolean isPrivate, final boolean reallyPrivate,
 | 
			
		||||
                        final boolean isVerified, final String id, final String username, final String name, final String biography,
 | 
			
		||||
                        final String url, final String sdProfilePic, final String hdProfilePic, final long postCount,
 | 
			
		||||
                        final long followersCount, final long followingCount, final boolean following, final boolean restricted,
 | 
			
		||||
                        final boolean blocked, final boolean requested) {
 | 
			
		||||
        this.isPrivate = isPrivate;
 | 
			
		||||
        this.reallyPrivate = reallyPrivate;
 | 
			
		||||
        this.isVerified = isVerified;
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.url = url;
 | 
			
		||||
@ -33,6 +35,10 @@ public final class ProfileModel implements Serializable {
 | 
			
		||||
        return isPrivate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isReallyPrivate() {
 | 
			
		||||
        return reallyPrivate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isVerified() {
 | 
			
		||||
        return isVerified;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -6,12 +6,12 @@ public final class ViewerPostModel extends BasePostModel {
 | 
			
		||||
    protected final String username;
 | 
			
		||||
    protected final long videoViews;
 | 
			
		||||
    protected String sliderDisplayUrl, commentsEndCursor;
 | 
			
		||||
    protected long commentsCount;
 | 
			
		||||
    protected long commentsCount, likes;
 | 
			
		||||
    private boolean isCurrentSlide = false;
 | 
			
		||||
 | 
			
		||||
    public ViewerPostModel(final MediaItemType itemType, final String postId, final String displayUrl, final String shortCode,
 | 
			
		||||
                           final String postCaption, final String username, final long videoViews, final long timestamp,
 | 
			
		||||
                           boolean liked, boolean bookmarked) {
 | 
			
		||||
                           boolean liked, boolean bookmarked, long likes) {
 | 
			
		||||
        this.itemType = itemType;
 | 
			
		||||
        this.postId = postId;
 | 
			
		||||
        this.displayUrl = displayUrl;
 | 
			
		||||
@ -21,6 +21,7 @@ public final class ViewerPostModel extends BasePostModel {
 | 
			
		||||
        this.videoViews = videoViews;
 | 
			
		||||
        this.timestamp = timestamp;
 | 
			
		||||
        this.liked = liked;
 | 
			
		||||
        this.likes = likes;
 | 
			
		||||
        this.bookmarked = bookmarked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -44,6 +45,17 @@ public final class ViewerPostModel extends BasePostModel {
 | 
			
		||||
        return videoViews;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getLikes() {
 | 
			
		||||
        return likes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // setManualLike means user liked from InstaGrabber
 | 
			
		||||
    public boolean setManualLike(final boolean like) {
 | 
			
		||||
        liked = like;
 | 
			
		||||
        likes = (like) ? (likes + 1) : (likes - 1);
 | 
			
		||||
        return liked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSliderDisplayUrl(final String sliderDisplayUrl) {
 | 
			
		||||
        this.sliderDisplayUrl = sliderDisplayUrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -63,6 +63,8 @@ public final class LocaleUtils {
 | 
			
		||||
        if (appLanguageIndex == 4) return "zh";
 | 
			
		||||
        if (appLanguageIndex == 5) return "in";
 | 
			
		||||
        if (appLanguageIndex == 6) return "it";
 | 
			
		||||
        if (appLanguageIndex == 7) return "de";
 | 
			
		||||
        if (appLanguageIndex == 8) return "pl";
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -382,6 +382,7 @@ public final class Utils {
 | 
			
		||||
            if (userObj != null) {
 | 
			
		||||
                user = new ProfileModel(
 | 
			
		||||
                        userObj.getBoolean("is_private"),
 | 
			
		||||
                        false, // temporary
 | 
			
		||||
                        userObj.optBoolean("is_verified"),
 | 
			
		||||
                        String.valueOf(userObj.get("pk")),
 | 
			
		||||
                        userObj.getString("username"),
 | 
			
		||||
@ -459,6 +460,7 @@ public final class Utils {
 | 
			
		||||
        for (int j = 0; j < usersLen; ++j) {
 | 
			
		||||
            final JSONObject userObject = users.getJSONObject(j);
 | 
			
		||||
            userModels[j] = new ProfileModel(userObject.getBoolean("is_private"),
 | 
			
		||||
                    false,
 | 
			
		||||
                    userObject.optBoolean("is_verified"),
 | 
			
		||||
                    String.valueOf(userObject.get("pk")),
 | 
			
		||||
                    userObject.getString("username"),
 | 
			
		||||
@ -608,6 +610,7 @@ public final class Utils {
 | 
			
		||||
                case PROFILE: {
 | 
			
		||||
                    final JSONObject profile = itemObject.getJSONObject("profile");
 | 
			
		||||
                    profileModel = new ProfileModel(profile.getBoolean("is_private"),
 | 
			
		||||
                            false,
 | 
			
		||||
                            profile.getBoolean("is_verified"),
 | 
			
		||||
                            Long.toString(profile.getLong("pk")),
 | 
			
		||||
                            profile.getString("username"),
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,8 @@
 | 
			
		||||
        <item>简体中文</item>
 | 
			
		||||
        <item>印尼文 [感谢 @Galang23 (GitLab)]</item>
 | 
			
		||||
        <item>意大利文 [感谢 @RAR_Ramar (Telegram)]</item>
 | 
			
		||||
        <item>German [Thanks to @MoaufmKlo (GitHub)]</item>
 | 
			
		||||
        <item>Polish [Thanks to @Lego8486 (GitHub)]</item>
 | 
			
		||||
        <item>德文 [感谢 @MoaufmKlo (GitHub)]</item>
 | 
			
		||||
        <item>波兰文 [感谢 @Lego8486 (GitHub)]</item>
 | 
			
		||||
    </string-array>
 | 
			
		||||
    <string-array name="theme_presets">
 | 
			
		||||
        <item>自动 / 跟随系统</item>
 | 
			
		||||
 | 
			
		||||
@ -68,16 +68,16 @@
 | 
			
		||||
    <string name="project_link">参观项目页面</string>
 | 
			
		||||
    <string name="telegram_link">加入 Telegram 群组</string>
 | 
			
		||||
    <string name="matrix_link">加入 Matrix 群组</string>
 | 
			
		||||
    <string name="like">Like (%s)</string>
 | 
			
		||||
    <string name="unlike">Unlike (%s)</string>
 | 
			
		||||
    <string name="like">赞 (%s)</string>
 | 
			
		||||
    <string name="unlike">取消赞 (%s)</string>
 | 
			
		||||
    <string name="bookmark">加入收藏</string>
 | 
			
		||||
    <string name="unbookmark">解除收藏</string>
 | 
			
		||||
    <string name="follow">关注</string>
 | 
			
		||||
    <string name="unfollow">脱粉</string>
 | 
			
		||||
    <string name="favorite">Add to Favorites</string>
 | 
			
		||||
    <string name="unfavorite">Remove from Favorites</string>
 | 
			
		||||
    <string name="favorite_short">Favorite</string>
 | 
			
		||||
    <string name="unfavorite_short">Unfavorite</string>
 | 
			
		||||
    <string name="favorite">加入收藏</string>
 | 
			
		||||
    <string name="unfavorite">取消收藏</string>
 | 
			
		||||
    <string name="favorite_short">加入收藏</string>
 | 
			
		||||
    <string name="unfavorite_short">取消收藏</string>
 | 
			
		||||
    <string name="block">拉黑</string>
 | 
			
		||||
    <string name="unblock">解禁</string>
 | 
			
		||||
    <string name="restrict">限制</string>
 | 
			
		||||
@ -109,7 +109,7 @@
 | 
			
		||||
    <string name="quick_access_confirm_delete">你真的要删除 %s?</string>
 | 
			
		||||
    <string name="profile_viewer_imageinfo">宽: %d\n高: %d</string>
 | 
			
		||||
    <string name="profile_viewer_colordepth_prefix">\n色深:</string>
 | 
			
		||||
    <string name="profile_endpoint">Select profile picture endpoint\n(Does not affect hashtags)</string>
 | 
			
		||||
    <string name="profile_endpoint">选择高清头像终端\n(不影响标签)</string>
 | 
			
		||||
    <string name="open_profile">打开主页</string>
 | 
			
		||||
    <string name="view_pfp">查看头像</string>
 | 
			
		||||
    <string name="direct_messages_you">你</string>
 | 
			
		||||
@ -147,11 +147,11 @@
 | 
			
		||||
    <string name="downloader_error_download_file">下载文件时出错</string>
 | 
			
		||||
    <string name="comment_viewer_copy_user">复制用户名</string>
 | 
			
		||||
    <string name="comment_viewer_copy_comment">复制评论</string>
 | 
			
		||||
    <string name="comment_viewer_reply_comment">Reply to comment</string>
 | 
			
		||||
    <string name="comment_viewer_like_comment">Like comment</string>
 | 
			
		||||
    <string name="comment_viewer_unlike_comment">Unlike comment</string>
 | 
			
		||||
    <string name="comment_viewer_delete_comment">Delete comment</string>
 | 
			
		||||
    <string name="comment_send_empty_comment">No empty comments, dawg!</string>
 | 
			
		||||
    <string name="comment_viewer_reply_comment">回复评论</string>
 | 
			
		||||
    <string name="comment_viewer_like_comment">赞评论</string>
 | 
			
		||||
    <string name="comment_viewer_unlike_comment">取消赞评论</string>
 | 
			
		||||
    <string name="comment_viewer_delete_comment">删除评论</string>
 | 
			
		||||
    <string name="comment_send_empty_comment">评论不得为空!</string>
 | 
			
		||||
    <string name="comment_view_mention_user_search">要搜索用户名吗?</string>
 | 
			
		||||
    <string name="comment_view_mention_hash_search">要搜索标签吗?</string>
 | 
			
		||||
    <string name="followers_type_followers">粉丝</string>
 | 
			
		||||
@ -164,8 +164,10 @@
 | 
			
		||||
    <string name="login_success_loading_cookies">成功载入 cookies!\n若你仍不能查看私密页面/帖子,重新登录!</string>
 | 
			
		||||
    <string name="comment_hint">撰写新评论...</string>
 | 
			
		||||
    <string name="update_available">检测到有新版本! (%s)</string>
 | 
			
		||||
    <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string>
 | 
			
		||||
    <string name="update_notice">注意:若您下载的是F-Droid版本的,那您还得在F-Droid更新!GitHub版本也是如此。</string>
 | 
			
		||||
    <string name="updated">感谢阁下更新InstaGrabber!</string>
 | 
			
		||||
    <string name="crash_title">应用崩溃了</string>
 | 
			
		||||
    <string name="crash_descr">糟糕.. 应用崩溃了,不过别担心,你可以向开发者发送错误报告来帮助他修复问题。(:</string>
 | 
			
		||||
    <string name="share_public_post">分享公开帖至…</string>
 | 
			
		||||
    <string name="share_private_post">这是一个私密帖!请分享给能看到它的人!</string>
 | 
			
		||||
</resources>
 | 
			
		||||
 | 
			
		||||
@ -97,7 +97,7 @@
 | 
			
		||||
    <string name="dialog_import_success">Successfully imported!</string>
 | 
			
		||||
    <string name="dialog_import_failed">Failed to import!</string>
 | 
			
		||||
    <string name="dialog_export_success">Successfully exported!</string>
 | 
			
		||||
    <string name="dialog_export_failed">Failed to  export!</string>
 | 
			
		||||
    <string name="dialog_export_failed">Failed to export!</string>
 | 
			
		||||
    <string name="dialog_export_err_password_empty">Password is empty! Password cannot be empt, dumbass!</string>
 | 
			
		||||
    <string name="refresh">Refresh</string>
 | 
			
		||||
    <string name="get_cookies">Get cookies</string>
 | 
			
		||||
@ -169,6 +169,9 @@
 | 
			
		||||
 | 
			
		||||
    <string name="comment_hint">Write a new comment...</string>
 | 
			
		||||
 | 
			
		||||
    <string name="share_public_post">Share this public post to...</string>
 | 
			
		||||
    <string name="share_private_post">This is a private post! Share to those who can view them!</string>
 | 
			
		||||
 | 
			
		||||
    <string name="update_available">An update is available! (%s)</string>
 | 
			
		||||
    <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string>
 | 
			
		||||
    <string name="updated">Thank you for updating InstaGrabber!</string>
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,8 @@
 | 
			
		||||
* You can now write comments, and reply/like/delete comments through the menu (by clicking the comment)
 | 
			
		||||
  * You're actually
 | 
			
		||||
* Liked comments are shown with a pink background
 | 
			
		||||
* Post like counts are now displayed (The button texts are slightly reduced to accomodate @world_record_egg)
 | 
			
		||||
* You can now share posts in the post viewer
 | 
			
		||||
* Search field is now empty if you're viewing your own profile while logged in
 | 
			
		||||
* Post like counts are now displayed (The button texts are slightly reduced to accomodate @world_record_egg) (logged in only)
 | 
			
		||||
* Mute buttons are changed to display the current status (i.e. muted icon when muted, sound icon when not muted)
 | 
			
		||||
* Fixed a bug relating to viewing feed stories
 | 
			
		||||
* Fixed a bug relating to viewing feed stories
 | 
			
		||||
* Fixed a bug where scrolling in full screen causes it to quit full screen
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user