Skip to content

Commit

Permalink
fix(LinkCard): skip mastodon.social redirect page
Browse files Browse the repository at this point in the history
Skips the mastodon.social exclusive link redirect warning page, by
manually replacing the link card link.
  • Loading branch information
FineFindus committed Jun 26, 2024
1 parent e8ce2a7 commit e9f28cf
Showing 1 changed file with 20 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.OutlineProviders;
import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.text.LinkSpan;
import org.joinmastodon.android.ui.utils.UiUtils;

import java.util.regex.Matcher;

import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
Expand Down Expand Up @@ -142,7 +146,22 @@ public void clearImage(int index){
}

private void onClick(View v){
UiUtils.openURL(itemView.getContext(), item.parentFragment.getAccountID(), item.status.card.url);
String url=item.status.card.url;
// Mastodon.social sometimes adds an additional redirect page
// e.g. https://mastodon.social/@GenuineHuman/112683634483993833 (needs to be opened on another server)
// this is really disruptive on mobile, especially since it breaks the loopUp/openURL functionality
if(url.startsWith("https://mastodon.social/redirect/statuses/")){
Uri parsedURL=Uri.parse(url);
Matcher matcher=HtmlParser.URL_PATTERN.matcher(item.status.content);
while(matcher.find() && parsedURL.getLastPathSegment()!=null){
url=matcher.group(3);
if(TextUtils.isEmpty(matcher.group(4)))
url="http://"+url;
if(url.endsWith(parsedURL.getLastPathSegment()))
break;
}
}
UiUtils.openURL(itemView.getContext(), item.parentFragment.getAccountID(), url);
}
}
}

0 comments on commit e9f28cf

Please sign in to comment.