function css(mainWindow) { const electron = require("electron"); const fs = require("fs"); const path = require('path') var ipc = electron.ipcMain; var JSON5 = require('json5'); const app = electron.app; const join = require('path').join; var customcss = join(app.getPath("userData"), "custom.css"); ipc.on('custom-css-create', function (e, arg) { fs.writeFileSync(customcss, arg); e.sender.webContents.send('custom-css-create-complete', ""); }) ipc.on('custom-css-request', function (e, arg) { try { var css = fs.readFileSync(customcss, 'utf8'); } catch (e) { var css = ""; } e.sender.webContents.send('custom-css-response', css); }) ipc.on('theme-json-create', function (e, arg) { var themecss = join(app.getPath("userData"), JSON5.parse(arg)["id"] + ".thedesktheme"); fs.writeFileSync(themecss, JSON5.stringify(JSON5.parse(arg))); if (JSON5.parse(arg)["id"]) { e.sender.webContents.send('theme-json-create-complete', ""); } else { e.sender.webContents.send('theme-json-create-complete', "error"); } }) ipc.on('theme-json-delete', function (e, arg) { try{ var themecss = join(app.getPath("userData"), arg); console.log(themecss); fs.unlink(themecss, function (err) { e.sender.webContents.send('theme-json-delete-complete', ""); }); } catch { e.sender.webContents.send('theme-json-delete-complete', 'cannot delete'); } }) ipc.on('theme-json-request', function (e, arg) { try { var themecss = join(app.getAppPath(), '/source/themes', arg) var raw = fs.readFileSync(themecss, 'utf8') var json = JSON5.parse(raw) } catch { var themecss = join(app.getPath("userData"), arg) var raw = fs.readFileSync(themecss, 'utf8') var json = JSON5.parse(raw) } e.sender.webContents.send('theme-json-response', [json, raw]); }) ipc.on('theme-css-request', function (e, arg) { try { var themecss = join(app.getAppPath(), '/source/themes', arg) var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')) } catch { var themecss = join(app.getPath("userData"), arg) var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')) } try { var css if (json.version) { var bg = json.primary.background var subcolor = json.primary.subcolor var text = json.primary.text var accent = json.primary.accent if (json.base == "light") { var drag = "rgba(255, 255, 255, 0.8)"; var beforehover = "#757575"; var selected = "#3f3f3f" var selectedWithShare = "#b2babd" var gray = "#757575" var hisData = 'rgba(255, 255, 255, 0.9)' } else { var drag = "rgba(0, 0, 0, 0.8)"; var beforehover = "#9e9e9e"; var selected = "#c0c0c0" var selectedWithShare = "#003a30" var gray = "#cccccc" var hisData = 'rgba(0, 0, 0, 0.8)' } if (!json.advanced) { json.advanced = {} } if (json.advanced.modal) { var modal = json.advanced.modal } else { var modal = bg } if (json.advanced.modalFooter) { var modalFooter = json.advanced.modalFooter } else { var modalFooter = bg if (modal != bg) modalFooter = modal } if (json.advanced.thirdColor) { var thirdColor = json.advanced.thirdColor } else { var thirdColor = subcolor } if (json.advanced.forthColor) { var forthColor = json.advanced.forthColor } else { var forthColor = subcolor if (thirdColor != subcolor) forthColor = thirdColor } if (json.advanced.bottom) { var bottom = json.advanced.bottom } else { var bottom = subcolor } if (json.advanced.emphasized) { var emphasized = json.advanced.emphasized } else { var emphasized = accent } if (json.advanced.postbox) { var postbox = json.advanced.postbox } else { var postbox = subcolor } if (json.advanced.active) { var active = json.advanced.active } else { var active = accent } if (json.advanced.selected) { var selected = json.advanced.selected } if (json.advanced.selectedWithShare) { var selectedWithShare = json.advanced.selectedWithShare } var css = ":root {--bg:" + bg + ";--drag:" + drag + ";" + "--text:" + text + ";--beforehover:" + beforehover + ";--modal:" + modal + ";--thirdColor:" + thirdColor + ";--subcolor:" + forthColor + ";--bottom:" + bottom + ";--accent:" + accent + ";" + ";--emphasized:" + emphasized + ";--his-data:" + hisData + ";--active:" + active + ";--postbox:" + postbox + ";--modalfooter:" + modalFooter + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare + "--gray:" + gray + ";}" + ".customtheme #imagemodal{background: url(\"../img/pixel.svg\");}"; } else { var css = compatibleTheme(json) } e.sender.webContents.send('theme-css-response', css); } catch (e) { var css = ""; } }) function compatibleTheme(json) { var primary = json.vars.primary; var secondary = json.vars.secondary; var text = json.vars.text; if (json.base == "light") { var drag = "rgba(255, 255, 255, 0.8)"; var beforehover = "#757575"; var selected = "#3f3f3f" var selectedWithShare = "#b2babd" var gray = "#757575" } else { var drag = "rgba(0, 0, 0, 0.8)"; var beforehover = "#9e9e9e"; var selected = "#c0c0c0" var selectedWithShare = "#003a30" var gray = "#cccccc" } if (json.advanced) { if (json.advanced.TheDeskAccent) { var emphasized = json.advanced.TheDeskAccent } else { var emphasized = secondary } if (json.advanced.TheDeskActive) { var active = json.advanced.TheDeskActive } else { var active = primary } if (json.advanced.TheDeskModal) { var modal = json.advanced.TheDeskModal } else { var modal = secondary } if (json.advanced.TheDeskBottom) { var bottom = json.advanced.TheDeskBottom } else { var bottom = primary } if (json.advanced.TheDeskPostbox) { var postbox = json.advanced.TheDeskPostbox } else { var postbox = primary } if (json.advanced.TheDeskSubcolor) { var subcolor = json.advanced.TheDeskSubcolor } else { var subcolor = primary } } else { var emphasized = primary var acs = secondary var active = primary var modal = secondary var bottom = primary var postbox = primary var subcolor = primary } var css = ".customtheme {--bg:" + secondary + ";--drag:" + drag + ";" + "--text:" + text + ";--beforehover:" + beforehover + ";--modal:" + modal + ";--thirdColor:" + subcolor + ";--subcolor:" + subcolor + ";--bottom:" + bottom + ";--accent:" + emphasized + ";" + "--subcolor:" + secondary + ";--emphasized:" + active + ";--his-data:" + secondary + ";--active:" + active + ";--postbox:" + postbox + ";--modalfooter:" + primary + ";--active:" + subcolor + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare + "}" + "--gray:" + gray + ";" + ".customtheme #imagemodal{background: url(\"../img/pixel.svg\");}"; return css } ipc.on('theme-json-list', function (e, arg) { var files1 = fs.readdirSync(join(app.getAppPath(), '/source/themes')) var file1List = files1.filter(function (file) { if (file.match(/\.thedesktheme$/)) { var tfile = join(app.getAppPath(), '/source/themes', file) return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile) } else { return null } }) var themes = []; for (var i = 0; i < file1List.length; i++) { var themecss = join(app.getAppPath(), '/source/themes', file1List[i]); var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')); let compat = true if (json.version) compat = false themes.push({ name: json.name, id: json.id, compatible: compat, default: true }) } var files2 = fs.readdirSync(app.getPath("userData")) var file2List = files2.filter(function (file) { if (file.match(/\.thedesktheme$/)) { var tfile = join(app.getPath("userData"), file) return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile) } else { return null } }) for (var i = 0; i < file2List.length; i++) { var themecss = join(app.getPath("userData"), file2List[i]); var json = JSON5.parse(fs.readFileSync(themecss, 'utf8')); let compat = true if (json.version) compat = false themes.push({ name: json.name, id: json.id, compatible: compat, default: false }) } e.sender.webContents.send('theme-json-list-response', themes); }) } exports.css = css;