mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 04:25:31 +08:00
70 lines
1.7 KiB
React
70 lines
1.7 KiB
React
|
import NylasStore from 'nylas-store';
|
||
|
import Rx from 'rx-lite';
|
||
|
import _ from 'underscore';
|
||
|
|
||
|
import {DatabaseStore} from 'nylas-exports';
|
||
|
import EmojiActions from './emoji-actions';
|
||
|
|
||
|
const EmojiJSONBlobKey = 'emoji';
|
||
|
|
||
|
|
||
|
class EmojiStore extends NylasStore {
|
||
|
constructor(props) {
|
||
|
super(props);
|
||
|
this._emoji = [];
|
||
|
}
|
||
|
|
||
|
activate = () => {
|
||
|
const query = DatabaseStore.findJSONBlob(EmojiJSONBlobKey);
|
||
|
this._subscription = Rx.Observable.fromQuery(query).subscribe((emoji) => {
|
||
|
this._emoji = emoji ? emoji : [];
|
||
|
this.trigger();
|
||
|
});
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
_onUseEmoji = (emoji) => {
|
||
|
const savedEmoji = _.find(this._emoji, (curEmoji) => {
|
||
|
return curEmoji.emojiChar === emoji.emojiChar;
|
||
|
});
|
||
|
if (savedEmoji) {
|
||
|
for (const key in emoji) {
|
||
|
if (emoji.hasOwnProperty(key)) {
|
||
|
savedEmoji[key] = emoji[key];
|
||
|
}
|
||
|
}
|
||
|
savedEmoji.frequency++;
|
||
|
} else {
|
||
|
_.extend(emoji, {frequency: 1});
|
||
|
this._emoji.push(emoji);
|
||
|
}
|
||
|
this._saveEmoji();
|
||
|
this.trigger();
|
||
|
}
|
||
|
|
||
|
_saveEmoji = () => {
|
||
|
DatabaseStore.inTransaction((t) => {
|
||
|
return t.persistJSONBlob(EmojiJSONBlobKey, this._emoji);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default new EmojiStore();
|