1.1.7 - cli, sorting, maximize, bugs...
This commit is contained in:
parent
8648e6df41
commit
0a467966cb
|
@ -1,6 +1,12 @@
|
||||||
const {app, BrowserWindow, ipcMain, Tray, Menu, session, dialog, shell, nativeTheme} = require('electron');
|
const {app, BrowserWindow, ipcMain, Tray, Menu, session, dialog, shell, nativeTheme} = require('electron');
|
||||||
const {createServer} = require('./src/server');
|
const {createServer} = require('./src/server');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const arg = require('arg');
|
||||||
|
const { exit } = require('process');
|
||||||
|
const packageJson = require('./package.json');
|
||||||
|
const chalk = require('chalk');
|
||||||
|
const {Settings} = require('./src/settings');
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
let win;
|
let win;
|
||||||
let tray;
|
let tray;
|
||||||
|
@ -9,12 +15,84 @@ let settings;
|
||||||
let shouldExit = false;
|
let shouldExit = false;
|
||||||
let playing = false;
|
let playing = false;
|
||||||
|
|
||||||
|
//Arguments
|
||||||
|
const args = arg({
|
||||||
|
'--server': Boolean,
|
||||||
|
'--host': String,
|
||||||
|
'--port': Number,
|
||||||
|
'--help': Boolean,
|
||||||
|
'--settings': Boolean,
|
||||||
|
'--reset-settings': Boolean,
|
||||||
|
'--reset-downloads': Boolean,
|
||||||
|
'--log': Boolean,
|
||||||
|
|
||||||
|
'-S': '--server',
|
||||||
|
'-H': '--host',
|
||||||
|
'-h': '--help',
|
||||||
|
'-p': '--port'
|
||||||
|
}, {argv: process.argv.slice(1)});
|
||||||
|
|
||||||
|
executeCli();
|
||||||
|
|
||||||
//Get path to asset
|
//Get path to asset
|
||||||
function assetPath(a) {
|
function assetPath(a) {
|
||||||
return path.join(__dirname, 'assets', a);
|
return path.join(__dirname, 'assets', a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Execute actions by parameters
|
||||||
|
function executeCli() {
|
||||||
|
if (args['--help']) {
|
||||||
|
console.log(`
|
||||||
|
${chalk.bold.blue('Freezer PC')} ${chalk.bold(`v${packageJson.version}`)} by exttex
|
||||||
|
|
||||||
|
${chalk.bold('USAGE:')}
|
||||||
|
--help, -h Prints this and exits
|
||||||
|
--server, -S Starts in server mode
|
||||||
|
--host, -H Override host (default: 127.0.0.1)
|
||||||
|
--port, -p Override port (default: 10069)
|
||||||
|
|
||||||
|
${chalk.bold('TOOLS:')}
|
||||||
|
--settings Prints current settings and exits
|
||||||
|
--log Prints server log and exits
|
||||||
|
--reset-settings Reset settings to default
|
||||||
|
--reset-downloads Delete downloads cache and database
|
||||||
|
`);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
//Print settings and exit
|
||||||
|
if (args["--settings"]) {
|
||||||
|
let settings = new Settings();
|
||||||
|
settings.load();
|
||||||
|
console.log(JSON.stringify(settings, null, 2));
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
if (args["--reset-settings"]) {
|
||||||
|
fs.unlinkSync(Settings.getPath());
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
//Delete downloads db and temp
|
||||||
|
if (args['--reset-downloads']) {
|
||||||
|
fs.unlinkSync(Settings.getDownloadsDB());
|
||||||
|
fs.rmdirSync(Settings.getTempDownloads(), {recursive: true});
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
//Show log
|
||||||
|
if (args['--log']) {
|
||||||
|
let p = path.join(Settings.getDir(), "freezer-server.log");
|
||||||
|
console.log(fs.readFileSync(p, {encoding: 'utf-8'}).toString());
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function startServer() {
|
async function startServer() {
|
||||||
|
|
||||||
|
//Override settings
|
||||||
|
let override = {};
|
||||||
|
if (args["--host"])
|
||||||
|
override['host'] = args["--host"];
|
||||||
|
if (args["--port"])
|
||||||
|
override['port'] = args["--port"];
|
||||||
|
|
||||||
settings = await createServer(true, () => {
|
settings = await createServer(true, () => {
|
||||||
//Server error
|
//Server error
|
||||||
shouldExit = true;
|
shouldExit = true;
|
||||||
|
@ -26,7 +104,7 @@ async function startServer() {
|
||||||
message: 'Server error occured, Freezer is probably already running!',
|
message: 'Server error occured, Freezer is probably already running!',
|
||||||
buttons: ['Close']
|
buttons: ['Close']
|
||||||
});
|
});
|
||||||
});
|
}, override);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createWindow() {
|
async function createWindow() {
|
||||||
|
@ -85,6 +163,8 @@ async function createWindow() {
|
||||||
//Create window
|
//Create window
|
||||||
app.on('ready', async () => {
|
app.on('ready', async () => {
|
||||||
await startServer();
|
await startServer();
|
||||||
|
//Server mode
|
||||||
|
if (args['--server']) return;
|
||||||
createWindow();
|
createWindow();
|
||||||
|
|
||||||
//Create Tray
|
//Create Tray
|
||||||
|
@ -179,6 +259,12 @@ function setThumbarButtons() {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//[] button
|
||||||
|
ipcMain.on('maximize', () => {
|
||||||
|
win.isMaximized() ? win.unmaximize() : win.maximize();
|
||||||
|
});
|
||||||
|
|
||||||
//_ button in ui
|
//_ button in ui
|
||||||
ipcMain.on('minimize', () => {
|
ipcMain.on('minimize', () => {
|
||||||
win.minimize();
|
win.minimize();
|
||||||
|
|
|
@ -88,17 +88,6 @@
|
||||||
"requires": {
|
"requires": {
|
||||||
"js-yaml": "^3.13.1",
|
"js-yaml": "^3.13.1",
|
||||||
"json5": "^2.1.1"
|
"json5": "^2.1.1"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"json5": {
|
|
||||||
"version": "2.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
|
|
||||||
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"minimist": "^1.2.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@mdi/font": {
|
"@mdi/font": {
|
||||||
|
@ -230,12 +219,6 @@
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/color-name": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/connect": {
|
"@types/connect": {
|
||||||
"version": "3.4.33",
|
"version": "3.4.33",
|
||||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
|
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
|
||||||
|
@ -309,9 +292,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/json-schema": {
|
"@types/json-schema": {
|
||||||
"version": "7.0.5",
|
"version": "7.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
|
||||||
"integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
|
"integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/mime": {
|
"@types/mime": {
|
||||||
|
@ -993,9 +976,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"acorn-jsx": {
|
"acorn-jsx": {
|
||||||
"version": "5.2.0",
|
"version": "5.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
|
||||||
"integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
|
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"acorn-walk": {
|
"acorn-walk": {
|
||||||
|
@ -1026,9 +1009,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ajv": {
|
"ajv": {
|
||||||
"version": "6.12.4",
|
"version": "6.12.6",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||||
"integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==",
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
|
@ -1394,9 +1377,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"base64-arraybuffer": {
|
"base64-arraybuffer": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
|
||||||
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
|
"integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
|
||||||
},
|
},
|
||||||
"base64-js": {
|
"base64-js": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
|
@ -1419,14 +1402,6 @@
|
||||||
"tweetnacl": "^0.14.3"
|
"tweetnacl": "^0.14.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"better-assert": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
|
|
||||||
"requires": {
|
|
||||||
"callsite": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bfj": {
|
"bfj": {
|
||||||
"version": "6.1.2",
|
"version": "6.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
|
||||||
|
@ -1691,6 +1666,14 @@
|
||||||
"base64-js": "^1.0.2",
|
"base64-js": "^1.0.2",
|
||||||
"ieee754": "^1.1.4",
|
"ieee754": "^1.1.4",
|
||||||
"isarray": "^1.0.0"
|
"isarray": "^1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"buffer-from": {
|
"buffer-from": {
|
||||||
|
@ -1893,11 +1876,6 @@
|
||||||
"caller-callsite": "^2.0.0"
|
"caller-callsite": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"callsite": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
|
|
||||||
},
|
|
||||||
"callsites": {
|
"callsites": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||||
|
@ -3465,9 +3443,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.3.589",
|
"version": "1.3.591",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.589.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.591.tgz",
|
||||||
"integrity": "sha512-rQItBTFnol20HaaLm26UgSUduX7iGerwW7pEYX17MB1tI6LzFajiLV7iZ7LVcUcsN/7HrZUoCLrBauChy/IqEg==",
|
"integrity": "sha512-ol/0WzjL4NS4Kqy9VD6xXQON91xIihDT36sYCew/G/bnd1v0/4D+kahp26JauQhgFUjrdva3kRSo7URcUmQ+qw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"elliptic": {
|
"elliptic": {
|
||||||
|
@ -3521,54 +3499,31 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-client": {
|
"engine.io-client": {
|
||||||
"version": "3.4.3",
|
"version": "3.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz",
|
||||||
"integrity": "sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw==",
|
"integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"component-emitter": "~1.3.0",
|
"component-emitter": "~1.3.0",
|
||||||
"component-inherit": "0.0.3",
|
"component-inherit": "0.0.3",
|
||||||
"debug": "~4.1.0",
|
"debug": "~3.1.0",
|
||||||
"engine.io-parser": "~2.2.0",
|
"engine.io-parser": "~2.2.0",
|
||||||
"has-cors": "1.1.0",
|
"has-cors": "1.1.0",
|
||||||
"indexof": "0.0.1",
|
"indexof": "0.0.1",
|
||||||
"parseqs": "0.0.5",
|
"parseqs": "0.0.6",
|
||||||
"parseuri": "0.0.5",
|
"parseuri": "0.0.6",
|
||||||
"ws": "~6.1.0",
|
"ws": "~6.1.0",
|
||||||
"xmlhttprequest-ssl": "~1.5.4",
|
"xmlhttprequest-ssl": "~1.5.4",
|
||||||
"yeast": "0.1.2"
|
"yeast": "0.1.2"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
|
||||||
},
|
|
||||||
"ws": {
|
|
||||||
"version": "6.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
|
|
||||||
"integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
|
|
||||||
"requires": {
|
|
||||||
"async-limiter": "~1.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-parser": {
|
"engine.io-parser": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
|
||||||
"integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
|
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"after": "0.8.2",
|
"after": "0.8.2",
|
||||||
"arraybuffer.slice": "~0.0.7",
|
"arraybuffer.slice": "~0.0.7",
|
||||||
"base64-arraybuffer": "0.1.5",
|
"base64-arraybuffer": "0.1.4",
|
||||||
"blob": "0.0.5",
|
"blob": "0.0.5",
|
||||||
"has-binary2": "~1.0.2"
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
|
@ -3723,21 +3678,21 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.1.1",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "^2.1.1"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"eslint-scope": {
|
"eslint-scope": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||||
"integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
|
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"esrecurse": "^4.1.0",
|
"esrecurse": "^4.3.0",
|
||||||
"estraverse": "^4.1.1"
|
"estraverse": "^4.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -3751,9 +3706,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"import-fresh": {
|
"import-fresh": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
|
||||||
"integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
|
"integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"parent-module": "^1.0.0",
|
"parent-module": "^1.0.0",
|
||||||
|
@ -3858,9 +3813,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": {
|
"acorn": {
|
||||||
"version": "7.4.0",
|
"version": "7.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
"integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3889,12 +3844,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"esrecurse": {
|
"esrecurse": {
|
||||||
"version": "4.2.1",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||||
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
|
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"estraverse": "^4.1.0"
|
"estraverse": "^5.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"estraverse": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"estraverse": {
|
"estraverse": {
|
||||||
|
@ -4257,14 +4220,14 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"schema-utils": {
|
"schema-utils": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
|
||||||
"integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
|
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/json-schema": "^7.0.4",
|
"@types/json-schema": "^7.0.5",
|
||||||
"ajv": "^6.12.2",
|
"ajv": "^6.12.4",
|
||||||
"ajv-keywords": "^3.4.1"
|
"ajv-keywords": "^3.5.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4693,13 +4656,6 @@
|
||||||
"integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
|
"integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"isarray": "2.0.1"
|
"isarray": "2.0.1"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"isarray": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"has-cors": {
|
"has-cors": {
|
||||||
|
@ -5215,12 +5171,11 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
"version": "4.2.1",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/color-name": "^1.1.1",
|
|
||||||
"color-convert": "^2.0.1"
|
"color-convert": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5290,9 +5245,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "7.1.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
|
@ -5428,6 +5383,15 @@
|
||||||
"rgba-regex": "^1.0.0"
|
"rgba-regex": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"is-core-module": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has": "^1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"is-data-descriptor": {
|
"is-data-descriptor": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||||
|
@ -5647,10 +5611,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "1.0.0",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"isexe": {
|
"isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
@ -5783,12 +5746,12 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"json5": {
|
"json5": {
|
||||||
"version": "1.0.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jsonfile": {
|
"jsonfile": {
|
||||||
|
@ -5884,6 +5847,17 @@
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
"emojis-list": "^3.0.0",
|
"emojis-list": "^3.0.0",
|
||||||
"json5": "^1.0.1"
|
"json5": "^1.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"json5": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"locate-path": {
|
"locate-path": {
|
||||||
|
@ -6449,9 +6423,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-releases": {
|
"node-releases": {
|
||||||
"version": "1.1.65",
|
"version": "1.1.66",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.65.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz",
|
||||||
"integrity": "sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA==",
|
"integrity": "sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"normalize-package-data": {
|
"normalize-package-data": {
|
||||||
|
@ -6538,11 +6512,6 @@
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"object-component": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
|
||||||
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
|
|
||||||
},
|
|
||||||
"object-copy": {
|
"object-copy": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
|
||||||
|
@ -6931,20 +6900,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"parseqs": {
|
"parseqs": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||||
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
|
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
|
||||||
"requires": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"parseuri": {
|
"parseuri": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
|
||||||
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
||||||
"requires": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"parseurl": {
|
"parseurl": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
|
@ -7942,6 +7905,12 @@
|
||||||
"util-deprecate": "~1.0.1"
|
"util-deprecate": "~1.0.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
|
@ -8123,11 +8092,12 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.17.0",
|
"version": "1.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
|
||||||
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
|
"integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"is-core-module": "^2.0.0",
|
||||||
"path-parse": "^1.0.6"
|
"path-parse": "^1.0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -8226,9 +8196,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rxjs": {
|
"rxjs": {
|
||||||
"version": "6.6.2",
|
"version": "6.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
|
||||||
"integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==",
|
"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"tslib": "^1.9.0"
|
"tslib": "^1.9.0"
|
||||||
|
@ -8278,14 +8248,14 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"schema-utils": {
|
"schema-utils": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
|
||||||
"integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
|
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/json-schema": "^7.0.4",
|
"@types/json-schema": "^7.0.5",
|
||||||
"ajv": "^6.12.2",
|
"ajv": "^6.12.4",
|
||||||
"ajv-keywords": "^3.4.1"
|
"ajv-keywords": "^3.5.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8708,74 +8678,31 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io-client": {
|
"socket.io-client": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.1.tgz",
|
||||||
"integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
|
"integrity": "sha512-YXmXn3pA8abPOY//JtYxou95Ihvzmg8U6kQyolArkIyLd0pgVhrfor/iMsox8cn07WCOOvvuJ6XKegzIucPutQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"backo2": "1.0.2",
|
"backo2": "1.0.2",
|
||||||
"base64-arraybuffer": "0.1.5",
|
|
||||||
"component-bind": "1.0.0",
|
"component-bind": "1.0.0",
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"debug": "~4.1.0",
|
"debug": "~3.1.0",
|
||||||
"engine.io-client": "~3.4.0",
|
"engine.io-client": "~3.4.0",
|
||||||
"has-binary2": "~1.0.2",
|
"has-binary2": "~1.0.2",
|
||||||
"has-cors": "1.1.0",
|
|
||||||
"indexof": "0.0.1",
|
"indexof": "0.0.1",
|
||||||
"object-component": "0.0.3",
|
"parseqs": "0.0.6",
|
||||||
"parseqs": "0.0.5",
|
"parseuri": "0.0.6",
|
||||||
"parseuri": "0.0.5",
|
|
||||||
"socket.io-parser": "~3.3.0",
|
"socket.io-parser": "~3.3.0",
|
||||||
"to-array": "0.1.4"
|
"to-array": "0.1.4"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"component-emitter": {
|
|
||||||
"version": "1.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
|
||||||
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "^2.1.1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"isarray": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
|
||||||
},
|
|
||||||
"socket.io-parser": {
|
"socket.io-parser": {
|
||||||
"version": "3.3.0",
|
"version": "3.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz",
|
||||||
"integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
|
"integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"debug": "~3.1.0",
|
"debug": "~3.1.0",
|
||||||
"isarray": "2.0.1"
|
"isarray": "2.0.1"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sockjs": {
|
"sockjs": {
|
||||||
|
@ -8838,6 +8765,11 @@
|
||||||
"is-plain-obj": "^1.0.0"
|
"is-plain-obj": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sortablejs": {
|
||||||
|
"version": "1.10.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz",
|
||||||
|
"integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
|
||||||
|
},
|
||||||
"source-list-map": {
|
"source-list-map": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
|
||||||
|
@ -9597,9 +9529,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"tslib": {
|
"tslib": {
|
||||||
"version": "1.13.0",
|
"version": "1.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||||
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
|
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"tty-browserify": {
|
"tty-browserify": {
|
||||||
|
@ -9775,6 +9707,12 @@
|
||||||
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
|
||||||
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
|
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
|
||||||
"dev": true
|
"dev": true
|
||||||
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||||
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -9791,9 +9729,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"uri-js": {
|
"uri-js": {
|
||||||
"version": "4.2.2",
|
"version": "4.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
|
||||||
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
|
"integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
|
@ -9917,9 +9855,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.1.1",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
|
||||||
"integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
|
"integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"validate-npm-package-license": {
|
"validate-npm-package-license": {
|
||||||
|
@ -10039,9 +9977,9 @@
|
||||||
"integrity": "sha512-jAJ7cmv363JkZ8CxXzAzcp5k7E4L/eh92hTZUllHvPFOVGyFb5glNumBQbJGoIgpVUQ6jF/6cESnq1oPic3JxQ=="
|
"integrity": "sha512-jAJ7cmv363JkZ8CxXzAzcp5k7E4L/eh92hTZUllHvPFOVGyFb5glNumBQbJGoIgpVUQ6jF/6cESnq1oPic3JxQ=="
|
||||||
},
|
},
|
||||||
"vue-eslint-parser": {
|
"vue-eslint-parser": {
|
||||||
"version": "7.1.0",
|
"version": "7.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz",
|
||||||
"integrity": "sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==",
|
"integrity": "sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "^4.1.1",
|
"debug": "^4.1.1",
|
||||||
|
@ -10053,21 +9991,21 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "4.1.1",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
|
||||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "^2.1.1"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"eslint-scope": {
|
"eslint-scope": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||||
"integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
|
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"esrecurse": "^4.1.0",
|
"esrecurse": "^4.3.0",
|
||||||
"estraverse": "^4.1.1"
|
"estraverse": "^4.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -10219,9 +10157,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vue-loader-v16": {
|
"vue-loader-v16": {
|
||||||
"version": "npm:vue-loader@16.0.0-rc.0",
|
"version": "npm:vue-loader@16.0.0-rc.1",
|
||||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.0.tgz",
|
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.1.tgz",
|
||||||
"integrity": "sha512-S4F7jhBQFuJbLtyjfrMYl4gBFhMACHtkZ+rJuH6/hvgxeAEAPBY5aVKn1+LuVE9+U1RGGQ9Nq/7DSR72spf0PQ==",
|
"integrity": "sha512-yR+BS90EOXTNieasf8ce9J3TFCpm2DGqoqdbtiwQ33hon3FyIznLX7sKavAq1VmfBnOeV6It0Htg4aniv8ph1g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
@ -10275,16 +10213,6 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"json5": {
|
|
||||||
"version": "2.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
|
|
||||||
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"minimist": "^1.2.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"loader-utils": {
|
"loader-utils": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||||
|
@ -10356,6 +10284,14 @@
|
||||||
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
|
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"vuedraggable": {
|
||||||
|
"version": "2.24.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
|
||||||
|
"integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
|
||||||
|
"requires": {
|
||||||
|
"sortablejs": "1.10.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"vuetify": {
|
"vuetify": {
|
||||||
"version": "2.3.16",
|
"version": "2.3.16",
|
||||||
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.3.16.tgz",
|
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.3.16.tgz",
|
||||||
|
@ -10841,6 +10777,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"async-limiter": "~1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"yargs": {
|
"yargs": {
|
||||||
"version": "13.3.2",
|
"version": "13.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
|
||||||
|
@ -11006,10 +10951,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "6.2.1",
|
"version": "6.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
|
||||||
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
|
"integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"async-limiter": "~1.0.0"
|
"async-limiter": "~1.0.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
"vue-i18n": "^8.17.3",
|
"vue-i18n": "^8.17.3",
|
||||||
"vue-router": "^3.4.9",
|
"vue-router": "^3.4.9",
|
||||||
"vue-socket.io": "^3.0.10",
|
"vue-socket.io": "^3.0.10",
|
||||||
|
"vuedraggable": "^2.24.3",
|
||||||
"vuetify": "^2.3.16"
|
"vuetify": "^2.3.16"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -10,9 +10,10 @@
|
||||||
height='28'>
|
height='28'>
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<span>Freezer <span v-if='version'>v{{version}}</span></span>
|
<span style='position: absolute; left: 45%'>Freezer <span v-if='version'>v{{version}}</span></span>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-icon class='topbarbutton mx-2' @click='minimize'>mdi-window-minimize</v-icon>
|
<v-icon class='topbarbutton mx-2' @click='minimize'>mdi-window-minimize</v-icon>
|
||||||
|
<v-icon class='topbarbutton mx-2' @click='maximize'>mdi-window-maximize</v-icon>
|
||||||
<v-icon @click='exitApp' class='topbarbutton mx-2'>mdi-close</v-icon>
|
<v-icon @click='exitApp' class='topbarbutton mx-2'>mdi-close</v-icon>
|
||||||
</v-system-bar>
|
</v-system-bar>
|
||||||
|
|
||||||
|
@ -408,6 +409,10 @@ export default {
|
||||||
minimize() {
|
minimize() {
|
||||||
const {ipcRenderer} = window.require('electron');
|
const {ipcRenderer} = window.require('electron');
|
||||||
ipcRenderer.send('minimize');
|
ipcRenderer.send('minimize');
|
||||||
|
},
|
||||||
|
maximize() {
|
||||||
|
const {ipcRenderer} = window.require('electron');
|
||||||
|
ipcRenderer.send('maximize');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
@ -54,6 +54,15 @@
|
||||||
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
<!-- Share -->
|
||||||
|
<v-list-item dense @click='share'>
|
||||||
|
<v-list-item-icon>
|
||||||
|
<v-icon>mdi-share-variant</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
<!-- Download -->
|
<!-- Download -->
|
||||||
<v-list-item dense @click='download'>
|
<v-list-item dense @click='download'>
|
||||||
<v-list-item-icon>
|
<v-list-item-icon>
|
||||||
|
@ -167,6 +176,16 @@ export default {
|
||||||
}
|
}
|
||||||
this.album.tracks = tracks;
|
this.album.tracks = tracks;
|
||||||
this.downloadDialog = true;
|
this.downloadDialog = true;
|
||||||
|
},
|
||||||
|
//Copy link
|
||||||
|
share() {
|
||||||
|
let copyElem = document.createElement('input');
|
||||||
|
copyElem.value = `https://deezer.com/album/${this.album.id}`;
|
||||||
|
document.body.appendChild(copyElem);
|
||||||
|
copyElem.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(copyElem);
|
||||||
|
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<v-list-item-title>{{$t("Add to library")}}</v-list-item-title>
|
<v-list-item-title>{{$t("Add to library")}}</v-list-item-title>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<!-- Remvoe from library -->
|
<!-- Remove from library -->
|
||||||
<v-list-item dense @click='library' v-if='artist.library'>
|
<v-list-item dense @click='library' v-if='artist.library'>
|
||||||
<v-list-item-icon>
|
<v-list-item-icon>
|
||||||
<v-icon>mdi-heart-remove</v-icon>
|
<v-icon>mdi-heart-remove</v-icon>
|
||||||
|
@ -35,6 +35,15 @@
|
||||||
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
<!-- Share -->
|
||||||
|
<v-list-item dense @click='share'>
|
||||||
|
<v-list-item-icon>
|
||||||
|
<v-icon>mdi-share-variant</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-menu>
|
</v-menu>
|
||||||
|
|
||||||
|
@ -97,6 +106,16 @@ export default {
|
||||||
query: {artist: JSON.stringify(this.artist)}
|
query: {artist: JSON.stringify(this.artist)}
|
||||||
});
|
});
|
||||||
this.$emit('clicked');
|
this.$emit('clicked');
|
||||||
|
},
|
||||||
|
//Copy link
|
||||||
|
share() {
|
||||||
|
let copyElem = document.createElement('input');
|
||||||
|
copyElem.value = `https://deezer.com/artist/${this.artist.id}`;
|
||||||
|
document.body.appendChild(copyElem);
|
||||||
|
copyElem.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(copyElem);
|
||||||
|
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,12 +54,12 @@ export default {
|
||||||
return {
|
return {
|
||||||
shown: true,
|
shown: true,
|
||||||
qualities: [
|
qualities: [
|
||||||
'Settings quality',
|
this.$t('Settings quality'),
|
||||||
'MP3 128kbps',
|
'MP3 128kbps',
|
||||||
'MP3 320kbps',
|
'MP3 320kbps',
|
||||||
'FLAC ~1441kbps'
|
'FLAC ~1441kbps'
|
||||||
],
|
],
|
||||||
qualityString: 'Settings quality',
|
qualityString: this.$t('Settings quality'),
|
||||||
autostart: true,
|
autostart: true,
|
||||||
dShow: this.show
|
dShow: this.show
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,23 @@
|
||||||
<v-progress-circular indeterminate></v-progress-circular>
|
<v-progress-circular indeterminate></v-progress-circular>
|
||||||
</v-overlay>
|
</v-overlay>
|
||||||
|
|
||||||
|
<!-- Sort -->
|
||||||
|
<div class='px-4 d-flex' style='max-height: 50px;' v-if='!loading'>
|
||||||
|
<div class='text-overline pt-1 mx-2'>
|
||||||
|
{{albums.length}} {{$t("Albums")}}
|
||||||
|
</div>
|
||||||
|
<div style="max-width: 200px;" class='mx-2'>
|
||||||
|
<v-select class='px-2' dense solo :items='sortTypes' @change='sort' :label='$t("Sort by")'>
|
||||||
|
</v-select>
|
||||||
|
</div>
|
||||||
|
<div class='px-2' @click='reverseSort'>
|
||||||
|
<v-btn icon>
|
||||||
|
<v-icon v-if='isReversed'>mdi-sort-reverse-variant</v-icon>
|
||||||
|
<v-icon v-if='!isReversed'>mdi-sort-variant</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<v-lazy max-height="100" v-for='(album, index) in albums' :key='album.id'>
|
<v-lazy max-height="100" v-for='(album, index) in albums' :key='album.id'>
|
||||||
<AlbumTile :album='album' @remove='removed(index)'></AlbumTile>
|
<AlbumTile :album='album' @remove='removed(index)'></AlbumTile>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
|
@ -20,7 +37,16 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
albums: [],
|
albums: [],
|
||||||
loading: false
|
loading: false,
|
||||||
|
|
||||||
|
//Sort
|
||||||
|
isReversed: false,
|
||||||
|
sortTypes: [
|
||||||
|
this.$t('Date Added'),
|
||||||
|
this.$t('Name (A-Z)'),
|
||||||
|
this.$t('Artist (A-Z)')
|
||||||
|
],
|
||||||
|
unsorted: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -35,8 +61,36 @@ export default {
|
||||||
},
|
},
|
||||||
removed(index) {
|
removed(index) {
|
||||||
this.albums.splice(index, 1);
|
this.albums.splice(index, 1);
|
||||||
|
},
|
||||||
|
//Sort changed
|
||||||
|
async sort(type) {
|
||||||
|
let index = this.sortTypes.indexOf(type);
|
||||||
|
//Copy original
|
||||||
|
if (!this.unsorted)
|
||||||
|
this.unsorted = JSON.parse(JSON.stringify(this.albums));
|
||||||
|
|
||||||
|
//Using indexes, so it can be translated later
|
||||||
|
this.isReversed = false;
|
||||||
|
switch (index) {
|
||||||
|
//Default
|
||||||
|
case 0:
|
||||||
|
this.albums = JSON.parse(JSON.stringify(this.unsorted));
|
||||||
|
break;
|
||||||
|
//Name
|
||||||
|
case 1:
|
||||||
|
this.albums = this.albums.sort((a, b) => {return a.title.localeCompare(b.title);});
|
||||||
|
break;
|
||||||
|
//Artist
|
||||||
|
case 2:
|
||||||
|
this.albums = this.albums.sort((a, b) => {return a.artistString.localeCompare(b.artistString);});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async reverseSort() {
|
||||||
|
this.isReversed = !this.isReversed;
|
||||||
|
this.albums.reverse();
|
||||||
|
},
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
AlbumTile
|
AlbumTile
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,6 +5,23 @@
|
||||||
<v-progress-circular indeterminate></v-progress-circular>
|
<v-progress-circular indeterminate></v-progress-circular>
|
||||||
</v-overlay>
|
</v-overlay>
|
||||||
|
|
||||||
|
<!-- Sort -->
|
||||||
|
<div class='px-4 d-flex' style='max-height: 50px;' v-if='!loading'>
|
||||||
|
<div class='text-overline pt-1 mx-2'>
|
||||||
|
{{artists.length}} {{$t("Artists")}}
|
||||||
|
</div>
|
||||||
|
<div style="max-width: 200px;" class='mx-2'>
|
||||||
|
<v-select class='px-2' dense solo :items='sortTypes' @change='sort' :label='$t("Sort by")'>
|
||||||
|
</v-select>
|
||||||
|
</div>
|
||||||
|
<div class='px-2' @click='reverseSort'>
|
||||||
|
<v-btn icon>
|
||||||
|
<v-icon v-if='isReversed'>mdi-sort-reverse-variant</v-icon>
|
||||||
|
<v-icon v-if='!isReversed'>mdi-sort-variant</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<v-lazy max-height="100" v-for='(artist, index) in artists' :key='artist.id'>
|
<v-lazy max-height="100" v-for='(artist, index) in artists' :key='artist.id'>
|
||||||
<ArtistTile :artist='artist' @remove='removed(index)'></ArtistTile>
|
<ArtistTile :artist='artist' @remove='removed(index)'></ArtistTile>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
|
@ -23,7 +40,15 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
artists: [],
|
artists: [],
|
||||||
loading: false
|
loading: false,
|
||||||
|
|
||||||
|
//Sort
|
||||||
|
isReversed: false,
|
||||||
|
sortTypes: [
|
||||||
|
this.$t('Date Added'),
|
||||||
|
this.$t('Name (A-Z)')
|
||||||
|
],
|
||||||
|
unsorted: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -38,6 +63,30 @@ export default {
|
||||||
},
|
},
|
||||||
removed(index) {
|
removed(index) {
|
||||||
this.artists.splice(index, 1);
|
this.artists.splice(index, 1);
|
||||||
|
},
|
||||||
|
//Sort changed
|
||||||
|
async sort(type) {
|
||||||
|
let index = this.sortTypes.indexOf(type);
|
||||||
|
//Copy original
|
||||||
|
if (!this.unsorted)
|
||||||
|
this.unsorted = JSON.parse(JSON.stringify(this.artists));
|
||||||
|
|
||||||
|
//Using indexes, so it can be translated later
|
||||||
|
this.isReversed = false;
|
||||||
|
switch (index) {
|
||||||
|
//Default
|
||||||
|
case 0:
|
||||||
|
this.artists = JSON.parse(JSON.stringify(this.unsorted));
|
||||||
|
break;
|
||||||
|
//Name
|
||||||
|
case 1:
|
||||||
|
this.artists = this.artists.sort((a, b) => {return a.name.localeCompare(b.name);});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async reverseSort() {
|
||||||
|
this.isReversed = !this.isReversed;
|
||||||
|
this.artists.reverse();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
@ -5,17 +5,36 @@
|
||||||
<v-progress-circular indeterminate></v-progress-circular>
|
<v-progress-circular indeterminate></v-progress-circular>
|
||||||
</v-overlay>
|
</v-overlay>
|
||||||
|
|
||||||
|
<div class='d-flex'>
|
||||||
<!-- Create playlist -->
|
<!-- Create playlist -->
|
||||||
<v-btn class='ma-2 ml-3' color='primary' @click='popup = true'>
|
<v-btn class='ma-2 ml-3' color='primary' @click='popup = true'>
|
||||||
<v-icon left>mdi-playlist-plus</v-icon>
|
<v-icon left>mdi-playlist-plus</v-icon>
|
||||||
{{$t("Create new playlist")}}
|
{{$t("Create new playlist")}}
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
||||||
|
<!-- Sort -->
|
||||||
|
<div class='mt-1 px-2 d-flex'>
|
||||||
|
<div class='text-overline pt-1 mx-2'>
|
||||||
|
{{playlists.length}} {{$t("Playlists")}}
|
||||||
|
</div>
|
||||||
|
<div style="max-width: 200px;" class='mx-2'>
|
||||||
|
<v-select class='px-2' dense solo :items='sortTypes' @change='sort' :label='$t("Sort by")'>
|
||||||
|
</v-select>
|
||||||
|
</div>
|
||||||
|
<div class='px-2' @click='reverseSort'>
|
||||||
|
<v-btn icon>
|
||||||
|
<v-icon v-if='isReversed'>mdi-sort-reverse-variant</v-icon>
|
||||||
|
<v-icon v-if='!isReversed'>mdi-sort-variant</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<v-dialog max-width="400px" v-model='popup'>
|
<v-dialog max-width="400px" v-model='popup'>
|
||||||
<PlaylistPopup @created='playlistCreated'></PlaylistPopup>
|
<PlaylistPopup @created='playlistCreated'></PlaylistPopup>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
|
|
||||||
|
|
||||||
<v-lazy max-height="100" v-for='(playlist, index) in playlists' :key='playlist.id'>
|
<v-lazy max-height="100" v-for='(playlist, index) in playlists' :key='playlist.id'>
|
||||||
<PlaylistTile :playlist='playlist' @remove='removed(index)'></PlaylistTile>
|
<PlaylistTile :playlist='playlist' @remove='removed(index)'></PlaylistTile>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
|
@ -36,7 +55,15 @@ export default {
|
||||||
return {
|
return {
|
||||||
playlists: [],
|
playlists: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
popup: false
|
popup: false,
|
||||||
|
|
||||||
|
//Sort
|
||||||
|
isReversed: false,
|
||||||
|
sortTypes: [
|
||||||
|
this.$t('Date Added'),
|
||||||
|
this.$t('Name (A-Z)'),
|
||||||
|
],
|
||||||
|
unsorted: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -59,8 +86,32 @@ export default {
|
||||||
//On playlist remove
|
//On playlist remove
|
||||||
removed(i) {
|
removed(i) {
|
||||||
this.playlists.splice(i, 1);
|
this.playlists.splice(i, 1);
|
||||||
|
},
|
||||||
|
//Sort changed
|
||||||
|
async sort(type) {
|
||||||
|
let index = this.sortTypes.indexOf(type);
|
||||||
|
//Copy original
|
||||||
|
if (!this.unsorted)
|
||||||
|
this.unsorted = JSON.parse(JSON.stringify(this.playlists));
|
||||||
|
|
||||||
|
//Using indexes, so it can be translated later
|
||||||
|
this.isReversed = false;
|
||||||
|
switch (index) {
|
||||||
|
//Default
|
||||||
|
case 0:
|
||||||
|
this.playlists = JSON.parse(JSON.stringify(this.unsorted));
|
||||||
|
break;
|
||||||
|
//Name
|
||||||
|
case 1:
|
||||||
|
this.playlists = this.playlists.sort((a, b) => {return a.title.localeCompare(b.title);});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async reverseSort() {
|
||||||
|
this.isReversed = !this.isReversed;
|
||||||
|
this.playlists.reverse();
|
||||||
|
},
|
||||||
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
//Initial load
|
//Initial load
|
||||||
this.load();
|
this.load();
|
||||||
|
|
|
@ -56,6 +56,16 @@
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
|
||||||
|
<!-- Share -->
|
||||||
|
<v-list-item dense @click='share'>
|
||||||
|
<v-list-item-icon>
|
||||||
|
<v-icon>mdi-share-variant</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
|
||||||
<!-- Download -->
|
<!-- Download -->
|
||||||
<v-list-item dense @click='download'>
|
<v-list-item dense @click='download'>
|
||||||
<v-list-item-icon>
|
<v-list-item-icon>
|
||||||
|
@ -172,6 +182,16 @@ export default {
|
||||||
await this.$axios.put(`/library/playlist?id=${this.playlist.id}`);
|
await this.$axios.put(`/library/playlist?id=${this.playlist.id}`);
|
||||||
this.$root.globalSnackbar = this.$t('Added to library!');
|
this.$root.globalSnackbar = this.$t('Added to library!');
|
||||||
this.playlist.library = true;
|
this.playlist.library = true;
|
||||||
|
},
|
||||||
|
//Copy link
|
||||||
|
share() {
|
||||||
|
let copyElem = document.createElement('input');
|
||||||
|
copyElem.value = `https://deezer.com/playlist/${this.playlist.id}`;
|
||||||
|
document.body.appendChild(copyElem);
|
||||||
|
copyElem.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(copyElem);
|
||||||
|
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<v-list-item two-line @click='$emit("click")'>
|
<v-list-item two-line @click='$emit("click")' :ripple='ripple'>
|
||||||
<v-list-item-avatar>
|
<v-list-item-avatar>
|
||||||
<v-img :src='track.albumArt.thumb'></v-img>
|
<v-img :src='track.albumArt.thumb'></v-img>
|
||||||
</v-list-item-avatar>
|
</v-list-item-avatar>
|
||||||
|
@ -93,6 +93,15 @@
|
||||||
<v-list-item-title>{{$t("Remove from playlist")}}</v-list-item-title>
|
<v-list-item-title>{{$t("Remove from playlist")}}</v-list-item-title>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
<!-- Share -->
|
||||||
|
<v-list-item dense @click='share'>
|
||||||
|
<v-list-item-icon>
|
||||||
|
<v-icon>mdi-share-variant</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
<!-- Play track mix -->
|
<!-- Play track mix -->
|
||||||
<v-list-item dense @click='trackMix'>
|
<v-list-item dense @click='trackMix'>
|
||||||
<v-list-item-icon>
|
<v-list-item-icon>
|
||||||
|
@ -174,6 +183,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
ripple: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
//Add track next to queue
|
//Add track next to queue
|
||||||
|
@ -231,6 +244,16 @@ export default {
|
||||||
};
|
};
|
||||||
this.$root.replaceQueue(res.data);
|
this.$root.replaceQueue(res.data);
|
||||||
this.$root.playIndex(0);
|
this.$root.playIndex(0);
|
||||||
|
},
|
||||||
|
//Copy link
|
||||||
|
share() {
|
||||||
|
let copyElem = document.createElement('input');
|
||||||
|
copyElem.value = `https://deezer.com/track/${this.track.id}`;
|
||||||
|
document.body.appendChild(copyElem);
|
||||||
|
copyElem.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(copyElem);
|
||||||
|
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,6 +127,12 @@
|
||||||
"Removed from library!": "الإزالة من المكتبة!",
|
"Removed from library!": "الإزالة من المكتبة!",
|
||||||
"Removed from playlist!": "تمت الإزالة من قائمة التشغيل!",
|
"Removed from playlist!": "تمت الإزالة من قائمة التشغيل!",
|
||||||
"Playlist deleted!": "تم حذف قائمة التشغيل!",
|
"Playlist deleted!": "تم حذف قائمة التشغيل!",
|
||||||
"Delete": "Delete",
|
"Delete": "حذف",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "هل أنت متأكد من أنك تريد حذف قائمة التشغيل هذه؟",
|
||||||
|
"Force white tray icon": "فرض أيقونة شريط المهام البيضاء",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "فرض ايقونة شريط المهام (البيضاء) الافتراضية إذا تم الكشف عن الثيم بشكل غير صحيح. يتطلب إعادة التشغيل.",
|
||||||
|
"Share": "مشاركة",
|
||||||
|
"Settings quality": "جودة الإعدادات",
|
||||||
|
"Content language": "لغة المحتوى",
|
||||||
|
"Content country": "بلد المحتوى"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Aus der Wiedergabeliste entfernt!",
|
"Removed from playlist!": "Aus der Wiedergabeliste entfernt!",
|
||||||
"Playlist deleted!": "Wiedergabeliste gelöscht!",
|
"Playlist deleted!": "Wiedergabeliste gelöscht!",
|
||||||
"Delete": "Löschen",
|
"Delete": "Löschen",
|
||||||
"Are you sure you want to delete this playlist?": "Bist du sicher, dass du diese Wiedergabeliste löschen willst?"
|
"Are you sure you want to delete this playlist?": "Bist du sicher, dass du diese Wiedergabeliste löschen willst?",
|
||||||
|
"Force white tray icon": "Erzwinge weißes Tray-Icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Standardsymbol (weiß) in der Kontrollleiste erzwingen, wenn Design falsch erkannt wurde. Neustart erforderlich.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -127,6 +127,12 @@
|
||||||
"Removed from library!": "Καταργήθηκε από τη βιβλιοθήκη!",
|
"Removed from library!": "Καταργήθηκε από τη βιβλιοθήκη!",
|
||||||
"Removed from playlist!": "Καταργήθηκε από τη λίστα αναπαραγωγής!",
|
"Removed from playlist!": "Καταργήθηκε από τη λίστα αναπαραγωγής!",
|
||||||
"Playlist deleted!": "Η λίστα αναπαραγωγής διαγράφηκε!",
|
"Playlist deleted!": "Η λίστα αναπαραγωγής διαγράφηκε!",
|
||||||
"Delete": "Delete",
|
"Delete": "Διαγραφή",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την λίστα αναπαραγωγής;",
|
||||||
|
"Force white tray icon": "Εξαναγκασμός λευκού εικονιδίου",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Επαναφορά προεπιλογής (λευκού) εικονιδίου σε περίπτωση σφάλματος θέματος. Απαιτείται επανεκκίνηση.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -130,5 +130,9 @@
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
"Force white tray icon": "Force white tray icon",
|
"Force white tray icon": "Force white tray icon",
|
||||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart."
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "¡Eliminado de la lista de reproducción!",
|
"Removed from playlist!": "¡Eliminado de la lista de reproducción!",
|
||||||
"Playlist deleted!": "¡Lista de reproducción eliminada!",
|
"Playlist deleted!": "¡Lista de reproducción eliminada!",
|
||||||
"Delete": "Eliminar",
|
"Delete": "Eliminar",
|
||||||
"Are you sure you want to delete this playlist?": "¿Está seguro de querer eliminar la lista de reproducción?"
|
"Are you sure you want to delete this playlist?": "¿Está seguro de querer eliminar la lista de reproducción?",
|
||||||
|
"Force white tray icon": "Forzar icono blanco en la bandeja",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Forzar icono predeterminado en bandeja (blanco) si el tema no es detectado correctamente. Requiere reinicio.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@
|
||||||
"Queue": "File d'attente",
|
"Queue": "File d'attente",
|
||||||
"Total": "Total",
|
"Total": "Total",
|
||||||
"Stop": "Arrêter",
|
"Stop": "Arrêter",
|
||||||
"Start": "Début",
|
"Start": "Lancer",
|
||||||
"Show folder": "Afficher le dossier",
|
"Show folder": "Afficher le dossier",
|
||||||
"Clear queue": "Effacer la liste d'attente",
|
"Clear queue": "Effacer la liste d'attente",
|
||||||
"Playing from": "Lecture depuis",
|
"Playing from": "Lecture depuis",
|
||||||
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Supprimé de la playlist !",
|
"Removed from playlist!": "Supprimé de la playlist !",
|
||||||
"Playlist deleted!": "Playlist supprimée !",
|
"Playlist deleted!": "Playlist supprimée !",
|
||||||
"Delete": "Supprimer",
|
"Delete": "Supprimer",
|
||||||
"Are you sure you want to delete this playlist?": "Voulez-vous vraiment supprimer cette liste de lecture ?"
|
"Are you sure you want to delete this playlist?": "Voulez-vous vraiment supprimer cette liste de lecture ?",
|
||||||
|
"Force white tray icon": "Forcer l'icône blanche dans la zone de notification",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Forcer l'icône blanche par défaut dans la zone de notification si le thème n'est pas correctement détecté. Nécessite un redémarrage.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Dihapus dari daftar putar!",
|
"Removed from playlist!": "Dihapus dari daftar putar!",
|
||||||
"Playlist deleted!": "Daftar putar dihapus!",
|
"Playlist deleted!": "Daftar putar dihapus!",
|
||||||
"Delete": "Hapus",
|
"Delete": "Hapus",
|
||||||
"Are you sure you want to delete this playlist?": "Apakah kamu yakin ingin menghapus daftar putar ini?"
|
"Are you sure you want to delete this playlist?": "Apakah kamu yakin ingin menghapus daftar putar ini?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -110,23 +110,29 @@
|
||||||
"Settings saved!": "Impostazioni salvate!",
|
"Settings saved!": "Impostazioni salvate!",
|
||||||
"Available only in Electron version!": "Disponibile solo nella versione Electron!",
|
"Available only in Electron version!": "Disponibile solo nella versione Electron!",
|
||||||
"Crossfade (ms)": "Dissolvenza (ms)",
|
"Crossfade (ms)": "Dissolvenza (ms)",
|
||||||
"Select primary color": "Select primary color",
|
"Select primary color": "Seleziona colore principale",
|
||||||
"Light theme": "Light theme",
|
"Light theme": "Tema chiaro",
|
||||||
"Create folders for playlists": "Create folders for playlists",
|
"Create folders for playlists": "Crea cartelle per le playlist",
|
||||||
"About": "About",
|
"About": "About",
|
||||||
"Links:": "Links:",
|
"Links:": "Link:",
|
||||||
"Telegram Releases": "Telegram Releases",
|
"Telegram Releases": "Telegram Releases",
|
||||||
"Telegram Group": "Telegram Group",
|
"Telegram Group": "Gruppo Telegram",
|
||||||
"Discord": "Discord",
|
"Discord": "Discord",
|
||||||
"Telegram Android Group": "Telegram Android Group",
|
"Telegram Android Group": "Gruppo Telegram Android",
|
||||||
"Credits:": "Credits:",
|
"Credits:": "Crediti:",
|
||||||
"Agree": "Agree",
|
"Agree": "Accetta",
|
||||||
"Dismiss": "Dismiss",
|
"Dismiss": "Rifiuta",
|
||||||
"Added to playlist!": "Added to playlist!",
|
"Added to playlist!": "Aggiunto alla playlist!",
|
||||||
"Added to library!": "Added to library!",
|
"Added to library!": "Aggiunto alla libreria!",
|
||||||
"Removed from library!": "Removed from library!",
|
"Removed from library!": "Rimosso dalla libreria!",
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Rimosso dalla playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist eliminata!",
|
||||||
"Delete": "Delete",
|
"Delete": "Elimina",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Sei sicuro di voler eliminare questa playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Usunięto z playlisty!",
|
"Removed from playlist!": "Usunięto z playlisty!",
|
||||||
"Playlist deleted!": "Playlista została usunięta!",
|
"Playlist deleted!": "Playlista została usunięta!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -6,34 +6,34 @@
|
||||||
"Playlists": "Playlists",
|
"Playlists": "Playlists",
|
||||||
"Albums": "Álbuns",
|
"Albums": "Álbuns",
|
||||||
"Artists": "Artistas",
|
"Artists": "Artistas",
|
||||||
"More": "More",
|
"More": "Mais",
|
||||||
"Settings": "Configurações",
|
"Settings": "Configurações",
|
||||||
"Downloads": "Downloads",
|
"Downloads": "Downloads",
|
||||||
"Search or paste Deezer URL. Use / to quickly focus.": "Procure ou cole a URL do intérprete. Use \"/\" para focar rapidamente.",
|
"Search or paste Deezer URL. Use / to quickly focus.": "Procure ou cole a URL do Deezer. Use \"/\" para focar rapidamente.",
|
||||||
"Play": "Play",
|
"Play": "Reproduzir",
|
||||||
"Add to library": "Adicionar à biblioteca",
|
"Add to library": "Adicionar à biblioteca",
|
||||||
"Download": "Download",
|
"Download": "Download",
|
||||||
"fans": "fans",
|
"fans": "fans",
|
||||||
"tracks": "faixas",
|
"tracks": "faixas",
|
||||||
"Quality": "Qualidade",
|
"Quality": "Qualidade",
|
||||||
"Estimated size:": "Tempo estimado:",
|
"Estimated size:": "Tempo estimado:",
|
||||||
"Start downloading": "Iniciar download",
|
"Start downloading": "Começar a baixar",
|
||||||
"Cancel": "Cancelar",
|
"Cancel": "Cancelar",
|
||||||
"Stream logging is disabled!": "O registro de depuração extra está desativado!",
|
"Stream logging is disabled!": "O registro de depuração extra está desativado!",
|
||||||
"Enable it in settings for history to work properly.": "Habilite nas configurações para que o histórico funcione corretamente.",
|
"Enable it in settings for history to work properly.": "Habilite nas configurações para que o histórico funcione corretamente.",
|
||||||
"History": "Histórico",
|
"History": "Histórico",
|
||||||
"Create new playlist": "Criar nova playlist",
|
"Create new playlist": "Criar nova playlist",
|
||||||
"TRACKS": "FAIXAS",
|
"TRACKS": "FAIXAS",
|
||||||
"Sort by": "Sort by",
|
"Sort by": "Ordenar por",
|
||||||
"Date Added": "Data de adição",
|
"Date Added": "Data de adição",
|
||||||
"Name (A-Z)": "Nome (A-Z)",
|
"Name (A-Z)": "Nome (A-Z)",
|
||||||
"Artist (A-Z)": "Artista (A-Z)",
|
"Artist (A-Z)": "Artista (A-Z)",
|
||||||
"Album (A-Z)": "Álbum (A-Z)",
|
"Album (A-Z)": "Álbum (A-Z)",
|
||||||
"Error loading lyrics or lyrics not found!": "Erro ao carregar letras ou letras não encontradas!",
|
"Error loading lyrics or lyrics not found!": "Erro ao carregar letra ou letra não encontrada!",
|
||||||
"Create playlist": "Criar playlist",
|
"Create playlist": "Criar playlist",
|
||||||
"Create": "Criar",
|
"Create": "Criar",
|
||||||
"Add to playlist": "Adicionar à playlist",
|
"Add to playlist": "Adicionar à playlist",
|
||||||
"Create new": "Criar novo",
|
"Create new": "Criar nova",
|
||||||
"Remove": "Remover",
|
"Remove": "Remover",
|
||||||
"Play next": "Reproduzir à seguir",
|
"Play next": "Reproduzir à seguir",
|
||||||
"Add to queue": "Adicionar à fila",
|
"Add to queue": "Adicionar à fila",
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
"Play top": "Reproduzir no topo",
|
"Play top": "Reproduzir no topo",
|
||||||
"Radio": "Rádio",
|
"Radio": "Rádio",
|
||||||
"Show all albums": "Mostrar todos os álbuns",
|
"Show all albums": "Mostrar todos os álbuns",
|
||||||
"Show all singles": "Mostrar todas as músicas",
|
"Show all singles": "Mostrar todos os singles",
|
||||||
"Show more": "Mostrar mais",
|
"Show more": "Mostrar mais",
|
||||||
"Downloaded": "Baixados",
|
"Downloaded": "Baixados",
|
||||||
"Queue": "Fila de Reprodução",
|
"Queue": "Fila de Reprodução",
|
||||||
|
@ -60,52 +60,52 @@
|
||||||
"Clear queue": "Limpar lista",
|
"Clear queue": "Limpar lista",
|
||||||
"Playing from": "Reproduzindo de",
|
"Playing from": "Reproduzindo de",
|
||||||
"Info": "Informações",
|
"Info": "Informações",
|
||||||
"Lyrics": "Letras",
|
"Lyrics": "Letra",
|
||||||
"Track number": "Número de faixa",
|
"Track number": "Número de faixa",
|
||||||
"Disk number": "Numero de disco",
|
"Disk number": "Numero de disco",
|
||||||
"Explicit": "Explicito",
|
"Explicit": "Explícito",
|
||||||
"Source": "Fonte",
|
"Source": "Fonte",
|
||||||
"ID": "Identificação",
|
"ID": "Identificação",
|
||||||
"Error logging in!": "Erro de login!",
|
"Error logging in!": "Erro de login!",
|
||||||
"Please try again later, or try another account.": "Por favor, tente novamente mais tarde ou tente outra conta.",
|
"Please try again later, or try another account.": "Por favor, tente novamente mais tarde ou tente outra conta.",
|
||||||
"Logout": "Encerrar sessão",
|
"Logout": "Desconectar",
|
||||||
"Login using browser": "Login usando o navegador",
|
"Login using browser": "Login usando o navegador",
|
||||||
"Please login using your Deezer account:": "Faça login usando sua conta do Deezer:",
|
"Please login using your Deezer account:": "Faça login usando sua conta do Deezer:",
|
||||||
"...or paste your ARL/Token below:": "...ou cole seu ARL/Token abaixo:",
|
"...or paste your ARL/Token below:": "...ou cole seu ARL/Token abaixo:",
|
||||||
"ARL/Token": "ARL/Token",
|
"ARL/Token": "ARL/Token",
|
||||||
"Login": "Login",
|
"Login": "Login",
|
||||||
"By using this program, you disagree with Deezer's ToS.": "Ao usar este programa, você discorda do Acordo de Assinatura do Deezer.",
|
"By using this program, you disagree with Deezer's ToS.": "Ao usar este programa, você discorda dos termos e condições de uso do Deezer.",
|
||||||
"Only in Electron version!": "Apenas na versão do Electron!",
|
"Only in Electron version!": "Apenas na versão do Electron!",
|
||||||
"Search results for:": "Buscar resultados para:",
|
"Search results for:": "Buscar resultados para:",
|
||||||
"Error loading data!": "Error loading data!",
|
"Error loading data!": "Erro ao carregar dados!",
|
||||||
"Try again later!": "Try again later!",
|
"Try again later!": "Tente novamente mais tarde!",
|
||||||
"Search": "Search",
|
"Search": "Busca",
|
||||||
"Streaming Quality": "Streaming Quality",
|
"Streaming Quality": "Qualidade do streaming",
|
||||||
"Download Quality": "Download Quality",
|
"Download Quality": "Qualiadade do download",
|
||||||
"Downloads Directory": "Downloads Directory",
|
"Downloads Directory": "Pasta de Download",
|
||||||
"Simultaneous downloads": "Simultaneous downloads",
|
"Simultaneous downloads": "Downloads simultâneos",
|
||||||
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
|
"Always show download confirm dialog before downloading.": "Sempre mostrar diálogo de confirmação de download antes de baixar.",
|
||||||
"Show download dialog": "Show download dialog",
|
"Show download dialog": "Mostrar diálogo de download",
|
||||||
"Create folders for artists": "Create folders for artists",
|
"Create folders for artists": "Criar pastas para artistas",
|
||||||
"Create folders for albums": "Create folders for albums",
|
"Create folders for albums": "Criar pastas para álbuns",
|
||||||
"Download lyrics": "Download lyrics",
|
"Download lyrics": "Baixar letra",
|
||||||
"Variables": "Variables",
|
"Variables": "Variáveis",
|
||||||
"UI": "UI",
|
"UI": "IU",
|
||||||
"Show autocomplete in search": "Show autocomplete in search",
|
"Show autocomplete in search": "Mostrar autocompletar na busca",
|
||||||
"Integrations": "Integrations",
|
"Integrations": "Integrações",
|
||||||
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
|
"This allows listening history, flow and recommendations to work properly.": "Isto permite que o histórico de ouvidas, flow e recomendações funcionem corretamente.",
|
||||||
"Log track listens to Deezer": "Log track listens to Deezer",
|
"Log track listens to Deezer": "Log de faixas ouvidas para o Deezer",
|
||||||
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
|
"Connect your LastFM account to allow scrobbling.": "Conecte sua conta do LastFM para permitir o scrobbling.",
|
||||||
"Login with LastFM": "Login with LastFM",
|
"Login with LastFM": "Login com LastFM",
|
||||||
"Disconnect LastFM": "Disconnect LastFM",
|
"Disconnect LastFM": "Desconectar LastFM",
|
||||||
"Requires restart to apply!": "Requer reinicialização do aplicativo para aplicar!",
|
"Requires restart to apply!": "Requer reinicialização do aplicativo para aplicar!",
|
||||||
"Enable Discord Rich Presence, requires restart to toggle!": "Ativar o Rich Presence do Discord, requer reiniciar para alternar!",
|
"Enable Discord Rich Presence, requires restart to toggle!": "Ativar o Rich Presence do Discord, requer reiniciar para alternar!",
|
||||||
"Discord Rich Presence": "Habilitar o Discord",
|
"Discord Rich Presence": "Discord Rich Presence",
|
||||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Ativar o botão de adesão do Discord para sincronizar faixas requer reinicialização para alternar!",
|
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Ativar o botão de adesão do Discord para sincronizar faixas requer reinicialização para alternar!",
|
||||||
"Discord Join Button": "Botão de Entrada Discord",
|
"Discord Join Button": "Botão de Entrada Discord",
|
||||||
"Other": "Outros",
|
"Other": "Outro",
|
||||||
"Minimize to tray": "Minimizar para a bandeja",
|
"Minimize to tray": "Minimizar para a bandeja",
|
||||||
"Don't minimize to tray": "Minimizar automaticamente para a bandeja",
|
"Don't minimize to tray": "Não minimizar para a bandeja",
|
||||||
"Close on exit": "Fechar ao sair",
|
"Close on exit": "Fechar ao sair",
|
||||||
"Settings saved!": "Configurações salvas!",
|
"Settings saved!": "Configurações salvas!",
|
||||||
"Available only in Electron version!": "Disponível apenas na versão completa!",
|
"Available only in Electron version!": "Disponível apenas na versão completa!",
|
||||||
|
@ -118,15 +118,21 @@
|
||||||
"Telegram Releases": "Versões no Telegram",
|
"Telegram Releases": "Versões no Telegram",
|
||||||
"Telegram Group": "Grupo do Telegram",
|
"Telegram Group": "Grupo do Telegram",
|
||||||
"Discord": "Discord",
|
"Discord": "Discord",
|
||||||
"Telegram Android Group": "Grupo Android do Telegram",
|
"Telegram Android Group": "Grupo do Android no Telegram",
|
||||||
"Credits:": "Créditos:",
|
"Credits:": "Créditos:",
|
||||||
"Agree": "Concordo",
|
"Agree": "Concordo",
|
||||||
"Dismiss": "Dismiss",
|
"Dismiss": "Dispensar",
|
||||||
"Added to playlist!": "Added to playlist!",
|
"Added to playlist!": "Adicionar à playlist!",
|
||||||
"Added to library!": "Added to library!",
|
"Added to library!": "Adicionado à biblioteca!",
|
||||||
"Removed from library!": "Removed from library!",
|
"Removed from library!": "Removido da biblioteca!",
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removido da playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deletada!",
|
||||||
"Delete": "Delete",
|
"Delete": "Deletar",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Você tem certeza que deseja excluir esta playlist?",
|
||||||
|
"Force white tray icon": "Forçar ícone de bandeja branco",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Forçar ícone de bandeja (branco) padrão se o tema for detectado incorretamente. Requer reinicialização.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -120,13 +120,19 @@
|
||||||
"Discord": "Discord",
|
"Discord": "Discord",
|
||||||
"Telegram Android Group": "Обсуждение Freezer Android",
|
"Telegram Android Group": "Обсуждение Freezer Android",
|
||||||
"Credits:": "Благодарность:",
|
"Credits:": "Благодарность:",
|
||||||
"Agree": "Agree",
|
"Agree": "Согласен",
|
||||||
"Dismiss": "Dismiss",
|
"Dismiss": "Отмена",
|
||||||
"Added to playlist!": "Added to playlist!",
|
"Added to playlist!": "Добавлено в плейлист!",
|
||||||
"Added to library!": "Added to library!",
|
"Added to library!": "Добавлено в избранное!",
|
||||||
"Removed from library!": "Removed from library!",
|
"Removed from library!": "Удалено из Избранного!",
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Удалено из плейлиста!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Плейлист удален!",
|
||||||
"Delete": "Delete",
|
"Delete": "Удалить",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Вы точно хотите удалить этот плейлист?",
|
||||||
|
"Force white tray icon": "Белый значок в трее",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Принудительно использовать белый значок, если тема определена неправильно. Требуется перезапуск.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Odstránené z playlistu!",
|
"Removed from playlist!": "Odstránené z playlistu!",
|
||||||
"Playlist deleted!": "Playlist odstránený!",
|
"Playlist deleted!": "Playlist odstránený!",
|
||||||
"Delete": "Odstrániť",
|
"Delete": "Odstrániť",
|
||||||
"Are you sure you want to delete this playlist?": "Naozaj chcete odstrániť tento playlist?"
|
"Are you sure you want to delete this playlist?": "Naozaj chcete odstrániť tento playlist?",
|
||||||
|
"Force white tray icon": "Vynútiť bielu ikonu v lište",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Vynútiť predvolenú (bielu) ikonu v lište, ak je motív nesprávne zistený. Vyžaduje sa reštart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Видалено з плейлиста!",
|
"Removed from playlist!": "Видалено з плейлиста!",
|
||||||
"Playlist deleted!": "Плейлист видалено!",
|
"Playlist deleted!": "Плейлист видалено!",
|
||||||
"Delete": "Видалити",
|
"Delete": "Видалити",
|
||||||
"Are you sure you want to delete this playlist?": "Ви впевнені, що хочете видалити цей плейлист?"
|
"Are you sure you want to delete this playlist?": "Ви впевнені, що хочете видалити цей плейлист?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -128,5 +128,11 @@
|
||||||
"Removed from playlist!": "Removed from playlist!",
|
"Removed from playlist!": "Removed from playlist!",
|
||||||
"Playlist deleted!": "Playlist deleted!",
|
"Playlist deleted!": "Playlist deleted!",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?"
|
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||||
|
"Force white tray icon": "Force white tray icon",
|
||||||
|
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||||
|
"Share": "Share",
|
||||||
|
"Settings quality": "Settings quality",
|
||||||
|
"Content language": "Content language",
|
||||||
|
"Content country": "Content country"
|
||||||
}
|
}
|
|
@ -234,7 +234,7 @@ new Vue({
|
||||||
}
|
}
|
||||||
|
|
||||||
//Crossfade
|
//Crossfade
|
||||||
if (this.settings.crossfadeDuration > 0 && this.position >= (this.duration() - this.settings.crossfadeDuration) && this.state == 2 && this.gapless.audio && !this.gapless.crossfade) {
|
if (this.settings.crossfadeDuration > 0 && this.position >= (this.duration() - this.settings.crossfadeDuration) && this.state == 2 && this.gapless.audio && !this.gapless.crossfade && this.gapless.track) {
|
||||||
this.gapless.crossfade = true;
|
this.gapless.crossfade = true;
|
||||||
let currentVolume = this.audio.volume;
|
let currentVolume = this.audio.volume;
|
||||||
let oldAudio = this.audio;
|
let oldAudio = this.audio;
|
||||||
|
@ -249,11 +249,15 @@ new Vue({
|
||||||
this.configureAudio();
|
this.configureAudio();
|
||||||
this.updateMediaSession();
|
this.updateMediaSession();
|
||||||
|
|
||||||
|
this.audio.volume = 0.0;
|
||||||
let volumeStep = currentVolume / (this.settings.crossfadeDuration / 50);
|
let volumeStep = currentVolume / (this.settings.crossfadeDuration / 50);
|
||||||
for (let i=0; i<(this.settings.crossfadeDuration / 50); i++) {
|
for (let i=0; i<(this.settings.crossfadeDuration / 50); i++) {
|
||||||
if ((oldAudio.volume - volumeStep) > 0)
|
if ((oldAudio.volume - volumeStep) > 0)
|
||||||
oldAudio.volume -= volumeStep;
|
oldAudio.volume -= volumeStep;
|
||||||
this.audio.volume += volumeStep;
|
this.audio.volume += volumeStep;
|
||||||
|
//Prevent going over
|
||||||
|
if (this.audio.volume >= currentVolume)
|
||||||
|
break;
|
||||||
await new Promise((res) => setTimeout(() => res(), 50));
|
await new Promise((res) => setTimeout(() => res(), 50));
|
||||||
}
|
}
|
||||||
oldAudio.pause();
|
oldAudio.pause();
|
||||||
|
@ -355,11 +359,11 @@ new Vue({
|
||||||
|
|
||||||
//Reset gapless playback meta
|
//Reset gapless playback meta
|
||||||
resetGapless() {
|
resetGapless() {
|
||||||
this.gapless = {promise: null,audio: null,info: null,track: null,index:null};
|
this.gapless = {crossfade: false,promise: null,audio: null,info: null,track: null,index:null};
|
||||||
},
|
},
|
||||||
//Load next track for gapless
|
//Load next track for gapless
|
||||||
async loadGapless() {
|
async loadGapless() {
|
||||||
if (this.loaders != 0 || this.gapless.promise || this.gapless.audio) return;
|
if (this.loaders != 0 || this.gapless.promise || this.gapless.audio || this.gapless.crossfade) return;
|
||||||
|
|
||||||
//Repeat list
|
//Repeat list
|
||||||
if (this.repeat == 1 && this.queue.index == this.queue.data.length - 1) {
|
if (this.repeat == 1 && this.queue.index == this.queue.data.length - 1) {
|
||||||
|
@ -385,7 +389,7 @@ new Vue({
|
||||||
}
|
}
|
||||||
this.gapless.info = info
|
this.gapless.info = info
|
||||||
this.gapless.audio = new Audio(`${window.location.origin}${info.url}`);
|
this.gapless.audio = new Audio(`${window.location.origin}${info.url}`);
|
||||||
this.gapless.audio.volume = 0;
|
this.gapless.audio.volume = 0.00;
|
||||||
this.gapless.audio.preload = 'auto';
|
this.gapless.audio.preload = 'auto';
|
||||||
this.gapless.crossfade = false;
|
this.gapless.crossfade = false;
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
<v-list-item-subtitle>Developer</v-list-item-subtitle>
|
<v-list-item-subtitle>Developer</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item @click='openUrl("https://git.fuwafuwa.moe/RemixDev/deemix")'>
|
<v-list-item>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title class='font-weight-bold'>Deemix</v-list-item-title>
|
<v-list-item-title class='font-weight-bold'>Deemix</v-list-item-title>
|
||||||
<v-list-item-subtitle>Much better app <3</v-list-item-subtitle>
|
<v-list-item-subtitle>Much better app <3</v-list-item-subtitle>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<!-- Split to half -->
|
<!-- Split to half -->
|
||||||
<v-row class='pa-2' no-gutters justify="center">
|
<v-row class='pa-2' no-gutters justify="center">
|
||||||
<!-- Left side (track info...) -->
|
<!-- Left side (track info...) -->
|
||||||
<v-col class='col-6 text-center' align-self="center">
|
<v-col class='col-12 col-sm-6 text-center' align-self="center">
|
||||||
<v-img
|
<v-img
|
||||||
:src='$root.track.albumArt.full'
|
:src='$root.track.albumArt.full'
|
||||||
:lazy-src="$root.track.albumArt.thumb"
|
:lazy-src="$root.track.albumArt.thumb"
|
||||||
|
@ -94,6 +94,10 @@
|
||||||
<v-icon>mdi-download</v-icon>
|
<v-icon>mdi-download</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
||||||
|
<v-btn icon @click='share'>
|
||||||
|
<v-icon>mdi-share-variant</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
<!-- Volume -->
|
<!-- Volume -->
|
||||||
<v-slider
|
<v-slider
|
||||||
min='0.00'
|
min='0.00'
|
||||||
|
@ -118,7 +122,7 @@
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<!-- Right side -->
|
<!-- Right side -->
|
||||||
<v-col class='col-6 pt-4'>
|
<v-col class='col-12 col-sm-6 pt-4'>
|
||||||
<v-tabs v-model='tab'>
|
<v-tabs v-model='tab'>
|
||||||
<v-tab key='queue'>
|
<v-tab key='queue'>
|
||||||
{{$t("Queue")}}
|
{{$t("Queue")}}
|
||||||
|
@ -135,18 +139,18 @@
|
||||||
<!-- Queue tab -->
|
<!-- Queue tab -->
|
||||||
<v-tab-item key='queue'>
|
<v-tab-item key='queue'>
|
||||||
<v-list two-line avatar class='overflow-y-auto' style='max-height: calc(100vh - 160px)'>
|
<v-list two-line avatar class='overflow-y-auto' style='max-height: calc(100vh - 160px)'>
|
||||||
<v-lazy
|
<draggable v-model='$root.queue.data' @change='queueMove'>
|
||||||
min-height="1"
|
<div v-for="(track, index) in $root.queue.data" :key='index + "q" + track.id'>
|
||||||
transition="fade-transition"
|
<v-lazy min-height="1" transition="fade-transition">
|
||||||
v-for="(track, index) in $root.queue.data"
|
<TrackTile
|
||||||
:key='index + "q" + track.id'
|
|
||||||
><TrackTile
|
|
||||||
:track='track'
|
:track='track'
|
||||||
@click='$root.playIndex(index)'
|
@click='$root.playIndex(index)'
|
||||||
@redirect='close'
|
@redirect='close'
|
||||||
|
:ripple='false'
|
||||||
></TrackTile>
|
></TrackTile>
|
||||||
</v-lazy>
|
</v-lazy>
|
||||||
|
</div>
|
||||||
|
</draggable>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-tab-item>
|
</v-tab-item>
|
||||||
<!-- Info tab -->
|
<!-- Info tab -->
|
||||||
|
@ -238,10 +242,12 @@ import PlaylistPopup from '@/components/PlaylistPopup.vue';
|
||||||
import Lyrics from '@/components/Lyrics.vue';
|
import Lyrics from '@/components/Lyrics.vue';
|
||||||
import DownloadDialog from '@/components/DownloadDialog.vue';
|
import DownloadDialog from '@/components/DownloadDialog.vue';
|
||||||
|
|
||||||
|
import draggable from 'vuedraggable';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'FullscreenPlayer',
|
name: 'FullscreenPlayer',
|
||||||
components: {
|
components: {
|
||||||
TrackTile, ArtistTile, AlbumTile, PlaylistPopup, Lyrics, DownloadDialog
|
TrackTile, ArtistTile, AlbumTile, PlaylistPopup, Lyrics, DownloadDialog, draggable
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -312,6 +318,19 @@ export default {
|
||||||
}
|
}
|
||||||
//Update index
|
//Update index
|
||||||
this.$root.queue.index = this.$root.queue.data.findIndex(t => t.id == this.$root.track.id);
|
this.$root.queue.index = this.$root.queue.data.findIndex(t => t.id == this.$root.track.id);
|
||||||
|
},
|
||||||
|
//Copy link
|
||||||
|
share() {
|
||||||
|
let copyElem = document.createElement('input');
|
||||||
|
copyElem.value = `https://deezer.com/track/${this.$root.track.id}`;
|
||||||
|
document.body.appendChild(copyElem);
|
||||||
|
copyElem.select();
|
||||||
|
document.execCommand('copy');
|
||||||
|
document.body.removeChild(copyElem);
|
||||||
|
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||||
|
},
|
||||||
|
queueMove() {
|
||||||
|
this.$root.queue.index = this.$root.queue.data.findIndex(t => t.id == this.$root.track.id);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<span class='text-subtitle-2'>{{$numberString(playlist.fans)}} {{$t('fans')}}</span><br>
|
<span class='text-subtitle-2'>{{$numberString(playlist.fans)}} {{$t('fans')}}</span><br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='my-2'>
|
<div class='my-2 d-flex'>
|
||||||
<v-btn color='primary' class='mr-1' @click='play'>
|
<v-btn color='primary' class='mr-1' @click='play'>
|
||||||
<v-icon left>mdi-play</v-icon>
|
<v-icon left>mdi-play</v-icon>
|
||||||
{{$t('Play')}}
|
{{$t('Play')}}
|
||||||
|
@ -45,6 +45,16 @@
|
||||||
<v-icon left>mdi-delete</v-icon>
|
<v-icon left>mdi-delete</v-icon>
|
||||||
{{$t('Delete')}}
|
{{$t('Delete')}}
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
<div class='mx-2' dense stlye='max-width: 120px;'>
|
||||||
|
<v-select class='px-2' dense solo :items='sortTypes' @change='sort' :label='$t("Sort by")'>
|
||||||
|
</v-select>
|
||||||
|
</div>
|
||||||
|
<div class='px-2' @click='reverseSort'>
|
||||||
|
<v-btn icon>
|
||||||
|
<v-icon v-if='isReversed'>mdi-sort-reverse-variant</v-icon>
|
||||||
|
<v-icon v-if='!isReversed'>mdi-sort-variant</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
@ -109,7 +119,16 @@ export default {
|
||||||
//Add to library button
|
//Add to library button
|
||||||
libraryLoading: false,
|
libraryLoading: false,
|
||||||
downloadDialog: false,
|
downloadDialog: false,
|
||||||
deleteDialog: false
|
deleteDialog: false,
|
||||||
|
|
||||||
|
//Sort
|
||||||
|
sortTypes: [
|
||||||
|
this.$t('Date Added'),
|
||||||
|
this.$t('Name (A-Z)'),
|
||||||
|
this.$t('Artist (A-Z)'),
|
||||||
|
this.$t('Album (A-Z)')
|
||||||
|
],
|
||||||
|
isReversed: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -209,8 +228,46 @@ export default {
|
||||||
async deletePlaylist() {
|
async deletePlaylist() {
|
||||||
await this.$axios.delete(`/playlist/${this.playlist.id}`);
|
await this.$axios.delete(`/playlist/${this.playlist.id}`);
|
||||||
this.$router.go(-1);
|
this.$router.go(-1);
|
||||||
|
},
|
||||||
|
//Sort changed
|
||||||
|
async sort(type) {
|
||||||
|
let index = this.sortTypes.indexOf(type);
|
||||||
|
//Preload all tracks
|
||||||
|
if (this.playlist.tracks.length < this.playlist.trackCount)
|
||||||
|
await this.loadAllTracks();
|
||||||
|
//Copy original
|
||||||
|
if (!this.tracksUnsorted)
|
||||||
|
this.tracksUnsorted = JSON.parse(JSON.stringify(this.playlist.tracks));
|
||||||
|
|
||||||
|
//Using indexes, so it can be translated later
|
||||||
|
this.isReversed = false;
|
||||||
|
switch (index) {
|
||||||
|
//Default
|
||||||
|
case 0:
|
||||||
|
this.tracks = JSON.parse(JSON.stringify(this.tracksUnsorted));
|
||||||
|
break;
|
||||||
|
//Name
|
||||||
|
case 1:
|
||||||
|
this.tracks = this.playlist.tracks.sort((a, b) => {return a.title.localeCompare(b.title);});
|
||||||
|
break;
|
||||||
|
//Artist
|
||||||
|
case 2:
|
||||||
|
this.tracks = this.playlist.tracks.sort((a, b) => {return a.artistString.localeCompare(b.artistString);});
|
||||||
|
break;
|
||||||
|
//Album
|
||||||
|
case 3:
|
||||||
|
this.tracks = this.playlist.tracks.sort((a, b) => {return a.album.title.localeCompare(b.album.title);});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async reverseSort() {
|
||||||
|
//Preload tracks if not sorted yet
|
||||||
|
if (this.playlist.tracks.length < this.playlist.trackCount)
|
||||||
|
await this.sort(0);
|
||||||
|
this.isReversed = !this.isReversed;
|
||||||
|
this.tracks.reverse();
|
||||||
|
},
|
||||||
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.initialLoad();
|
this.initialLoad();
|
||||||
},
|
},
|
||||||
|
|
|
@ -211,6 +211,23 @@
|
||||||
<v-subheader>{{$t("Other")}}</v-subheader>
|
<v-subheader>{{$t("Other")}}</v-subheader>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
|
|
||||||
|
<div class='d-flex mx-4 pt-2'>
|
||||||
|
<v-select
|
||||||
|
v-model='$root.settings.contentLanguage'
|
||||||
|
:items='languageList'
|
||||||
|
:label='$t("Content language")'
|
||||||
|
class='mr-4'
|
||||||
|
></v-select>
|
||||||
|
|
||||||
|
<v-select
|
||||||
|
v-model='$root.settings.contentCountry'
|
||||||
|
:items='countryList'
|
||||||
|
:label='$t("Content country")'
|
||||||
|
class='ml-4'
|
||||||
|
></v-select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Minimize to tray -->
|
<!-- Minimize to tray -->
|
||||||
<v-list-item v-if='$root.settings.electron'>
|
<v-list-item v-if='$root.settings.electron'>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
|
@ -283,6 +300,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Settings',
|
name: 'Settings',
|
||||||
data() {
|
data() {
|
||||||
|
@ -320,7 +338,11 @@ export default {
|
||||||
primaryColorIndex: 0,
|
primaryColorIndex: 0,
|
||||||
primaries: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
|
primaries: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
|
||||||
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
|
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
|
||||||
'#795548', '#607D8B', '#9E9E9E']
|
'#795548', '#607D8B', '#9E9E9E'],
|
||||||
|
|
||||||
|
//Lists from Deezer website
|
||||||
|
languageList: ["me", "da", "de", "en", "us", "es", "mx", "fr", "hr", "id", "it", "hu", "ms", "nl", "no", "pl", "br", "pt", "ru", "ro", "sq", "sk", "sl", "sr", "fi", "sv", "tr", "cs", "bg", "uk", "he", "ar", "th", "cn", "ja", "ko"],
|
||||||
|
countryList: ["AF", "AL", "DZ", "AO", "AI", "AG", "AR", "AM", "AU", "AT", "AZ", "BH", "BD", "BB", "BY", "BE", "BJ", "BT", "BO", "BA", "BW", "BR", "IO", "VG", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CX", "CC", "CO", "CK", "CR", "HR", "CY", "CZ", "CD", "DK", "DJ", "DM", "TL", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FM", "FJ", "FI", "FR", "GA", "GM", "GE", "DE", "GH", "GR", "GD", "GT", "GN", "GW", "HN", "HU", "IS", "ID", "IQ", "IE", "IL", "IT", "JM", "JP", "JO", "KZ", "KE", "KI", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LT", "LU", "MK", "MG", "MW", "MY", "ML", "MT", "MH", "MR", "MU", "MX", "MD", "MN", "ME", "MS", "MA", "MZ", "NA", "NR", "NP", "NZ", "NI", "NE", "NG", "NU", "NF", "NO", "OM", "PK", "PW", "PA", "PG", "PY", "PE", "PL", "PT", "QA", "CG", "RO", "RU", "RW", "KN", "LC", "VC", "WS", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SK", "SI", "SO", "ZA", "ES", "LK", "SJ", "SZ", "SE", "CH", "TJ", "TZ", "TH", "KM", "FK", "CI", "MV", "NL", "PH", "PN", "SB", "TG", "TK", "TO", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UY", "UZ", "VU", "VE", "VN", "YE", "ZM", "ZW"],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"version": "1.0.10",
|
"version": "1.1.7",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -88,12 +88,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/color-name": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"accepts": {
|
"accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||||
|
@ -152,14 +146,10 @@
|
||||||
"color-convert": "^1.9.0"
|
"color-convert": "^1.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"argparse": {
|
"arg": {
|
||||||
"version": "1.0.10",
|
"version": "4.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||||
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"sprintf-js": "~1.0.2"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"array-flatten": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
|
@ -348,19 +338,16 @@
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-styles": "^4.1.0",
|
"ansi-styles": "^4.1.0",
|
||||||
"supports-color": "^7.1.0"
|
"supports-color": "^7.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
"version": "4.2.1",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/color-name": "^1.1.1",
|
|
||||||
"color-convert": "^2.0.1"
|
"color-convert": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -368,7 +355,6 @@
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"color-name": "~1.1.4"
|
"color-name": "~1.1.4"
|
||||||
}
|
}
|
||||||
|
@ -376,20 +362,17 @@
|
||||||
"color-name": {
|
"color-name": {
|
||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"has-flag": {
|
"has-flag": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
}
|
}
|
||||||
|
@ -1279,6 +1262,17 @@
|
||||||
"requires": {
|
"requires": {
|
||||||
"argparse": "^1.0.7",
|
"argparse": "^1.0.7",
|
||||||
"esprima": "^4.0.0"
|
"esprima": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"argparse": {
|
||||||
|
"version": "1.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||||
|
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"sprintf-js": "~1.0.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jsbn": {
|
"jsbn": {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.1.6",
|
"version": "1.1.7",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "background.js",
|
"main": "background.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -10,8 +10,10 @@
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"arg": "^4.1.3",
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
"browser-id3-writer": "^4.4.0",
|
"browser-id3-writer": "^4.4.0",
|
||||||
|
"chalk": "^4.1.0",
|
||||||
"discord-rpc": "^3.1.4",
|
"discord-rpc": "^3.1.4",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"lastfmapi": "^0.1.1",
|
"lastfmapi": "^0.1.1",
|
||||||
|
|
|
@ -91,13 +91,13 @@ app.get('/track/:id', async (req, res) => {
|
||||||
|
|
||||||
//Get album by id
|
//Get album by id
|
||||||
app.get('/album/:id', async (req, res) => {
|
app.get('/album/:id', async (req, res) => {
|
||||||
let data = await deezer.callApi('deezer.pageAlbum', {alb_id: req.params.id.toString(), lang: 'us'});
|
let data = await deezer.callApi('deezer.pageAlbum', {alb_id: req.params.id.toString(), lang: settings.contentLanguage});
|
||||||
res.send(new Album(data.results.DATA, data.results.SONGS));
|
res.send(new Album(data.results.DATA, data.results.SONGS));
|
||||||
});
|
});
|
||||||
|
|
||||||
//Get artist by id
|
//Get artist by id
|
||||||
app.get('/artist/:id', async (req, res) => {
|
app.get('/artist/:id', async (req, res) => {
|
||||||
let data = await deezer.callApi('deezer.pageArtist', {art_id: req.params.id.toString(), lang: 'us'});
|
let data = await deezer.callApi('deezer.pageArtist', {art_id: req.params.id.toString(), lang: settings.contentLanguage});
|
||||||
res.send(new Artist(data.results.DATA, data.results.ALBUMS, data.results.TOP));
|
res.send(new Artist(data.results.DATA, data.results.ALBUMS, data.results.TOP));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ app.get('/playlist/:id', async (req, res) => {
|
||||||
let nb = req.query.full ? 100000 : 50;
|
let nb = req.query.full ? 100000 : 50;
|
||||||
let data = await deezer.callApi('deezer.pagePlaylist', {
|
let data = await deezer.callApi('deezer.pagePlaylist', {
|
||||||
playlist_id: req.params.id.toString(),
|
playlist_id: req.params.id.toString(),
|
||||||
lang: 'us',
|
lang: settings.contentLanguage,
|
||||||
nb: nb,
|
nb: nb,
|
||||||
start: req.query.start ? parseInt(req.query.start, 10) : 0,
|
start: req.query.start ? parseInt(req.query.start, 10) : 0,
|
||||||
tags: true
|
tags: true
|
||||||
|
@ -319,7 +319,7 @@ app.get('/page', async (req, res) => {
|
||||||
'large-card': ['album', 'playlist', 'show', 'video-link'],
|
'large-card': ['album', 'playlist', 'show', 'video-link'],
|
||||||
'ads': [] //None
|
'ads': [] //None
|
||||||
},
|
},
|
||||||
'LANG': 'us',
|
'LANG': settings.contentLanguage,
|
||||||
'OPTIONS': []
|
'OPTIONS': []
|
||||||
});
|
});
|
||||||
res.send(new DeezerPage(data.results));
|
res.send(new DeezerPage(data.results));
|
||||||
|
@ -496,7 +496,7 @@ io.on('connection', (socket) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
//ecb = Error callback
|
//ecb = Error callback
|
||||||
async function createServer(electron = false, ecb) {
|
async function createServer(electron = false, ecb, override = {}) {
|
||||||
//Prepare globals
|
//Prepare globals
|
||||||
settings = new Settings(electron);
|
settings = new Settings(electron);
|
||||||
settings.load();
|
settings.load();
|
||||||
|
@ -542,12 +542,18 @@ async function createServer(electron = false, ecb) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
//Start server
|
//Error callback
|
||||||
server.on('error', (e) => {
|
server.on('error', (e) => {
|
||||||
|
if (ecb)
|
||||||
ecb(e);
|
ecb(e);
|
||||||
|
logger.error(e);
|
||||||
});
|
});
|
||||||
server.listen(settings.port, settings.serverIp);
|
|
||||||
console.log(`Running on: http://${settings.serverIp}:${settings.port}`);
|
//Start server
|
||||||
|
let serverIp = override.host ? override.host : settings.serverIp;
|
||||||
|
let port = override.port ? override.port: settings.port;
|
||||||
|
server.listen(port, serverIp);
|
||||||
|
console.log(`Running on: http://${serverIp}:${port}`);
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ class Settings {
|
||||||
this.playlistFolder = false;
|
this.playlistFolder = false;
|
||||||
|
|
||||||
this.forceWhiteTrayIcon = false;
|
this.forceWhiteTrayIcon = false;
|
||||||
|
this.contentLanguage = 'en';
|
||||||
|
this.contentCountry = 'US';
|
||||||
}
|
}
|
||||||
|
|
||||||
//Based on electorn app.getPath
|
//Based on electorn app.getPath
|
||||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "freezer",
|
"name": "freezer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.1.6",
|
"version": "1.1.7",
|
||||||
"description": "",
|
"description": "",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pack": "electron-builder --dir",
|
"pack": "electron-builder --dir",
|
||||||
|
@ -30,7 +30,8 @@
|
||||||
],
|
],
|
||||||
"win": {
|
"win": {
|
||||||
"target": [
|
"target": [
|
||||||
"portable", "nsis"
|
"portable",
|
||||||
|
"nsis"
|
||||||
],
|
],
|
||||||
"icon": "build/icon.ico",
|
"icon": "build/icon.ico",
|
||||||
"asarUnpack": [
|
"asarUnpack": [
|
||||||
|
|
Loading…
Reference in New Issue