1206 lines
40 KiB
Java
1206 lines
40 KiB
Java
package defpackage;
|
|
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonParser;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.URI;
|
|
import java.net.http.HttpClient;
|
|
import java.net.http.HttpRequest;
|
|
import java.net.http.HttpResponse;
|
|
import java.net.http.HttpRequest.BodyPublishers;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.file.Files;
|
|
import java.time.Duration;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Base64;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.function.Consumer;
|
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.EndTick;
|
|
import net.minecraft.client.Minecraft;
|
|
|
|
public final class akt {
|
|
private static final String ENDPOINT = "https://www.evoproject.xyz/api/configs";
|
|
private static final String TICKET_HEADER = "X-Evo-Ticket";
|
|
private static final String TICKET_HEADER_VALUE = "1";
|
|
private static final String CONTENT_TYPE_HEADER = "Content-Type";
|
|
private static final String JSON_CONTENT_TYPE = "application/json";
|
|
private static final String WORKER_THREAD_NAME = "evo-tickets";
|
|
private static final String PICKER_THREAD_NAME = "evo-ticket-picker";
|
|
private static final String DEFAULT_ROLE = "user";
|
|
private static final int ADMIN_UID = 1;
|
|
private static final String ACTION_LIST = "list";
|
|
private static final String ACTION_GET = "get";
|
|
private static final String ACTION_CREATE = "create";
|
|
private static final String ACTION_REPLY = "reply";
|
|
private static final String ACTION_UPLOAD = "upload";
|
|
private static final String NOTIFY_TITLE = "Bug Reports";
|
|
private static final String NOTIFY_REPLY = "#%d · developer replied";
|
|
private static final String NOTIFY_STATUS = "#%d · %s";
|
|
private static final String NOTIFY_UNREAD = "%d unread replies";
|
|
private static final String REQUEST_FAILURE = "ticket request {} failed";
|
|
private static final String MESSAGE_SIGN_IN = "Sign in to your EvoVisuals account first";
|
|
private static final String MESSAGE_FORBIDDEN = "Bug reports are open to testers and creators";
|
|
private static final String MESSAGE_RATE = "Too many requests, try again in a minute";
|
|
private static final String MESSAGE_CLOSED = "This ticket is closed";
|
|
private static final String MESSAGE_TOO_LARGE = "Attachment is too large";
|
|
private static final String MESSAGE_EMPTY = "Add a title and describe the bug";
|
|
private static final String MESSAGE_OFFLINE = "No connection to the server";
|
|
private static final String MESSAGE_FAILED = "Request failed (code %d)";
|
|
private static final String MESSAGE_SENDING = "Sending report";
|
|
private static final String MESSAGE_REPLYING = "Sending reply";
|
|
private static final String MESSAGE_UPLOADING = "Uploading %s";
|
|
private static final String MESSAGE_SENT = "Delivered to the developer";
|
|
private static final String MESSAGE_PARTIAL = "Sent, but %d attachment(s) failed";
|
|
private static final int HTTP_OK = 200;
|
|
private static final int HTTP_UNAUTHORIZED = 401;
|
|
private static final int HTTP_FORBIDDEN = 403;
|
|
private static final int HTTP_CONFLICT = 409;
|
|
private static final int HTTP_TOO_LARGE = 413;
|
|
private static final int HTTP_RATE_LIMITED = 429;
|
|
private static final int HTTP_BAD_REQUEST = 400;
|
|
private static final int CHUNK_BYTES = 2621440;
|
|
private static final int MIN_TITLE_LENGTH = 3;
|
|
private static final long CONNECT_TIMEOUT_SECONDS = 10L;
|
|
private static final long REQUEST_TIMEOUT_SECONDS = 30L;
|
|
private static final long UPLOAD_TIMEOUT_SECONDS = 90L;
|
|
private static final int POLL_INTERVAL_TICKS = 1800;
|
|
private static final int FIRST_POLL_TICKS = 400;
|
|
private static final long LIST_FRESH_MILLIS = 15000L;
|
|
private static final long DETAIL_FRESH_MILLIS = 8000L;
|
|
private static final HttpClient HTTP = HttpClient.newBuilder()
|
|
.connectTimeout(Duration.ofSeconds((-5973269547378817318L | 5973269547378817328L) + (-5973269547378817318L & 5973269547378817328L)))
|
|
.build();
|
|
private static final ExecutorService WORKER = Executors.newSingleThreadExecutor(var0 -> {
|
|
Thread var1 = new Thread(var0, "evo-tickets");
|
|
var1.setDaemon((boolean)((((-1430510541 ^ 1430510542) + ((-1430510541 & 1430510542) << 1))) != 0));
|
|
return var1;
|
|
});
|
|
private static final AtomicBoolean listInFlight = new AtomicBoolean();
|
|
private static final AtomicBoolean detailInFlight = new AtomicBoolean();
|
|
private static final AtomicBoolean pickerOpen = new AtomicBoolean();
|
|
private static final Map<String, akw> known = new HashMap<>();
|
|
private static volatile List<akw> tickets = List.of();
|
|
private static volatile akn current;
|
|
private static volatile String openTicketId;
|
|
private static volatile aks operation = aks.IDLE;
|
|
private static volatile String listError = "";
|
|
private static volatile boolean loaded;
|
|
private static volatile int unreadTotal;
|
|
private static volatile long listFetchedAt;
|
|
private static volatile long detailFetchedAt;
|
|
private static boolean seeded;
|
|
private static int ticks = 1400;
|
|
|
|
private akt() {
|
|
}
|
|
|
|
public static void initialize() {
|
|
ClientTickEvents.END_CLIENT_TICK.register((EndTick)var0 -> tick());
|
|
}
|
|
|
|
public static boolean eligible() {
|
|
cr var0 = null;
|
|
String var1 = null;
|
|
int var3 = 0;
|
|
int var2 = -1601871798;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -2016420567:
|
|
if (!"user".equals(var1)) {
|
|
var2 = -1884814135;
|
|
} else {
|
|
var2 = 638029876;
|
|
}
|
|
break;
|
|
case -1884814135:
|
|
var3 = 1;
|
|
var2 = 2033618756;
|
|
break;
|
|
case -1601871798:
|
|
default:
|
|
var0 = cp.user();
|
|
if (var0 != null) {
|
|
var2 = 1813294744;
|
|
} else {
|
|
var2 = 281825674;
|
|
}
|
|
break;
|
|
case -1566295638:
|
|
if (var0.uid() == (611308069 | -611308068) + (611308069 & -611308068)) {
|
|
var2 = 670901045;
|
|
} else {
|
|
var2 = 1848607529;
|
|
}
|
|
break;
|
|
case 281825674:
|
|
return (boolean)(((0)) != 0);
|
|
case 638029876:
|
|
var3 = 0;
|
|
var2 = 2033618756;
|
|
break;
|
|
case 670901045:
|
|
return (boolean)(((1)) != 0);
|
|
case 1390442624:
|
|
if (!var1.isBlank()) {
|
|
var2 = -2016420567;
|
|
} else {
|
|
var2 = 638029876;
|
|
}
|
|
break;
|
|
case 1813294744:
|
|
if (var0.token() != null) {
|
|
var2 = 1940167504;
|
|
} else {
|
|
var2 = 281825674;
|
|
}
|
|
break;
|
|
case 1848607529:
|
|
var1 = var0.role();
|
|
if (var1 != null) {
|
|
var2 = 1390442624;
|
|
} else {
|
|
var2 = 638029876;
|
|
}
|
|
break;
|
|
case 1940167504:
|
|
if (var0.token().isEmpty()) {
|
|
var2 = 281825674;
|
|
} else {
|
|
var2 = -1566295638;
|
|
}
|
|
break;
|
|
case 2033618756:
|
|
return (boolean)((var3) != 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static List<akw> tickets() {
|
|
return tickets;
|
|
}
|
|
|
|
public static akn current() {
|
|
return current;
|
|
}
|
|
|
|
public static String openTicketId() {
|
|
return openTicketId;
|
|
}
|
|
|
|
public static aks operation() {
|
|
return operation;
|
|
}
|
|
|
|
public static String listError() {
|
|
return listError;
|
|
}
|
|
|
|
public static boolean loaded() {
|
|
return loaded;
|
|
}
|
|
|
|
public static int unreadTotal() {
|
|
return unreadTotal;
|
|
}
|
|
|
|
public static void acknowledgeOperation() {
|
|
int var0 = 1762256796;
|
|
|
|
while (true) {
|
|
switch (var0) {
|
|
case -1008521757:
|
|
operation = aks.IDLE;
|
|
var0 = 748081971;
|
|
break;
|
|
case 748081971:
|
|
return;
|
|
case 1762256796:
|
|
default:
|
|
if (!operation.busy()) {
|
|
var0 = -1008521757;
|
|
} else {
|
|
var0 = 748081971;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void keepFresh() {
|
|
long var0 = (-3211891592857018813L ^ 3211891592857018813L) + ((-3211891592857018813L & 3211891592857018813L) << 1);
|
|
int var2 = 722441661;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -1488088245:
|
|
if (var0 - detailFetchedAt > (-4825217785031831456L | 4825217785031839456L) + (-4825217785031831456L & 4825217785031839456L)) {
|
|
var2 = -562950970;
|
|
} else {
|
|
var2 = 439098724;
|
|
}
|
|
break;
|
|
case -562950970:
|
|
fetchDetail(openTicketId);
|
|
var2 = 439098724;
|
|
break;
|
|
case 439098724:
|
|
return;
|
|
case 722441661:
|
|
default:
|
|
var0 = System.currentTimeMillis();
|
|
if (var0 - listFetchedAt > (5445644411394247070L | -5445644411394232070L) + (5445644411394247070L & -5445644411394232070L)) {
|
|
var2 = 1351909060;
|
|
} else {
|
|
var2 = 1046691574;
|
|
}
|
|
break;
|
|
case 1046691574:
|
|
if (openTicketId != null) {
|
|
var2 = -1488088245;
|
|
} else {
|
|
var2 = 439098724;
|
|
}
|
|
break;
|
|
case 1351909060:
|
|
refresh();
|
|
var2 = 1046691574;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void refresh() {
|
|
int var0 = 1135871994;
|
|
|
|
while (true) {
|
|
switch (var0) {
|
|
case -1743864107:
|
|
if (!listInFlight.compareAndSet(
|
|
(boolean)(((0)) != 0),
|
|
(boolean)((((905269846 ^ -905269845) + ((905269846 & -905269845) << 1))
|
|
) != 0))) {
|
|
var0 = -46310936;
|
|
} else {
|
|
var0 = 214034235;
|
|
}
|
|
break;
|
|
case -46310936:
|
|
return;
|
|
case 214034235:
|
|
listFetchedAt = System.currentTimeMillis();
|
|
WORKER.execute(() -> {
|
|
boolean var2 = false /* VF: Semaphore variable */;
|
|
|
|
try {
|
|
var2 = true;
|
|
fetchList();
|
|
var2 = false;
|
|
} finally {
|
|
if (var2) {
|
|
listInFlight.set((boolean)((((-175047823 ^ 175047823) + ((-175047823 & 175047823) << 1))) != 0));
|
|
}
|
|
}
|
|
|
|
listInFlight.set((boolean)((((823491707 | -823491707) + (823491707 & -823491707))) != 0));
|
|
});
|
|
return;
|
|
case 1135871994:
|
|
default:
|
|
if (eligible()) {
|
|
var0 = -1743864107;
|
|
} else {
|
|
var0 = -46310936;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void open(String var0) {
|
|
akn var1 = null;
|
|
int var2 = -1387878935;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -1387878935:
|
|
default:
|
|
openTicketId = var0;
|
|
var1 = current;
|
|
if (var1 != null) {
|
|
var2 = -76412132;
|
|
} else {
|
|
var2 = 508699636;
|
|
}
|
|
break;
|
|
case -845749913:
|
|
current = null;
|
|
var2 = 508699636;
|
|
break;
|
|
case -76412132:
|
|
if (!var1.summary().id().equals(var0)) {
|
|
var2 = -845749913;
|
|
} else {
|
|
var2 = 508699636;
|
|
}
|
|
break;
|
|
case 508699636:
|
|
fetchDetail(var0);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void closeDetail() {
|
|
openTicketId = null;
|
|
current = null;
|
|
}
|
|
|
|
public static void pickAttachments(Consumer<List<akk>> var0) {
|
|
Thread var1 = null;
|
|
int var2 = -1761108424;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -1761108424:
|
|
default:
|
|
if (!pickerOpen.compareAndSet(
|
|
(boolean)((((0)) != 0)), (boolean)((((62135556 | -62135555) + (62135556 & -62135555))
|
|
) != 0))) {
|
|
var2 = 699865565;
|
|
} else {
|
|
var2 = 2047403626;
|
|
}
|
|
break;
|
|
case 699865565:
|
|
return;
|
|
case 2047403626:
|
|
var1 = new Thread(() -> {
|
|
boolean var4 = false /* VF: Semaphore variable */;
|
|
|
|
try {
|
|
var4 = true;
|
|
List var1x = ako.pick();
|
|
Minecraft.getInstance().execute(() -> var0.accept(var1x));
|
|
var4 = false;
|
|
} finally {
|
|
if (var4) {
|
|
pickerOpen.set((boolean)((((844351761 ^ -844351761) + ((844351761 & -844351761) << 1))) != 0));
|
|
}
|
|
}
|
|
|
|
pickerOpen.set((boolean)((((-1314298054 | 1314298054) + (-1314298054 & 1314298054))) != 0));
|
|
}, "evo-ticket-picker");
|
|
var1.setDaemon((boolean)((((-1174573096 ^ 1174573097) + ((-1174573096 & 1174573097) << 1))) != 0));
|
|
var1.start();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static boolean create(String var0, String var1, List<akk> var2) {
|
|
String var3 = null;
|
|
String var4 = null;
|
|
Minecraft var5 = null;
|
|
JsonObject var6 = null;
|
|
List var7 = null;
|
|
int var8 = 2058104699;
|
|
|
|
while (true) {
|
|
switch (var8) {
|
|
case -2003978303:
|
|
var5 = Minecraft.getInstance();
|
|
var6 = aki.snapshot(var5);
|
|
var7 = List.copyOf(var2);
|
|
final String var3f = var3;
|
|
final String var4f = var4;
|
|
final JsonObject var6f = var6;
|
|
final List var7f = var7;
|
|
WORKER.execute(
|
|
() -> {
|
|
JsonObject var4x = null;
|
|
JsonObject var5x = null;
|
|
akn var6x = null;
|
|
String var7x = null;
|
|
int var8x = 0;
|
|
int var9x = -1511007441;
|
|
|
|
while (true) {
|
|
switch (var9x) {
|
|
case -1666387585:
|
|
return;
|
|
case -1511007441:
|
|
default:
|
|
var4x = body("create");
|
|
if (var4x == null) {
|
|
var9x = 1018351915;
|
|
} else {
|
|
var9x = 1518469645;
|
|
}
|
|
break;
|
|
case -335494395:
|
|
var6x = akp.detail(var5x.getAsJsonObject("ticket"));
|
|
var7x = akp.string(var5x, "messageId");
|
|
var8x = uploadAll(var6x.summary().id(), var7x, var7f);
|
|
openTicketId = var6x.summary().id();
|
|
fetchDetailNow(var6x.summary().id());
|
|
fetchList();
|
|
finish(var8x);
|
|
return;
|
|
case 1018351915:
|
|
fail(
|
|
"Sign in to your EvoVisuals account first"
|
|
);
|
|
return;
|
|
case 1518469645:
|
|
var4x.addProperty("title", var3f);
|
|
var4x.addProperty("text", var4f);
|
|
var4x.add("meta", var6f);
|
|
var4x.addProperty("diagnostics", aki.diagnostics());
|
|
var4x.addProperty("log", aki.logTail());
|
|
var5x = execute(
|
|
"create",
|
|
var4x,
|
|
(-8803807327989821872L ^ 8803807327989821902L) + ((-8803807327989821872L & 8803807327989821902L) << 1)
|
|
);
|
|
if (var5x == null) {
|
|
var9x = -1666387585;
|
|
} else {
|
|
var9x = -335494395;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
);
|
|
return (boolean)(((1)) != 0);
|
|
case -1620873019:
|
|
return (boolean)(((0)) != 0);
|
|
case -1457503200:
|
|
operation = new aks(
|
|
akr.FAILED,
|
|
0.0F,
|
|
"Add a title and describe the bug"
|
|
);
|
|
return (boolean)(((0)) != 0);
|
|
case -769293621:
|
|
if (!startOperation("Sending report")) {
|
|
var8 = -1620873019;
|
|
} else {
|
|
var8 = -2003978303;
|
|
}
|
|
break;
|
|
case 545588374:
|
|
if (var4.isEmpty()) {
|
|
var8 = -1457503200;
|
|
} else {
|
|
var8 = -769293621;
|
|
}
|
|
break;
|
|
case 2058104699:
|
|
default:
|
|
var3 = var0.trim();
|
|
var4 = var1.trim();
|
|
if (var3.length() >= (-1272625117 ^ 1272625120) + ((-1272625117 & 1272625120) << 1)) {
|
|
var8 = 545588374;
|
|
} else {
|
|
var8 = -1457503200;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static boolean reply(String var0, List<akk> var1) {
|
|
String var2 = null;
|
|
String var3 = null;
|
|
List var4 = null;
|
|
int var5 = 292503723;
|
|
|
|
while (true) {
|
|
switch (var5) {
|
|
case -1879381851:
|
|
var4 = List.copyOf(var1);
|
|
final String var2f = var2;
|
|
final String var3f = var3;
|
|
final List var4f = var4;
|
|
WORKER.execute(
|
|
() -> {
|
|
JsonObject var3x = null;
|
|
JsonObject var4x = null;
|
|
akq var5x = null;
|
|
int var6x = 0;
|
|
int var7 = -1380881266;
|
|
|
|
while (true) {
|
|
switch (var7) {
|
|
case -1380881266:
|
|
default:
|
|
var3x = body("reply");
|
|
if (var3x == null) {
|
|
var7 = -441714181;
|
|
} else {
|
|
var7 = -996817194;
|
|
}
|
|
break;
|
|
case -996817194:
|
|
var3x.addProperty("id", var2f);
|
|
var3x.addProperty("text", var3f);
|
|
var4x = execute(
|
|
"reply",
|
|
var3x,
|
|
(-4164723356791976216L | 4164723356791976246L) + (-4164723356791976216L & 4164723356791976246L)
|
|
);
|
|
if (var4x == null) {
|
|
var7 = -467225439;
|
|
} else {
|
|
var7 = -20417141;
|
|
}
|
|
break;
|
|
case -467225439:
|
|
return;
|
|
case -441714181:
|
|
fail(
|
|
"Sign in to your EvoVisuals account first"
|
|
);
|
|
return;
|
|
case -20417141:
|
|
var5x = akp.message(var4x.getAsJsonObject("message"));
|
|
var6x = uploadAll(var2f, var5x.id(), var4f);
|
|
fetchDetailNow(var2f);
|
|
fetchList();
|
|
finish(var6x);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
);
|
|
return (boolean)(((1)) != 0);
|
|
case -117993584:
|
|
if (!var3.isEmpty()) {
|
|
var5 = -2364048;
|
|
} else {
|
|
var5 = 721166890;
|
|
}
|
|
break;
|
|
case -2364048:
|
|
if (!startOperation("Sending reply")) {
|
|
var5 = 721166890;
|
|
} else {
|
|
var5 = -1879381851;
|
|
}
|
|
break;
|
|
case 292503723:
|
|
default:
|
|
var2 = openTicketId;
|
|
var3 = var0.trim();
|
|
if (var2 != null) {
|
|
var5 = -117993584;
|
|
} else {
|
|
var5 = 721166890;
|
|
}
|
|
break;
|
|
case 721166890:
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void tick() {
|
|
int var0 = 2133479250;
|
|
|
|
while (true) {
|
|
switch (var0) {
|
|
case -97380831:
|
|
return;
|
|
case 1259444166:
|
|
ticks = 0;
|
|
refresh();
|
|
return;
|
|
case 2133479250:
|
|
}
|
|
|
|
if ((ticks += (1295266367 ^ -1295266366) + ((1295266367 & -1295266366) << 1)) < (2095909393 | -2095907593) + (2095909393 & -2095907593)) {
|
|
var0 = -97380831;
|
|
} else {
|
|
var0 = 1259444166;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static boolean startOperation(String var0) {
|
|
int var1 = -2102205673;
|
|
|
|
while (true) {
|
|
switch (var1) {
|
|
case -2102205673:
|
|
default:
|
|
if (operation.busy()) {
|
|
var1 = -513064499;
|
|
} else {
|
|
var1 = 1147838188;
|
|
}
|
|
break;
|
|
case -513064499:
|
|
return (boolean)(((0)) != 0);
|
|
case 1147838188:
|
|
operation = new aks(akr.SENDING, 0.0F, var0);
|
|
return (boolean)(((1)) != 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void finish(int var0) {
|
|
aks var2 = null;
|
|
int var1 = 1043060971;
|
|
|
|
while (true) {
|
|
switch (var1) {
|
|
case -811013749:
|
|
operation = var2;
|
|
return;
|
|
case 1043060971:
|
|
default:
|
|
if (var0 == 0) {
|
|
var1 = 1264431477;
|
|
} else {
|
|
var1 = 1385396876;
|
|
}
|
|
break;
|
|
case 1264431477:
|
|
var2 = new aks(
|
|
akr.DONE,
|
|
1.0F,
|
|
"Delivered to the developer"
|
|
);
|
|
var1 = -811013749;
|
|
break;
|
|
case 1385396876:
|
|
akr var10002 = akr.FAILED;
|
|
String var10004 = "Sent, but %d attachment(s) failed";
|
|
Object[] var10005 = new Object[1];
|
|
var10005[0] = var0;
|
|
var2 = new aks(var10002, 1.0F, var10004.formatted(var10005));
|
|
var1 = -811013749;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void fail(String var0) {
|
|
operation = new aks(akr.FAILED, 0.0F, var0);
|
|
}
|
|
|
|
private static void fetchDetail(String var0) {
|
|
int var1 = 545199567;
|
|
|
|
while (true) {
|
|
switch (var1) {
|
|
case -1715907794:
|
|
return;
|
|
case -1651834780:
|
|
detailFetchedAt = System.currentTimeMillis();
|
|
WORKER.execute(() -> {
|
|
boolean var3 = false /* VF: Semaphore variable */;
|
|
|
|
try {
|
|
var3 = true;
|
|
fetchDetailNow(var0);
|
|
var3 = false;
|
|
} finally {
|
|
if (var3) {
|
|
detailInFlight.set((boolean)((((1946556844 ^ -1946556844) + ((1946556844 & -1946556844) << 1))) != 0));
|
|
}
|
|
}
|
|
|
|
detailInFlight.set((boolean)((((-2005698896 ^ 2005698896) + ((-2005698896 & 2005698896) << 1))) != 0));
|
|
});
|
|
return;
|
|
case -18871651:
|
|
if (!detailInFlight.compareAndSet(
|
|
(boolean)((((0)) != 0)), (boolean)((((1524002324 | -1524002323) + (1524002324 & -1524002323))
|
|
) != 0))) {
|
|
var1 = -1715907794;
|
|
} else {
|
|
var1 = -1651834780;
|
|
}
|
|
break;
|
|
case 545199567:
|
|
default:
|
|
if (eligible()) {
|
|
var1 = -18871651;
|
|
} else {
|
|
var1 = -1715907794;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void fetchDetailNow(String var0) {
|
|
detailFetchedAt = System.currentTimeMillis();
|
|
JsonObject var1 = body("get");
|
|
if (var1 != null) {
|
|
var1.addProperty("id", var0);
|
|
JsonObject var2 = request(
|
|
"get",
|
|
var1,
|
|
(5214772567306779578L ^ -5214772567306779548L) + ((5214772567306779578L & -5214772567306779548L) << 1),
|
|
null
|
|
);
|
|
if (var2 != null && var0.equals(openTicketId)) {
|
|
akn var3 = akp.detail(var2.getAsJsonObject("ticket"));
|
|
current = var3;
|
|
synchronized (known) {
|
|
known.put(var0, var3.summary());
|
|
}
|
|
|
|
replaceSummary(var3.summary());
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void fetchList() {
|
|
JsonObject var0 = null;
|
|
String[] var1 = null;
|
|
JsonObject var2 = null;
|
|
List var3 = null;
|
|
String var5 = null;
|
|
int var4 = -435339064;
|
|
|
|
while (true) {
|
|
switch (var4) {
|
|
case -1978202626:
|
|
listError = var5;
|
|
return;
|
|
case -975455507:
|
|
var1 = new String[1];
|
|
var2 = request(
|
|
"list",
|
|
var0,
|
|
(-14912947664772319L | 14912947664772349L) + (-14912947664772319L & 14912947664772349L),
|
|
var1
|
|
);
|
|
if (var2 == null) {
|
|
var4 = -465868145;
|
|
} else {
|
|
var4 = 1081750918;
|
|
}
|
|
break;
|
|
case -465868145:
|
|
if (var1[0] == null) {
|
|
var4 = 1188845738;
|
|
} else {
|
|
var4 = 663487018;
|
|
}
|
|
break;
|
|
case -435339064:
|
|
default:
|
|
listFetchedAt = System.currentTimeMillis();
|
|
var0 = body("list");
|
|
if (var0 == null) {
|
|
var4 = 318113505;
|
|
} else {
|
|
var4 = -975455507;
|
|
}
|
|
break;
|
|
case 318113505:
|
|
return;
|
|
case 663487018:
|
|
var5 = var1[0];
|
|
var4 = -1978202626;
|
|
break;
|
|
case 1081750918:
|
|
var3 = akp.summaries(var2);
|
|
listError = "";
|
|
announceChanges(var3);
|
|
tickets = var3;
|
|
unreadTotal = countUnread(var3);
|
|
loaded = (boolean)(((1)) != 0);
|
|
return;
|
|
case 1188845738:
|
|
var5 = "No connection to the server";
|
|
var4 = -1978202626;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void replaceSummary(akw var0) {
|
|
List var1 = tickets;
|
|
ArrayList var2 = new ArrayList(var1.size());
|
|
|
|
for (akw var4 : (Iterable<akw>)var1) {
|
|
var2.add(var4.id().equals(var0.id()) ? var0 : var4);
|
|
}
|
|
|
|
tickets = List.copyOf(var2);
|
|
unreadTotal = countUnread(var2);
|
|
}
|
|
|
|
private static int countUnread(List<akw> var0) {
|
|
int var1 = 0;
|
|
Iterator var2 = null;
|
|
akw var3 = null;
|
|
int var4 = -1008568820;
|
|
|
|
while (true) {
|
|
switch (var4) {
|
|
case -1008568820:
|
|
default:
|
|
var1 = 0;
|
|
var2 = var0.iterator();
|
|
var4 = 1174307203;
|
|
break;
|
|
case 463281480:
|
|
return var1;
|
|
case 1118217846:
|
|
var3 = (akw)var2.next();
|
|
var1 += var3.unread();
|
|
var4 = 1174307203;
|
|
break;
|
|
case 1174307203:
|
|
if (var2.hasNext()) {
|
|
var4 = 1118217846;
|
|
} else {
|
|
var4 = 463281480;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void announceChanges(List<akw> var0) {
|
|
ArrayList var1 = new ArrayList();
|
|
synchronized (known) {
|
|
if (!seeded) {
|
|
seeded = (boolean)(((1)) != 0);
|
|
int var9 = countUnread(var0);
|
|
if (var9 > 0) {
|
|
String var13 = "%d unread replies";
|
|
Object[] var15 = new Object[1];
|
|
var15[0] = var9;
|
|
var1.add(var13.formatted(var15));
|
|
}
|
|
} else {
|
|
String var3 = openTicketId;
|
|
|
|
for (akw var5 : var0) {
|
|
akw var6 = known.get(var5.id());
|
|
if (var6 != null && !var5.id().equals(var3)) {
|
|
if (var5.unread() > var6.unread()) {
|
|
String var10001 = "#%d · developer replied";
|
|
Object[] var10002 = new Object[1];
|
|
var10002[0] = var5.number();
|
|
var1.add(var10001.formatted(var10002));
|
|
} else if (var5.status() != var6.status()) {
|
|
String var12 = "#%d · %s";
|
|
Object[] var14 = new Object[2];
|
|
var14[0] = var5.number();
|
|
var14[1] = var5.status().label();
|
|
var1.add(var12.formatted(var14));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
known.clear();
|
|
|
|
for (akw var11 : var0) {
|
|
known.put(var11.id(), var11);
|
|
}
|
|
}
|
|
|
|
if (!var1.isEmpty()) {
|
|
Minecraft.getInstance()
|
|
.execute(
|
|
() -> {
|
|
Iterator var1x = null;
|
|
String var2 = null;
|
|
int var3x = 1899300714;
|
|
|
|
while (true) {
|
|
switch (var3x) {
|
|
case -2022509629:
|
|
if (var1x.hasNext()) {
|
|
var3x = 1312698264;
|
|
} else {
|
|
var3x = 774740732;
|
|
}
|
|
break;
|
|
case 774740732:
|
|
return;
|
|
case 1312698264:
|
|
var2 = (String)var1x.next();
|
|
le.getInstance()
|
|
.addCustomNotification(
|
|
rl.TICKETS.getIcon(), "Bug Reports", var2
|
|
);
|
|
var3x = -2022509629;
|
|
break;
|
|
case 1899300714:
|
|
default:
|
|
var1x = var1.iterator();
|
|
var3x = -2022509629;
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
private static int uploadAll(String var0, String var1, List<akk> var2) {
|
|
if (!var2.isEmpty() && !var1.isEmpty()) {
|
|
long var3 = (-5804653891711843410L ^ 5804653891711843410L) + ((-5804653891711843410L & 5804653891711843410L) << 1);
|
|
|
|
for (akk var6 : var2) {
|
|
var3 += var6.size();
|
|
}
|
|
|
|
long[] var9 = new long[1];
|
|
int var10 = 0;
|
|
int var7 = Math.min(var2.size(), (-2029348682 | 2029348690) + (-2029348682 & 2029348690));
|
|
|
|
for (int var8 = 0; var8 < var7; var8++) {
|
|
if (!upload(var0, var1, (akk)var2.get(var8), var3, var9)) {
|
|
var10++;
|
|
}
|
|
}
|
|
|
|
return var10 + var2.size() - var7;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
private static boolean upload(String var0, String var1, akk var2, long var3, long[] var5) {
|
|
String var6 = UUID.randomUUID().toString();
|
|
|
|
long var7;
|
|
try {
|
|
var7 = Files.size(var2.path());
|
|
} catch (IOException var17) {
|
|
id.warn(
|
|
Cif.NETWORK,
|
|
"ticket request {} failed",
|
|
"upload",
|
|
var17
|
|
);
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
|
|
if (var7 > (-8629840793939819860L ^ 8629840793939819860L) + ((-8629840793939819860L & 8629840793939819860L) << 1)
|
|
&& var7 <= (-4199578030736825040L ^ 4199578030784010960L) + ((-4199578030736825040L & 4199578030784010960L) << 1)) {
|
|
int var9 = (int)(
|
|
(
|
|
var7
|
|
+ (1689533774112677477L ^ -1689533774110056037L)
|
|
+ ((1689533774112677477L & -1689533774110056037L) << 1)
|
|
- ((-8430832053761281752L | 8430832053761281753L) + (-8430832053761281752L & 8430832053761281753L))
|
|
)
|
|
/ ((-7265830220760354066L | 7265830220762975506L) + (-7265830220760354066L & 7265830220762975506L))
|
|
);
|
|
byte[] var10 = new byte[2621440];
|
|
|
|
try (InputStream var11 = Files.newInputStream(var2.path())) {
|
|
for (int var12 = 0; var12 < var9; var12++) {
|
|
int var13 = var11.readNBytes(
|
|
var10,
|
|
0,
|
|
(int)Math.min(
|
|
(-7479547944327335797L ^ 7479547944329957237L) + ((-7479547944327335797L & 7479547944329957237L) << 1),
|
|
var7 - var12 * ((4226242672305216232L ^ -4226242672302594792L) + ((4226242672305216232L & -4226242672302594792L) << 1))
|
|
)
|
|
);
|
|
if (var13 <= 0) {
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
|
|
akr var10002 = akr.UPLOADING;
|
|
float var10003 = var3 <= (1412916215354508837L | -1412916215354508837L) + (1412916215354508837L & -1412916215354508837L)
|
|
? 0.0F
|
|
: (float)var5[0] / (float)var3;
|
|
String var10004 = "Uploading %s";
|
|
Object[] var10005 = new Object[1];
|
|
var10005[0] = var2.name();
|
|
operation = new aks(var10002, var10003, var10004.formatted(var10005));
|
|
JsonObject var14 = body("upload");
|
|
if (var14 == null) {
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
|
|
var14.addProperty("id", var0);
|
|
var14.addProperty("messageId", var1);
|
|
var14.addProperty("uploadId", var6);
|
|
var14.addProperty("index", var12);
|
|
var14.addProperty("total", var9);
|
|
var14.addProperty("name", var2.name());
|
|
var14.addProperty(
|
|
"data",
|
|
Base64.getEncoder().encodeToString(var13 == 2621440? var10 : Arrays.copyOf(var10, var13))
|
|
);
|
|
if (request(
|
|
"upload",
|
|
var14,
|
|
(3950550109405487457L ^ -3950550109405487367L) + ((3950550109405487457L & -3950550109405487367L) << 1),
|
|
null
|
|
)
|
|
== null) {
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
|
|
var5[0] = var5[0] + var13;
|
|
}
|
|
|
|
return (boolean)(((1)) != 0);
|
|
} catch (IOException var19) {
|
|
id.warn(
|
|
Cif.NETWORK,
|
|
"ticket request {} failed",
|
|
"upload",
|
|
var19
|
|
);
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
} else {
|
|
return (boolean)(((0)) != 0);
|
|
}
|
|
}
|
|
|
|
private static JsonObject body(String var0) {
|
|
cr var1 = null;
|
|
JsonObject var2 = null;
|
|
int var3 = 24658916;
|
|
|
|
while (true) {
|
|
switch (var3) {
|
|
case -1676044581:
|
|
if (var1.token().isEmpty()) {
|
|
var3 = -340288647;
|
|
} else {
|
|
var3 = -491642823;
|
|
}
|
|
break;
|
|
case -491642823:
|
|
var2 = new JsonObject();
|
|
var2.addProperty("token", var1.token());
|
|
var2.addProperty("action", var0);
|
|
return var2;
|
|
case -340288647:
|
|
return null;
|
|
case 24658916:
|
|
default:
|
|
var1 = cp.user();
|
|
if (var1 != null) {
|
|
var3 = 1250342989;
|
|
} else {
|
|
var3 = -340288647;
|
|
}
|
|
break;
|
|
case 1250342989:
|
|
if (var1.token() != null) {
|
|
var3 = -1676044581;
|
|
} else {
|
|
var3 = -340288647;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static JsonObject execute(String var0, JsonObject var1, long var2) {
|
|
String[] var4 = null;
|
|
JsonObject var5 = null;
|
|
Object var7 = null;
|
|
int var6 = 967020066;
|
|
|
|
while (true) {
|
|
switch (var6) {
|
|
case -1244737301:
|
|
fail((String)var7);
|
|
var6 = 315517729;
|
|
break;
|
|
case -656810919:
|
|
if (var4[0] == null) {
|
|
var6 = -507530094;
|
|
} else {
|
|
var6 = 910474335;
|
|
}
|
|
break;
|
|
case -507530094:
|
|
var7 = "No connection to the server";
|
|
var6 = -1244737301;
|
|
break;
|
|
case 315517729:
|
|
return var5;
|
|
case 910474335:
|
|
var7 = var4[0];
|
|
var6 = -1244737301;
|
|
break;
|
|
case 967020066:
|
|
default:
|
|
var4 = new String[1];
|
|
var5 = request(var0, var1, var2, var4);
|
|
if (var5 == null) {
|
|
var6 = -656810919;
|
|
} else {
|
|
var6 = 315517729;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static JsonObject request(String var0, JsonObject var1, long var2, String[] var4) {
|
|
try {
|
|
HttpRequest var5 = HttpRequest.newBuilder(
|
|
URI.create(
|
|
"https://www.evoproject.xyz/api/configs"
|
|
)
|
|
)
|
|
.timeout(Duration.ofSeconds(var2))
|
|
.header(
|
|
"Content-Type",
|
|
"application/json"
|
|
)
|
|
.header(
|
|
"X-Evo-Ticket",
|
|
"1"
|
|
)
|
|
.POST(BodyPublishers.ofString(var1.toString(), StandardCharsets.UTF_8))
|
|
.build();
|
|
HttpResponse var6 = ld.send(HTTP, var5);
|
|
if (var6.statusCode() != (84728688 ^ -84728488) + ((84728688 & -84728488) << 1)) {
|
|
if (var4 != null) {
|
|
var4[0] = describe(var6.statusCode());
|
|
}
|
|
|
|
return null;
|
|
} else {
|
|
return JsonParser.parseString((String)var6.body()).getAsJsonObject();
|
|
}
|
|
} catch (InterruptedException var7) {
|
|
Thread.currentThread().interrupt();
|
|
return null;
|
|
} catch (Exception var8) {
|
|
id.warn(Cif.NETWORK, "ticket request {} failed", var0, var8);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static String describe(int var0) {
|
|
return switch (var0) {
|
|
case 400 -> "Add a title and describe the bug";
|
|
case 401 -> "Sign in to your EvoVisuals account first";
|
|
case 403 -> "Bug reports are open to testers and creators";
|
|
case 409 -> "This ticket is closed";
|
|
case 413 -> "Attachment is too large";
|
|
case 429 -> "Too many requests, try again in a minute";
|
|
default -> {
|
|
String var10000 = "Request failed (code %d)";
|
|
Object[] var10001 = new Object[1];
|
|
var10001[0] = var0;
|
|
yield var10000.formatted(var10001);
|
|
}
|
|
};
|
|
}
|
|
}
|