summaryrefslogtreecommitdiff
path: root/src/web/app/desktop/scripts/update-avatar.ls
blob: 351e54fe51c3488014550c5286c1401eb931f2cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Update Avatar
#================================

riot = require 'riot'
dialog = require './dialog.ls'
api = require '../../common/scripts/api'

module.exports = (I, cb, file = null) ~>

	@file-selected = (file) ~>
		cropper = document.body.append-child document.create-element \mk-crop-window
		cropper = riot.mount cropper, do
			file: file
			title: 'アバターとして表示する部分を選択'
			aspect-ratio: 1 / 1
		.0
		cropper.on \cropped (blob) ~>
			data = new FormData!
			data.append \i I.token
			data.append \file blob, file.name + '.cropped.png'
			api I, \drive/folders/find do
				name: 'アイコン'
			.then (icon-folder) ~>
				if icon-folder.length == 0
					api I, \drive/folders/create do
						name: 'アイコン'
					.then (icon-folder) ~>
						@uplaod data, icon-folder
				else
					@uplaod data, icon-folder.0
		cropper.on \skiped ~>
			@set file

	@uplaod = (data, folder) ~>

		progress = document.body.append-child document.create-element \mk-progress-dialog
		progress = riot.mount progress, do
			title: '新しいアバターをアップロードしています'
		.0

		if folder?
			data.append \folder_id folder.id

		xhr = new XMLHttpRequest!
		xhr.open \POST CONFIG.api.url + \/drive/files/create true
		xhr.onload = (e) ~>
			file = JSON.parse e.target.response
			progress.close!
			@set file

		xhr.upload.onprogress = (e) ~>
			if e.length-computable
				progress.update-progress e.loaded, e.total

		xhr.send data

	@set = (file) ~>
		api I, \i/update do
			avatar_id: file.id
		.then (i) ~>
			dialog do
				'<i class="fa fa-info-circle"></i>アバターを更新しました'
				'新しいアバターが反映されるまで時間がかかる場合があります。'
				[
					text: \わかった
				]
			if cb? then cb i
		.catch (err) ~>
			console.error err
			#@opts.ui.trigger \notification 'Error!'

	if file?
		@file-selected file
	else
		browser = document.body.append-child document.create-element \mk-select-file-from-drive-window
		browser = riot.mount browser, do
			multiple: false
			title: '<i class="fa fa-picture-o"></i>アバターにする画像を選択'
		.0
		browser.one \selected (file) ~>
			@file-selected file