From 9dd358e0977bba9bde83569bf85f5d6b6410c89c Mon Sep 17 00:00:00 2001 From: Arne van Iterson Date: Tue, 12 May 2020 09:48:51 +0200 Subject: [PATCH] Added function to menu buttons and download option --- css/index.css | 10 ++++++ css/index.css.map | 2 +- css/index.scss | 5 +++ data/{ => skins}/in.png | 0 html/skin_current.hbs | 29 ++++++++++++++++++ html/skin_random.hbs | 25 +++++++++++++++ html/skin_upload.hbs | 28 +++++++++++++++++ main.js | 6 ++++ package-lock.json | 67 +++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/main.js | 3 ++ src/skin.js | 57 +++++++++++++++++++++++++++++++++++ 12 files changed, 232 insertions(+), 1 deletion(-) rename data/{ => skins}/in.png (100%) create mode 100644 html/skin_current.hbs create mode 100644 html/skin_random.hbs create mode 100644 html/skin_upload.hbs create mode 100644 src/skin.js diff --git a/css/index.css b/css/index.css index 087583c..1f13163 100644 --- a/css/index.css +++ b/css/index.css @@ -48,6 +48,16 @@ body div.content .message.success { background: rgba(0, 255, 0, 0.5); } +body div.content img.skin { + width: 60%; + padding: 0 1em 1em 1em; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: -webkit-optimize-contrast; + image-rendering: -moz-crisp-edges; + image-rendering: -o-pixelated; + image-rendering: pixelated; +} + body.dark { color: #a9a9a9; background-color: #111; diff --git a/css/index.css.map b/css/index.css.map index b67d013..777de1a 100644 --- a/css/index.css.map +++ b/css/index.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "AAAA,AAAA,IAAI,CAAC;EACD,WAAW,EAAE,4BAA4B;EACzC,UAAU,EAAE,MAAM;CA4DrB;;AA9DD,AAIQ,IAJJ,CAGA,MAAM,CACF,EAAE,CAAC;EACC,aAAa,EAAE,CAAC;CACnB;;AANT,AAOQ,IAPJ,CAGA,MAAM,CAIF,EAAE,CAAC;EACC,MAAM,EAAE,CAAC;CACZ;;AATT,AAaY,IAbR,CAWA,GAAG,AAAA,QAAQ,CACP,IAAI,CACA,KAAK,CAAC;EACF,SAAS,EAAE,KAAK;CACnB;;AAfb,AAiBQ,IAjBJ,CAWA,GAAG,AAAA,QAAQ,CAMP,KAAK,EAjBb,IAAI,CAWA,GAAG,AAAA,QAAQ,CAMA,MAAM,CAAC;EACV,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,MAAM;CAClB;;AApBT,AAqBQ,IArBJ,CAWA,GAAG,AAAA,QAAQ,CAUP,MAAM,CAAC;EACH,KAAK,EAAE,GAAG;CACb;;AAvBT,AAwBQ,IAxBJ,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,QAAQ;EAChB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,KAAK;CAaf;;AA3CT,AA+BY,IA/BR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAOH,KAAK,CAAC;EACH,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,oBAAoB;CACnC;;AAlCb,AAmCY,IAnCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAWH,QAAQ,CAAC;EACN,MAAM,EAAE,aAAa;EACrB,UAAU,EAAE,oBAAoB;CACnC;;AAtCb,AAuCY,IAvCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAeH,QAAQ,CAAC;EACN,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,oBAAoB;CACnC;;AA1Cb,AA6CI,IA7CA,AA6CC,KAAK,CAAC;EACH,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,IAAI;CACzB;;AAhDL,AAiDI,IAjDA,AAiDC,MAAM,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;CACnB;;AApDL,AAqDI,IArDA,CAqDA,MAAM,CAAC;EACH,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,UAAU,EAAE,MAAM;CACrB", + "mappings": "AAAA,AAAA,IAAI,CAAC;EACD,WAAW,EAAE,4BAA4B;EACzC,UAAU,EAAE,MAAM;CAiErB;;AAnED,AAIQ,IAJJ,CAGA,MAAM,CACF,EAAE,CAAC;EACC,aAAa,EAAE,CAAC;CACnB;;AANT,AAOQ,IAPJ,CAGA,MAAM,CAIF,EAAE,CAAC;EACC,MAAM,EAAE,CAAC;CACZ;;AATT,AAaY,IAbR,CAWA,GAAG,AAAA,QAAQ,CACP,IAAI,CACA,KAAK,CAAC;EACF,SAAS,EAAE,KAAK;CACnB;;AAfb,AAiBQ,IAjBJ,CAWA,GAAG,AAAA,QAAQ,CAMP,KAAK,EAjBb,IAAI,CAWA,GAAG,AAAA,QAAQ,CAMA,MAAM,CAAC;EACV,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,MAAM;CAClB;;AApBT,AAqBQ,IArBJ,CAWA,GAAG,AAAA,QAAQ,CAUP,MAAM,CAAC;EACH,KAAK,EAAE,GAAG;CACb;;AAvBT,AAwBQ,IAxBJ,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,QAAQ;EAChB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,KAAK;CAaf;;AA3CT,AA+BY,IA/BR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAOH,KAAK,CAAC;EACH,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,oBAAoB;CACnC;;AAlCb,AAmCY,IAnCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAWH,QAAQ,CAAC;EACN,MAAM,EAAE,aAAa;EACrB,UAAU,EAAE,oBAAoB;CACnC;;AAtCb,AAuCY,IAvCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAeH,QAAQ,CAAC;EACN,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,oBAAoB;CACnC;;AA1Cb,AA4CQ,IA5CJ,CAWA,GAAG,AAAA,QAAQ,CAiCP,GAAG,AAAA,KAAK,CAAC;EACL,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,aAAa;EACtB,eAAe,EAAE,SAAS;CAC7B;;AAhDT,AAkDI,IAlDA,AAkDC,KAAK,CAAC;EACH,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,IAAI;CACzB;;AArDL,AAsDI,IAtDA,AAsDC,MAAM,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;CACnB;;AAzDL,AA0DI,IA1DA,CA0DA,MAAM,CAAC;EACH,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,UAAU,EAAE,MAAM;CACrB", "sources": [ "index.scss" ], diff --git a/css/index.scss b/css/index.scss index e240870..1a9a2fe 100644 --- a/css/index.scss +++ b/css/index.scss @@ -42,6 +42,11 @@ body { background: rgba(0, 255, 0, 0.5); } } + img.skin { + width: 60%; + padding: 0 1em 1em 1em; + image-rendering: pixelated; + } } &.dark { color: #a9a9a9; diff --git a/data/in.png b/data/skins/in.png similarity index 100% rename from data/in.png rename to data/skins/in.png diff --git a/html/skin_current.hbs b/html/skin_current.hbs new file mode 100644 index 0000000..22fa733 --- /dev/null +++ b/html/skin_current.hbs @@ -0,0 +1,29 @@ + + + + + + {{ title }} + + + +
+

{{ header }}

+

Current Skin

+
+ +
+

+ Current Skin + + + +
+ + + + + + \ No newline at end of file diff --git a/html/skin_random.hbs b/html/skin_random.hbs new file mode 100644 index 0000000..c8e2130 --- /dev/null +++ b/html/skin_random.hbs @@ -0,0 +1,25 @@ + + + + + + {{ title }} + + + +
+

{{ header }}

+

Random Skin

+
+ +
+ +
+ + + + + + \ No newline at end of file diff --git a/html/skin_upload.hbs b/html/skin_upload.hbs new file mode 100644 index 0000000..ec7aef8 --- /dev/null +++ b/html/skin_upload.hbs @@ -0,0 +1,28 @@ + + + + + + {{ title }} + + + +
+

{{ header }}

+

Upload Skin

+
+ +
+
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/main.js b/main.js index ed9a72e..3e13116 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,5 @@ const { app, BrowserWindow, ipcMain } = require("electron"); +const { download } = require("electron-dl"); const fs = require("fs"); const path = require("path"); @@ -54,6 +55,11 @@ ipcMain.on("setAuth", (event, data) => { event.returnValue = true; }); +ipcMain.on("download", (event, info) => { + download(BrowserWindow.getFocusedWindow(), info.url, info.properties) + .then(dl => event.reply("downloadResult", dl.getSavePath())); +}); + // Create session variables for uuid storage var session = {}; diff --git a/package-lock.json b/package-lock.json index 1e0643e..12c290e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1016,6 +1016,16 @@ } } }, + "electron-dl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.0.0.tgz", + "integrity": "sha512-TeBRv+vQgNVLGf/XLV4EYfYIBMI4TQcw84aDlM8xEm/1Lgxux3PUXDzaingivf+6jMvRojXSRPTHmiWI/6LrqQ==", + "requires": { + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" + } + }, "electron-handlebars": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/electron-handlebars/-/electron-handlebars-2.0.0.tgz", @@ -1253,6 +1263,23 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -1728,6 +1755,11 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -1917,6 +1949,11 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -1948,6 +1985,11 @@ "minimist": "^1.2.5" } }, + "modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2437,6 +2479,22 @@ } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2710,6 +2768,15 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, + "unused-filename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", + "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "requires": { + "modify-filename": "^1.1.0", + "path-exists": "^4.0.0" + } + }, "update-notifier": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", diff --git a/package.json b/package.json index 21c2b4c..5fb1760 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "cross-env": "^7.0.2", "electron": "^8.2.5", "electron-builder": "^22.6.0", + "electron-dl": "^3.0.0", "electron-handlebars": "^2.0.0", "electron-reload": "^1.5.0", "eslint": "^7.0.0", diff --git a/src/main.js b/src/main.js index 43c9e00..5a64bbf 100644 --- a/src/main.js +++ b/src/main.js @@ -17,14 +17,17 @@ msg.innerHTML = `Logged in as ${session.selectedProfile.name}`; document.querySelectorAll("div.content > button#current")[0].addEventListener("click", (e) => { console.log("Clicked current button"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/skin_current.hbs`)); }); document.querySelectorAll("div.content > button#upload")[0].addEventListener("click", (e) => { console.log("Clicked upload button"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/skin_upload.hbs`)); }); document.querySelectorAll("div.content > button#random")[0].addEventListener("click", (e) => { console.log("Clicked random button"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/skin_random.hbs`)); }); document.querySelectorAll("div.content > button#logout")[0].addEventListener("click", (e) => { diff --git a/src/skin.js b/src/skin.js new file mode 100644 index 0000000..d843d87 --- /dev/null +++ b/src/skin.js @@ -0,0 +1,57 @@ +/* eslint-disable no-unused-vars */ +const { BrowserWindow, ipcRenderer, remote } = require("electron"); +const axios = require("axios").default; +const path = require("path"); + +const session = ipcRenderer.sendSync("getSession"); +if (!session.accessToken) { + console.log("Session does not exist, return to auth"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/auth.hbs`)); +} else { + console.log("Session does exist, continue"); +} + +const regex = /(?!\w*_)\w*(?=\.\w*)/g; +var action = __filename.match(regex)[0]; + +switch (action) { +case "current": + axios({ + method: "GET", + url: "https://sessionserver.mojang.com/session/minecraft/profile/" + session.selectedProfile.id + }).then((data) => { + const url = JSON.parse(atob(data.data.properties[0].value)).textures.SKIN.url; + document.querySelectorAll("div.content > img.skin")[0].src = url; + + document.querySelectorAll("div.content > button#download")[0].addEventListener("click", (e) => { + ipcRenderer.send("download", { + url: url, + properties: { + saveAs: true + } + }); + + ipcRenderer.on("downloadResult", (event, arg) => { + const msg = document.querySelectorAll("div.content > p.message")[0]; + console.log(msg); + msg.classList.add("success"); + msg.innerHTML = "Downloaded successfully"; + }); + }); + + document.querySelectorAll("div.content > button#render")[0].addEventListener("click", (e) => { + console.log("Switch to 3D clicked"); + }); + }); + break; +case "upload": + + break; +case "random": + + break; +} + +document.querySelectorAll("div.content > button#main")[0].addEventListener("click", (e) => { + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/main.hbs`)); +});