Skip to content

Commit

Permalink
Updates to Archiving and Deleting Bug Reports
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsLeon15 committed Oct 9, 2023
1 parent 1d1cfce commit 70bc959
Show file tree
Hide file tree
Showing 9 changed files with 248 additions and 281 deletions.
1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dependency-reduced-pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<dependency>
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>1.5.21</version>
<version>3.4.40</version>
<scope>provided</scope>
</dependency>
</dependencies>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
<dependency>
<groupId>com.discord4j</groupId>
<artifactId>discord4j-core</artifactId>
<version>3.2.3</version>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>1.5.21</version>
<version>3.4.40</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down
48 changes: 24 additions & 24 deletions src/main/java/com/leon/bugreport/BugReportCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,50 +29,51 @@ public class BugReportCommand implements CommandExecutor, Listener {
public BugReportCommand(BugReportManager reportManager) {
this.reportManager = reportManager;
this.categorySelectionMap = new HashMap<>();
}
}

@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
String[] args) {
if (!(sender instanceof Player player)) {
sender.sendMessage("This command can only be run by a player."); // TODO: Language support
sender.sendMessage("This command can only be run by a player.");
return true;
}

if (config.getBoolean("enablePluginReportCategories", true)) {
if (!BugReportManager.checkCategoryConfig()) {
String message = BugReportLanguage.getText(language, "bugReportCategoriesNotConfiguredMessage");
player.sendMessage (Objects.requireNonNullElseGet (message, () -> pluginColor + pluginTitle + " " + ChatColor.RED + "Bug report categories are not configured"));
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.RED + DefaultLanguageSelector
.getTextElseDefault(language, "bugReportCategoriesNotConfiguredMessage"));
return true;
}
openCategorySelectionGUI(player);
return true;
}

if (args.length < 1) {
player.sendMessage(ChatColor.RED + "Usage: /bugreport <message>"); // TODO: Language support
player.sendMessage(ChatColor.RED + "Usage: /bugreport <message>");
return true;
}

int maxReports = config.getInt("max-reports-per-player");
if (maxReports != 0) {
int reportsLeft = maxReports - getReportCount(player.getUniqueId());
if (reportsLeft <= 0) {
String maxReportsMessage = BugReportLanguage.getText(language, "maxReportsPerPlayerMessage");
player.sendMessage(Objects.requireNonNullElse(maxReportsMessage, pluginColor + pluginTitle + " " + ChatColor.RED + "You have reached the maximum amount of reports you can submit"));
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.RED
+ DefaultLanguageSelector.getTextElseDefault(language, "maxReportsPerPlayerMessage"));
return true;
}
}

reportManager.submitBugReport(player, String.join(" ", args), null);
String confirmationMessage = BugReportLanguage.getText(player.getLocale(), "bugReportConfirmationMessage");
player.sendMessage(Objects.requireNonNullElse(confirmationMessage, pluginColor + pluginTitle + " " + ChatColor.GREEN + " Bug report submitted successfully!"));
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.GREEN
+ DefaultLanguageSelector.getTextElseDefault(language, "bugReportConfirmationMessage"));

return true;
}

private int getReportCount(UUID playerId) {
int count = 0;
List<String> reports = bugReports.getOrDefault(playerId, new ArrayList<>());
List<String> reports = bugReports.getOrDefault(playerId, new ArrayList<>(Collections.singletonList("DUMMY")));
for (String report : reports) {
if (report.contains(playerId.toString())) {
count++;
Expand All @@ -87,7 +88,7 @@ private void openCategorySelectionGUI(Player player) {
List<Category> categories = reportManager.getReportCategories();

for (Category category : categories) {
ItemStack categoryItem = createCategoryItem (category);
ItemStack categoryItem = createCategoryItem(category);
gui.addItem(categoryItem);
}

Expand Down Expand Up @@ -128,15 +129,14 @@ public void onInventoryClick(InventoryClickEvent event) {
if (selectedCategory != null) {
categorySelectionMap.put(player.getUniqueId(), selectedCategory.getId());
player.closeInventory();
if (BugReportLanguage.getText (language, "enterBugReportMessageCategory") == null) {
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.YELLOW + "Please enter your bug report in chat. Type 'cancel' to cancel");
} else {
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.YELLOW + BugReportLanguage.getText(language, "enterBugReportMessageCategory"));
}
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.YELLOW
+ DefaultLanguageSelector.getTextElseDefault(language, "enterBugReportMessageCategory"));
} else {
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.RED
+ "Something went wrong while selecting the category");
}
}


