242 lines
6.8 KiB
JavaScript
242 lines
6.8 KiB
JavaScript
/* eslint-disable no-unused-vars */
|
|
const {
|
|
BrowserWindow,
|
|
ipcRenderer,
|
|
remote
|
|
} = require("electron");
|
|
const axios = require("axios").default;
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
const skinview3d = require("skinview3d/dist/skinview3d.min.js");
|
|
|
|
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];
|
|
var parser = new DOMParser();
|
|
|
|
var randomUrls = [];
|
|
|
|
// Switch button and views
|
|
var button = {
|
|
switch: document.querySelectorAll("div.left > button#switch"),
|
|
edit: document.querySelectorAll("div.right > button#edit"),
|
|
random: document.querySelectorAll("div.right > button#random"),
|
|
save: document.querySelectorAll("div.right > button#save"),
|
|
download: document.querySelectorAll("div.right > button#download"),
|
|
main: document.querySelectorAll("div.right > button#main"),
|
|
set: document.querySelectorAll("div.right > button#set")
|
|
};
|
|
var message = document.querySelectorAll("div.content > p.message")[0];
|
|
var list = document.querySelectorAll("div.right > div#list")[0];
|
|
var view = {
|
|
flat: document.querySelectorAll("div.left > img.skin#flat")[0],
|
|
mesh: document.querySelectorAll("div.left > div#mesh")[0]
|
|
};
|
|
|
|
var skin = new skinview3d.SkinViewer({
|
|
domElement: view.mesh,
|
|
width: 300,
|
|
height: 250
|
|
});
|
|
|
|
var control = skinview3d.createOrbitControls(skin);
|
|
control.enableRotate = true;
|
|
control.enableZoom = false;
|
|
control.enablePan = false;
|
|
|
|
function setView(url, controls = true) {
|
|
button.switch[0].style.display = "initial";
|
|
|
|
view.flat.src = url;
|
|
skin.skinUrl = url;
|
|
control.enableRotate = controls;
|
|
}
|
|
|
|
// Switch button action
|
|
button.switch[0].addEventListener("click", (e) => {
|
|
if (view.flat.style.display == "inline") {
|
|
view.flat.style.display = "none";
|
|
view.mesh.style.display = "inline";
|
|
button.switch[0].innerHTML = "Switch to 2D";
|
|
} else {
|
|
view.flat.style.display = "inline";
|
|
view.mesh.style.display = "none";
|
|
button.switch[0].innerHTML = "Switch to 3D";
|
|
}
|
|
});
|
|
|
|
|
|
switch (action) {
|
|
|
|
case "current":
|
|
axios({
|
|
method: "GET",
|
|
url: "https://sessionserver.mojang.com/session/minecraft/profile/" + session.selectedProfile.id
|
|
}).then((data) => {
|
|
setView(JSON.parse(atob(data.data.properties[0].value)).textures.SKIN.url);
|
|
|
|
button.edit[0].addEventListener("click", (e) => {
|
|
remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/skin_edit.hbs`));
|
|
});
|
|
});
|
|
break;
|
|
|
|
case "upload":
|
|
console.log(window);
|
|
|
|
var buttons = document.querySelectorAll("div.right > button");
|
|
buttons.forEach(element => {
|
|
if (element.id != "main") {
|
|
element.addEventListener("click", (e) => {
|
|
buttons.forEach(btn => {
|
|
if (btn.id != "main") {
|
|
btn.style.display = "none";
|
|
}
|
|
});
|
|
document.querySelectorAll(`div.right > form#${element.id}`)[0].style.display = "block";
|
|
});
|
|
}
|
|
});
|
|
|
|
break;
|
|
|
|
case "random":
|
|
axios({
|
|
method: "GET",
|
|
url: "https://nl.namemc.com/minecraft-skins/random"
|
|
}).then((data) => {
|
|
var namemc = parser.parseFromString(data.data, "text/html");
|
|
namemc.querySelectorAll("a").forEach((e) => {
|
|
var href = e.getAttribute("href");
|
|
if (href.includes("skin")) {
|
|
var id = href.split("/")[2];
|
|
if (id && id.length == 16 && !(id.includes("-"))) {
|
|
randomUrls.push("https://nl.namemc.com/texture/" + id + ".png");
|
|
}
|
|
}
|
|
});
|
|
|
|
function random() {
|
|
console.log(randomUrls.length);
|
|
if (randomUrls.length == 0) {
|
|
window.location.reload();
|
|
} else {
|
|
var id = Math.floor(Math.random() * (randomUrls.length - 0)) + 0;
|
|
setView(randomUrls[id]);
|
|
randomUrls.splice(id, 1);
|
|
}
|
|
}
|
|
|
|
random();
|
|
|
|
button.random[0].addEventListener("click", (e) => {
|
|
random();
|
|
});
|
|
});
|
|
|
|
break;
|
|
|
|
case "edit":
|
|
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;
|
|
setView(url);
|
|
|
|
axios({
|
|
method: "get",
|
|
url: url,
|
|
responseType: "stream",
|
|
adapter: require("axios/lib/adapters/http")
|
|
}).then((res) => {
|
|
res.data.pipe(fs.createWriteStream(path.join(__dirname + "/../assets/skins/edit/in.png")));
|
|
});
|
|
});
|
|
break;
|
|
|
|
case "gallery":
|
|
fs.readdir(path.join(__dirname + "/../assets/skins/download/"), (err, files) => {
|
|
files.forEach(file => {
|
|
var ctx = document.createElement("canvas");
|
|
ctx.width = 32;
|
|
ctx.height = 32;
|
|
var canvas = ctx.getContext("2d");
|
|
|
|
canvas["imageSmoothingEnabled"] = false; /* standard */
|
|
canvas["mozImageSmoothingEnabled"] = false; /* Firefox */
|
|
canvas["oImageSmoothingEnabled"] = false; /* Opera */
|
|
canvas["webkitImageSmoothingEnabled"] = false; /* Safari */
|
|
canvas["msImageSmoothingEnabled"] = false; /* IE */
|
|
|
|
var img = new Image();
|
|
img.onload = function() {
|
|
canvas.drawImage(img, 8, 8, 8, 8, 0, 0, 32, 32);
|
|
};
|
|
img.src = "data:image/png;base64," + fs.readFileSync(path.join(__dirname + "/../assets/skins/download/" + file), {encoding: "base64"});
|
|
|
|
ctx.addEventListener("click", (e) => {
|
|
setView(img.src);
|
|
});
|
|
|
|
list.appendChild(ctx);
|
|
});
|
|
});
|
|
break;
|
|
}
|
|
|
|
// Set button action
|
|
if (button.set.length > 0) {
|
|
button.set[0].addEventListener("click", (e) => {
|
|
remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/skin_upload.hbs?url=test`));
|
|
});
|
|
}
|
|
|
|
// Save button action
|
|
if (button.save.length > 0) {
|
|
button.save[0].addEventListener("click", (e) => {
|
|
axios({
|
|
method: "get",
|
|
url: view.flat.src,
|
|
responseType: "stream",
|
|
adapter: require("axios/lib/adapters/http")
|
|
}).then((res) => {
|
|
var p = res.request.path.split("/")[2];
|
|
if (p.split(".").length < 2) {
|
|
p = p + ".png";
|
|
}
|
|
res.data.pipe(fs.createWriteStream(path.join(__dirname + `/../assets/skins/download/${p}`)));
|
|
message.classList.add("success");
|
|
message.innerHTML = "Saved successfully";
|
|
});
|
|
});
|
|
}
|
|
|
|
// Download button action
|
|
if (button.download.length > 0) {
|
|
button.download[0].addEventListener("click", (e) => {
|
|
ipcRenderer.send("download", {
|
|
url: view.flat.src,
|
|
properties: {
|
|
saveAs: true
|
|
}
|
|
});
|
|
|
|
ipcRenderer.on("downloadResult", (event, arg) => {
|
|
message.classList.add("success");
|
|
message.innerHTML = "Downloaded successfully";
|
|
});
|
|
});
|
|
}
|
|
|
|
// Back button action
|
|
button.main[0].addEventListener("click", (e) => {
|
|
remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/main.hbs`));
|
|
}); |