That fuck shit the fascists are using
at master 88 lines 2.7 kB view raw
1package org.tm.archive.util; 2 3import androidx.annotation.NonNull; 4import androidx.annotation.Nullable; 5import androidx.annotation.VisibleForTesting; 6 7import com.annimon.stream.Stream; 8import com.fasterxml.jackson.annotation.JsonProperty; 9 10import org.signal.core.util.logging.Log; 11import org.tm.archive.BuildConfig; 12 13import java.io.IOException; 14import java.util.Objects; 15 16public final class RemoteDeprecation { 17 18 private static final String TAG = Log.tag(RemoteDeprecation.class); 19 20 private RemoteDeprecation() { } 21 22 /** 23 * @return The amount of time (in milliseconds) until this client version expires, or -1 if 24 * there's no pending expiration. 25 */ 26 public static long getTimeUntilDeprecation() { 27 return getTimeUntilDeprecation(FeatureFlags.clientExpiration(), System.currentTimeMillis(), BuildConfig.VERSION_NAME); 28 } 29 30 /** 31 * @return The amount of time (in milliseconds) until this client version expires, or -1 if 32 * there's no pending expiration. 33 */ 34 @VisibleForTesting 35 static long getTimeUntilDeprecation(String json, long currentTime, @NonNull String currentVersion) { 36 if (Util.isEmpty(json)) { 37 return -1; 38 } 39 40 try { 41 SemanticVersion ourVersion = Objects.requireNonNull(SemanticVersion.parse(currentVersion)); 42 ClientExpiration[] expirations = JsonUtils.fromJson(json, ClientExpiration[].class); 43 44 ClientExpiration expiration = Stream.of(expirations) 45 .filter(c -> c.getVersion() != null && c.getExpiration() != -1) 46 .filter(c -> c.requireVersion().compareTo(ourVersion) > 0) 47 .sortBy(ClientExpiration::getExpiration) 48 .findFirst() 49 .orElse(null); 50 51 if (expiration != null) { 52 return Math.max(expiration.getExpiration() - currentTime, 0); 53 } 54 } catch (IOException e) { 55 Log.w(TAG, e); 56 } 57 58 return -1; 59 } 60 61 private static final class ClientExpiration { 62 @JsonProperty 63 private final String minVersion; 64 65 @JsonProperty 66 private final String iso8601; 67 68 ClientExpiration(@Nullable @JsonProperty("minVersion") String minVersion, 69 @Nullable @JsonProperty("iso8601") String iso8601) 70 { 71 this.minVersion = minVersion; 72 this.iso8601 = iso8601; 73 } 74 75 public @Nullable SemanticVersion getVersion() { 76 return SemanticVersion.parse(minVersion); 77 } 78 79 public @NonNull SemanticVersion requireVersion() { 80 return Objects.requireNonNull(getVersion()); 81 } 82 83 public long getExpiration() { 84 return DateUtils.parseIso8601(iso8601); 85 } 86 } 87 88}