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

api downloading

parent 85f1d840
...@@ -102,3 +102,5 @@ dist ...@@ -102,3 +102,5 @@ dist
# TernJS port file # TernJS port file
.tern-port .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"; const PROTOCOL_PREFIX = "csinstall";
app.setAsDefaultProtocolClient(PROTOCOL_PREFIX); app.setAsDefaultProtocolClient(PROTOCOL_PREFIX);
function createWindow () { function createWindow () {
const win = new BrowserWindow({ win = new BrowserWindow({
width: 1300, width: 1300,
height: 700, height: 700,
minHeight: 590, minHeight: 590,
...@@ -38,3 +41,9 @@ app.on('activate', () => { ...@@ -38,3 +41,9 @@ app.on('activate', () => {
createWindow(); 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 @@ ...@@ -259,6 +259,16 @@
"extract-zip": "^1.0.3" "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": { "encodeurl": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
...@@ -288,6 +298,11 @@ ...@@ -288,6 +298,11 @@
"dev": true, "dev": true,
"optional": 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": { "escape-string-regexp": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
...@@ -295,6 +310,23 @@ ...@@ -295,6 +310,23 @@
"dev": true, "dev": true,
"optional": 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": { "extract-zip": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
...@@ -482,6 +514,11 @@ ...@@ -482,6 +514,11 @@
"dev": true, "dev": true,
"optional": 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": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
...@@ -546,6 +583,11 @@ ...@@ -546,6 +583,11 @@
"escape-string-regexp": "^2.0.0" "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": { "mimic-response": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
...@@ -573,6 +615,11 @@ ...@@ -573,6 +615,11 @@
"minimist": "^1.2.5" "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": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
...@@ -622,6 +669,11 @@ ...@@ -622,6 +669,11 @@
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"dev": true "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": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
...@@ -674,6 +726,14 @@ ...@@ -674,6 +726,14 @@
"once": "^1.3.1" "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": { "readable-stream": {
"version": "2.3.7", "version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
...@@ -763,6 +823,22 @@ ...@@ -763,6 +823,22 @@
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" "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": { "sprintf-js": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
...@@ -833,6 +909,15 @@ ...@@ -833,6 +909,15 @@
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true "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": { "unzipper": {
"version": "0.10.10", "version": "0.10.10",
"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.10.tgz", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.10.tgz",
......
...@@ -6,17 +6,22 @@ ...@@ -6,17 +6,22 @@
"scripts": { "scripts": {
"start": "electron ." "start": "electron ."
}, },
"protocols": [{ "protocols": [
{
"name": "customspeens", "name": "customspeens",
"role": "CustomSpeens", "role": "CustomSpeens",
"schemes": ["csinstall"] "schemes": [
}], "csinstall"
]
}
],
"author": "Andreas Heimann", "author": "Andreas Heimann",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"electron": "^8.0.1" "electron": "^8.0.1"
}, },
"dependencies": { "dependencies": {
"electron-dl": "^3.0.0",
"ncp": "^2.0.0", "ncp": "^2.0.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"unzipper": "^0.10.10" "unzipper": "^0.10.10"
......
...@@ -19,7 +19,11 @@ ...@@ -19,7 +19,11 @@
</header> </header>
<section class="section-startup active"> <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>
<section class="section-trackinfo"> <section class="section-trackinfo">
......
...@@ -35,6 +35,29 @@ body { ...@@ -35,6 +35,29 @@ body {
.tooltip.active { .tooltip.active {
display: block; 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,
.button { .button {
font-family: 'Open Sans', sans-serif; font-family: 'Open Sans', sans-serif;
......
...@@ -35,6 +35,30 @@ body { ...@@ -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 { button, .button {
font-family: 'Open Sans', sans-serif; font-family: 'Open Sans', sans-serif;
font-size: 12px; font-size: 12px;
......
const { ipcRenderer } = require('electron');
const { dialog, shell, app } = require('electron').remote; const { dialog, shell, app } = require('electron').remote;
let fs = require('fs'); const fs = require('fs');
let path = require('path'); const path = require('path');
let rimraf = require('rimraf'); const rimraf = require('rimraf');
let ncp = require('ncp'); const ncp = require('ncp');
let unzipper = require('unzipper'); const http = require('http');
const unzipper = require('unzipper');
// System References // System References
let systemOS = ""; let systemOS = "";
...@@ -22,6 +24,9 @@ let DOMSectionStartup = document.querySelector(".section-startup"); ...@@ -22,6 +24,9 @@ let DOMSectionStartup = document.querySelector(".section-startup");
let DOMSectionTrackinfo = document.querySelector(".section-trackinfo"); let DOMSectionTrackinfo = document.querySelector(".section-trackinfo");
let DOMSectionResult = document.querySelector(".section-result"); 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 DOMUISongCover = document.querySelector(".ui-song-cover");
let DOMUISongTitle = document.querySelector(".ui-song-title"); let DOMUISongTitle = document.querySelector(".ui-song-title");
let DOMUISongSubtitle = document.querySelector(".ui-song-subtitle"); let DOMUISongSubtitle = document.querySelector(".ui-song-subtitle");
...@@ -75,6 +80,36 @@ function UIUpdateMetadata() { ...@@ -75,6 +80,36 @@ function UIUpdateMetadata() {
DOMUISongAuthor.innerHTML = "Chart by " + currentSongTrackInfo.charter; 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) { async function loadBackup(filePath, fileName) {
if(currentBackupLocation != "") { if(currentBackupLocation != "") {
console.log("Unload previous Backup."); console.log("Unload previous Backup.");
...@@ -83,7 +118,7 @@ async function loadBackup(filePath, fileName) { ...@@ -83,7 +118,7 @@ async function loadBackup(filePath, fileName) {
console.log("Extracting Backup."); console.log("Extracting Backup.");
currentBackupLocation = path.join(tempDirLocation, fileName); currentBackupLocation = path.join(tempDirLocation, "extract-" + fileName);
console.info(currentBackupLocation); console.info(currentBackupLocation);
// Unzip to temp/CustomSpeens/Song // Unzip to temp/CustomSpeens/Song
...@@ -158,3 +193,14 @@ function getSongCover(extension) { ...@@ -158,3 +193,14 @@ function getSongCover(extension) {
return base64Data; return base64Data;
} }
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