mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-14 13:44:41 +08:00
81 lines
2 KiB
JavaScript
81 lines
2 KiB
JavaScript
/* eslint global-require: "off" */
|
|
|
|
import NylasStore from 'nylas-store';
|
|
import _ from 'underscore';
|
|
import EmojiActions from './emoji-actions';
|
|
|
|
const EmojiJSONKey = 'emoji';
|
|
|
|
let emojiData;
|
|
|
|
class EmojiStore extends NylasStore {
|
|
constructor(props) {
|
|
super(props);
|
|
this._emoji = [];
|
|
}
|
|
|
|
activate() {
|
|
this._emoji = [];
|
|
try {
|
|
const txt = window.localStorage.getItem(EmojiJSONKey);
|
|
if (txt) {
|
|
this._emoji = JSON.parse(txt);
|
|
}
|
|
} catch (err) {
|
|
console.warn('Could not load saved emoji', err);
|
|
}
|
|
this.listenTo(EmojiActions.useEmoji, this._onUseEmoji);
|
|
}
|
|
|
|
frequentlyUsedEmoji = () => {
|
|
const sortedEmoji = this._emoji;
|
|
sortedEmoji.sort((a, b) => {
|
|
if (a.frequency < b.frequency) return 1;
|
|
return b.frequency < a.frequency ? -1 : 0;
|
|
});
|
|
const sortedEmojiNames = [];
|
|
for (const emoji of sortedEmoji) {
|
|
sortedEmojiNames.push(emoji.emojiName);
|
|
}
|
|
if (sortedEmojiNames.length > 32) {
|
|
return sortedEmojiNames.slice(0, 32);
|
|
}
|
|
return sortedEmojiNames;
|
|
};
|
|
|
|
getImagePath(emojiName) {
|
|
emojiData = emojiData || require('./emoji-data').emojiData;
|
|
for (const emoji of emojiData) {
|
|
if (emoji.short_names.indexOf(emojiName) !== -1) {
|
|
if (process.platform === 'darwin') {
|
|
return `images/composer-emoji/apple/${emoji.image}`;
|
|
}
|
|
return `images/composer-emoji/twitter/${emoji.image}`;
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
_onUseEmoji = emoji => {
|
|
const savedEmoji = _.find(this._emoji, curEmoji => {
|
|
return curEmoji.emojiChar === emoji.emojiChar;
|
|
});
|
|
if (savedEmoji) {
|
|
for (const key of Object.keys(emoji)) {
|
|
savedEmoji[key] = emoji[key];
|
|
}
|
|
savedEmoji.frequency++;
|
|
} else {
|
|
Object.assign(emoji, { frequency: 1 });
|
|
this._emoji.push(emoji);
|
|
}
|
|
this._saveEmoji();
|
|
this.trigger();
|
|
};
|
|
|
|
_saveEmoji = () => {
|
|
window.localStorage.setItem(EmojiJSONKey, JSON.stringify(this._emoji));
|
|
};
|
|
}
|
|
|
|
export default new EmojiStore();
|