Remove serialized state infrastructure

The serialized state feature (LOAD_SERIALIZED_STATE action, SerializedStateV1
types, getSerializedState/getSerlializedState functions) was unused external
API surface. Removing it simplifies the codebase and eliminates the only
caller of ensureWindowsAreOnScreen() without a parentDomNode argument.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jordan Eldredge 2026-06-15 18:51:13 -07:00
parent d99b8c6b3d
commit f973319e3e
30 changed files with 4 additions and 2551 deletions

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 40,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": true,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,111 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": true,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 100,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": false,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 10
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "equalizer"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": true,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 100,
"y": 100
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": true
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": true,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 50,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,111 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": true,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": false,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 100,
"y": 100
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": true,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,124 +0,0 @@
{
"version": 1,
"media": {
"volume": 78,
"balance": 0,
"shuffle": false,
"repeat": false
},
"equalizer": {
"on": true,
"auto": false,
"sliders": {
"60": 50,
"170": 50,
"310": 50,
"600": 50,
"1000": 50,
"3000": 50,
"6000": 50,
"12000": 50,
"14000": 50,
"16000": 50,
"preamp": 50
}
},
"display": {
"visualizerStyle": 0,
"doubled": false,
"llama": false,
"marqueeStep": 0,
"skinImages": {
"EQ_PREAMP_LINE": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAABCAYAAADpXEERAAAAE0lEQVQoU2Pcdfruf4ZRMKRDAAD1lwNjTqcaUQAAAABJRU5ErkJggg==",
"EQ_GRAPH_LINE_COLORS": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAR0lEQVQYV2O4rCT9n+F9kOJ/hvfViv8ZHkzSQCE2afxneH/HEJm49Nr0PwOYWPLIAkp0PjL4z1B41uQ/Q9QGnf8MWrPEIAQANWYwvnlToNIAAAAASUVORK5CYII="
},
"skinCursors": null,
"skinRegion": {},
"skinGenLetterWidths": null,
"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)"
],
"skinPlaylistStyle": null
},
"windows": {
"positionsAreRelative": true,
"genWindows": {
"main": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"equalizer": {
"size": [
0,
0
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"playlist": {
"size": [
4,
5
],
"open": true,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
},
"milkdrop": {
"size": [
0,
0
],
"open": false,
"hidden": false,
"shade": false,
"position": {
"x": 0,
"y": 0
}
}
},
"focused": "main"
}
}

View file

@ -1,8 +1,7 @@
import { WINDOWS } from "../constants";
import { Thunk, Action, Slider } from "../types";
import { SerializedStateV1 } from "../serializedStates/v1Types";
import * as Selectors from "../selectors";
import { ensureWindowsAreOnScreen, setFocusedWindow } from "./windows";
import { setFocusedWindow } from "./windows";
export {
toggleDoubleSizeMode,
@ -146,16 +145,6 @@ export function focusBand(band: Slider): Action {
return { type: "SET_BAND_FOCUS", input: "eq", bandFocused: band };
}
export function loadSerializedState(
// In the future this type should be the union of all versioned types.
serializedState: SerializedStateV1
): Thunk {
return (dispatch) => {
dispatch({ type: "LOAD_SERIALIZED_STATE", serializedState });
dispatch(ensureWindowsAreOnScreen());
};
}
export function loadDefaultSkin(): Action {
return { type: "LOAD_DEFAULT_SKIN" };
}

View file

@ -141,9 +141,6 @@ export function centerWindows({ left, top, width, height }: Box): Thunk {
const windowsInfo = Selectors.getWindowsInfo(state);
const getOpen = Selectors.getWindowOpen(state);
const offsetLeft = left + window.scrollX;
const offsetTop = top + window.scrollY;
// A layout has been supplied. We will compute the bounding box and
// center the given layout.
const bounding = Utils.calculateBoundingBox(
@ -158,6 +155,9 @@ export function centerWindows({ left, top, width, height }: Box): Thunk {
const boxHeight = bounding.bottom - bounding.top;
const boxWidth = bounding.right - bounding.left;
const offsetLeft = left + window.scrollX;
const offsetTop = top + window.scrollY;
const move = {
x: Math.ceil(offsetLeft - bounding.left + (width - boxWidth) / 2),
y: Math.ceil(offsetTop - bounding.top + (height - boxHeight) / 2),

View file

@ -2,7 +2,6 @@ import { IMedia } from "./media";
import { next as nextTrack } from "./actionCreators";
import * as Selectors from "./selectors";
import { MiddlewareStore, Action, Dispatch } from "./types";
import { objectForEach } from "./utils";
export default (media: IMedia) => (store: MiddlewareStore) => {
const {
@ -105,26 +104,6 @@ export default (media: IMedia) => (store: MiddlewareStore) => {
case "SET_EQ_ON":
media.enableEq();
break;
case "LOAD_SERIALIZED_STATE": {
// Set ALL THE THINGS!
if (Selectors.getEqualizerEnabled(state)) {
media.enableEq();
} else {
media.disableEq();
}
media.setVolume(Selectors.getVolume(state));
media.setBalance(Selectors.getBalance(state));
objectForEach(state.equalizer.sliders, (value, slider) => {
if (slider === "preamp") {
media.setPreamp(value);
} else {
// @ts-ignore I don't know how to teach TypeScript about objects
// that use Slider as keys
media.setEqBand(slider, value);
}
});
break;
}
}
return returnValue;
};

View file

@ -11,7 +11,6 @@ import {
import * as Utils from "../utils";
import { createSelector } from "reselect";
import { DEFAULT_SKIN, VISUALIZER_ORDER } from "../constants";
import { DisplaySerializedStateV1 } from "../serializedStates/v1Types";
export interface DisplayState {
visualizerStyle: number;
@ -153,60 +152,12 @@ const display = (
return { ...state, zIndex: (action as any).zIndex };
case "SET_DUMMY_VIZ_DATA":
return { ...state, dummyVizData: (action as any).data };
case "LOAD_SERIALIZED_STATE": {
const { skinCursors, ...rest } = (action as any).serializedState.display;
const upgrade = (url: string) => ({ type: "cur", url } as const);
const newSkinCursors =
skinCursors == null ? null : Utils.objectMap(skinCursors, upgrade);
return { ...state, skinCursors: newSkinCursors, ...rest };
}
default:
return state;
}
};
export default display;
export const getSerializedState = (
state: DisplayState
): DisplaySerializedStateV1 => {
// My kingdom for a type-safe `_.pick`.
const {
visualizerStyle,
doubled,
llama,
marqueeStep,
skinImages,
skinCursors,
skinRegion,
skinGenLetterWidths,
skinColors,
skinPlaylistStyle,
} = state;
let newCursors: { [cursor: string]: string } | null = null;
if (skinCursors != null) {
// @ts-ignore Typescript does not like that we can have `undefined` as
// values here. Since this is going to get serialized to JSON (which will
// drop undefined) it's fine.
// This code is geting removed soon anyway.
newCursors = Utils.objectMap(skinCursors, (cursor) => {
return cursor.type === "cur" ? cursor.url : undefined;
});
}
return {
visualizerStyle,
doubled,
llama,
marqueeStep,
skinImages,
skinCursors: newCursors,
skinRegion,
skinGenLetterWidths,
skinColors,
skinPlaylistStyle,
};
};
export const getVisualizerStyle = createSelector(
(state: DisplayState) => state.visualizerStyle,
(visualizationStyle): string => {

View file

@ -1,5 +1,4 @@
import { Slider, Action } from "./../types";
import { EqualizerSerializedStateV1 } from "../serializedStates/v1Types";
export interface EqualizerState {
on: boolean;
@ -42,17 +41,9 @@ const equalizer = (
return { ...state, on: false };
case "SET_EQ_AUTO":
return { ...state, auto: (action as any).value };
case "LOAD_SERIALIZED_STATE":
return (action as any).serializedState.equalizer || state;
default:
return state;
}
};
export function getSerializedState(
state: EqualizerState
): EqualizerSerializedStateV1 {
return state;
}
export default equalizer;

View file

@ -1,6 +1,5 @@
import { Action, PlayerMediaStatus, TimeMode } from "../types";
import { TIME_MODE, PLAYER_MEDIA_STATUS } from "../constants";
import { MediaSerializedStateV1 } from "../serializedStates/v1Types";
export interface MediaState {
timeMode: TimeMode; // TODO: Convert this to an enum
@ -66,16 +65,9 @@ const media = (
return { ...state, repeat: !state.repeat };
case "TOGGLE_SHUFFLE":
return { ...state, shuffle: !state.shuffle };
case "LOAD_SERIALIZED_STATE":
return { ...state, ...(action as any).serializedState.media };
default:
return state;
}
};
export function getSerializedState(state: MediaState): MediaSerializedStateV1 {
const { volume, balance, shuffle, repeat } = state;
return { volume, balance, shuffle, repeat };
}
export default media;

View file

@ -1,7 +1,6 @@
import { Action, WindowId, Box, Point } from "../types";
import { WINDOWS } from "../constants";
import * as Utils from "../utils";
import { WindowsSerializedStateV1 } from "../serializedStates/v1Types";
export type WindowPositions = {
[windowId: string]: Point;
@ -203,24 +202,6 @@ const windows = (
size: [0, 0] as [number, number],
})),
};
case "LOAD_SERIALIZED_STATE": {
const { genWindows, focused, positionsAreRelative } = (action as any)
.serializedState.windows;
return {
...state,
positionsAreRelative,
genWindows: Utils.objectMap(state.genWindows, (w, windowId) => {
const serializedW = genWindows[windowId];
if (serializedW == null) {
return w;
}
// Pull out `hidden` since it's been removed from our state.
const { hidden: _hidden, ...rest } = serializedW;
return { ...w, ...rest };
}),
focused,
};
}
case "BROWSER_WINDOW_SIZE_CHANGED":
return {
...state,
@ -235,22 +216,4 @@ const windows = (
}
};
export function getSerializedState(
state: WindowsState
): WindowsSerializedStateV1 {
return {
positionsAreRelative: state.positionsAreRelative,
genWindows: Utils.objectMap(state.genWindows, (w) => {
return {
size: w.size,
open: w.open,
hidden: false, // Not used any more
shade: w.shade || false,
position: w.position,
};
}),
focused: state.focused,
};
}
export default windows;

View file

@ -33,12 +33,8 @@ import {
import { createPlaylistURL } from "./playlistHtml";
import * as fromTracks from "./reducers/tracks";
import * as fromDisplay from "./reducers/display";
import * as fromEqualizer from "./reducers/equalizer";
import * as fromMedia from "./reducers/media";
import * as fromWindows from "./reducers/windows";
import * as MarqueeUtils from "./marqueeUtils";
import { generateGraph } from "./resizeUtils";
import { SerializedStateV1 } from "./serializedStates/v1Types";
export const getSliders = (state: AppState) => state.equalizer.sliders;
@ -594,16 +590,6 @@ export const getTimeElapsed = (state: AppState): number => {
return state.media.timeElapsed;
};
export function getSerlializedState(state: AppState): SerializedStateV1 {
return {
version: 1,
media: fromMedia.getSerializedState(state.media),
equalizer: fromEqualizer.getSerializedState(state.equalizer),
display: fromDisplay.getSerializedState(state.display),
windows: fromWindows.getSerializedState(state.windows),
};
}
export function getEqualizerEnabled(state: AppState): boolean {
return state.equalizer.on;
}

View file

@ -1,223 +0,0 @@
import fs from "fs";
import path from "path";
import reducer from "./reducers";
import * as Selectors from "./selectors";
import * as Actions from "./actionCreators";
import { kebabCase } from "lodash";
import { legacy_createStore as createStore, applyMiddleware } from "redux";
import { withExtraArgument } from "redux-thunk";
import { SerializedStateV1 } from "./serializedStates/v1Types";
import { AppState, Action } from "./types";
function fixturePath(name: string) {
return path.join(
__dirname,
"__tests__/fixtures/serializedState/v1/",
`${kebabCase(name)}.json`
);
}
function writeFixture(name: string, state: SerializedStateV1) {
fs.writeFileSync(fixturePath(name), JSON.stringify(state, null, 4));
}
function readFixture(name: string): SerializedStateV1 {
return JSON.parse(fs.readFileSync(fixturePath(name), "utf8"));
}
interface SerializationTestParams<T> {
name: string;
action: Action;
selector(state: AppState): T;
expected: T;
}
function testSerialization<T>({
name,
action,
selector,
expected,
}: SerializationTestParams<T>) {
test(name, () => {
const firstStore = getStore();
// Does not match the expected selection in the initial state
expect(selector(firstStore.getState())).not.toEqual(expected);
firstStore.dispatch(action);
// Ensure we actually changed something
expect(firstStore.getState()).not.toEqual(getStore().getState());
// Ensure the expectation is true before we serialize
expect(selector(firstStore.getState())).toEqual(expected);
const serializedState = Selectors.getSerlializedState(
firstStore.getState()
);
if (!fs.existsSync(fixturePath(name))) {
writeFixture(name, serializedState);
console.warn("Wrote new fixture: ", fixturePath(name));
}
const readSerializedState = readFixture(name);
// Ensure our serialization strategy hasn't changed since we last serialized
expect(readSerializedState).toEqual(serializedState);
// Try to apply this serialized state to the default state
const secondStore = getStore();
secondStore.dispatch({
type: "LOAD_SERIALIZED_STATE",
serializedState: readSerializedState,
});
// Ensure our restored state conforms to expectation
expect(selector(secondStore.getState())).toEqual(expected);
// TODO: Try to apply the serialized state to a complex non-initial state
});
}
function getStore() {
const extras = {};
const enhancer = applyMiddleware(withExtraArgument(extras));
return createStore(reducer, undefined, enhancer);
}
describe("can serialize", () => {
test("the initial state", () => {
const store = getStore();
const serializedState = Selectors.getSerlializedState(store.getState());
expect(serializedState).toMatchSnapshot();
const newStore = getStore();
newStore.dispatch({
type: "LOAD_SERIALIZED_STATE",
serializedState,
});
expect(store.getState()).toEqual(newStore.getState());
});
/* Media */
testSerialization({
name: "volume",
action: Actions.setVolume(50),
selector: Selectors.getVolume,
expected: 50,
});
testSerialization({
name: "balance",
action: Actions.setBalance(40),
selector: Selectors.getBalance,
expected: 40,
});
testSerialization({
name: "shuffle",
action: Actions.toggleShuffle(),
selector: Selectors.getShuffle,
expected: true,
});
testSerialization({
name: "repeat",
action: Actions.toggleRepeat(),
selector: Selectors.getRepeat,
expected: true,
});
/* Equalizer */
testSerialization({
name: "equalizer on",
// @ts-ignore
action: Actions.toggleEq(),
selector: Selectors.getEqualizerEnabled,
expected: false,
});
testSerialization({
name: "equalizer band",
action: Actions.setEqBand(60, 100),
selector: (state) => Selectors.getSliders(state)[60],
expected: 100,
});
testSerialization({
name: "equalizer preamp",
action: Actions.setPreamp(10),
selector: (state) => Selectors.getSliders(state).preamp,
expected: 10,
});
/* Display */
testSerialization({
name: "double mode",
// @ts-ignore
action: Actions.toggleDoubleSizeMode(),
selector: Selectors.getDoubled,
expected: true,
});
testSerialization({
name: "llama mode",
action: Actions.toggleLlamaMode(),
selector: Selectors.getLlamaMode,
expected: true,
});
// TODO
// * marqueeStep
// * skinImages
// * skinCursors
// * skinRegion
// * skinGenLetterWidths
// * skinColors
// * skinPlaylistStyle
// * focused
/* Gen Windows */
testSerialization({
name: "window size",
action: Actions.setWindowSize("playlist", [4, 5]),
selector: (state) => Selectors.getWindowSize(state)("playlist"),
expected: [4, 5],
});
testSerialization({
name: "window open",
action: Actions.closeWindow("playlist"),
selector: (state) => Selectors.getWindowOpen(state)("playlist"),
expected: false,
});
testSerialization({
name: "window shade",
// @ts-ignore
action: Actions.toggleEqualizerShadeMode(),
selector: (state) => Boolean(Selectors.getWindowShade(state)("equalizer")),
expected: true,
});
testSerialization({
name: "main window position",
action: Actions.updateWindowPositions({ main: { x: 100, y: 100 } }),
selector: (state) => Selectors.getWindowPosition(state)("main"),
expected: { x: 100, y: 100 },
});
testSerialization({
name: "window positions are relative",
action: Actions.updateWindowPositions({ main: { x: 100, y: 100 } }, true),
selector: Selectors.getPositionsAreRelative,
expected: false,
});
testSerialization({
name: "focused window",
action: Actions.setFocusedWindow("equalizer"),
selector: (state) => Selectors.getFocusedWindow(state),
expected: "equalizer",
});
});

View file

@ -1,72 +0,0 @@
/**
* NOTE: This file must not import any other types
*/
import { WindowId } from "../types";
export interface WindowsSerializedStateV1 {
positionsAreRelative: boolean;
genWindows: {
[windowId: string]: {
size: [number, number];
open: boolean;
hidden: boolean;
shade: boolean;
position: { x: number; y: number };
};
};
focused: WindowId | null;
}
export interface DisplaySerializedStateV1 {
visualizerStyle: number;
doubled: boolean;
llama: boolean;
marqueeStep: number;
skinImages: { [sprite: string]: string };
skinCursors: { [cursor: string]: string } | null;
skinRegion: { [windowName: string]: string[] };
skinGenLetterWidths: { [letter: string]: number } | null;
skinColors: string[]; // Theoretically this could be a tuple of a specific length
skinPlaylistStyle: {
normal: string;
current: string;
normalbg: string;
selectedbg: string;
font: string;
} | null;
}
export interface EqualizerSerializedStateV1 {
on: boolean;
auto: boolean;
sliders: Record<
| 60
| 170
| 310
| 600
| 1000
| 3000
| 6000
| 12000
| 14000
| 16000
| "preamp",
number
>;
}
export interface MediaSerializedStateV1 {
volume: number;
balance: number;
shuffle: boolean;
repeat: boolean;
}
export interface SerializedStateV1 {
version: 1;
windows: WindowsSerializedStateV1;
media: MediaSerializedStateV1;
display: DisplaySerializedStateV1;
equalizer: EqualizerSerializedStateV1;
}

View file

@ -14,7 +14,6 @@ import {
import { EqualizerState } from "./reducers/equalizer";
import { NetworkState } from "./reducers/network";
import { MilkdropState } from "./reducers/milkdrop";
import { SerializedStateV1 } from "./serializedStates/v1Types";
import { TracksState } from "./reducers/tracks";
import { IAudioMetadata, IOptions } from "music-metadata-browser";
import { Store as ReduxStore } from "redux";
@ -504,10 +503,6 @@ export type Action =
type: "CLOSE_REQUESTED";
cancel: () => void;
}
| {
type: "LOAD_SERIALIZED_STATE";
serializedState: SerializedStateV1;
}
| { type: "RESET_WINDOW_SIZES" }
| { type: "BROWSER_WINDOW_SIZE_CHANGED"; height: number; width: number }
| { type: "LOAD_DEFAULT_SKIN" }

View file

@ -314,13 +314,6 @@ export function uniqueId() {
return counter++;
}
export function objectForEach<V>(
obj: { [key: string]: V },
cb: (value: V, key: string) => void
): void {
Object.keys(obj).forEach((key) => cb(obj[key], key));
}
export function objectMap<V, N>(
obj: { [key: string]: V },
cb: (value: V, key: string) => N

View file

@ -30,7 +30,6 @@ import * as FileUtils from "./fileUtils";
import Emitter from "./emitter";
import { SerializedStateV1 } from "./serializedStates/v1Types";
import Disposable from "./Disposable";
import enableMediaSession from "./mediaSession.js";
@ -554,14 +553,6 @@ class Webamp {
this._disposable.dispose();
}
__loadSerializedState(serializedState: SerializedStateV1): void {
this.store.dispatch(Actions.loadSerializedState(serializedState));
}
__getSerializedState() {
return Selectors.getSerlializedState(this.store.getState());
}
__onStateChange(cb: () => void): () => void {
const unsubscribe = this.store.subscribe(cb);