From 8273685914fe5e84a2f3411e4a1d495e99f6f49b Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Thu, 3 Apr 2025 11:40:17 -0300 Subject: [PATCH] refactor(Instance.java): add back pleroma, akkoma, and pixelfed specific fields --- .../joinmastodon/android/model/Instance.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java index 1a63f064c..f49702a06 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java @@ -8,6 +8,7 @@ import org.parceler.Parcel; import java.net.IDN; import java.util.Collections; import java.util.List; +import java.util.Optional; public abstract class Instance extends BaseModel{ /** @@ -38,6 +39,14 @@ public abstract class Instance extends BaseModel{ // non-standard field in some Mastodon forks public int maxTootChars; + // MOSHIDON: we got pleroma babyyyyyy + public Pleroma pleroma; + public PleromaPollLimits pollLimits; + + // MOSHIDON: + /** like uri, but always without scheme and trailing slash */ + public transient String normalizedUri; + @Override public void postprocess() throws ObjectValidationException{ super.postprocess(); @@ -77,6 +86,35 @@ public abstract class Instance extends BaseModel{ return getApiVersion("mastodon"); } + // MOSHIDON: + public boolean isAkkoma() { + return pleroma != null; + } + + public boolean isPixelfed() { + return version.contains("compatible; Pixelfed"); + } + + public enum Feature { + BUBBLE_TIMELINE, + MACHINE_TRANSLATION + } + + public boolean hasFeature(Feature feature) { + Optional> pleromaFeatures = Optional.ofNullable(pleroma) + .map(p -> p.metadata) + .map(m -> m.features); + + return switch (feature) { + case BUBBLE_TIMELINE -> pleromaFeatures + .map(f -> f.contains("bubble_timeline")) + .orElse(false); + case MACHINE_TRANSLATION -> pleromaFeatures + .map(f -> f.contains("akkoma:machine_translation")) + .orElse(false); + }; + } + @Parcel public static class Rule{ public String id; @@ -116,4 +154,32 @@ public abstract class Instance extends BaseModel{ public int minExpiration; public int maxExpiration; } + + // MOSHIDON: more pleroma :D + @Parcel + public static class Pleroma extends BaseModel { + public Pleroma.Metadata metadata; + + @Parcel + public static class Metadata { + public List features; + public Pleroma.Metadata.FieldsLimits fieldsLimits; + + @Parcel + public static class FieldsLimits { + public long maxFields; + public long maxRemoteFields; + public long nameLength; + public long valueLength; + } + } + } + + @Parcel + public static class PleromaPollLimits { + public long maxExpiration; + public long maxOptionChars; + public long maxOptions; + public long minExpiration; + } }