mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-07 16:48:02 +08:00
51602f69a5
Converted all references of global atom to NylasEnv Temporary rename atom.io find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.io/temporaryAtomIoReplacement/g' atom.config to NylasEnv.config find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.config/NylasEnv.config/g' atom.packages -> NylasEnv.packages atom.commands -> NylasEnv.commands atom.getLoadSettings find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.commands/NylasEnv.commands/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.getLoadSettings/NylasEnv.getLoadSettings/g' More common atom methods find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.styles/NylasEnv.styles/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.emitError/NylasEnv.emitError/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.inSpecMode/NylasEnv.inSpecMode/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.inDevMode/NylasEnv.inDevMode/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.getWindowType/NylasEnv.getWindowType/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.displayWindow/NylasEnv.displayWindow/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.quit/NylasEnv.quit/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.close/NylasEnv.close/g' More atom method changes find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.keymaps/NylasEnv.keymaps/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.hide/NylasEnv.hide/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.getCurrentWindow/NylasEnv.getCurrentWindow/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.menu/NylasEnv.menu/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.getConfigDirPath/NylasEnv.getConfigDirPath/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.isMainWindow/NylasEnv.isMainWindow/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.finishUnload/NylasEnv.finishUnload/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.isWorkWindow/NylasEnv.isWorkWindow/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.showSaveDialog/NylasEnv.showSaveDialog/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.append/NylasEnv.append/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.confirm/NylasEnv.confirm/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.clipboard/NylasEnv.clipboard/g' find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed -i "" 's/atom.getVersion/NylasEnv.getVersion/g' More atom renaming Rename atom methods More atom methods Fix grunt config variable Change atom.cmd to N1.cmd Rename atom.coffee and atom.js to nylas-env.coffee nylas-env.js Fix atom global reference in specs manually Fix atom requires Change engine from atom to nylas got rid of global/nylas-env rename to nylas-win-bootup Fix onWindowPropsChanged to onWindowPropsReceived fix nylas-workspace atom-text-editor to nylas-theme-wrap atom-text-editor -> nylas-theme-wrap Replacing atom keyword AtomWindow -> NylasWindow Replace Atom -> N1 Rename atom items nylas.asar -> atom.asar Remove more atom references Remove 6to5 references Remove license exception for atom
148 lines
4.8 KiB
JavaScript
148 lines
4.8 KiB
JavaScript
import {DraftStore, Actions} from 'nylas-exports';
|
|
import NylasStore from 'nylas-store';
|
|
import shell from 'shell';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
|
|
class TemplateStore extends NylasStore {
|
|
|
|
init(templatesDir = path.join(NylasEnv.getConfigDirPath(), 'templates')) {
|
|
this.items = this.items.bind(this);
|
|
this.templatesDirectory = this.templatesDirectory.bind(this);
|
|
this._setStoreDefaults = this._setStoreDefaults.bind(this);
|
|
this._registerListeners = this._registerListeners.bind(this);
|
|
this._populate = this._populate.bind(this);
|
|
this._onCreateTemplate = this._onCreateTemplate.bind(this);
|
|
this._onShowTemplates = this._onShowTemplates.bind(this);
|
|
this._displayError = this._displayError.bind(this);
|
|
this._writeTemplate = this._writeTemplate.bind(this);
|
|
this._onInsertTemplateId = this._onInsertTemplateId.bind(this);
|
|
this._setStoreDefaults();
|
|
this._registerListeners();
|
|
|
|
this._templatesDir = templatesDir;
|
|
this._welcomeName = 'Welcome to Templates.html';
|
|
this._welcomePath = path.join(__dirname, '..', 'assets', this._welcomeName);
|
|
|
|
// I know this is a bit of pain but don't do anything that
|
|
// could possibly slow down app launch
|
|
fs.exists(this._templatesDir, (exists) => {
|
|
if (exists) {
|
|
this._populate();
|
|
fs.watch(this._templatesDir, () => this._populate());
|
|
} else {
|
|
fs.mkdir(this._templatesDir, () => {
|
|
fs.readFile(this._welcomePath, (err, welcome) => {
|
|
fs.writeFile(path.join(this._templatesDir, this._welcomeName), welcome, () => {
|
|
fs.watch(this._templatesDir, () => this._populate());
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
items() {
|
|
return this._items;
|
|
}
|
|
|
|
templatesDirectory() {
|
|
return this._templatesDir;
|
|
}
|
|
|
|
_setStoreDefaults() {
|
|
this._items = [];
|
|
}
|
|
|
|
_registerListeners() {
|
|
this.listenTo(Actions.insertTemplateId, this._onInsertTemplateId);
|
|
this.listenTo(Actions.createTemplate, this._onCreateTemplate);
|
|
this.listenTo(Actions.showTemplates, this._onShowTemplates);
|
|
}
|
|
|
|
_populate() {
|
|
fs.readdir(this._templatesDir, (err, filenames) => {
|
|
this._items = [];
|
|
for (let i = 0, filename; i < filenames.length; i++) {
|
|
filename = filenames[i];
|
|
if (filename[0] === '.') { continue; }
|
|
const displayname = path.basename(filename, path.extname(filename));
|
|
this._items.push({
|
|
id: filename,
|
|
name: displayname,
|
|
path: path.join(this._templatesDir, filename),
|
|
});
|
|
}
|
|
this.trigger(this);
|
|
});
|
|
}
|
|
|
|
_onCreateTemplate({draftClientId, name, contents} = {}) {
|
|
if (draftClientId) {
|
|
DraftStore.sessionForClientId(draftClientId).then((session) => {
|
|
const draft = session.draft();
|
|
const draftName = name ? name : draft.subject;
|
|
const draftContents = contents ? contents : draft.body;
|
|
if (!draftName || draftName.length === 0) {
|
|
this._displayError('Give your draft a subject to name your template.');
|
|
}
|
|
if (!draftContents || draftContents.length === 0) {
|
|
this._displayError('To create a template you need to fill the body of the current draft.');
|
|
}
|
|
this._writeTemplate(draftName, draftContents);
|
|
});
|
|
return;
|
|
}
|
|
if (!name || name.length === 0) {
|
|
this._displayError('You must provide a name for your template.');
|
|
}
|
|
if (!contents || contents.length === 0) {
|
|
this._displayError('You must provide contents for your template.');
|
|
}
|
|
this._writeTemplate(name, contents);
|
|
}
|
|
|
|
_onShowTemplates() {
|
|
const ref = this._items[0];
|
|
shell.showItemInFolder(((ref != null) ? ref.path : undefined) || this._templatesDir);
|
|
}
|
|
|
|
_displayError(message) {
|
|
const dialog = require('remote').require('dialog');
|
|
dialog.showErrorBox('Template Creation Error', message);
|
|
}
|
|
|
|
_writeTemplate(name, contents) {
|
|
const filename = `${name}.html`;
|
|
const templatePath = path.join(this._templatesDir, filename);
|
|
fs.writeFile(templatePath, contents, (err) => {
|
|
if (err) { this._displayError(err); }
|
|
shell.showItemInFolder(templatePath);
|
|
this._items.push({
|
|
id: filename,
|
|
name: name,
|
|
path: templatePath,
|
|
});
|
|
this.trigger(this);
|
|
});
|
|
}
|
|
|
|
_onInsertTemplateId({templateId, draftClientId} = {}) {
|
|
const iterable = this._items;
|
|
let template = null;
|
|
for (let i = 0, item; i < iterable.length; i++) {
|
|
item = iterable[i];
|
|
if (item.id === templateId) { template = item; }
|
|
}
|
|
if (!template) { return undefined; }
|
|
|
|
fs.readFile(template.path, (err, data)=> {
|
|
const body = data.toString();
|
|
DraftStore.sessionForClientId(draftClientId).then((session)=> {
|
|
session.changes.add({body: body});
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = new TemplateStore();
|