Fix event list month endpoint using int instead of long

In the process of this, also optimized a few database queries
This commit is contained in:
NovaFox161
2020-03-08 18:11:43 -05:00
parent 5fc4b3b5a5
commit 2d22b9a5e6
6 changed files with 154 additions and 153 deletions
@@ -1,6 +1,5 @@
package org.dreamexposure.discal.core.database;
import discord4j.core.object.util.Snowflake;
import org.dreamexposure.discal.core.crypto.KeyGenerator;
import org.dreamexposure.discal.core.enums.announcement.AnnouncementType;
import org.dreamexposure.discal.core.enums.event.EventColor;
@@ -25,6 +24,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import discord4j.core.object.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
* Website: www.cloudcraftgaming.com
@@ -79,12 +80,12 @@ public class DatabaseManager {
try {
Flyway flyway = Flyway.configure()
.dataSource(masterInfo.getSource())
.cleanDisabled(true)
.baselineOnMigrate(true)
.table(BotSettings.SQL_PREFIX.get() + "schema_history")
.placeholders(placeholders)
.load();
.dataSource(masterInfo.getSource())
.cleanDisabled(true)
.baselineOnMigrate(true)
.table(BotSettings.SQL_PREFIX.get() + "schema_history")
.placeholders(placeholders)
.load();
int sm = flyway.migrate();
Logger.getLogger().debug("Migrations Successful, " + sm + " migrations applied!", true);
} catch (Exception e) {
@@ -125,8 +126,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("API_KEY") == null) {
//Data not present, add to DB.
String insertCommand = "INSERT INTO " + tableName +
"(USER_ID, API_KEY, BLOCKED, TIME_ISSUED, USES)" +
" VALUES (?, ?, ?, ?, ?)";
"(USER_ID, API_KEY, BLOCKED, TIME_ISSUED, USES)" +
" VALUES (?, ?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, acc.getUserId());
ps.setString(2, acc.getAPIKey());
@@ -141,8 +142,8 @@ public class DatabaseManager {
} else {
//Data present, update.
String update = "UPDATE " + tableName
+ " SET USER_ID = ?, BLOCKED = ?,"
+ " USES = ? WHERE API_KEY = ?";
+ " SET USER_ID = ?, BLOCKED = ?,"
+ " USES = ? WHERE API_KEY = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setString(1, acc.getUserId());
@@ -185,8 +186,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("GUILD_ID") == null) {
//Data not present, add to DB.
String insertCommand = "INSERT INTO " + dataTableName +
"(GUILD_ID, EXTERNAL_CALENDAR, PRIVATE_KEY, ACCESS_TOKEN, REFRESH_TOKEN, CONTROL_ROLE, DISCAL_CHANNEL, SIMPLE_ANNOUNCEMENT, LANG, PREFIX, PATRON_GUILD, DEV_GUILD, MAX_CALENDARS, DM_ANNOUNCEMENTS, 12_HOUR, BRANDED)" +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
"(GUILD_ID, EXTERNAL_CALENDAR, PRIVATE_KEY, ACCESS_TOKEN, REFRESH_TOKEN, CONTROL_ROLE, DISCAL_CHANNEL, SIMPLE_ANNOUNCEMENT, LANG, PREFIX, PATRON_GUILD, DEV_GUILD, MAX_CALENDARS, DM_ANNOUNCEMENTS, 12_HOUR, BRANDED)" +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, settings.getGuildID().asString());
ps.setBoolean(2, settings.useExternalCalendar());
@@ -213,12 +214,12 @@ public class DatabaseManager {
} else {
//Data present, update.
String update = "UPDATE " + dataTableName
+ " SET EXTERNAL_CALENDAR = ?, PRIVATE_KEY = ?,"
+ " ACCESS_TOKEN = ?, REFRESH_TOKEN = ?,"
+ " CONTROL_ROLE = ?, DISCAL_CHANNEL = ?, SIMPLE_ANNOUNCEMENT = ?,"
+ " LANG = ?, PREFIX = ?, PATRON_GUILD = ?, DEV_GUILD = ?,"
+ " MAX_CALENDARS = ?, DM_ANNOUNCEMENTS = ?, 12_HOUR = ?,"
+ " BRANDED = ? WHERE GUILD_ID = ?";
+ " SET EXTERNAL_CALENDAR = ?, PRIVATE_KEY = ?,"
+ " ACCESS_TOKEN = ?, REFRESH_TOKEN = ?,"
+ " CONTROL_ROLE = ?, DISCAL_CHANNEL = ?, SIMPLE_ANNOUNCEMENT = ?,"
+ " LANG = ?, PREFIX = ?, PATRON_GUILD = ?, DEV_GUILD = ?,"
+ " MAX_CALENDARS = ?, DM_ANNOUNCEMENTS = ?, 12_HOUR = ?,"
+ " BRANDED = ? WHERE GUILD_ID = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setBoolean(1, settings.useExternalCalendar());
@@ -269,8 +270,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("GUILD_ID") == null) {
//Data not present, add to DB.
String insertCommand = "INSERT INTO " + calendarTableName +
"(GUILD_ID, CALENDAR_NUMBER, CALENDAR_ID, CALENDAR_ADDRESS, EXTERNAL)" +
" VALUES (?, ?, ?, ?, ?)";
"(GUILD_ID, CALENDAR_NUMBER, CALENDAR_ID, CALENDAR_ADDRESS, EXTERNAL)" +
" VALUES (?, ?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, calData.getGuildId().asString());
ps.setInt(2, calData.getCalendarNumber());
@@ -285,9 +286,9 @@ public class DatabaseManager {
} else {
//Data present, update.
String update = "UPDATE " + calendarTableName
+ " SET CALENDAR_NUMBER = ?, CALENDAR_ID = ?,"
+ " CALENDAR_ADDRESS = ?, EXTERNAL = ?"
+ " WHERE GUILD_ID = ?";
+ " SET CALENDAR_NUMBER = ?, CALENDAR_ID = ?,"
+ " CALENDAR_ADDRESS = ?, EXTERNAL = ?"
+ " WHERE GUILD_ID = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setInt(1, calData.getCalendarNumber());
ps.setString(2, calData.getCalendarId());
@@ -330,8 +331,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("ANNOUNCEMENT_ID") == null) {
//Data not present, add to db.
String insertCommand = "INSERT INTO " + announcementTableName +
"(ANNOUNCEMENT_ID, GUILD_ID, SUBSCRIBERS_ROLE, SUBSCRIBERS_USER, CHANNEL_ID, ANNOUNCEMENT_TYPE, EVENT_ID, EVENT_COLOR, HOURS_BEFORE, MINUTES_BEFORE, INFO, ENABLED, INFO_ONLY)" +
" VALUE (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
"(ANNOUNCEMENT_ID, GUILD_ID, SUBSCRIBERS_ROLE, SUBSCRIBERS_USER, CHANNEL_ID, ANNOUNCEMENT_TYPE, EVENT_ID, EVENT_COLOR, HOURS_BEFORE, MINUTES_BEFORE, INFO, ENABLED, INFO_ONLY)" +
" VALUE (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, announcement.getAnnouncementId().toString());
ps.setString(2, announcement.getGuildId().asString());
@@ -355,11 +356,11 @@ public class DatabaseManager {
//Data present, update.
String update = "UPDATE " + announcementTableName
+ " SET SUBSCRIBERS_ROLE = ?, SUBSCRIBERS_USER = ?, CHANNEL_ID = ?,"
+ " ANNOUNCEMENT_TYPE = ?, EVENT_ID = ?, EVENT_COLOR = ?, "
+ " HOURS_BEFORE = ?, MINUTES_BEFORE = ?,"
+ " INFO = ?, ENABLED = ?, INFO_ONLY = ?"
+ " WHERE ANNOUNCEMENT_ID = ?";
+ " SET SUBSCRIBERS_ROLE = ?, SUBSCRIBERS_USER = ?, CHANNEL_ID = ?,"
+ " ANNOUNCEMENT_TYPE = ?, EVENT_ID = ?, EVENT_COLOR = ?, "
+ " HOURS_BEFORE = ?, MINUTES_BEFORE = ?,"
+ " INFO = ?, ENABLED = ?, INFO_ONLY = ?"
+ " WHERE ANNOUNCEMENT_ID = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setString(1, announcement.getSubscriberRoleIdString());
@@ -411,8 +412,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("EVENT_ID") == null) {
//Data not present, add to DB.
String insertCommand = "INSERT INTO " + eventTableName +
"(GUILD_ID, EVENT_ID, EVENT_END, IMAGE_LINK)" +
" VALUES (?, ?, ?, ?)";
"(GUILD_ID, EVENT_ID, EVENT_END, IMAGE_LINK)" +
" VALUES (?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, data.getGuildId().asString());
ps.setString(2, data.getEventId());
@@ -426,8 +427,8 @@ public class DatabaseManager {
} else {
//Data present, update.
String update = "UPDATE " + eventTableName
+ " SET IMAGE_LINK = ?, EVENT_END = ?"
+ " WHERE EVENT_ID = ?";
+ " SET IMAGE_LINK = ?, EVENT_END = ?"
+ " WHERE EVENT_ID = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setString(1, data.getImageLink());
@@ -463,8 +464,8 @@ public class DatabaseManager {
if (!hasStuff || res.getString("EVENT_ID") == null) {
//Data not present, add to DB.
String insertCommand = "INSERT INTO " + rsvpTableName +
"(GUILD_ID, EVENT_ID, EVENT_END, GOING_ON_TIME, GOING_LATE, NOT_GOING, UNDECIDED)" +
" VALUES (?, ?, ?, ?, ?, ?, ?)";
"(GUILD_ID, EVENT_ID, EVENT_END, GOING_ON_TIME, GOING_LATE, NOT_GOING, UNDECIDED)" +
" VALUES (?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = masterConnection.prepareStatement(insertCommand);
ps.setString(1, data.getGuildId().asString());
ps.setString(2, data.getEventId());
@@ -481,12 +482,12 @@ public class DatabaseManager {
} else {
//Data present, update.
String update = "UPDATE " + rsvpTableName
+ " SET EVENT_END = ?,"
+ " GOING_ON_TIME = ?,"
+ " GOING_LATE = ?,"
+ " NOT_GOING = ?,"
+ " UNDECIDED = ?"
+ " WHERE EVENT_ID = ?";
+ " SET EVENT_END = ?,"
+ " GOING_ON_TIME = ?,"
+ " GOING_LATE = ?,"
+ " NOT_GOING = ?,"
+ " UNDECIDED = ?"
+ " WHERE EVENT_ID = ?";
PreparedStatement ps = masterConnection.prepareStatement(update);
ps.setLong(1, data.getEventEnd());
@@ -601,19 +602,17 @@ public class DatabaseManager {
try (final Connection connection = slaveInfo.getSource().getConnection()) {
String calendarTableName = String.format("%scalendars", slaveInfo.getSettings().getPrefix());
String query = "SELECT * FROM " + calendarTableName + " WHERE GUILD_ID = ?";
String query = "SELECT * FROM " + calendarTableName + " WHERE GUILD_ID = ? AND CALENDAR_NUMBER = 1";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, guildId.asString());
ResultSet res = statement.executeQuery();
boolean hasStuff = res.next();
while (res.next()) {
if (res.getInt("CALENDAR_NUMBER") == 1) {
calData.setCalendarId(res.getString("CALENDAR_ID"));
calData.setCalendarAddress(res.getString("CALENDAR_ADDRESS"));
calData.setExternal(res.getBoolean("EXTERNAL"));
break;
}
if (hasStuff && res.getString("GUILD_ID") != null) {
calData.setCalendarId(res.getString("CALENDAR_ID"));
calData.setCalendarAddress(res.getString("CALENDAR_ADDRESS"));
calData.setExternal(res.getBoolean("EXTERNAL"));
}
statement.close();
} catch (SQLException e) {
@@ -627,20 +626,20 @@ public class DatabaseManager {
try (final Connection connection = slaveInfo.getSource().getConnection()) {
String calendarTableName = String.format("%scalendars", slaveInfo.getSettings().getPrefix());
String query = "SELECT * FROM " + calendarTableName + " WHERE GUILD_ID = ?";
String query = "SELECT * FROM " + calendarTableName + " WHERE GUILD_ID = ? AND CALENDAR_NUMBER = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, guildId.asString());
statement.setInt(2, calendarNumber);
ResultSet res = statement.executeQuery();
boolean hasStuff = res.next();
while (res.next()) {
if (res.getInt("CALENDAR_NUMBER") == calendarNumber) {
calData.setCalendarId(res.getString("CALENDAR_ID"));
calData.setCalendarAddress(res.getString("CALENDAR_ADDRESS"));
calData.setExternal(res.getBoolean("EXTERNAL"));
break;
}
if (hasStuff && res.getString("GUILD_ID") != null) {
calData.setCalendarId(res.getString("CALENDAR_ID"));
calData.setCalendarAddress(res.getString("CALENDAR_ADDRESS"));
calData.setExternal(res.getBoolean("EXTERNAL"));
}
statement.close();
} catch (SQLException e) {
Logger.getLogger().exception(null, "Failed to get calendar data", e, true, this.getClass());
@@ -14,7 +14,6 @@ import org.dreamexposure.discal.core.object.web.AuthenticationState;
import org.dreamexposure.discal.core.utils.GlobalConst;
import org.dreamexposure.discal.core.utils.JsonUtils;
import org.dreamexposure.discal.server.utils.Authentication;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
@@ -22,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@@ -49,7 +49,7 @@ public class ListEventMonthEndpoint {
long guildId = requestBody.getLong("guild_id");
int calNumber = requestBody.getInt("calendar_number");
int daysInMonth = requestBody.getInt("days_in_month");
long startEpoch = requestBody.getInt("epoch_start");
long startEpoch = requestBody.getLong("epoch_start");
long endEpoch = startEpoch + (GlobalConst.oneDayMs * daysInMonth);
GuildSettings settings = DatabaseManager.getManager().getSettings(Snowflake.of(guildId));
@@ -57,6 +57,8 @@ public class ListEventMonthEndpoint {
Calendar service = CalendarAuth.getCalendarService(settings);
CalendarData calendarData = DatabaseManager.getManager().getCalendar(settings.getGuildID(), calNumber);
Logger.getLogger().debug("start: " + startEpoch + " | end: " + endEpoch, true);
Events events = service.events().list(calendarData.getCalendarAddress())
.setTimeMin(new DateTime(startEpoch))
.setTimeMax(new DateTime(endEpoch))
@@ -66,9 +68,10 @@ public class ListEventMonthEndpoint {
.execute();
List<Event> items = events.getItems();
JSONArray jEvents = new JSONArray();
for (Event e : items)
jEvents.put(JsonUtils.convertEventToJson(e, settings));
List<JSONObject> jEvents = new ArrayList<>();
for (Event e : items) {
jEvents.add(JsonUtils.convertEventToJson(e, settings));
}
JSONObject body = new JSONObject();
body.put("events", jEvents);
@@ -78,7 +81,7 @@ public class ListEventMonthEndpoint {
response.setStatus(200);
return body.toString();
} catch (JSONException e) {
e.printStackTrace();
Logger.getLogger().exception(null, "[v2-EL-M] JSON", e, true, this.getClass());
response.setContentType("application/json");
response.setStatus(400);
@@ -1344,133 +1344,133 @@ form.user .btn-user {
@-webkit-keyframes noise-anim {
0% {
clip: rect(92px, 9999px, 45px, 0);
clip: rect(56px, 9999px, 89px, 0);
}
5% {
clip: rect(69px, 9999px, 51px, 0);
clip: rect(79px, 9999px, 47px, 0);
}
10% {
clip: rect(83px, 9999px, 85px, 0);
clip: rect(22px, 9999px, 90px, 0);
}
15% {
clip: rect(50px, 9999px, 93px, 0);
clip: rect(28px, 9999px, 70px, 0);
}
20% {
clip: rect(93px, 9999px, 68px, 0);
clip: rect(52px, 9999px, 9px, 0);
}
25% {
clip: rect(54px, 9999px, 12px, 0);
clip: rect(9px, 9999px, 24px, 0);
}
30% {
clip: rect(90px, 9999px, 90px, 0);
clip: rect(38px, 9999px, 99px, 0);
}
35% {
clip: rect(11px, 9999px, 90px, 0);
clip: rect(59px, 9999px, 76px, 0);
}
40% {
clip: rect(62px, 9999px, 48px, 0);
clip: rect(47px, 9999px, 3px, 0);
}
45% {
clip: rect(36px, 9999px, 38px, 0);
clip: rect(66px, 9999px, 43px, 0);
}
50% {
clip: rect(86px, 9999px, 78px, 0);
clip: rect(50px, 9999px, 43px, 0);
}
55% {
clip: rect(40px, 9999px, 35px, 0);
clip: rect(24px, 9999px, 79px, 0);
}
60% {
clip: rect(87px, 9999px, 70px, 0);
clip: rect(30px, 9999px, 22px, 0);
}
65% {
clip: rect(87px, 9999px, 34px, 0);
clip: rect(7px, 9999px, 6px, 0);
}
70% {
clip: rect(15px, 9999px, 37px, 0);
clip: rect(48px, 9999px, 88px, 0);
}
75% {
clip: rect(78px, 9999px, 74px, 0);
clip: rect(39px, 9999px, 23px, 0);
}
80% {
clip: rect(56px, 9999px, 14px, 0);
clip: rect(15px, 9999px, 1px, 0);
}
85% {
clip: rect(48px, 9999px, 75px, 0);
clip: rect(50px, 9999px, 88px, 0);
}
90% {
clip: rect(37px, 9999px, 60px, 0);
clip: rect(88px, 9999px, 46px, 0);
}
95% {
clip: rect(30px, 9999px, 36px, 0);
clip: rect(61px, 9999px, 35px, 0);
}
100% {
clip: rect(3px, 9999px, 83px, 0);
clip: rect(17px, 9999px, 89px, 0);
}
}
@keyframes noise-anim {
0% {
clip: rect(92px, 9999px, 45px, 0);
clip: rect(56px, 9999px, 89px, 0);
}
5% {
clip: rect(69px, 9999px, 51px, 0);
clip: rect(79px, 9999px, 47px, 0);
}
10% {
clip: rect(83px, 9999px, 85px, 0);
clip: rect(22px, 9999px, 90px, 0);
}
15% {
clip: rect(50px, 9999px, 93px, 0);
clip: rect(28px, 9999px, 70px, 0);
}
20% {
clip: rect(93px, 9999px, 68px, 0);
clip: rect(52px, 9999px, 9px, 0);
}
25% {
clip: rect(54px, 9999px, 12px, 0);
clip: rect(9px, 9999px, 24px, 0);
}
30% {
clip: rect(90px, 9999px, 90px, 0);
clip: rect(38px, 9999px, 99px, 0);
}
35% {
clip: rect(11px, 9999px, 90px, 0);
clip: rect(59px, 9999px, 76px, 0);
}
40% {
clip: rect(62px, 9999px, 48px, 0);
clip: rect(47px, 9999px, 3px, 0);
}
45% {
clip: rect(36px, 9999px, 38px, 0);
clip: rect(66px, 9999px, 43px, 0);
}
50% {
clip: rect(86px, 9999px, 78px, 0);
clip: rect(50px, 9999px, 43px, 0);
}
55% {
clip: rect(40px, 9999px, 35px, 0);
clip: rect(24px, 9999px, 79px, 0);
}
60% {
clip: rect(87px, 9999px, 70px, 0);
clip: rect(30px, 9999px, 22px, 0);
}
65% {
clip: rect(87px, 9999px, 34px, 0);
clip: rect(7px, 9999px, 6px, 0);
}
70% {
clip: rect(15px, 9999px, 37px, 0);
clip: rect(48px, 9999px, 88px, 0);
}
75% {
clip: rect(78px, 9999px, 74px, 0);
clip: rect(39px, 9999px, 23px, 0);
}
80% {
clip: rect(56px, 9999px, 14px, 0);
clip: rect(15px, 9999px, 1px, 0);
}
85% {
clip: rect(48px, 9999px, 75px, 0);
clip: rect(50px, 9999px, 88px, 0);
}
90% {
clip: rect(37px, 9999px, 60px, 0);
clip: rect(88px, 9999px, 46px, 0);
}
95% {
clip: rect(30px, 9999px, 36px, 0);
clip: rect(61px, 9999px, 35px, 0);
}
100% {
clip: rect(3px, 9999px, 83px, 0);
clip: rect(17px, 9999px, 89px, 0);
}
}
@@ -1489,133 +1489,133 @@ form.user .btn-user {
@-webkit-keyframes noise-anim-2 {
0% {
clip: rect(60px, 9999px, 98px, 0);
clip: rect(28px, 9999px, 99px, 0);
}
5% {
clip: rect(45px, 9999px, 51px, 0);
clip: rect(71px, 9999px, 49px, 0);
}
10% {
clip: rect(34px, 9999px, 45px, 0);
clip: rect(6px, 9999px, 22px, 0);
}
15% {
clip: rect(18px, 9999px, 79px, 0);
clip: rect(6px, 9999px, 46px, 0);
}
20% {
clip: rect(90px, 9999px, 36px, 0);
clip: rect(15px, 9999px, 36px, 0);
}
25% {
clip: rect(80px, 9999px, 90px, 0);
clip: rect(37px, 9999px, 71px, 0);
}
30% {
clip: rect(9px, 9999px, 24px, 0);
clip: rect(10px, 9999px, 93px, 0);
}
35% {
clip: rect(83px, 9999px, 81px, 0);
clip: rect(47px, 9999px, 50px, 0);
}
40% {
clip: rect(76px, 9999px, 50px, 0);
clip: rect(96px, 9999px, 30px, 0);
}
45% {
clip: rect(47px, 9999px, 66px, 0);
clip: rect(100px, 9999px, 51px, 0);
}
50% {
clip: rect(4px, 9999px, 81px, 0);
clip: rect(42px, 9999px, 58px, 0);
}
55% {
clip: rect(40px, 9999px, 15px, 0);
clip: rect(92px, 9999px, 75px, 0);
}
60% {
clip: rect(31px, 9999px, 91px, 0);
clip: rect(22px, 9999px, 82px, 0);
}
65% {
clip: rect(51px, 9999px, 26px, 0);
clip: rect(64px, 9999px, 10px, 0);
}
70% {
clip: rect(46px, 9999px, 8px, 0);
clip: rect(86px, 9999px, 97px, 0);
}
75% {
clip: rect(28px, 9999px, 93px, 0);
clip: rect(86px, 9999px, 6px, 0);
}
80% {
clip: rect(44px, 9999px, 69px, 0);
clip: rect(29px, 9999px, 43px, 0);
}
85% {
clip: rect(61px, 9999px, 57px, 0);
clip: rect(32px, 9999px, 91px, 0);
}
90% {
clip: rect(37px, 9999px, 56px, 0);
clip: rect(62px, 9999px, 32px, 0);
}
95% {
clip: rect(94px, 9999px, 30px, 0);
clip: rect(41px, 9999px, 85px, 0);
}
100% {
clip: rect(19px, 9999px, 2px, 0);
clip: rect(81px, 9999px, 95px, 0);
}
}
@keyframes noise-anim-2 {
0% {
clip: rect(60px, 9999px, 98px, 0);
clip: rect(28px, 9999px, 99px, 0);
}
5% {
clip: rect(45px, 9999px, 51px, 0);
clip: rect(71px, 9999px, 49px, 0);
}
10% {
clip: rect(34px, 9999px, 45px, 0);
clip: rect(6px, 9999px, 22px, 0);
}
15% {
clip: rect(18px, 9999px, 79px, 0);
clip: rect(6px, 9999px, 46px, 0);
}
20% {
clip: rect(90px, 9999px, 36px, 0);
clip: rect(15px, 9999px, 36px, 0);
}
25% {
clip: rect(80px, 9999px, 90px, 0);
clip: rect(37px, 9999px, 71px, 0);
}
30% {
clip: rect(9px, 9999px, 24px, 0);
clip: rect(10px, 9999px, 93px, 0);
}
35% {
clip: rect(83px, 9999px, 81px, 0);
clip: rect(47px, 9999px, 50px, 0);
}
40% {
clip: rect(76px, 9999px, 50px, 0);
clip: rect(96px, 9999px, 30px, 0);
}
45% {
clip: rect(47px, 9999px, 66px, 0);
clip: rect(100px, 9999px, 51px, 0);
}
50% {
clip: rect(4px, 9999px, 81px, 0);
clip: rect(42px, 9999px, 58px, 0);
}
55% {
clip: rect(40px, 9999px, 15px, 0);
clip: rect(92px, 9999px, 75px, 0);
}
60% {
clip: rect(31px, 9999px, 91px, 0);
clip: rect(22px, 9999px, 82px, 0);
}
65% {
clip: rect(51px, 9999px, 26px, 0);
clip: rect(64px, 9999px, 10px, 0);
}
70% {
clip: rect(46px, 9999px, 8px, 0);
clip: rect(86px, 9999px, 97px, 0);
}
75% {
clip: rect(28px, 9999px, 93px, 0);
clip: rect(86px, 9999px, 6px, 0);
}
80% {
clip: rect(44px, 9999px, 69px, 0);
clip: rect(29px, 9999px, 43px, 0);
}
85% {
clip: rect(61px, 9999px, 57px, 0);
clip: rect(32px, 9999px, 91px, 0);
}
90% {
clip: rect(37px, 9999px, 56px, 0);
clip: rect(62px, 9999px, 32px, 0);
}
95% {
clip: rect(94px, 9999px, 30px, 0);
clip: rect(41px, 9999px, 85px, 0);
}
100% {
clip: rect(19px, 9999px, 2px, 0);
clip: rect(81px, 9999px, 95px, 0);
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -310,8 +310,7 @@
<p class="text-discord-full-white text-center" id="local-time-display">All Dates
and Times are
displayed in your local timezone!</p>
and Times are displayed in your local timezone!</p>
<br>
<br>
<a id="view-on-google-button"