Commit 7daeb077 authored by Andreas Heimann's avatar Andreas Heimann

api downloading

parent 85f1d840
......@@ -102,3 +102,5 @@ dist
# TernJS port file
.tern-port
tests/
const { app, BrowserWindow, protocol } = require('electron');
const { app, BrowserWindow, ipcMain } = require('electron');
const { download } = require('electron-dl');
let win;
const PROTOCOL_PREFIX = "csinstall";
app.setAsDefaultProtocolClient(PROTOCOL_PREFIX);
function createWindow () {
const win = new BrowserWindow({
win = new BrowserWindow({
width: 1300,
height: 700,
minHeight: 590,
......@@ -37,4 +40,10 @@ app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
ipcMain.on("download", (event, info) => {
console.log("Download Request Received");
download(BrowserWindow.getFocusedWindow(), info.url, info.properties)
.then(dl => win.webContents.send("download-complete", dl.getSavePath()));
});
\ No newline at end of file
......@@ -259,6 +259,16 @@
"extract-zip": "^1.0.3"
}
},
"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"
}
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
......@@ -288,6 +298,11 @@
"dev": true,
"optional": true
},
"escape-goat": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
"integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q=="
},
"escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
......@@ -295,6 +310,23 @@
"dev": true,
"optional": true
},
"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"
}
},
"extract-zip": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
......@@ -482,6 +514,11 @@
"dev": true,
"optional": true
},
"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="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
......@@ -546,6 +583,11 @@
"escape-string-regexp": "^2.0.0"
}
},
"mime-db": {
"version": "1.43.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
"integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
},
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
......@@ -573,6 +615,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.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
......@@ -622,6 +669,11 @@
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"dev": true
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
......@@ -674,6 +726,14 @@
"once": "^1.3.1"
}
},
"pupa": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
"integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
"requires": {
"escape-goat": "^2.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
......@@ -763,6 +823,22 @@
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"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"
}
},
"sprintf-js": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
......@@ -833,6 +909,15 @@
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
"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"
}
},
"unzipper": {
"version": "0.10.10",
"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.10.tgz",
......
......@@ -6,17 +6,22 @@
"scripts": {
"start": "electron ."
},
"protocols": [{
"name": "customspeens",
"role": "CustomSpeens",
"schemes": ["csinstall"]
}],
"protocols": [
{
"name": "customspeens",
"role": "CustomSpeens",
"schemes": [
"csinstall"
]
}
],
"author": "Andreas Heimann",
"license": "MIT",
"devDependencies": {
"electron": "^8.0.1"
},
"dependencies": {
"electron-dl": "^3.0.0",
"ncp": "^2.0.0",
"rimraf": "^3.0.2",
"unzipper": "^0.10.10"
......
......@@ -19,7 +19,11 @@
</header>
<section class="section-startup active">
<button class="open-backup-button" onclick="UIOpenBackup()">Open Backup</button>
<button class="open-backup-button" onclick="UIOpenBackup()">Open Backup</button><br /><br />
<input type="number" class="external-backup-id" placeholder="External Backup ID" />
<button class="external-backup-button" onclick="UIDownloadBackup()">Download</button>
<span class="external-backup-progress"></span>
</section>
<section class="section-trackinfo">
......
......@@ -35,6 +35,29 @@ body {
.tooltip.active {
display: block;
}
input {
font-family: 'Open Sans', sans-serif;
font-size: 12px;
color: #222;
background: #fff;
text-transform: uppercase;
font-weight: 700;
border-radius: 4px;
padding: 7px 14px;
border: 0px;
transition: 0.2s ease-in-out all;
}
input:hover {
background: #fff;
color: #222;
cursor: pointer;
}
input:focus {
outline: 0;
}
input::placeholder {
color: rgba(0, 0, 0, 0.6);
}
button,
.button {
font-family: 'Open Sans', sans-serif;
......
......@@ -35,6 +35,30 @@ body {
}
}
input {
font-family: 'Open Sans', sans-serif;
font-size: 12px;
color: #222;
background: #fff;
text-transform: uppercase;
font-weight: 700;
border-radius: 4px;
padding: 7px 14px;
border: 0px;
transition: 0.2s ease-in-out all;
&:hover {
background: #fff;
color: #222;
cursor: pointer;
}
&:focus {
outline: 0;
}
&::placeholder {
color: rgba(0,0,0,0.6);
}
}
button, .button {
font-family: 'Open Sans', sans-serif;
font-size: 12px;
......
const { ipcRenderer } = require('electron');
const { dialog, shell, app } = require('electron').remote;
let fs = require('fs');
let path = require('path');
let rimraf = require('rimraf');
let ncp = require('ncp');
let unzipper = require('unzipper');
const fs = require('fs');
const path = require('path');
const rimraf = require('rimraf');
const ncp = require('ncp');
const http = require('http');
const unzipper = require('unzipper');
// System References
let systemOS = "";
......@@ -22,6 +24,9 @@ let DOMSectionStartup = document.querySelector(".section-startup");
let DOMSectionTrackinfo = document.querySelector(".section-trackinfo");
let DOMSectionResult = document.querySelector(".section-result");
let DOMExternalBackupID = document.querySelector(".external-backup-id");
let DOMExternalBackupProgress = document.querySelector(".external-backup-progress");
let DOMUISongCover = document.querySelector(".ui-song-cover");
let DOMUISongTitle = document.querySelector(".ui-song-title");
let DOMUISongSubtitle = document.querySelector(".ui-song-subtitle");
......@@ -75,6 +80,36 @@ function UIUpdateMetadata() {
DOMUISongAuthor.innerHTML = "Chart by " + currentSongTrackInfo.charter;
}
let apiVersion = 1;
function UIDownloadBackup() {
DOMExternalBackupProgress.innerHTML = "";
http.get('http://localhost/www/customspeens-server/public/index.php/api/song/' + DOMExternalBackupID.value, function(response) {
let data = "";
response.on('data', function(chunk) { data += chunk; });
response.on('end', function() {
let apiResponse = JSON.parse( data );
if(apiResponse.version === apiVersion) {
console.log(apiResponse.data);
DOMExternalBackupProgress.innerHTML = "Downloading...";
// Let the main renderer download the backup
ipcRenderer.send("download", {
url: apiResponse.data.paths.zip,
properties: { directory: tempDirLocation }
});
} else {
console.error("Client is outdated!");
DOMExternalBackupProgress.innerHTML = "Client is outdated!";
}
});
});
}
async function loadBackup(filePath, fileName) {
if(currentBackupLocation != "") {
console.log("Unload previous Backup.");
......@@ -83,7 +118,7 @@ async function loadBackup(filePath, fileName) {
console.log("Extracting Backup.");
currentBackupLocation = path.join(tempDirLocation, fileName);
currentBackupLocation = path.join(tempDirLocation, "extract-" + fileName);
console.info(currentBackupLocation);
// Unzip to temp/CustomSpeens/Song
......@@ -157,4 +192,15 @@ function getSongCover(extension) {
let base64Data = "data:image/jpg;base64," + fs.readFileSync(finalPath, { encoding: 'base64' });
return base64Data;
}
\ No newline at end of file
}
ipcRenderer.on("download-complete", (event, info) => {
loadBackup(info, path.basename(info)).then(function(result) {
if(result) {
DOMExternalBackupProgress.innerHTML = "";
UIUpdateMetadata();
} else {
console.error("Backup could not be loaded!");
}
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment