diff --git a/src/components/app/MessageTemplate.vue b/src/components/app/MessageTemplate.vue index 121f55f..ef931a2 100644 --- a/src/components/app/MessageTemplate.vue +++ b/src/components/app/MessageTemplate.vue @@ -1,5 +1,9 @@ @@ -67,14 +50,13 @@ export default { components: {}, data() { return { - alert: { - content: "", - show: false - }, domain: config.domain + "/files/" }; }, methods: { + errorBox(msg) { + return this.$store.dispatch("setGenericMessage", msg); + }, keyDownEvent(event) { const keyCode = event.keyCode; if (keyCode == 13) { @@ -83,61 +65,66 @@ export default { }, async blurEvent(emojiID, event) { // send put request - const { ok, error } = await customEmoji.put({ + const { ok } = await customEmoji.put({ emojiID, name: event.target.value }); if (!ok) { - this.alert.content = - "Upload failed - " + error.response.data.message || - "Something weng wrong. Try again later."; - return (this.alert.show = true); + this.errorBox("Something weng wrong. Try again later."); + return; } }, - onProgress(percent) { - //update vue - console.log("emoji upload progress: ", percent); - }, async emojiBrowse(event) { const file = event.target.files[0]; event.target.value = ""; const allowedFormats = [".png", ".jpeg", ".gif", ".jpg"]; if (!allowedFormats.includes(path.extname(file.name).toLowerCase())) { - this.alert.content = "Upload failed - Unsupported image file."; - return (this.alert.show = true); - } else if (file.size >= 1048576) { - // 1048576 = 1mb - this.alert.content = - "Upload failed - Image size must be less than 1 megabytes."; - return (this.alert.show = true); + this.errorBox("Upload failed - Unsupported image file."); + return; + } else if (file.size >= 3048576) { + // 3048576 = 3mb + this.errorBox( + "Upload failed - Image size must be less than 1 megabytes." + ); + return; } - const formData = new FormData(); - //check if emoji name is already used by twemoji - const fileName = path.basename(file.name, path.extname(file.name)); - const emojiExists = emojiParser.allEmojis.find(e => - e.shortcodes.find(ee => ee === fileName.toLowerCase()) - ); - if (emojiExists) { - formData.append( - "emoji", - file, - `${fileName.substring(0, 28)}-1${path.extname(file.name)}` + let reader = new FileReader(); + reader.readAsDataURL(file); + const _this = this; + reader.onload = async function() { + //check if emoji name is already used by twemoji + const fileName = path.basename(file.name, path.extname(file.name)); + + const emojiExists = emojiParser.allEmojis.find(e => + e.shortcodes.find(ee => ee === fileName.toLowerCase()) ); - } else { - formData.append( - "emoji", - file, - `${fileName.substring(0, 30)}${path.extname(file.name)}` - ); - } - const { ok, error } = await customEmoji.post(formData, this.onProgress); - if (!ok) { - this.alert.content = - "Upload failed - " + error.response.data.message || - "Something weng wrong. Try again later."; - return (this.alert.show = true); - } + + let finalEmojiName = () => { + if (emojiExists) { + return `${fileName.substring(0, 28)}-1`; + } else { + return fileName.substring(0, 30); + } + }; + + const { ok, error } = await customEmoji.post({ + name: finalEmojiName(), + avatar: reader.result + }); + if (!ok) { + if (error.response && error.response.data) { + _this.errorBox(error.response.data.message); + } else { + _this.errorBox("Something went wrong. Try again later."); + } + return; + } + }; + reader.onerror = function(error) { + console.log("Error: ", error); + _this.errorBox("Something went wrong. Try again later."); + }; }, addEmojiBtn() { if (!this.GDriveLinked) { @@ -149,17 +136,19 @@ export default { this.$refs.emojiBrowser.click(); }, async removeEmoji(emojiID) { - const { ok, error } = await customEmoji.delete(emojiID); + const { ok } = await customEmoji.delete(emojiID); if (!ok) { - this.alert.content = - "Upload failed - " + error.response.data.message || - "Something weng wrong. Try again later."; - return (this.alert.show = true); + this.errorBox("Something weng wrong. Try again later."); + return; } } }, computed: { - ...mapState("settingsModule", ["GDriveLinked", "customEmojis"]) + ...mapState("settingsModule", ["GDriveLinked"]), + customEmojis() { + const customEmojis = [...this.$store.state.settingsModule.customEmojis]; + return customEmojis ? customEmojis.reverse() : []; + } } }; @@ -219,6 +208,7 @@ input:focus { width: 100%; height: 100%; margin-bottom: 20px; + overflow: hidden; } .emojis-list { diff --git a/src/services/customEmoji.js b/src/services/customEmoji.js index 49e026f..b28020b 100644 --- a/src/services/customEmoji.js +++ b/src/services/customEmoji.js @@ -1,21 +1,8 @@ import { instance, wrapper } from "./Api"; export default { - post(data, onProgress) { - const url = `/settings/emoji`; - let config = { - onUploadProgress(progressEvent) { - var percentCompleted = Math.round( - (progressEvent.loaded * 100) / progressEvent.total - ); - - // execute the callback - if (onProgress) onProgress(percentCompleted); - - return percentCompleted; - } - }; - return wrapper(instance().post(url, data, config)); + post(data) { + return wrapper(instance().post("/settings/emoji", data)); }, delete(emojiID) { return wrapper(instance().delete(`/settings/emoji`, { data: { emojiID } }));