From 337689aa4555c53d6fc1902503c399c525335b9b Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Thu, 8 Dec 2022 21:17:11 -0300 Subject: [PATCH] The api side is actually working! --- .../statuses/GetStatusTranslation.java | 20 +++ .../android/model/StatusTranslation.java | 146 ++++++++++++++++++ .../displayitems/HeaderStatusDisplayItem.java | 17 ++ mastodon/src/main/res/menu/post.xml | 1 + mastodon/src/main/res/values/strings.xml | 1 + 5 files changed, 185 insertions(+) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/GetStatusTranslation.java create mode 100644 mastodon/src/main/java/org/joinmastodon/android/model/StatusTranslation.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/GetStatusTranslation.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/GetStatusTranslation.java new file mode 100644 index 000000000..fef0a51b5 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/GetStatusTranslation.java @@ -0,0 +1,20 @@ +package org.joinmastodon.android.api.requests.statuses; + +import org.joinmastodon.android.api.AllFieldsAreRequired; +import org.joinmastodon.android.api.MastodonAPIRequest; +import org.joinmastodon.android.model.BaseModel; +import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.model.StatusTranslation; + +import java.util.Locale; + +public class GetStatusTranslation extends MastodonAPIRequest{ + public GetStatusTranslation(String id){ + super(HttpMethod.POST, "/statuses/"+id+"/translate", StatusTranslation.class); + Request r = new Request(); + setRequestBody(r); + } + + public static class Request{ + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/StatusTranslation.java b/mastodon/src/main/java/org/joinmastodon/android/model/StatusTranslation.java new file mode 100644 index 000000000..b1098d773 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/model/StatusTranslation.java @@ -0,0 +1,146 @@ +package org.joinmastodon.android.model; + +import org.joinmastodon.android.GlobalUserPreferences; +import org.joinmastodon.android.api.ObjectValidationException; +import org.joinmastodon.android.api.RequiredField; +import org.joinmastodon.android.events.StatusCountersUpdatedEvent; +import org.joinmastodon.android.ui.text.HtmlParser; +import org.parceler.Parcel; + +import java.time.Instant; +import java.util.List; + +@Parcel +public class StatusTranslation extends BaseModel implements DisplayItemsParent{ +// @RequiredField + public String id; +// @RequiredField + public String uri; +// @RequiredField + public Instant createdAt; +// @RequiredField + public Account account; + // @RequiredField + public String content; +// @RequiredField + public StatusPrivacy visibility; + public boolean sensitive; +// @RequiredField + public String spoilerText; +// @RequiredField + public List mediaAttachments; + public Application application; +// @RequiredField + public List mentions; +// @RequiredField + public List tags; +// @RequiredField + public List emojis; + public long reblogsCount; + public long favouritesCount; + public long repliesCount; + public Instant editedAt; + + public String url; + public String inReplyToId; + public String inReplyToAccountId; + public Status reblog; + public Poll poll; + public Card card; + public String language; + public String text; + + public boolean favourited; + public boolean reblogged; + public boolean muted; + public boolean bookmarked; + public boolean pinned; + + public transient boolean spoilerRevealed; + public transient boolean hasGapAfter; + private transient String strippedText; + + @Override + public void postprocess() throws ObjectValidationException{ + super.postprocess(); + if(application!=null) + application.postprocess(); + for(Mention m:mentions) + m.postprocess(); + for(Hashtag t:tags) + t.postprocess(); + for(Emoji e:emojis) + e.postprocess(); + for(Attachment a:mediaAttachments) + a.postprocess(); + account.postprocess(); + if(poll!=null) + poll.postprocess(); + if(card!=null) + card.postprocess(); + if(reblog!=null) + reblog.postprocess(); + + spoilerRevealed=GlobalUserPreferences.alwaysExpandContentWarnings || !sensitive; + } + + @Override + public String toString(){ + return "Status{"+ + "id='"+id+'\''+ + ", uri='"+uri+'\''+ + ", createdAt="+createdAt+ + ", account="+account+ + ", content='"+content+'\''+ + ", visibility="+visibility+ + ", sensitive="+sensitive+ + ", spoilerText='"+spoilerText+'\''+ + ", mediaAttachments="+mediaAttachments+ + ", application="+application+ + ", mentions="+mentions+ + ", tags="+tags+ + ", emojis="+emojis+ + ", reblogsCount="+reblogsCount+ + ", favouritesCount="+favouritesCount+ + ", repliesCount="+repliesCount+ + ", url='"+url+'\''+ + ", inReplyToId='"+inReplyToId+'\''+ + ", inReplyToAccountId='"+inReplyToAccountId+'\''+ + ", reblog="+reblog+ + ", poll="+poll+ + ", card="+card+ + ", language='"+language+'\''+ + ", text='"+text+'\''+ + ", favourited="+favourited+ + ", reblogged="+reblogged+ + ", muted="+muted+ + ", bookmarked="+bookmarked+ + ", pinned="+pinned+ + '}'; + } + + @Override + public String getID(){ + return id; + } + + public void update(StatusCountersUpdatedEvent ev){ + favouritesCount=ev.favorites; + reblogsCount=ev.reblogs; + repliesCount=ev.replies; + favourited=ev.favorited; + reblogged=ev.reblogged; + bookmarked=ev.bookmarked; + pinned=ev.pinned; + } + + public StatusTranslation getContentStatus(){ + return this; + } + + public String getStrippedText(){ + if(strippedText==null) + strippedText=HtmlParser.strip(content); + return strippedText; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index 885976820..0637a66a8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -23,6 +23,7 @@ import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText; +import org.joinmastodon.android.api.requests.statuses.GetStatusTranslation; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.ComposeFragment; @@ -33,6 +34,7 @@ import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.model.StatusTranslation; import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import org.joinmastodon.android.ui.utils.UiUtils; @@ -212,6 +214,21 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ UiUtils.confirmToggleBlockDomain(activity, item.parentFragment.getAccountID(), account.getDomain(), relationship!=null && relationship.domainBlocking, ()->{}); }else if(id==R.id.bookmark){ AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked); + }else if(id==R.id.translate){ + new GetStatusTranslation(item.status.id) + .setCallback(new Callback(){ + @Override + public void onSuccess(StatusTranslation status){ + System.out.println(status.getStrippedText()); + } + @Override + public void onError(ErrorResponse error){ + error.showToast(item.parentFragment.getActivity()); + } + + }) + .wrapProgress(item.parentFragment.getActivity(), R.string.loading, true) + .exec(item.parentFragment.getAccountID()); } return true; }); diff --git a/mastodon/src/main/res/menu/post.xml b/mastodon/src/main/res/menu/post.xml index b1df8f168..9bbcab8a2 100644 --- a/mastodon/src/main/res/menu/post.xml +++ b/mastodon/src/main/res/menu/post.xml @@ -5,6 +5,7 @@ + diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 3a1df9282..9836b05e7 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -435,4 +435,5 @@ Blue Orange Yellow + Translate