mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 12:47:26 +01:00
Add support for parsing inline static emotes (#589)
This commit is contained in:
parent
ae63e20764
commit
e4c64668db
@ -1,5 +1,9 @@
|
|||||||
package ml.docilealligator.infinityforreddit.comment;
|
package ml.docilealligator.infinityforreddit.comment;
|
||||||
|
|
||||||
|
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_DOWNVOTE;
|
||||||
|
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_NO_VOTE;
|
||||||
|
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_UPVOTE;
|
||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
|
||||||
@ -15,10 +19,6 @@ import java.util.concurrent.Executor;
|
|||||||
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
|
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
|
|
||||||
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_DOWNVOTE;
|
|
||||||
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_NO_VOTE;
|
|
||||||
import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_UPVOTE;
|
|
||||||
|
|
||||||
public class ParseComment {
|
public class ParseComment {
|
||||||
public static void parseComment(Executor executor, Handler handler, String response,
|
public static void parseComment(Executor executor, Handler handler, String response,
|
||||||
ArrayList<Comment> commentData, boolean expandChildren,
|
ArrayList<Comment> commentData, boolean expandChildren,
|
||||||
@ -189,6 +189,10 @@ public class ParseComment {
|
|||||||
String commentMarkdown = "";
|
String commentMarkdown = "";
|
||||||
if (!singleCommentData.isNull(JSONUtils.BODY_KEY)) {
|
if (!singleCommentData.isNull(JSONUtils.BODY_KEY)) {
|
||||||
commentMarkdown = Utils.parseInlineGifInComments(Utils.modifyMarkdown(singleCommentData.getString(JSONUtils.BODY_KEY).trim()));
|
commentMarkdown = Utils.parseInlineGifInComments(Utils.modifyMarkdown(singleCommentData.getString(JSONUtils.BODY_KEY).trim()));
|
||||||
|
if (!singleCommentData.isNull(JSONUtils.MEDIA_METADATA_KEY)) {
|
||||||
|
JSONObject mediaMetadataObject = singleCommentData.getJSONObject(JSONUtils.MEDIA_METADATA_KEY);
|
||||||
|
commentMarkdown = Utils.parseInlineEmotes(commentMarkdown, mediaMetadataObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String commentRawText = Utils.trimTrailingWhitespace(
|
String commentRawText = Utils.trimTrailingWhitespace(
|
||||||
Html.fromHtml(singleCommentData.getString(JSONUtils.BODY_HTML_KEY))).toString();
|
Html.fromHtml(singleCommentData.getString(JSONUtils.BODY_HTML_KEY))).toString();
|
||||||
@ -229,7 +233,7 @@ public class ParseComment {
|
|||||||
return new Comment(id, fullName, author, authorFlair, authorFlairHTMLBuilder.toString(),
|
return new Comment(id, fullName, author, authorFlair, authorFlairHTMLBuilder.toString(),
|
||||||
linkAuthor, submitTime, commentMarkdown, commentRawText,
|
linkAuthor, submitTime, commentMarkdown, commentRawText,
|
||||||
linkId, subredditName, parentId, score, voteType, isSubmitter, distinguished,
|
linkId, subredditName, parentId, score, voteType, isSubmitter, distinguished,
|
||||||
permalink, awardingsBuilder.toString(),depth, collapsed, hasReply, scoreHidden, saved);
|
permalink, awardingsBuilder.toString(), depth, collapsed, hasReply, scoreHidden, saved);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -175,4 +175,5 @@ public class JSONUtils {
|
|||||||
public static final String CAPTION_URL_KEY = "outbound_url";
|
public static final String CAPTION_URL_KEY = "outbound_url";
|
||||||
public static final String FILES_KEY = "files";
|
public static final String FILES_KEY = "files";
|
||||||
public static final String MP4_MOBILE_KEY = "mp4-mobile";
|
public static final String MP4_MOBILE_KEY = "mp4-mobile";
|
||||||
|
public static final String STATUS_KEY = "status";
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,9 @@ import androidx.core.text.HtmlCompat;
|
|||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -72,7 +74,6 @@ public final class Utils {
|
|||||||
Pattern.compile("!\\[gif]\\(giphy\\|\\w+\\)"),
|
Pattern.compile("!\\[gif]\\(giphy\\|\\w+\\)"),
|
||||||
Pattern.compile("!\\[gif]\\(giphy\\|\\w+\\|downsized\\)"),
|
Pattern.compile("!\\[gif]\\(giphy\\|\\w+\\|downsized\\)"),
|
||||||
Pattern.compile("!\\[gif]\\(emote\\|\\w+\\|\\w+\\)"),
|
Pattern.compile("!\\[gif]\\(emote\\|\\w+\\|\\w+\\)"),
|
||||||
Pattern.compile("!\\[img]\\(emote\\|\\w+\\|\\w+\\)")
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public static String modifyMarkdown(String markdown) {
|
public static String modifyMarkdown(String markdown) {
|
||||||
@ -178,6 +179,37 @@ public final class Utils {
|
|||||||
return markdownStringBuilder.toString();
|
return markdownStringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String parseInlineEmotes(String markdown, JSONObject mediaMetadataObject) throws JSONException {
|
||||||
|
JSONArray mediaMetadataNames = mediaMetadataObject.names();
|
||||||
|
for (int i = 0; i < mediaMetadataNames.length(); i++) {
|
||||||
|
if (!mediaMetadataNames.isNull(i)) {
|
||||||
|
String mediaMetadataKey = mediaMetadataNames.getString(i);
|
||||||
|
if (mediaMetadataObject.isNull(mediaMetadataKey)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
JSONObject item = mediaMetadataObject.getJSONObject(mediaMetadataKey);
|
||||||
|
if (item.isNull(JSONUtils.STATUS_KEY)
|
||||||
|
|| !item.getString(JSONUtils.STATUS_KEY).equals("valid")
|
||||||
|
|| item.isNull(JSONUtils.ID_KEY)
|
||||||
|
|| item.isNull(JSONUtils.T_KEY)
|
||||||
|
|| item.isNull(JSONUtils.S_KEY)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String emote_type = item.getString(JSONUtils.T_KEY);
|
||||||
|
String emote_id = item.getString(JSONUtils.ID_KEY);
|
||||||
|
|
||||||
|
JSONObject s_key = item.getJSONObject(JSONUtils.S_KEY);
|
||||||
|
if (s_key.isNull(JSONUtils.U_KEY)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String emote_url = s_key.getString(JSONUtils.U_KEY);
|
||||||
|
|
||||||
|
markdown = markdown.replace("![img](" + emote_id + ")", "[[" + emote_type + "]](" + emote_url + ") ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return markdown;
|
||||||
|
}
|
||||||
|
|
||||||
public static CharSequence trimTrailingWhitespace(CharSequence source) {
|
public static CharSequence trimTrailingWhitespace(CharSequence source) {
|
||||||
|
|
||||||
if (source == null) {
|
if (source == null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user