From c3283c47f6ea45208bdbbe2e871207c771219b76 Mon Sep 17 00:00:00 2001 From: Jiiks Date: Wed, 27 Feb 2019 08:10:04 +0200 Subject: [PATCH] Tons of smol things --- core/src/main.js | 2 +- core/src/modules/editor.js | 50 +++++++++++++------------------------- editor/src/Editor.vue | 45 ++++++++++++++++++++++++++++------ 3 files changed, 55 insertions(+), 42 deletions(-) diff --git a/core/src/main.js b/core/src/main.js index 034a591d..109a0fba 100644 --- a/core/src/main.js +++ b/core/src/main.js @@ -263,7 +263,7 @@ export class BetterDiscord { const themes = path.resolve(ext, 'themes'); const modules = path.resolve(ext, 'modules'); const userfiles = path.resolve(userdata, 'files'); - const snippets = path.resolve(userdata, 'snippets'); + const snippets = path.resolve(userdata, 'snippets.json'); this.config.addPath('base', base); this.config.addPath('ext', ext); diff --git a/core/src/modules/editor.js b/core/src/modules/editor.js index 02243d4a..b08912ea 100644 --- a/core/src/modules/editor.js +++ b/core/src/modules/editor.js @@ -41,8 +41,8 @@ export default class Editor extends Module { const files = await FileUtils.listDirectory(this.bd.config.getPath('userfiles')); const constructFiles = await Promise.all(files.map(async file => { - const content = await FileUtils.readFile(path.resolve(this.bd.config.getPath('userfiles'), file)); - return { type: 'file', name: file, saved: true, mode: this.resolveMode(file), content, savedContent: content }; + // const content = await FileUtils.readFile(path.resolve(this.bd.config.getPath('userfiles'), file)); + return { type: 'file', name: file, saved: true, mode: this.resolveMode(file), content: '', savedContent: '', read: false, changed: false }; })); const userscssPath = path.resolve(this.bd.config.getPath('data'), 'user.scss'); @@ -56,7 +56,9 @@ export default class Editor extends Module { content: userscss, savedContent: userscss, hoisted: true, - liveUpdate: true + liveUpdate: true, + read: true, + changed: false }); event.reply(constructFiles); @@ -68,17 +70,12 @@ export default class Editor extends Module { BDIpc.on('editor-getSnippets', async (event) => { try { - const files = await FileUtils.listDirectory(this.bd.config.getPath('snippets')); - - const constructFiles = await Promise.all(files.map(async file => { - const content = await FileUtils.readFile(path.resolve(this.bd.config.getPath('snippets'), file)); - return { type: 'snippet', name: file, saved: true, mode: this.resolveMode(file), content, savedContent: content }; - })); - - event.reply(constructFiles); + const snippets = await FileUtils.readJsonFromFile(this.bd.config.getPath('snippets')); + event.reply(snippets); } catch (err) { console.log(err); - event.reject({ err }); + event.reply([]); + return; } }); @@ -98,7 +95,7 @@ export default class Editor extends Module { BDIpc.on('editor-saveSnippet', async (event, snippet) => { try { - await FileUtils.writeFile(path.resolve(this.bd.config.getPath('snippets'), snippet.name), snippet.content); + await FileUtils.writeFile(this.bd.config.getPath('snippets'), JSON.stringify(snippet)); event.reply('ok'); } catch (err) { console.log(err); @@ -148,11 +145,15 @@ export default class Editor extends Module { })(); }); }); + + BDIpc.on('editor-readFile', async (event, file) => { + const content = await FileUtils.readFile(path.resolve(this.bd.config.getPath('userfiles'), file.name)); + event.reply(content); + }); } initWatchers() { this.fileWatcher = chokidar.watch(this.bd.config.getPath('userfiles')); - this.snippetWatcher = chokidar.watch(this.bd.config.getPath('snippets')); this.fileWatcher.on('add', file => { const fileName = path.basename(file); @@ -175,25 +176,8 @@ export default class Editor extends Module { } catch (err) {} }); - this.snippetWatcher.on('add', file => { - const fileName = path.basename(file); - try { - this.send('editor-addSnippet', { - type: 'snippet', - name: fileName, - saved: true, - mode: this.resolveMode(fileName), - content: '', - savedContent: '' - }); - } catch (err) { } - }); - - this.snippetWatcher.on('unlink', file => { - const fileName = path.basename(file); - try { - this.send('editor-remSnippet', { name: fileName }); - } catch (err) { } + this.fileWatcher.on('change', file => { + this.send('editor-fileChange', { name: path.basename(file) }); }); } diff --git a/editor/src/Editor.vue b/editor/src/Editor.vue index b4731030..b74b5ea9 100644 --- a/editor/src/Editor.vue +++ b/editor/src/Editor.vue @@ -23,6 +23,8 @@ :saveFile="saveFile" :newSnippet="newSnippet" :saveSnippet="saveSnippet" + :readFile="readFile" + :readSnippet="readSnippet" :injectStyle="injectStyle" :toggleLiveUpdate="toggleLiveUpdate"/> @@ -34,6 +36,7 @@ import { remote } from 'electron'; import { BDEdit } from 'bdedit'; +import { FileUtils } from '../../core/src/modules/utils'; ace.acequire = ace.require; const modes = { @@ -58,7 +61,8 @@ snippets: [], loading: true, alwaysOnTop: false, - error: undefined + error: undefined, + lastSaved: undefined } }, components: { BDEdit }, @@ -80,20 +84,29 @@ ClientIPC.on('bd-editor-remSnippet', (_, snippet) => { this.snippets = this.snippets.filter(s => s.name !== snippet.name); }); + + ClientIPC.on('bd-editor-fileChange', (_, file) => { + if (this.lastSaved && this.lastSaved.name === file.name) { // If we saved in our editor then don't trigger + this.lastSaved = undefined; + return; + } + + const f = this.files.find(f => f.name === file.name); + if (f) f.changed = true; + }); }, mounted() { (async () => { this.files = await ClientIPC.send('bd-editor-getFiles'); this.snippets = await ClientIPC.send('bd-editor-getSnippets'); - this.loading = false; - this.liveUpdateInternal = setInterval(this.liveUpdate, 1000); })(); }, methods: { addFile(file) { this.files.push(file); }, + addSnippet(snippet) { this.snippets.push(file) }, updateContent(item, content) { @@ -120,11 +133,11 @@ let iter = 0; while (this.files.find(file => file.name === newName)) { - newName = `${prefix}_${iter}`; + newName = `${prefix.split('.')[0]}_${iter}.${prefix.split('.')[1]}`; iter++; } - const newItem = { type: 'file', name: newName, content: '', mode, saved: false }; + const newItem = { type: 'file', name: newName, content: '', mode, saved: false, read: true }; this.files.push(newItem); return newItem; }, @@ -141,13 +154,14 @@ iter++; } - const newItem = { type: 'snippet', name: newName, content: '', mode, saved: false }; + const newItem = { type: 'snippet', name: newName, content: '', savedContent: '', mode, saved: false, read: true }; this.snippets.push(newItem); return newItem; }, async saveFile(file) { try { + this.lastSaved = file; const result = await ClientIPC.send('bd-editor-saveFile', file); file.savedContent = file.content; file.saved = true; @@ -157,8 +171,23 @@ }, async saveSnippet(snippet) { - const result = await ClientIPC.send('bd-editor-saveSnippet', snippet); - console.log(result); + // TODO only saved snippets should save not all when one is saved. + snippet.saved = true; + const result = await ClientIPC.send('bd-editor-saveSnippet', this.snippets); + }, + + async readFile(file) { + const content = await ClientIPC.send('editor-readFile', file); + file.read = true; + file.changed = false; + file.content = file.savedContent = content; + return content; + }, + + async readSnippet(snippet) { + const content = await ClientIPC.send('editor-readSnippet', snippet); + snippet.read = true; + return content; }, async injectStyle(item) {