From ef43721e32c226c2c66dddd83e0c2a0ceb1d36db Mon Sep 17 00:00:00 2001 From: Hiramiya Date: Mon, 27 Aug 2018 17:29:21 +0100 Subject: Update update-avatar.ts --- src/client/app/desktop/api/update-avatar.ts | 54 ++++++++++++++++------------- 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'src/client/app/desktop/api/update-avatar.ts') diff --git a/src/client/app/desktop/api/update-avatar.ts b/src/client/app/desktop/api/update-avatar.ts index 83820f92bd..18b912d148 100644 --- a/src/client/app/desktop/api/update-avatar.ts +++ b/src/client/app/desktop/api/update-avatar.ts @@ -3,9 +3,9 @@ import { apiUrl } from '../../config'; import CropWindow from '../views/components/crop-window.vue'; import ProgressDialog from '../views/components/progress-dialog.vue'; -export default (os: OS) => (cb, file = null) => { - const fileSelected = file => { +export default (os: OS) => { + const cropImage = file => new Promise((resolve, reject) => { const w = os.new(CropWindow, { image: file, title: '%i18n:desktop.avatar-crop-title%', @@ -19,27 +19,29 @@ export default (os: OS) => (cb, file = null) => { os.api('drive/folders/find', { name: '%i18n:desktop.avatar%' - }).then(iconFolder => { - if (iconFolder.length === 0) { + }).then(avatarFolder => { + if (avatarFolder.length === 0) { os.api('drive/folders/create', { name: '%i18n:desktop.avatar%' }).then(iconFolder => { - upload(data, iconFolder); + resolve(upload(data, iconFolder)); }); } else { - upload(data, iconFolder[0]); + resolve(upload(data, avatarFolder[0])); } }); }); w.$once('skipped', () => { - set(file); + resolve(file); }); + w.$once('cancelled', reject); + document.body.appendChild(w.$el); - }; + }); - const upload = (data, folder) => { + const upload = (data, folder) => new Promise((resolve, reject) => { const dialog = os.new(ProgressDialog, { title: '%i18n:desktop.uploading-avatar%' }); @@ -52,18 +54,19 @@ export default (os: OS) => (cb, file = null) => { xhr.onload = e => { const file = JSON.parse((e.target as any).response); (dialog as any).close(); - set(file); + resolve(file); }; + xhr.onerror = reject; xhr.upload.onprogress = e => { if (e.lengthComputable) (dialog as any).update(e.loaded, e.total); }; xhr.send(data); - }; + }); - const set = file => { - os.api('i/update', { + const setAvatar = file => { + return os.api('i/update', { avatarId: file.id }).then(i => { os.store.commit('updateIKeyValue', { @@ -83,18 +86,21 @@ export default (os: OS) => (cb, file = null) => { }] }); - if (cb) cb(i); + return i; }); }; - if (file) { - fileSelected(file); - } else { - os.apis.chooseDriveFile({ - multiple: false, - title: '%fa:image% %i18n:desktop.choose-avatar%' - }).then(file => { - fileSelected(file); - }); - } + return (file = null) => { + const selectedFile = file + ? Promise.resolve(file) + : os.apis.chooseDriveFile({ + multiple: false, + title: '%fa:image% %i18n:desktop.choose-avatar%' + }); + + return selectedFile + .then(cropImage) + .then(setAvatar) + .catch(err => err && console.warn(err)); + }; }; -- cgit v1.2.3-freya From d1a956113554d3be174207d90770eb5d4875cd46 Mon Sep 17 00:00:00 2001 From: Hiramiya Date: Mon, 27 Aug 2018 20:03:28 +0100 Subject: Restrict avatar filetypes --- src/client/app/desktop/api/update-avatar.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/client/app/desktop/api/update-avatar.ts') diff --git a/src/client/app/desktop/api/update-avatar.ts b/src/client/app/desktop/api/update-avatar.ts index 18b912d148..f07dc623f2 100644 --- a/src/client/app/desktop/api/update-avatar.ts +++ b/src/client/app/desktop/api/update-avatar.ts @@ -6,6 +6,19 @@ import ProgressDialog from '../views/components/progress-dialog.vue'; export default (os: OS) => { const cropImage = file => new Promise((resolve, reject) => { + + var regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$') + if(!regex.test(file.name) ) { + os.apis.dialog({ + title: '%fa:info-circle% %i18n:desktop.invalid-filetype%', + text: null, + actions: [{ + text: '%i18n:common.got-it%' + }] + }); + reject + } + const w = os.new(CropWindow, { image: file, title: '%i18n:desktop.avatar-crop-title%', -- cgit v1.2.3-freya From 3dcdd7a5d7f873f1e31de49c8199d0aea3e97996 Mon Sep 17 00:00:00 2001 From: Nasha Hiramiya Date: Tue, 28 Aug 2018 09:44:49 +0100 Subject: Fix linting errors --- src/client/app/desktop/api/update-avatar.ts | 10 +++++----- src/client/app/desktop/api/update-banner.ts | 9 ++++----- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src/client/app/desktop/api/update-avatar.ts') diff --git a/src/client/app/desktop/api/update-avatar.ts b/src/client/app/desktop/api/update-avatar.ts index f07dc623f2..e9d92d1eb1 100644 --- a/src/client/app/desktop/api/update-avatar.ts +++ b/src/client/app/desktop/api/update-avatar.ts @@ -6,9 +6,9 @@ import ProgressDialog from '../views/components/progress-dialog.vue'; export default (os: OS) => { const cropImage = file => new Promise((resolve, reject) => { - - var regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$') - if(!regex.test(file.name) ) { + + const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$'); + if (!regex.test(file.name) ) { os.apis.dialog({ title: '%fa:info-circle% %i18n:desktop.invalid-filetype%', text: null, @@ -16,9 +16,9 @@ export default (os: OS) => { text: '%i18n:common.got-it%' }] }); - reject + reject(); } - + const w = os.new(CropWindow, { image: file, title: '%i18n:desktop.avatar-crop-title%', diff --git a/src/client/app/desktop/api/update-banner.ts b/src/client/app/desktop/api/update-banner.ts index 5af6ea88d2..e8fa35149b 100644 --- a/src/client/app/desktop/api/update-banner.ts +++ b/src/client/app/desktop/api/update-banner.ts @@ -6,10 +6,9 @@ import ProgressDialog from '../views/components/progress-dialog.vue'; export default (os: OS) => { const cropImage = file => new Promise((resolve, reject) => { - - var regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$') - if(!regex.test(file.name) ) { + const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$'); + if (!regex.test(file.name) ) { os.apis.dialog({ title: '%fa:info-circle% %i18n:desktop.invalid-filetype%', text: null, @@ -17,9 +16,9 @@ export default (os: OS) => { text: '%i18n:common.got-it%' }] }); - reject + reject(); } - + const w = os.new(CropWindow, { image: file, title: '%i18n:desktop.banner-crop-title%', -- cgit v1.2.3-freya