Tons of smol things

This commit is contained in:
Jiiks 2019-02-27 08:10:04 +02:00
parent 2b86f2d741
commit c3283c47f6
3 changed files with 55 additions and 42 deletions

View File

@ -263,7 +263,7 @@ export class BetterDiscord {
const themes = path.resolve(ext, 'themes'); const themes = path.resolve(ext, 'themes');
const modules = path.resolve(ext, 'modules'); const modules = path.resolve(ext, 'modules');
const userfiles = path.resolve(userdata, 'files'); 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('base', base);
this.config.addPath('ext', ext); this.config.addPath('ext', ext);

View File

@ -41,8 +41,8 @@ export default class Editor extends Module {
const files = await FileUtils.listDirectory(this.bd.config.getPath('userfiles')); const files = await FileUtils.listDirectory(this.bd.config.getPath('userfiles'));
const constructFiles = await Promise.all(files.map(async file => { const constructFiles = await Promise.all(files.map(async file => {
const content = await FileUtils.readFile(path.resolve(this.bd.config.getPath('userfiles'), 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 }; 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'); const userscssPath = path.resolve(this.bd.config.getPath('data'), 'user.scss');
@ -56,7 +56,9 @@ export default class Editor extends Module {
content: userscss, content: userscss,
savedContent: userscss, savedContent: userscss,
hoisted: true, hoisted: true,
liveUpdate: true liveUpdate: true,
read: true,
changed: false
}); });
event.reply(constructFiles); event.reply(constructFiles);
@ -68,17 +70,12 @@ export default class Editor extends Module {
BDIpc.on('editor-getSnippets', async (event) => { BDIpc.on('editor-getSnippets', async (event) => {
try { try {
const files = await FileUtils.listDirectory(this.bd.config.getPath('snippets')); const snippets = await FileUtils.readJsonFromFile(this.bd.config.getPath('snippets'));
event.reply(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);
} catch (err) { } catch (err) {
console.log(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) => { BDIpc.on('editor-saveSnippet', async (event, snippet) => {
try { 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'); event.reply('ok');
} catch (err) { } catch (err) {
console.log(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() { initWatchers() {
this.fileWatcher = chokidar.watch(this.bd.config.getPath('userfiles')); this.fileWatcher = chokidar.watch(this.bd.config.getPath('userfiles'));
this.snippetWatcher = chokidar.watch(this.bd.config.getPath('snippets'));
this.fileWatcher.on('add', file => { this.fileWatcher.on('add', file => {
const fileName = path.basename(file); const fileName = path.basename(file);
@ -175,25 +176,8 @@ export default class Editor extends Module {
} catch (err) {} } catch (err) {}
}); });
this.snippetWatcher.on('add', file => { this.fileWatcher.on('change', file => {
const fileName = path.basename(file); this.send('editor-fileChange', { name: 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) { }
}); });
} }

View File

@ -23,6 +23,8 @@
:saveFile="saveFile" :saveFile="saveFile"
:newSnippet="newSnippet" :newSnippet="newSnippet"
:saveSnippet="saveSnippet" :saveSnippet="saveSnippet"
:readFile="readFile"
:readSnippet="readSnippet"
:injectStyle="injectStyle" :injectStyle="injectStyle"
:toggleLiveUpdate="toggleLiveUpdate"/> :toggleLiveUpdate="toggleLiveUpdate"/>
</div> </div>
@ -34,6 +36,7 @@
import { remote } from 'electron'; import { remote } from 'electron';
import { BDEdit } from 'bdedit'; import { BDEdit } from 'bdedit';
import { FileUtils } from '../../core/src/modules/utils';
ace.acequire = ace.require; ace.acequire = ace.require;
const modes = { const modes = {
@ -58,7 +61,8 @@
snippets: [], snippets: [],
loading: true, loading: true,
alwaysOnTop: false, alwaysOnTop: false,
error: undefined error: undefined,
lastSaved: undefined
} }
}, },
components: { BDEdit }, components: { BDEdit },
@ -80,20 +84,29 @@
ClientIPC.on('bd-editor-remSnippet', (_, snippet) => { ClientIPC.on('bd-editor-remSnippet', (_, snippet) => {
this.snippets = this.snippets.filter(s => s.name !== snippet.name); 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() { mounted() {
(async () => { (async () => {
this.files = await ClientIPC.send('bd-editor-getFiles'); this.files = await ClientIPC.send('bd-editor-getFiles');
this.snippets = await ClientIPC.send('bd-editor-getSnippets'); this.snippets = await ClientIPC.send('bd-editor-getSnippets');
this.loading = false; this.loading = false;
this.liveUpdateInternal = setInterval(this.liveUpdate, 1000);
})(); })();
}, },
methods: { methods: {
addFile(file) { addFile(file) {
this.files.push(file); this.files.push(file);
}, },
addSnippet(snippet) { this.snippets.push(file) }, addSnippet(snippet) { this.snippets.push(file) },
updateContent(item, content) { updateContent(item, content) {
@ -120,11 +133,11 @@
let iter = 0; let iter = 0;
while (this.files.find(file => file.name === newName)) { while (this.files.find(file => file.name === newName)) {
newName = `${prefix}_${iter}`; newName = `${prefix.split('.')[0]}_${iter}.${prefix.split('.')[1]}`;
iter++; 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); this.files.push(newItem);
return newItem; return newItem;
}, },
@ -141,13 +154,14 @@
iter++; 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); this.snippets.push(newItem);
return newItem; return newItem;
}, },
async saveFile(file) { async saveFile(file) {
try { try {
this.lastSaved = file;
const result = await ClientIPC.send('bd-editor-saveFile', file); const result = await ClientIPC.send('bd-editor-saveFile', file);
file.savedContent = file.content; file.savedContent = file.content;
file.saved = true; file.saved = true;
@ -157,8 +171,23 @@
}, },
async saveSnippet(snippet) { async saveSnippet(snippet) {
const result = await ClientIPC.send('bd-editor-saveSnippet', snippet); // TODO only saved snippets should save not all when one is saved.
console.log(result); 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) { async injectStyle(item) {