aboutsummaryrefslogtreecommitdiff
path: root/src/features/changeLogGUI
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/changeLogGUI')
-rw-r--r--src/features/changeLogGUI/index.js255
-rw-r--r--src/features/changeLogGUI/metadata.json8
2 files changed, 263 insertions, 0 deletions
diff --git a/src/features/changeLogGUI/index.js b/src/features/changeLogGUI/index.js
new file mode 100644
index 0000000..c9c25fe
--- /dev/null
+++ b/src/features/changeLogGUI/index.js
@@ -0,0 +1,255 @@
+/// <reference types="../../../../CTAutocomplete" />
+/// <reference lib="es2015" />
+import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
+import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
+import Feature from "../../featureClass/class";
+import GuiPage from "../soopyGui/GuiPage";
+import SoopyMarkdownElement from '../../../guimanager/GuiElement/SoopyMarkdownElement.js';
+import metadata from "../../metadata";
+import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
+import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
+import ProgressBar from "../../../guimanager/GuiElement/ProgressBar"
+import SoopyRenderEvent from "../../../guimanager/EventListener/SoopyRenderEvent"
+import { fetch } from "../../utils/networkUtils";
+import { numberWithCommas } from "../../utils/numberUtils";
+const File = Java.type("java.io.File")
+const URL = Java.type("java.net.URL");
+const PrintStream = Java.type("java.io.PrintStream");
+const Byte = Java.type("java.lang.Byte");
+//global.soopyv2featuremanagerthing.features.changeLogGUI.class.ChangelogPage.downloadUpdate()
+class ChangeLogGui extends Feature {
+ constructor() {
+ super()
+ }
+
+ onEnable() {
+ this.initVariables()
+
+ this.ChangelogPage = new ChangelogPage()
+
+ this.latestAnnouncedVersion = this.ChangelogPage.currVersionId
+
+ this.registerEvent("worldLoad", this.worldLoad)
+
+ this.registerStep(false, 60 * 5, () => {
+ this.ChangelogPage.loadChangeLog()
+ })
+ }
+
+ worldLoad() {
+ if (this.ChangelogPage.downloadableVersion === -1) return
+
+
+ if (this.FeatureManager.features["globalSettings"] === undefined || this.FeatureManager.features["globalSettings"].class.alertAllUpdates === undefined) {
+ return
+ }
+ let alertBeta = this.FeatureManager.features["globalSettings"].class.alertAllUpdates.getValue()
+
+ if (this.latestAnnouncedVersion < (alertBeta ? this.ChangelogPage.downloadableVersion : this.ChangelogPage.importantVersion)) {
+ let version = ""
+ this.ChangelogPage.changelogData.forEach(data => {
+
+ if (this.ChangelogPage.downloadableVersion === data.versionId && this.ChangelogPage.downloadableVersion > this.ChangelogPage.currVersionId) {
+ //add button to download this version
+ version = data.version
+ }
+ })
+
+ ChatLib.chat("§r")
+ ChatLib.chat("&1" + ChatLib.getChatBreak("-").trim())
+ ChatLib.chat(" &6New SoopyV2 Version is avalible (" + version + ")")
+ ChatLib.chat("§r§r")
+ new TextComponent(" &e[CLICK] &7- View changelog and download update").setHover("show_text", "&2Open changelog").setClick("run_command", "/soopyv2 changelog").chat()
+ ChatLib.chat("&1" + ChatLib.getChatBreak("-").trim())
+ ChatLib.chat("§r§r§r")
+
+ this.latestAnnouncedVersion = this.ChangelogPage.downloadableVersion
+ }
+ }
+
+ initVariables() {
+ this.ChangelogPage = undefined
+ }
+
+ onDisable() {
+ this.initVariables()
+ }
+}
+
+
+class ChangelogPage extends GuiPage {
+ constructor() {
+ super(9)
+
+ this.name = "Changelog"
+
+ this.pages = [this.newPage()]
+
+ this.changelogData = []
+ this.downloadableVersion = -1
+
+ this.importantVersion = -1
+
+ let changelogTitle = new SoopyTextElement().setText("§0Changelog").setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)
+ this.pages[0].addChild(changelogTitle)
+
+ this.changelogArea = new SoopyGuiElement().setLocation(0.1, 0.2, 0.8, 0.8).setScrollable(true)
+ this.pages[0].addChild(this.changelogArea)
+
+ //Update confirmation page
+ this.updatingSidebar = new SoopyGuiElement().setLocation(0, 0, 1, 1)
+ this.updatingSidebarConfirmPage = new SoopyGuiElement().setLocation(0, 0, 1, 1)
+ this.updatingSidebar.addChild(this.updatingSidebarConfirmPage)
+
+ this.updateTitle = new SoopyTextElement().setText("§0Update to SoopyV2 ").setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)
+ this.updatingSidebarConfirmPage.addChild(this.updateTitle)
+
+ // this.warningMessage = new SoopyMarkdownElement().setLocation(0.1, 0.2, 0.8, 0.8)
+ // this.warningMessage.setText(``)
+ // this.updatingSidebarConfirmPage.addChild(this.warningMessage)
+
+ this.updateButton = new ButtonWithArrow().setText("§0Update").setLocation(0.3, 0.3, 0.4, 0.2)
+ this.updatingSidebarConfirmPage.addChild(this.updateButton)
+
+ this.updatingSidebarConfirmPage.setScrollable(true)
+
+ this.updateButton.addEvent(new SoopyRenderEvent().setHandler(() => {
+ this.updateButton.location.location.y.set(0.3, 0)
+ }))
+ this.updateButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.downloadUpdate()
+ }))
+
+ this.updatingSidebarLoadingPage = new SoopyGuiElement().setLocation(1, 0, 1, 1)
+ this.updatingSidebar.addChild(this.updatingSidebarLoadingPage)
+
+ let updatingTitle = new SoopyTextElement().setText("§0Updating...").setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)
+ this.updatingSidebarLoadingPage.addChild(updatingTitle)
+
+ this.progressBar = new ProgressBar().setLocation(0.1, 0.2, 0.8, 0.1)
+ this.updatingSidebarLoadingPage.addChild(this.progressBar)
+
+ this.currVersionId = metadata.versionId
+
+ this.finaliseLoading()
+
+ this.loadChangeLog()
+ }
+
+ async loadChangeLog() {
+ let data = await fetch("http://soopy.dev/api/soopyv2/changelog.json").json()
+
+ this.changelogData = data.changelog.reverse()
+
+ this.downloadableVersion = data.downloadableVersion
+ this.importantVersion = data.importantVersion
+
+ this.updateText()
+ }
+
+ onOpen() {
+ this.loadChangeLog()
+ }
+
+ showConfirmUpdatePage() {
+ let version = ""
+ this.changelogData.forEach(data => {
+
+ if (this.downloadableVersion === data.versionId && this.downloadableVersion > this.currVersionId) {
+ //add button to download this version
+ version = data.version
+ }
+ })
+ this.updateTitle.setText("§0Update to SoopyV2 " + version)
+
+ this.updateButton.location.location.y.set(0.3, 0)
+
+ this.openSidebarPage(this.updatingSidebar)
+ }
+
+ downloadUpdate() {
+ new Thread(() => {
+ this.updatingSidebarConfirmPage.location.location.x.set(-1, 500)
+ this.updatingSidebarLoadingPage.location.location.x.set(0, 500)
+
+ new File("./config/ChatTriggers/modules/SoopyAddonsTempDownload").mkdir()
+
+ this.progressBar.setProgress(0.1)
+
+ this.urlToFile("http://soopy.dev/api/soopyv2/downloadLatest.zip", "./config/ChatTriggers/modules/SoopyAddonsTempDownload/SoopyAddons.zip", 10000, 20000)
+
+ this.progressBar.setProgress(0.5)
+
+ FileLib.unzip("./config/ChatTriggers/modules/SoopyAddonsTempDownload/SoopyAddons.zip", "./config/ChatTriggers/modules/SoopyAddonsTempDownload/SoopyAddons/")
+
+ this.progressBar.setProgress(0.75)
+
+ FileLib.deleteDirectory(new File("./config/ChatTriggers/modules/SoopyV2"))
+
+ this.progressBar.setProgress(0.9)
+
+ new File("./config/ChatTriggers/modules/SoopyAddonsTempDownload/SoopyAddons/SoopyV2").renameTo(new File("./config/ChatTriggers/modules/SoopyV2"))
+
+ FileLib.deleteDirectory(new File("./config/ChatTriggers/modules/SoopyAddonsTempDownload"))
+
+ this.progressBar.setProgress(1)
+
+ Client.currentGui.close()
+
+ ChatLib.command("ct load", true)
+ }).start()
+ }
+
+ urlToFile(url, destination, connecttimeout, readtimeout) {
+ const d = new File(destination);
+ d.getParentFile().mkdirs();
+ const connection = new URL(url).openConnection();
+ connection.setDoOutput(true);
+ connection.setConnectTimeout(connecttimeout);
+ connection.setReadTimeout(readtimeout);
+ const IS = connection.getInputStream();
+ const FilePS = new PrintStream(destination);
+ let buf = new Packages.java.lang.reflect.Array.newInstance(Byte.TYPE, 65536);
+ let len;
+ while ((len = IS.read(buf)) > 0) {
+ FilePS.write(buf, 0, len);
+ }
+ IS.close();
+ FilePS.close();
+ }
+
+ updateText() {
+ this.changelogArea.children = []
+
+ let height = 0
+
+ this.changelogData.forEach(data => {
+
+ if (this.downloadableVersion === data.versionId && this.downloadableVersion > this.currVersionId) {
+ //add button to download this version
+ let button = new ButtonWithArrow().setText("§0Download this version").setLocation(0.7, height, 0.3, 0.1)
+ this.changelogArea.addChild(button)
+
+ button.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ this.showConfirmUpdatePage()
+ }))
+
+ height += 0.05
+ }
+
+ let changes = new SoopyMarkdownElement().setLocation(0, height, 1, 0)
+
+ this.changelogArea.addChild(changes)
+
+ changes.setText("# __" + data.version + "__" + (data.versionId === this.currVersionId ? " §7Current (" : " §7(") + numberWithCommas(data.users || 0) + " using)" + "\n" + data.description)
+
+ height += changes.getHeight()
+
+ height += 0.05
+ })
+ }
+}
+
+module.exports = {
+ class: new ChangeLogGui()
+} \ No newline at end of file
diff --git a/src/features/changeLogGUI/metadata.json b/src/features/changeLogGUI/metadata.json
new file mode 100644
index 0000000..8dfbe4b
--- /dev/null
+++ b/src/features/changeLogGUI/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "ChangeLog gui",
+ "description": "Gui for changelog",
+ "isHidden": true,
+ "isTogglable": false,
+ "defaultEnabled": true,
+ "sortA": 0
+} \ No newline at end of file