@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChat(@NotNull AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
Expand All @@ -151,20 +151,20 @@ public void onPlayerChat(@NotNull AsyncPlayerChatEvent event) {
String message = event.getMessage();

if (message.equalsIgnoreCase("cancel")) {
String cancelMessage = BugReportLanguage.getText(language, "cancelledBugReportMessage");
player.sendMessage(pluginColor + pluginTitle + " " + Objects.requireNonNullElse(cancelMessage, ChatColor.RED + "Bug report cancelled."));
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.RED
+ DefaultLanguageSelector.getTextElseDefault(language, "cancelledBugReportMessage"));
return;
}

reportManager.submitBugReport(player, message, categoryId);
String confirmationMessage = BugReportLanguage.getText(language, "bugReportConfirmationMessage");
player.sendMessage(pluginColor + pluginTitle + " " + Objects.requireNonNullElse(confirmationMessage, ChatColor.GREEN + "Bug report submitted successfully!"));
player.sendMessage(pluginColor + pluginTitle + " " + ChatColor.GREEN
+ DefaultLanguageSelector.getTextElseDefault(language, "bugReportConfirmationMessage"));
}

private @NotNull ItemStack createCategoryItem(Category category) {
ItemStack itemStack = new ItemStack(category.getItem());
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(stringColorToColorCode(category.getColor()) + category.getName());
itemMeta.setDisplayName(stringColorToColorCode(category.getColor()) + category.getName());
itemMeta.setLore(List.of(ChatColor.GRAY + category.getDescription()));
itemStack.setItemMeta(itemMeta);
return itemStack;
Expand Down Expand Up @@ -200,7 +200,7 @@ class Category {
private final String name;
private final ItemStack itemStack;

public Category(int id, String name, String color, ItemStack itemStack) {
Category(int id, String name, String color, ItemStack itemStack) {
this.id = id;
this.name = name;
this.color = color;
Expand Down
70 changes: 52 additions & 18 deletions src/main/java/com/leon/bugreport/BugReportDatabase.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public BugReportDatabase() {
connectLocalOrRemote();
addMissingTables();
fixReportID();
makeAllHeadersEqualReport_ID();
}

private void addMissingTables() {
Expand All @@ -42,6 +43,34 @@ private void addMissingTables() {
}
}

private void makeAllHeadersEqualReport_ID() {
try {
ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM bug_reports");
while (resultSet.next()) {
int report_id = resultSet.getInt("report_id");
String header = resultSet.getString("header");
String[] lines = header.split("\n");
StringBuilder newHeader = new StringBuilder();
for (String line : lines) {
if (line.startsWith("Report ID:")) {
newHeader.append("Report ID: ").append(report_id);
} else {
newHeader.append(line);
}
newHeader.append("\n");
}
PreparedStatement statement = connection.prepareStatement("UPDATE bug_reports SET header = ? WHERE report_id = ?");
statement.setString(1, newHeader.toString().trim());
statement.setInt(2, report_id);
statement.executeUpdate();
statement.close();
}
} catch (SQLException e) {
plugin.getLogger().severe("Failed to make all headers equal report_id.");
plugin.getLogger().severe(e.getMessage());
}
}

private void fixReportID() {
try {
ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM bug_reports WHERE report_id IS NULL OR report_id = 0");
Expand Down Expand Up @@ -121,15 +150,15 @@ public void addBugReport(String username, @NotNull UUID playerId, String world,
ResultSet resultSet = statement.executeQuery();

while (resultSet.next()) {
UUID playerId = UUID.fromString(resultSet.getString("player_id"));
String header = resultSet.getString("header");
String fullMessage = resultSet.getString("message");
String username = resultSet.getString("username");
String world = resultSet.getString("world");
String archived = resultSet.getString("archived");
String report_id = resultSet.getString("report_id");

List<String> reports = bugReports.getOrDefault(playerId, new ArrayList<>());
UUID playerId = UUID.fromString (resultSet.getString ("player_id"));
String header = resultSet.getString ("header");
String fullMessage = resultSet.getString ("message");
String username = resultSet.getString ("username");
String world = resultSet.getString ("world");
String archived = resultSet.getString ("archived");
String report_id = resultSet.getString ("report_id");

List<String> reports = bugReports.getOrDefault(playerId, new ArrayList<>(Collections.singletonList ("DUMMY")));
reports.add(
"Username: " + username + "\n" +
"UUID: " + playerId + "\n" +
Expand Down Expand Up @@ -192,14 +221,14 @@ private void createTables() {

public void updateBugReportHeader(UUID playerId, int reportIndex) {
try {
PreparedStatement statement = connection.prepareStatement("UPDATE bug_reports SET header = ? WHERE player_id = ? AND rowid = ?");
PreparedStatement statement = connection.prepareStatement("UPDATE bug_reports SET header = ? WHERE player_id = ? AND report_id = ?");
String existingHeader = bugReports.get(playerId).get(reportIndex);

String[] lines = existingHeader.split("\n");
StringBuilder newHeader = new StringBuilder();
for (String line : lines) {
if (line.startsWith("hasBeenRead:")) {
newHeader.append("hasBeenRead: ").append(1);
newHeader.append("hasBeenRead: 1");
} else {
newHeader.append(line);
}
Expand All @@ -208,17 +237,17 @@ public void updateBugReportHeader(UUID playerId, int reportIndex) {

statement.setString(1, newHeader.toString().trim());
statement.setString(2, playerId.toString());
statement.setInt(3, reportIndex + 1);
statement.setInt(3, reportIndex);
statement.executeUpdate();
statement.close();
loadBugReports();
} catch (SQLException e) {
plugin.getLogger().severe("Failed to update bug report read status.");
plugin.getLogger().severe(e.getMessage());
}
}

public static void updateBugReportArchive(@NotNull UUID playerId, int reportIndex, int archived) {
int bugReportIndex = reportIndex - 1;
System.out.println("Updating bug report " + reportIndex + " for " + playerId + " to " + archived);

try {
Expand All @@ -228,9 +257,14 @@ public static void updateBugReportArchive(@NotNull UUID playerId, int reportInde
statement.setInt(3, reportIndex);
statement.executeUpdate();
statement.close();
loadBugReports();

String existingHeader = bugReports.get(playerId).get(bugReportIndex);
System.out.println("Existing header: " + existingHeader);
List<String> reports = bugReports.getOrDefault(playerId, new ArrayList<>(Collections.singletonList("DUMMY")));
String existingHeader = reports.stream()
.filter(reportString -> reportString.contains("Report ID: " + reportIndex))
.findFirst()
.orElse(null);
int existingHeaderPosition = reports.indexOf(existingHeader);

String[] lines = existingHeader.split("\n");
StringBuilder newHeader = new StringBuilder();
Expand All @@ -242,11 +276,10 @@ public static void updateBugReportArchive(@NotNull UUID playerId, int reportInde
}
newHeader.append("\n");
}
List<String> reports = bugReports.get(playerId);
reports.set(bugReportIndex, newHeader.toString().trim());
reports.set(existingHeaderPosition, newHeader.toString().trim());
bugReports.put(playerId, reports);

} catch (SQLException e) {
} catch (SQLException e) {
plugin.getLogger().severe("Failed to update bug report archive status.");
plugin.getLogger().severe(e.getMessage());
}
Expand All @@ -260,6 +293,7 @@ public static void deleteBugReport(@NotNull UUID playerId, int reportIndex) {
statement.setInt(2, reportIndex);
statement.executeUpdate();
statement.close();
loadBugReports();
} catch (SQLException e) {
plugin.getLogger().severe("Failed to delete bug report.");
plugin.getLogger().severe(e.getMessage());
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/leon/bugreport/BugReportLanguage.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ public static String getEnglishVersionFromLanguage(String displayName) {
return ChatColor.stripColor(displayName);
}

public static String getText(String language, String textName) {
public static @Nullable String getText(String language, String textName) {
ConfigurationSection texts = languageTexts.get(language);
return texts != null ? texts.getString(textName) : null;
return texts != null ? texts.getString(textName) : null;
}

public static @Nullable String getTitleFromLanguage(String key) {
Expand Down
Loading

0 comments on commit 70bc959

Please sign in to comment.