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.mainFullName.setSelected(true);
|
||||||
main.mainBinding.mainBiography.setEnabled(true);
|
main.mainBinding.mainBiography.setEnabled(true);
|
||||||
|
|
||||||
if (!profileModel.isPrivate()) {
|
if (!profileModel.isReallyPrivate()) {
|
||||||
main.mainBinding.mainFollowing.setClickable(true);
|
main.mainBinding.mainFollowing.setClickable(true);
|
||||||
main.mainBinding.mainFollowers.setClickable(true);
|
main.mainBinding.mainFollowers.setClickable(true);
|
||||||
main.mainBinding.privatePage.setVisibility(View.GONE);
|
main.mainBinding.privatePage.setVisibility(View.GONE);
|
||||||
|
@ -42,7 +42,7 @@ import awais.instagrabber.utils.Utils;
|
|||||||
public final class DirectMessagesUserInbox extends AppCompatActivity {
|
public final class DirectMessagesUserInbox extends AppCompatActivity {
|
||||||
private DirectItemModel directItemModel;
|
private DirectItemModel directItemModel;
|
||||||
private final ProfileModel myProfileHolder =
|
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<ProfileModel> users = new ArrayList<>();
|
||||||
private final ArrayList<DirectItemModel> directItemModels = new ArrayList<>();
|
private final ArrayList<DirectItemModel> directItemModels = new ArrayList<>();
|
||||||
private final FetchListener<InboxThreadModel> fetchListener = new FetchListener<InboxThreadModel>() {
|
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.setQueryHint(getResources().getString(R.string.action_search));
|
||||||
searchView.setSuggestionsAdapter(suggestionAdapter);
|
searchView.setSuggestionsAdapter(suggestionAdapter);
|
||||||
searchView.setOnSearchClickListener(v -> {
|
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_about).setVisible(false);
|
||||||
menu.findItem(R.id.action_settings).setVisible(false);
|
menu.findItem(R.id.action_settings).setVisible(false);
|
||||||
menu.findItem(R.id.action_dms).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;
|
iconRes = R.drawable.ic_fullscreen_exit;
|
||||||
topPanelRoot.setVisibility(View.GONE);
|
topPanelRoot.setVisibility(View.GONE);
|
||||||
viewerBinding.btnDownload.setVisibility(View.VISIBLE);
|
viewerBinding.btnDownload.setVisibility(View.VISIBLE);
|
||||||
|
viewerBinding.bottomPanel.tvPostDate.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
containerLayoutParams.weight = (viewerBinding.mediaList.getVisibility() == View.VISIBLE) ? 1.35f : 1.9f;
|
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;
|
iconRes = R.drawable.ic_fullscreen;
|
||||||
topPanelRoot.setVisibility(View.VISIBLE);
|
topPanelRoot.setVisibility(View.VISIBLE);
|
||||||
viewerBinding.btnDownload.setVisibility(View.GONE);
|
viewerBinding.btnDownload.setVisibility(View.GONE);
|
||||||
|
viewerBinding.bottomPanel.tvPostDate.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewerBinding.ivToggleFullScreen.setImageResource(iconRes);
|
viewerBinding.ivToggleFullScreen.setImageResource(iconRes);
|
||||||
@ -203,7 +206,19 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
resources = getResources();
|
resources = getResources();
|
||||||
|
|
||||||
final View viewStoryPost = findViewById(R.id.viewStoryPost);
|
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.setMovementMethod(new LinkMovementMethod());
|
||||||
viewerBinding.topPanel.title.setMentionClickListener((view, text, isHashtag) ->
|
viewerBinding.topPanel.title.setMentionClickListener((view, text, isHashtag) ->
|
||||||
@ -218,7 +233,7 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
viewerBinding.postActions.setLayoutParams(new LinearLayout.LayoutParams(
|
viewerBinding.postActions.setLayoutParams(new LinearLayout.LayoutParams(
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT, 0, 0
|
LinearLayout.LayoutParams.MATCH_PARENT, 0, 0
|
||||||
));
|
));
|
||||||
containerLayoutParams.weight = 2.2f;
|
containerLayoutParams.weight = (containerLayoutParams.weight == 3.3f) ? 3.3f : 2.2f;
|
||||||
viewerBinding.container.setLayoutParams(containerLayoutParams);
|
viewerBinding.container.setLayoutParams(containerLayoutParams);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -339,6 +354,21 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
viewerBinding.mediaList.setVisibility(View.VISIBLE);
|
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);
|
viewerCaptionParent.setOnTouchListener(gestureTouchListener);
|
||||||
viewerBinding.playerView.setOnTouchListener(gestureTouchListener);
|
viewerBinding.playerView.setOnTouchListener(gestureTouchListener);
|
||||||
viewerBinding.imageViewer.setOnSingleFlingListener((e1, e2, velocityX, velocityY) -> {
|
viewerBinding.imageViewer.setOnSingleFlingListener((e1, e2, velocityX, velocityY) -> {
|
||||||
@ -560,10 +590,6 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
}
|
}
|
||||||
lastSlidePos = slidePos;
|
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();
|
postCaption = viewerPostModel.getPostCaption();
|
||||||
|
|
||||||
if (Utils.hasMentions(postCaption)) {
|
if (Utils.hasMentions(postCaption)) {
|
||||||
@ -588,12 +614,12 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
postModel.setLike(viewerPostModel.getLike());
|
postModel.setLike(viewerPostModel.getLike());
|
||||||
postModel.setBookmark(viewerPostModel.getBookmark());
|
postModel.setBookmark(viewerPostModel.getBookmark());
|
||||||
if (viewerPostModel.getLike() == true) {
|
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(
|
viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(
|
||||||
R.color.btn_pink_background, null)));
|
R.color.btn_pink_background, null)));
|
||||||
}
|
}
|
||||||
else {
|
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(
|
viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(
|
||||||
R.color.btn_lightpink_background, null)));
|
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.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);
|
viewerBinding.bottomPanel.tvPostDate.setSelected(true);
|
||||||
|
|
||||||
url = viewerPostModel.getDisplayUrl();
|
url = viewerPostModel.getDisplayUrl();
|
||||||
@ -718,7 +744,7 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
||||||
ok = true;
|
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();
|
urlConnection.disconnect();
|
||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
Log.e("austin_debug", action+": " + ex);
|
Log.e("austin_debug", action+": " + ex);
|
||||||
@ -729,8 +755,8 @@ public final class PostViewer extends BaseLanguageActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void result) {
|
protected void onPostExecute(Void result) {
|
||||||
if (ok == true && action == "likes") {
|
if (ok == true && action == "likes") {
|
||||||
viewerPostModel.setLike(!postModel.getLike());
|
postModel.setLike(!postModel.getLike());
|
||||||
postModel.setManualLike(!postModel.getLike());
|
viewerPostModel.setManualLike(!postModel.getLike());
|
||||||
refreshPost();
|
refreshPost();
|
||||||
}
|
}
|
||||||
else if (ok == true && action == "save") {
|
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> {
|
public final class MessageItemsAdapter extends RecyclerView.Adapter<TextMessageViewHolder> {
|
||||||
private static final int MESSAGE_INCOMING = 69, MESSAGE_OUTGOING = 420;
|
private static final int MESSAGE_INCOMING = 69, MESSAGE_OUTGOING = 420;
|
||||||
private final ProfileModel myProfileHolder =
|
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<DirectItemModel> directItemModels;
|
||||||
private final ArrayList<ProfileModel> users;
|
private final ArrayList<ProfileModel> users;
|
||||||
private final View.OnClickListener onClickListener;
|
private final View.OnClickListener onClickListener;
|
||||||
|
@ -109,8 +109,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]>
|
|||||||
|
|
||||||
if (childComment != null) {
|
if (childComment != null) {
|
||||||
final JSONObject owner = childComment.getJSONObject("owner");
|
final JSONObject owner = childComment.getJSONObject("owner");
|
||||||
final ProfileModel profileModel = new ProfileModel(false,
|
final ProfileModel profileModel = new ProfileModel(false, false, false,
|
||||||
false,
|
|
||||||
owner.getString(Constants.EXTRAS_ID),
|
owner.getString(Constants.EXTRAS_ID),
|
||||||
owner.getString(Constants.EXTRAS_USERNAME),
|
owner.getString(Constants.EXTRAS_USERNAME),
|
||||||
null, null, null,
|
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 comment = comments.getJSONObject(i).getJSONObject("node");
|
||||||
|
|
||||||
final JSONObject owner = comment.getJSONObject("owner");
|
final JSONObject owner = comment.getJSONObject("owner");
|
||||||
final ProfileModel profileModel = new ProfileModel(false,
|
final ProfileModel profileModel = new ProfileModel(false, false,
|
||||||
owner.optBoolean("is_verified"),
|
owner.optBoolean("is_verified"),
|
||||||
owner.getString(Constants.EXTRAS_ID),
|
owner.getString(Constants.EXTRAS_ID),
|
||||||
owner.getString(Constants.EXTRAS_USERNAME),
|
owner.getString(Constants.EXTRAS_USERNAME),
|
||||||
@ -229,6 +228,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]>
|
|||||||
|
|
||||||
tempJsonObject = childComment.getJSONObject("owner");
|
tempJsonObject = childComment.getJSONObject("owner");
|
||||||
final ProfileModel childProfileModel = new ProfileModel(false, false,
|
final ProfileModel childProfileModel = new ProfileModel(false, false,
|
||||||
|
tempJsonObject.optBoolean("is_verified"),
|
||||||
tempJsonObject.getString(Constants.EXTRAS_ID),
|
tempJsonObject.getString(Constants.EXTRAS_ID),
|
||||||
tempJsonObject.getString(Constants.EXTRAS_USERNAME),
|
tempJsonObject.getString(Constants.EXTRAS_USERNAME),
|
||||||
null, null, null,
|
null, null, null,
|
||||||
|
@ -98,6 +98,7 @@ public final class FeedFetcher extends AsyncTask<Void, Void, FeedModel[]> {
|
|||||||
if (feedItem.has("owner")) {
|
if (feedItem.has("owner")) {
|
||||||
final JSONObject owner = feedItem.getJSONObject("owner");
|
final JSONObject owner = feedItem.getJSONObject("owner");
|
||||||
profileModel = new ProfileModel(owner.optBoolean("is_private"),
|
profileModel = new ProfileModel(owner.optBoolean("is_private"),
|
||||||
|
false, // if you can see it then you def follow
|
||||||
owner.optBoolean("is_verified"),
|
owner.optBoolean("is_verified"),
|
||||||
owner.getString(Constants.EXTRAS_ID),
|
owner.getString(Constants.EXTRAS_ID),
|
||||||
owner.getString(Constants.EXTRAS_USERNAME),
|
owner.getString(Constants.EXTRAS_USERNAME),
|
||||||
@ -153,7 +154,8 @@ public final class FeedFetcher extends AsyncTask<Void, Void, FeedModel[]> {
|
|||||||
node.getString(Constants.EXTRAS_ID),
|
node.getString(Constants.EXTRAS_ID),
|
||||||
isChildVideo ? node.getString("video_url") : Utils.getHighQualityImage(node),
|
isChildVideo ? node.getString("video_url") : Utils.getHighQualityImage(node),
|
||||||
null, null, null,
|
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"));
|
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 node = feedStoriesReel.getJSONObject(i).getJSONObject("node");
|
||||||
|
|
||||||
final JSONObject user = node.getJSONObject(node.has("user") ? "user" : "owner");
|
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("id"),
|
||||||
user.getString("username"),
|
user.getString("username"),
|
||||||
null, null, null,
|
null, null, null,
|
||||||
|
@ -81,7 +81,6 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]>
|
|||||||
endCursor = commentObject.optString("end_cursor");
|
endCursor = commentObject.optString("end_cursor");
|
||||||
|
|
||||||
if (mediaItemType != MediaItemType.MEDIA_TYPE_SLIDER) {
|
if (mediaItemType != MediaItemType.MEDIA_TYPE_SLIDER) {
|
||||||
Log.d("austin_debug", "m: "+media);
|
|
||||||
final ViewerPostModel postModel = new ViewerPostModel(mediaItemType,
|
final ViewerPostModel postModel = new ViewerPostModel(mediaItemType,
|
||||||
media.getString(Constants.EXTRAS_ID),
|
media.getString(Constants.EXTRAS_ID),
|
||||||
isVideo ? media.getString("video_url") : Utils.getHighQualityImage(media),
|
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,
|
Utils.isEmpty(postCaption) ? null : postCaption,
|
||||||
username,
|
username,
|
||||||
isVideo && media.has("video_view_count") ? media.getLong("video_view_count") : -1,
|
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.setCommentsCount(commentsCount);
|
||||||
postModel.setCommentsEndCursor(endCursor);
|
postModel.setCommentsEndCursor(endCursor);
|
||||||
@ -107,13 +107,14 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]>
|
|||||||
final boolean isChildVideo = node.getBoolean("is_video");
|
final boolean isChildVideo = node.getBoolean("is_video");
|
||||||
|
|
||||||
postModels[i] = new ViewerPostModel(isChildVideo ? MediaItemType.MEDIA_TYPE_VIDEO : MediaItemType.MEDIA_TYPE_IMAGE,
|
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),
|
isChildVideo ? node.getString("video_url") : Utils.getHighQualityImage(node),
|
||||||
node.getString(Constants.EXTRAS_SHORTCODE),
|
node.getString(Constants.EXTRAS_SHORTCODE),
|
||||||
postCaption,
|
postCaption,
|
||||||
username,
|
username,
|
||||||
isChildVideo && node.has("video_view_count") ? node.getLong("video_view_count") : -1,
|
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"));
|
postModels[i].setSliderDisplayUrl(node.getString("display_url"));
|
||||||
|
|
||||||
Utils.checkExistence(downloadDir, customDir, username, true, i, postModels[i]);
|
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);
|
final JSONObject user = new JSONObject(Utils.readFromConnection(conn)).getJSONObject("graphql").getJSONObject(Constants.EXTRAS_USER);
|
||||||
|
|
||||||
boolean isPrivate = user.getBoolean("is_private");
|
boolean isPrivate = user.getBoolean("is_private");
|
||||||
|
boolean reallyPrivate = isPrivate;
|
||||||
final JSONObject timelineMedia = user.getJSONObject("edge_owner_to_timeline_media");
|
final JSONObject timelineMedia = user.getJSONObject("edge_owner_to_timeline_media");
|
||||||
if (timelineMedia.has("edges")) {
|
if (timelineMedia.has("edges")) {
|
||||||
final JSONArray edges = timelineMedia.getJSONArray("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");
|
String url = user.optString("external_url");
|
||||||
if (Utils.isEmpty(url)) url = null;
|
if (Utils.isEmpty(url)) url = null;
|
||||||
|
|
||||||
result = new ProfileModel(isPrivate,
|
result = new ProfileModel(isPrivate,
|
||||||
|
reallyPrivate,
|
||||||
user.getBoolean("is_verified"),
|
user.getBoolean("is_verified"),
|
||||||
user.getString(Constants.EXTRAS_ID),
|
user.getString(Constants.EXTRAS_ID),
|
||||||
userName,
|
userName,
|
||||||
|
@ -19,14 +19,11 @@ public abstract class BasePostModel implements Serializable {
|
|||||||
protected long timestamp;
|
protected long timestamp;
|
||||||
protected int position;
|
protected int position;
|
||||||
boolean liked, bookmarked;
|
boolean liked, bookmarked;
|
||||||
long likes;
|
|
||||||
|
|
||||||
public boolean getLike() {
|
public boolean getLike() {
|
||||||
return liked;
|
return liked;
|
||||||
}
|
}
|
||||||
public long getLikes() {
|
|
||||||
return likes;
|
|
||||||
}
|
|
||||||
public boolean getBookmark() {
|
public boolean getBookmark() {
|
||||||
return bookmarked;
|
return bookmarked;
|
||||||
}
|
}
|
||||||
@ -35,13 +32,6 @@ public abstract class BasePostModel implements Serializable {
|
|||||||
liked = like; return liked;
|
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) {
|
public boolean setBookmark(final boolean bookmark) {
|
||||||
bookmarked = bookmark; return bookmarked;
|
bookmarked = bookmark; return bookmarked;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ public class PostModel extends BasePostModel {
|
|||||||
this.postCaption = postCaption;
|
this.postCaption = postCaption;
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.liked = liked;
|
this.liked = liked;
|
||||||
this.likes = likes;
|
|
||||||
this.bookmarked = bookmarked;
|
this.bookmarked = bookmarked;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,10 +34,6 @@ public class PostModel extends BasePostModel {
|
|||||||
return endCursor;
|
return endCursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLikes() {
|
|
||||||
return likes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasNextPage() {
|
public boolean hasNextPage() {
|
||||||
return endCursor != null && hasNextPage;
|
return endCursor != null && hasNextPage;
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,17 @@ package awais.instagrabber.models;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
public final class ProfileModel implements 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 long postCount, followersCount, followingCount;
|
||||||
private final String id, username, name, biography, url, sdProfilePic, hdProfilePic;
|
private final String id, username, name, biography, url, sdProfilePic, hdProfilePic;
|
||||||
|
|
||||||
public ProfileModel(final boolean isPrivate, final boolean isVerified, final String id, final String username,
|
public ProfileModel(final boolean isPrivate, final boolean reallyPrivate,
|
||||||
final String name, final String biography, final String url, final String sdProfilePic, final String hdProfilePic,
|
final boolean isVerified, final String id, final String username, final String name, final String biography,
|
||||||
final long postCount, final long followersCount, final long followingCount, final boolean following,
|
final String url, final String sdProfilePic, final String hdProfilePic, final long postCount,
|
||||||
final boolean restricted, final boolean blocked, final boolean requested) {
|
final long followersCount, final long followingCount, final boolean following, final boolean restricted,
|
||||||
|
final boolean blocked, final boolean requested) {
|
||||||
this.isPrivate = isPrivate;
|
this.isPrivate = isPrivate;
|
||||||
|
this.reallyPrivate = reallyPrivate;
|
||||||
this.isVerified = isVerified;
|
this.isVerified = isVerified;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
@ -33,6 +35,10 @@ public final class ProfileModel implements Serializable {
|
|||||||
return isPrivate;
|
return isPrivate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isReallyPrivate() {
|
||||||
|
return reallyPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isVerified() {
|
public boolean isVerified() {
|
||||||
return isVerified;
|
return isVerified;
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,12 @@ public final class ViewerPostModel extends BasePostModel {
|
|||||||
protected final String username;
|
protected final String username;
|
||||||
protected final long videoViews;
|
protected final long videoViews;
|
||||||
protected String sliderDisplayUrl, commentsEndCursor;
|
protected String sliderDisplayUrl, commentsEndCursor;
|
||||||
protected long commentsCount;
|
protected long commentsCount, likes;
|
||||||
private boolean isCurrentSlide = false;
|
private boolean isCurrentSlide = false;
|
||||||
|
|
||||||
public ViewerPostModel(final MediaItemType itemType, final String postId, final String displayUrl, final String shortCode,
|
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,
|
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.itemType = itemType;
|
||||||
this.postId = postId;
|
this.postId = postId;
|
||||||
this.displayUrl = displayUrl;
|
this.displayUrl = displayUrl;
|
||||||
@ -21,6 +21,7 @@ public final class ViewerPostModel extends BasePostModel {
|
|||||||
this.videoViews = videoViews;
|
this.videoViews = videoViews;
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.liked = liked;
|
this.liked = liked;
|
||||||
|
this.likes = likes;
|
||||||
this.bookmarked = bookmarked;
|
this.bookmarked = bookmarked;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,6 +45,17 @@ public final class ViewerPostModel extends BasePostModel {
|
|||||||
return videoViews;
|
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) {
|
public void setSliderDisplayUrl(final String sliderDisplayUrl) {
|
||||||
this.sliderDisplayUrl = sliderDisplayUrl;
|
this.sliderDisplayUrl = sliderDisplayUrl;
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,8 @@ public final class LocaleUtils {
|
|||||||
if (appLanguageIndex == 4) return "zh";
|
if (appLanguageIndex == 4) return "zh";
|
||||||
if (appLanguageIndex == 5) return "in";
|
if (appLanguageIndex == 5) return "in";
|
||||||
if (appLanguageIndex == 6) return "it";
|
if (appLanguageIndex == 6) return "it";
|
||||||
|
if (appLanguageIndex == 7) return "de";
|
||||||
|
if (appLanguageIndex == 8) return "pl";
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -382,6 +382,7 @@ public final class Utils {
|
|||||||
if (userObj != null) {
|
if (userObj != null) {
|
||||||
user = new ProfileModel(
|
user = new ProfileModel(
|
||||||
userObj.getBoolean("is_private"),
|
userObj.getBoolean("is_private"),
|
||||||
|
false, // temporary
|
||||||
userObj.optBoolean("is_verified"),
|
userObj.optBoolean("is_verified"),
|
||||||
String.valueOf(userObj.get("pk")),
|
String.valueOf(userObj.get("pk")),
|
||||||
userObj.getString("username"),
|
userObj.getString("username"),
|
||||||
@ -459,6 +460,7 @@ public final class Utils {
|
|||||||
for (int j = 0; j < usersLen; ++j) {
|
for (int j = 0; j < usersLen; ++j) {
|
||||||
final JSONObject userObject = users.getJSONObject(j);
|
final JSONObject userObject = users.getJSONObject(j);
|
||||||
userModels[j] = new ProfileModel(userObject.getBoolean("is_private"),
|
userModels[j] = new ProfileModel(userObject.getBoolean("is_private"),
|
||||||
|
false,
|
||||||
userObject.optBoolean("is_verified"),
|
userObject.optBoolean("is_verified"),
|
||||||
String.valueOf(userObject.get("pk")),
|
String.valueOf(userObject.get("pk")),
|
||||||
userObject.getString("username"),
|
userObject.getString("username"),
|
||||||
@ -608,6 +610,7 @@ public final class Utils {
|
|||||||
case PROFILE: {
|
case PROFILE: {
|
||||||
final JSONObject profile = itemObject.getJSONObject("profile");
|
final JSONObject profile = itemObject.getJSONObject("profile");
|
||||||
profileModel = new ProfileModel(profile.getBoolean("is_private"),
|
profileModel = new ProfileModel(profile.getBoolean("is_private"),
|
||||||
|
false,
|
||||||
profile.getBoolean("is_verified"),
|
profile.getBoolean("is_verified"),
|
||||||
Long.toString(profile.getLong("pk")),
|
Long.toString(profile.getLong("pk")),
|
||||||
profile.getString("username"),
|
profile.getString("username"),
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
<item>简体中文</item>
|
<item>简体中文</item>
|
||||||
<item>印尼文 [感谢 @Galang23 (GitLab)]</item>
|
<item>印尼文 [感谢 @Galang23 (GitLab)]</item>
|
||||||
<item>意大利文 [感谢 @RAR_Ramar (Telegram)]</item>
|
<item>意大利文 [感谢 @RAR_Ramar (Telegram)]</item>
|
||||||
<item>German [Thanks to @MoaufmKlo (GitHub)]</item>
|
<item>德文 [感谢 @MoaufmKlo (GitHub)]</item>
|
||||||
<item>Polish [Thanks to @Lego8486 (GitHub)]</item>
|
<item>波兰文 [感谢 @Lego8486 (GitHub)]</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="theme_presets">
|
<string-array name="theme_presets">
|
||||||
<item>自动 / 跟随系统</item>
|
<item>自动 / 跟随系统</item>
|
||||||
|
@ -68,16 +68,16 @@
|
|||||||
<string name="project_link">参观项目页面</string>
|
<string name="project_link">参观项目页面</string>
|
||||||
<string name="telegram_link">加入 Telegram 群组</string>
|
<string name="telegram_link">加入 Telegram 群组</string>
|
||||||
<string name="matrix_link">加入 Matrix 群组</string>
|
<string name="matrix_link">加入 Matrix 群组</string>
|
||||||
<string name="like">Like (%s)</string>
|
<string name="like">赞 (%s)</string>
|
||||||
<string name="unlike">Unlike (%s)</string>
|
<string name="unlike">取消赞 (%s)</string>
|
||||||
<string name="bookmark">加入收藏</string>
|
<string name="bookmark">加入收藏</string>
|
||||||
<string name="unbookmark">解除收藏</string>
|
<string name="unbookmark">解除收藏</string>
|
||||||
<string name="follow">关注</string>
|
<string name="follow">关注</string>
|
||||||
<string name="unfollow">脱粉</string>
|
<string name="unfollow">脱粉</string>
|
||||||
<string name="favorite">Add to Favorites</string>
|
<string name="favorite">加入收藏</string>
|
||||||
<string name="unfavorite">Remove from Favorites</string>
|
<string name="unfavorite">取消收藏</string>
|
||||||
<string name="favorite_short">Favorite</string>
|
<string name="favorite_short">加入收藏</string>
|
||||||
<string name="unfavorite_short">Unfavorite</string>
|
<string name="unfavorite_short">取消收藏</string>
|
||||||
<string name="block">拉黑</string>
|
<string name="block">拉黑</string>
|
||||||
<string name="unblock">解禁</string>
|
<string name="unblock">解禁</string>
|
||||||
<string name="restrict">限制</string>
|
<string name="restrict">限制</string>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<string name="quick_access_confirm_delete">你真的要删除 %s?</string>
|
<string name="quick_access_confirm_delete">你真的要删除 %s?</string>
|
||||||
<string name="profile_viewer_imageinfo">宽: %d\n高: %d</string>
|
<string name="profile_viewer_imageinfo">宽: %d\n高: %d</string>
|
||||||
<string name="profile_viewer_colordepth_prefix">\n色深:</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="open_profile">打开主页</string>
|
||||||
<string name="view_pfp">查看头像</string>
|
<string name="view_pfp">查看头像</string>
|
||||||
<string name="direct_messages_you">你</string>
|
<string name="direct_messages_you">你</string>
|
||||||
@ -147,11 +147,11 @@
|
|||||||
<string name="downloader_error_download_file">下载文件时出错</string>
|
<string name="downloader_error_download_file">下载文件时出错</string>
|
||||||
<string name="comment_viewer_copy_user">复制用户名</string>
|
<string name="comment_viewer_copy_user">复制用户名</string>
|
||||||
<string name="comment_viewer_copy_comment">复制评论</string>
|
<string name="comment_viewer_copy_comment">复制评论</string>
|
||||||
<string name="comment_viewer_reply_comment">Reply to comment</string>
|
<string name="comment_viewer_reply_comment">回复评论</string>
|
||||||
<string name="comment_viewer_like_comment">Like comment</string>
|
<string name="comment_viewer_like_comment">赞评论</string>
|
||||||
<string name="comment_viewer_unlike_comment">Unlike comment</string>
|
<string name="comment_viewer_unlike_comment">取消赞评论</string>
|
||||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
<string name="comment_viewer_delete_comment">删除评论</string>
|
||||||
<string name="comment_send_empty_comment">No empty comments, dawg!</string>
|
<string name="comment_send_empty_comment">评论不得为空!</string>
|
||||||
<string name="comment_view_mention_user_search">要搜索用户名吗?</string>
|
<string name="comment_view_mention_user_search">要搜索用户名吗?</string>
|
||||||
<string name="comment_view_mention_hash_search">要搜索标签吗?</string>
|
<string name="comment_view_mention_hash_search">要搜索标签吗?</string>
|
||||||
<string name="followers_type_followers">粉丝</string>
|
<string name="followers_type_followers">粉丝</string>
|
||||||
@ -164,8 +164,10 @@
|
|||||||
<string name="login_success_loading_cookies">成功载入 cookies!\n若你仍不能查看私密页面/帖子,重新登录!</string>
|
<string name="login_success_loading_cookies">成功载入 cookies!\n若你仍不能查看私密页面/帖子,重新登录!</string>
|
||||||
<string name="comment_hint">撰写新评论...</string>
|
<string name="comment_hint">撰写新评论...</string>
|
||||||
<string name="update_available">检测到有新版本! (%s)</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="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="share_public_post">分享公开帖至…</string>
|
||||||
|
<string name="share_private_post">这是一个私密帖!请分享给能看到它的人!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -169,6 +169,9 @@
|
|||||||
|
|
||||||
<string name="comment_hint">Write a new comment...</string>
|
<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_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="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>
|
<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 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
|
* 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)
|
* 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…
Reference in New Issue
Block a user