diff --git a/js/baseSkin.json b/js/baseSkin.json new file mode 100644 index 00000000..b34e1c85 --- /dev/null +++ b/js/baseSkin.json @@ -0,0 +1,41 @@ +{ + "images": { + "EQ_PREAMP_LINE": + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==", + "EQ_GRAPH_LINE_COLORS": + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII=" + }, + "colors": [ + "rgb(0,0,0)", + "rgb(24,33,41)", + "rgb(239,49,16)", + "rgb(206,41,16)", + "rgb(214,90,0)", + "rgb(214,102,0)", + "rgb(214,115,0)", + "rgb(198,123,8)", + "rgb(222,165,24)", + "rgb(214,181,33)", + "rgb(189,222,41)", + "rgb(148,222,33)", + "rgb(41,206,16)", + "rgb(50,190,16)", + "rgb(57,181,16)", + "rgb(49,156,8)", + "rgb(41,148,0)", + "rgb(24,132,8)", + "rgb(255,255,255)", + "rgb(214,214,222)", + "rgb(181,189,189)", + "rgb(160,170,175)", + "rgb(148,156,165)", + "rgb(150,150,150)" + ], + "playlistStyle": { + "normal": "#00FF00", + "current": "#FFFFFF", + "normalbg": "#000000", + "selectedbg": "#0000FF", + "font": "Arial" + } +} diff --git a/js/constants.js b/js/constants.js index fe034dc2..7ee91f5a 100644 --- a/js/constants.js +++ b/js/constants.js @@ -1,3 +1,4 @@ +import * as baseSkin from "./baseSkin.json"; export const BANDS = [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]; export const WINDOWS = { @@ -27,37 +28,4 @@ export const WINDOW_WIDTH = 275; export const TRACK_HEIGHT = 13; export const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); -export const DEFAULT_VIS_COLORS = [ - "rgb(0,0,0)", - "rgb(24,33,41)", - "rgb(239,49,16)", - "rgb(206,41,16)", - "rgb(214,90,0)", - "rgb(214,102,0)", - "rgb(214,115,0)", - "rgb(198,123,8)", - "rgb(222,165,24)", - "rgb(214,181,33)", - "rgb(189,222,41)", - "rgb(148,222,33)", - "rgb(41,206,16)", - "rgb(50,190,16)", - "rgb(57,181,16)", - "rgb(49,156,8)", - "rgb(41,148,0)", - "rgb(24,132,8)", - "rgb(255,255,255)", - "rgb(214,214,222)", - "rgb(181,189,189)", - "rgb(160,170,175)", - "rgb(148,156,165)", - "rgb(150,150,150)" -]; - -export const DEFAULT_PLAYLIST_STYLE = { - normal: "#00FF00", - current: "#FFFFFF", - normalbg: "#000000", - selectedbg: "#0000FF", - font: "Arial" -}; +export const DEFAULT_SKIN = baseSkin; diff --git a/js/reducers/display.js b/js/reducers/display.js index a6da437e..ae8eb22d 100644 --- a/js/reducers/display.js +++ b/js/reducers/display.js @@ -10,6 +10,7 @@ import { SET_PLAYLIST_SCROLL_POSITION, LOADED } from "../actionTypes"; +import { DEFAULT_SKIN } from "../constants"; const defaultDisplayState = { doubled: false, @@ -18,43 +19,14 @@ const defaultDisplayState = { llama: false, closed: false, working: false, - skinImages: { - EQ_PREAMP_LINE: - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==", - EQ_GRAPH_LINE_COLORS: - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII=" - }, - skinColors: [ - "rgb(0,0,0)", - "rgb(24,33,41)", - "rgb(239,49,16)", - "rgb(206,41,16)", - "rgb(214,90,0)", - "rgb(214,102,0)", - "rgb(214,115,0)", - "rgb(198,123,8)", - "rgb(222,165,24)", - "rgb(214,181,33)", - "rgb(189,222,41)", - "rgb(148,222,33)", - "rgb(41,206,16)", - "rgb(50,190,16)", - "rgb(57,181,16)", - "rgb(49,156,8)", - "rgb(41,148,0)", - "rgb(24,132,8)", - "rgb(255,255,255)", - "rgb(214,214,222)", - "rgb(181,189,189)", - "rgb(160,170,175)", - "rgb(148,156,165)", - "rgb(150,150,150)" - ], + skinImages: DEFAULT_SKIN.images, + skinColors: DEFAULT_SKIN.colors, skinCursors: null, skinPlaylistStyle: null, skinRegion: {}, visualizerStyle: 2, - playlistScrollPosition: 0 + playlistScrollPosition: 0, + skinGenLetterWidths: null // TODO: Get the default value for this? }; const display = (state = defaultDisplayState, action) => { diff --git a/js/skinParser.js b/js/skinParser.js index 3b4b891f..35e74120 100644 --- a/js/skinParser.js +++ b/js/skinParser.js @@ -1,10 +1,6 @@ import SKIN_SPRITES from "./skinSprites"; import regionParser from "./regionParser"; -import { - LETTERS, - DEFAULT_VIS_COLORS, - DEFAULT_PLAYLIST_STYLE -} from "./constants"; +import { LETTERS, DEFAULT_SKIN } from "./constants"; import { parseViscolors, parseIni, getFileExtension } from "./utils"; const getJSZip = () => { @@ -159,7 +155,7 @@ async function genPlaylistStyle(zip) { const data = pledit && parseIni(pledit.contents).text; if (!data) { // Corrupt or missing PLEDIT.txt file. - return DEFAULT_PLAYLIST_STYLE; + return DEFAULT_SKIN.playlistStyle; } // Winamp seems to permit colors that contain too many characters. @@ -175,12 +171,12 @@ async function genPlaylistStyle(zip) { data[colorKey] = color.slice(0, 7); }); - return { ...DEFAULT_PLAYLIST_STYLE, ...data }; + return { ...DEFAULT_SKIN.playlistStyle, ...data }; } -async function genColors(zip) { +async function genVizColors(zip) { const viscolor = await genFileFromZip(zip, "VISCOLOR", "txt", "text"); - return viscolor ? parseViscolors(viscolor.contents) : DEFAULT_VIS_COLORS; + return viscolor ? parseViscolors(viscolor.contents) : DEFAULT_SKIN.colors; } async function genImages(zip) { @@ -264,7 +260,7 @@ async function skinParser(zipFileBuffer) { region, genTextSprites ] = await Promise.all([ - genColors(zip), + genVizColors(zip), genPlaylistStyle(zip), genImages(zip), genCursors(zip), diff --git a/js/utils.js b/js/utils.js index 2551c641..67a4848a 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,4 +1,4 @@ -import { DEFAULT_VIS_COLORS } from "./constants"; +import { DEFAULT_SKIN } from "./constants"; export const getTimeObj = time => { if (time == null) { @@ -74,7 +74,7 @@ export const parseViscolors = text => { const matches = regex.exec(entries[i]); colors[i] = matches ? `rgb(${matches.slice(1, 4).join(",")})` - : DEFAULT_VIS_COLORS[i]; + : DEFAULT_SKIN.colors[i]; } return colors; }; diff --git a/package.json b/package.json index 1b328170..0add4343 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "jszip": "^3.1.3", "prettier": "^1.13.0", "prop-types": "^15.5.10", + "puppeteer": "^1.4.0", "raven-for-redux": "^1.3.1", "raven-js": "^3.19.1", "rc-slider": "^8.1.5", diff --git a/yarn.lock b/yarn.lock index 8416950b..4f009ca2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -75,6 +75,12 @@ add-dom-event-listener@1.x: dependencies: object-assign "4.x" +agent-base@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" + dependencies: + es6-promisify "^5.0.0" + ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -1692,6 +1698,15 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + concat-stream@^1.5.0: version "1.6.1" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" @@ -2467,10 +2482,20 @@ es6-promise@^3.0.2: version "3.3.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" +es6-promise@^4.0.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + es6-promise@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + dependencies: + es6-promise "^4.0.3" + es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" @@ -2891,6 +2916,15 @@ extglob@^2.0.2, extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@^1.6.5: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2949,6 +2983,12 @@ fbjs@^0.8.16: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + dependencies: + pend "~1.2.0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -3639,6 +3679,13 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +https-proxy-agent@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -5012,6 +5059,10 @@ mime@^1.3.4, mime@^1.4.1, mime@^1.5.0, mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mime@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -5687,6 +5738,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -6084,6 +6139,10 @@ proxy-addr@~2.0.2: forwarded "~0.1.2" ipaddr.js "1.5.2" +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -6133,6 +6192,19 @@ punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" +puppeteer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.4.0.tgz#437f0f3450d76e437185c0bf06f446e80f184692" + dependencies: + debug "^3.1.0" + extract-zip "^1.6.5" + https-proxy-agent "^2.1.0" + mime "^2.0.3" + progress "^2.0.0" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^3.0.0" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -7626,6 +7698,10 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + underscore.string@2.3.x: version "2.3.3" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" @@ -8160,6 +8236,14 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + ws@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" @@ -8302,3 +8386,9 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + dependencies: + fd-slicer "~1.0.1"