Added option to autocreate bug issues on client and server side
Additionally cleaned up a few classes a bit
This commit is contained in:
parent
5acbd3b6e1
commit
f4a3bfed97
@ -20,7 +20,6 @@
|
|||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
|
@ -19,6 +19,8 @@ import envoy.client.ui.Startup;
|
|||||||
*/
|
*/
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the application.
|
* Starts the application.
|
||||||
*
|
*
|
||||||
@ -26,5 +28,12 @@ public class Main {
|
|||||||
* client configuration
|
* client configuration
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) { Application.launch(Startup.class, args); }
|
public static void main(String[] args) {
|
||||||
|
if (DEBUG) {
|
||||||
|
// Put testing code here
|
||||||
|
System.out.println();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
Application.launch(Startup.class, args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
package envoy.client.ui.controller;
|
package envoy.client.ui.controller;
|
||||||
|
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.scene.control.TitledPane;
|
||||||
|
|
||||||
import envoy.client.net.Client;
|
import envoy.client.net.Client;
|
||||||
import envoy.client.ui.SceneContext;
|
import envoy.client.ui.SceneContext;
|
||||||
|
import envoy.client.ui.listcell.AbstractListCell;
|
||||||
import envoy.client.ui.settings.*;
|
import envoy.client.ui.settings.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,20 +36,20 @@ public class SettingsScene {
|
|||||||
*/
|
*/
|
||||||
public void initializeData(SceneContext sceneContext, Client client) {
|
public void initializeData(SceneContext sceneContext, Client client) {
|
||||||
this.sceneContext = sceneContext;
|
this.sceneContext = sceneContext;
|
||||||
|
final var user = client.getSender();
|
||||||
|
final var online = client.isOnline();
|
||||||
settingsList.getItems().add(new GeneralSettingsPane());
|
settingsList.getItems().add(new GeneralSettingsPane());
|
||||||
settingsList.getItems().add(new UserSettingsPane(sceneContext, client.getSender(), client.isOnline()));
|
settingsList.getItems().add(new UserSettingsPane(sceneContext, user, online));
|
||||||
settingsList.getItems().add(new DownloadSettingsPane(sceneContext));
|
settingsList.getItems().add(new DownloadSettingsPane(sceneContext));
|
||||||
|
settingsList.getItems().add(new BugReportPane( user, online));
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
settingsList.setCellFactory(listView -> new ListCell<>() {
|
settingsList.setCellFactory(listView -> new AbstractListCell<>(listView) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateItem(SettingsPane item, boolean empty) {
|
protected Label renderItem(SettingsPane item) { return new Label(item.getTitle()); }
|
||||||
super.updateItem(item, empty);
|
|
||||||
if (!empty && item != null) setGraphic(new Label(item.getTitle()));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
package envoy.client.ui.settings;
|
||||||
|
|
||||||
|
import javafx.event.EventHandler;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.input.InputEvent;
|
||||||
|
|
||||||
|
import envoy.client.event.SendEvent;
|
||||||
|
import envoy.data.User;
|
||||||
|
import envoy.event.EventBus;
|
||||||
|
import envoy.event.IssueProposal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class offers the option for users to submit a bug report. Only the title
|
||||||
|
* of a bug is needed to be sent.
|
||||||
|
* <p>
|
||||||
|
* Project: <strong>client</strong><br>
|
||||||
|
* File: <strong>BugReportPane.java</strong><br>
|
||||||
|
* Created: <strong>Aug 4, 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public class BugReportPane extends OnlyIfOnlineSettingsPane {
|
||||||
|
|
||||||
|
private final Label titleLabel = new Label("Suggest a title for the bug:");
|
||||||
|
private final TextField titleTextField = new TextField();
|
||||||
|
private final Label pleaseExplainLabel = new Label("Paste here the log of what went wrong and/ or explain what went wrong:");
|
||||||
|
private final TextArea errorDetailArea = new TextArea();
|
||||||
|
private final CheckBox showUsernameInBugReport = new CheckBox("Show your username in the bug report?");
|
||||||
|
private final Button submitReportButton = new Button("Submit report");
|
||||||
|
|
||||||
|
private final EventHandler<? super InputEvent> inputEventHandler = e -> submitReportButton.setDisable(titleTextField.getText().isBlank());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code BugReportPane}.
|
||||||
|
*
|
||||||
|
* @param user the user whose details to use
|
||||||
|
* @param online whether this user is currently online
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public BugReportPane(User user, boolean online) {
|
||||||
|
super("Report a bug", online);
|
||||||
|
setSpacing(10);
|
||||||
|
setToolTipText("A bug can only be reported when being online");
|
||||||
|
|
||||||
|
// Displaying the label to ask for a title
|
||||||
|
titleLabel.setWrapText(true);
|
||||||
|
getChildren().add(titleLabel);
|
||||||
|
|
||||||
|
// Displaying the TextField where to enter the title of this bug
|
||||||
|
titleTextField.setOnKeyTyped(inputEventHandler);
|
||||||
|
titleTextField.setOnInputMethodTextChanged(inputEventHandler);
|
||||||
|
getChildren().add(titleTextField);
|
||||||
|
|
||||||
|
// Displaying the label to ask for clarification
|
||||||
|
pleaseExplainLabel.setWrapText(true);
|
||||||
|
getChildren().add(pleaseExplainLabel);
|
||||||
|
|
||||||
|
// Displaying the TextArea where to enter the log and/or own description
|
||||||
|
errorDetailArea.setWrapText(true);
|
||||||
|
getChildren().add(errorDetailArea);
|
||||||
|
|
||||||
|
// Displaying the consent button that your user name will be shown
|
||||||
|
showUsernameInBugReport.setSelected(true);
|
||||||
|
getChildren().add(showUsernameInBugReport);
|
||||||
|
|
||||||
|
// Displaying the submitReportButton
|
||||||
|
submitReportButton.setDisable(true);
|
||||||
|
submitReportButton.setOnAction(e -> {
|
||||||
|
EventBus.getInstance()
|
||||||
|
.dispatch(new SendEvent(new IssueProposal(titleTextField.getText(), errorDetailArea.getText(),
|
||||||
|
showUsernameInBugReport.isSelected() ? user.getName() : null, true)));
|
||||||
|
});
|
||||||
|
getChildren().add(submitReportButton);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package envoy.client.ui.settings;
|
||||||
|
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.Tooltip;
|
||||||
|
import javafx.scene.layout.Background;
|
||||||
|
import javafx.scene.layout.BackgroundFill;
|
||||||
|
import javafx.scene.layout.CornerRadii;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inheriting from this class signifies that options should only be available if
|
||||||
|
* the {@link envoy.data.User} is currently online. If the user is currently
|
||||||
|
* offline, all {@link javafx.scene.Node} variables will be disabled and a
|
||||||
|
* {@link Tooltip} will be displayed for the whole node.
|
||||||
|
* <p>
|
||||||
|
* Project: <strong>client</strong><br>
|
||||||
|
* File: <strong>OnlyIfOnlineSettingsPane.java</strong><br>
|
||||||
|
* Created: <strong>Aug 4, 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public abstract class OnlyIfOnlineSettingsPane extends SettingsPane {
|
||||||
|
|
||||||
|
private final Tooltip beOnlineReminder = new Tooltip("You need to be online to modify your acount.");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param title
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
protected OnlyIfOnlineSettingsPane(String title, boolean online) {
|
||||||
|
super(title);
|
||||||
|
|
||||||
|
final var offline = !online;
|
||||||
|
|
||||||
|
setDisable(offline);
|
||||||
|
|
||||||
|
if (offline) {
|
||||||
|
final var infoLabel = new Label("You shall not pass!\n(... Unless you would happen to be online)");
|
||||||
|
infoLabel.setId("infoLabel-warning");
|
||||||
|
infoLabel.setWrapText(true);
|
||||||
|
getChildren().add(infoLabel);
|
||||||
|
setBackground(new Background(new BackgroundFill(Color.grayRgb(100, 0.3), CornerRadii.EMPTY, Insets.EMPTY)));
|
||||||
|
|
||||||
|
Tooltip.install(this, beOnlineReminder);
|
||||||
|
} else Tooltip.uninstall(this, beOnlineReminder);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setToolTipText(String text) { beOnlineReminder.setText(text); }
|
||||||
|
}
|
@ -22,7 +22,6 @@ import envoy.client.event.SendEvent;
|
|||||||
import envoy.client.ui.IconUtil;
|
import envoy.client.ui.IconUtil;
|
||||||
import envoy.client.ui.SceneContext;
|
import envoy.client.ui.SceneContext;
|
||||||
import envoy.client.ui.custom.ProfilePicImageView;
|
import envoy.client.ui.custom.ProfilePicImageView;
|
||||||
import envoy.client.util.ReflectionUtil;
|
|
||||||
import envoy.data.User;
|
import envoy.data.User;
|
||||||
import envoy.event.*;
|
import envoy.event.*;
|
||||||
import envoy.util.Bounds;
|
import envoy.util.Bounds;
|
||||||
@ -36,7 +35,7 @@ import envoy.util.EnvoyLog;
|
|||||||
* @author Leon Hofmeister
|
* @author Leon Hofmeister
|
||||||
* @since Envoy Client v0.2-beta
|
* @since Envoy Client v0.2-beta
|
||||||
*/
|
*/
|
||||||
public class UserSettingsPane extends SettingsPane {
|
public class UserSettingsPane extends OnlyIfOnlineSettingsPane {
|
||||||
|
|
||||||
private boolean profilePicChanged, usernameChanged, validPassword;
|
private boolean profilePicChanged, usernameChanged, validPassword;
|
||||||
private byte[] currentImageBytes;
|
private byte[] currentImageBytes;
|
||||||
@ -49,8 +48,6 @@ public class UserSettingsPane extends SettingsPane {
|
|||||||
private final PasswordField repeatNewPasswordField = new PasswordField();
|
private final PasswordField repeatNewPasswordField = new PasswordField();
|
||||||
private final Button saveButton = new Button("Save");
|
private final Button saveButton = new Button("Save");
|
||||||
|
|
||||||
private final Tooltip beOnlineReminder = new Tooltip("You need to be online to modify your acount.");
|
|
||||||
|
|
||||||
private static final EventBus eventBus = EventBus.getInstance();
|
private static final EventBus eventBus = EventBus.getInstance();
|
||||||
private static final Logger logger = EnvoyLog.getLogger(UserSettingsPane.class);
|
private static final Logger logger = EnvoyLog.getLogger(UserSettingsPane.class);
|
||||||
|
|
||||||
@ -63,7 +60,7 @@ public class UserSettingsPane extends SettingsPane {
|
|||||||
* @since Envoy Client v0.2-beta
|
* @since Envoy Client v0.2-beta
|
||||||
*/
|
*/
|
||||||
public UserSettingsPane(SceneContext sceneContext, User user, boolean online) {
|
public UserSettingsPane(SceneContext sceneContext, User user, boolean online) {
|
||||||
super("User");
|
super("User", online);
|
||||||
setSpacing(10);
|
setSpacing(10);
|
||||||
|
|
||||||
// Display of profile pic change mechanism
|
// Display of profile pic change mechanism
|
||||||
@ -143,17 +140,6 @@ public class UserSettingsPane extends SettingsPane {
|
|||||||
saveButton.setOnAction(e -> save(user.getID(), currentPasswordField.getText()));
|
saveButton.setOnAction(e -> save(user.getID(), currentPasswordField.getText()));
|
||||||
saveButton.setAlignment(Pos.BOTTOM_RIGHT);
|
saveButton.setAlignment(Pos.BOTTOM_RIGHT);
|
||||||
getChildren().add(saveButton);
|
getChildren().add(saveButton);
|
||||||
|
|
||||||
final var offline = !online;
|
|
||||||
ReflectionUtil.getAllDeclaredNodeVariables(this).forEach(node -> node.setDisable(offline));
|
|
||||||
if (offline) {
|
|
||||||
final var infoLabel = new Label("You shall not pass!\n(... Unless you would happen to be online)");
|
|
||||||
infoLabel.setId("infoLabel-warning");
|
|
||||||
infoLabel.setWrapText(true);
|
|
||||||
getChildren().add(infoLabel);
|
|
||||||
|
|
||||||
Tooltip.install(this, beOnlineReminder);
|
|
||||||
} else Tooltip.uninstall(this, beOnlineReminder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,6 @@ public class ReflectionUtil {
|
|||||||
try {
|
try {
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
final var value = field.get(instance);
|
final var value = field.get(instance);
|
||||||
field.setAccessible(false);
|
|
||||||
return value;
|
return value;
|
||||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
</padding>
|
</padding>
|
||||||
</ListView>
|
</ListView>
|
||||||
<TitledPane fx:id="titledPane" collapsible="false"
|
<TitledPane fx:id="titledPane" collapsible="false"
|
||||||
prefHeight="325.0" prefWidth="300.0">
|
prefHeight="400.0" prefWidth="400.0">
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
<Insets bottom="10.0" left="5.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="5.0" right="10.0" top="10.0" />
|
||||||
</HBox.margin>
|
</HBox.margin>
|
||||||
|
57
common/src/main/java/envoy/event/IssueProposal.java
Normal file
57
common/src/main/java/envoy/event/IssueProposal.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package envoy.event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class allows envoy users to send an issue proposal to the server who, if
|
||||||
|
* not disabled by its admin, will forward it directly to gitea.
|
||||||
|
* <p>
|
||||||
|
* Project: <strong>common</strong><br>
|
||||||
|
* File: <strong>IssueProposal.java</strong><br>
|
||||||
|
* Created: <strong>Aug 5, 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public class IssueProposal extends Event<String> {
|
||||||
|
|
||||||
|
private final String submitterName;
|
||||||
|
private final String description;
|
||||||
|
private final boolean bug;
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param title the title of the reported bug
|
||||||
|
* @param description the description of this bug
|
||||||
|
* @param submitterName the user who submitted the bug
|
||||||
|
* @param isBug determines whether this {@code IssueProposal} is
|
||||||
|
* supposed to be a
|
||||||
|
* feature or a bug (true = bug, false = feature)
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public IssueProposal(String title, String description, String submitterName, boolean isBug) {
|
||||||
|
super(title);
|
||||||
|
this.submitterName = submitterName;
|
||||||
|
this.description = description;
|
||||||
|
bug = isBug;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the description
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public String getDescription() { return description; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the name of the user who sent this bug report
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public String getSubmitterName() { return submitterName; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether this issue is supposed to be a bug - if false it is intended
|
||||||
|
* as a feature
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public boolean isBug() { return bug; }
|
||||||
|
|
||||||
|
}
|
@ -59,7 +59,7 @@ public class Startup {
|
|||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
initLogging();
|
initLogging();
|
||||||
|
|
||||||
final Server server = new Server(8080, ObjectMessageReader::new,
|
final var server = new Server(8080, ObjectMessageReader::new,
|
||||||
new ObjectMessageProcessor(Set.of(new LoginCredentialProcessor(),
|
new ObjectMessageProcessor(Set.of(new LoginCredentialProcessor(),
|
||||||
new MessageProcessor(),
|
new MessageProcessor(),
|
||||||
new GroupMessageProcessor(),
|
new GroupMessageProcessor(),
|
||||||
@ -73,10 +73,11 @@ public class Startup {
|
|||||||
new IsTypingProcessor(),
|
new IsTypingProcessor(),
|
||||||
new NameChangeProcessor(),
|
new NameChangeProcessor(),
|
||||||
new ProfilePicChangeProcessor(),
|
new ProfilePicChangeProcessor(),
|
||||||
new PasswordChangeRequestProcessor())));
|
new PasswordChangeRequestProcessor(),
|
||||||
|
new IssueProposalProcessor())));
|
||||||
|
|
||||||
// Initialize the current message ID
|
// Initialize the current message ID
|
||||||
final PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
final var persistenceManager = PersistenceManager.getInstance();
|
||||||
if (persistenceManager.getConfigItemByID("currentMessageId") == null)
|
if (persistenceManager.getConfigItemByID("currentMessageId") == null)
|
||||||
persistenceManager.addConfigItem(new envoy.server.data.ConfigItem("currentMessageId", "0"));
|
persistenceManager.addConfigItem(new envoy.server.data.ConfigItem("currentMessageId", "0"));
|
||||||
|
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
package envoy.server.processors;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import envoy.event.IssueProposal;
|
||||||
|
import envoy.server.net.ObjectWriteProxy;
|
||||||
|
import envoy.util.EnvoyLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This processor handles incoming {@link IssueProposal}s and automatically
|
||||||
|
* creates a new issue on the gitea site, if not disabled by its administrator.
|
||||||
|
* <p>
|
||||||
|
* Project: <strong>server</strong><br>
|
||||||
|
* File: <strong>IssueProposalProcessor.java</strong><br>
|
||||||
|
* Created: <strong>Aug 5, 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy Server v0.2-beta
|
||||||
|
*/
|
||||||
|
public class IssueProposalProcessor implements ObjectProcessor<IssueProposal> {
|
||||||
|
|
||||||
|
private static boolean issueReportingEnabled = true;
|
||||||
|
private static final Logger logger = EnvoyLog.getLogger(IssueProposalProcessor.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(IssueProposal issueProposal, long socketID, ObjectWriteProxy writeProxy) throws IOException {
|
||||||
|
// Do nothing if manually disabled
|
||||||
|
if (!issueReportingEnabled) return;
|
||||||
|
var issueDescription = issueProposal.getDescription();
|
||||||
|
// Appending the submitter name, if this option was enabled
|
||||||
|
issueDescription += issueProposal.getSubmitterName() != null
|
||||||
|
? (issueDescription.endsWith("\n") || issueDescription.endsWith("<br>") ? "" : "<br>")
|
||||||
|
+ String.format("Submitted by user %s.", issueProposal.getSubmitterName())
|
||||||
|
: "";
|
||||||
|
// Markdown does not support "\n". It uses "<br>"
|
||||||
|
issueDescription = issueDescription.replaceAll("\n", "<br>");
|
||||||
|
// We do not want any Windows artifacts to remain as that may cause problems
|
||||||
|
issueDescription = issueDescription.replaceAll("\r", "");
|
||||||
|
try {
|
||||||
|
final var url = new URL(
|
||||||
|
"https://git.kske.dev/api/v1/repos/zdm/envoy/issues?access_token=6d8ec2a72d64cbaf6319434aa2e7caf0130701b3");
|
||||||
|
final var connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json; utf-8");
|
||||||
|
connection.setRequestProperty("Accept", "application/json");
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
|
||||||
|
final var json = String.format("{\"title\":\"%s\",\"body\":\"%s\",\"labels\":[240, %d]}",
|
||||||
|
issueProposal.get(),
|
||||||
|
issueDescription,
|
||||||
|
// Label 240 should be user-made, label 117 bug and label 119 feature
|
||||||
|
issueProposal.isBug() ? 117 : 119);
|
||||||
|
try (final var os = connection.getOutputStream()) {
|
||||||
|
final byte[] input = json.getBytes("utf-8");
|
||||||
|
os.write(input, 0, input.length);
|
||||||
|
}
|
||||||
|
final var status = connection.getResponseCode();
|
||||||
|
if (status == 201) logger.log(Level.INFO, "Successfully created an issue");
|
||||||
|
else logger.log(Level.WARNING,
|
||||||
|
String.format("Tried creating an issue but received status code %d - Request params:title=%s,description=%s,json=%s",
|
||||||
|
status,
|
||||||
|
issueProposal.get(),
|
||||||
|
issueDescription,
|
||||||
|
json));
|
||||||
|
} catch (final IOException e) {
|
||||||
|
logger.log(Level.WARNING, "An error occurred while creating an issue: ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether issue reporting is enabled
|
||||||
|
* @since Envoy Server v0.2-beta
|
||||||
|
*/
|
||||||
|
public static boolean isIssueReportingEnabled() { return issueReportingEnabled; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param issueReportingEnabled whether issue reporting should be enabled - true
|
||||||
|
* by default
|
||||||
|
* @since Envoy Server v0.2-beta
|
||||||
|
*/
|
||||||
|
public static void setIssueReportingEnabled(boolean issueReportingEnabled) {
|
||||||
|
IssueProposalProcessor.issueReportingEnabled = issueReportingEnabled;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user