From 841c8d619fceb99b4494e7d62c2cd8594f72bdf2 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Mon, 8 Jul 2019 04:17:53 +0900
Subject: [PATCH] =?UTF-8?q?=E6=97=A2=E5=AE=9A=E3=81=AE=E3=82=A2=E3=83=83?=
 =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=BC=E3=83=89=E5=85=88=E3=83=95=E3=82=A9?=
 =?UTF-8?q?=E3=83=AB=E3=83=80=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D?=
 =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  8 ++++-
 src/client/app/common/scripts/post-form.ts    |  2 +-
 .../views/components/messaging-room.form.vue  |  2 +-
 .../views/components/settings/drive.vue       | 33 +++++++++++++++++--
 .../app/common/views/widgets/post-form.vue    |  2 +-
 .../desktop/views/components/drive.folder.vue | 33 ++++++++++++++++++-
 src/client/app/store.ts                       |  1 +
 7 files changed, 74 insertions(+), 7 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 637f2235d6..6b008a3df8 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -958,7 +958,7 @@ desktop/views/components/drive.file.vue:
     unmark-as-sensitive: "閲覧注意を解除"
     copy-url: "URLをコピー"
     download: "ダウンロード"
-    else-files: "その他..."
+    else-files: "その他"
     set-as-avatar: "アイコンに設定"
     set-as-banner: "バナーに設定"
     open-in-app: "アプリで開く"
@@ -969,6 +969,7 @@ desktop/views/components/drive.file.vue:
     copied-url-to-clipboard: "URLをクリップボードにコピーしました"
 
 desktop/views/components/drive.folder.vue:
+  upload-folder: "既定アップロード先"
   unable-to-process: "操作を完了できません"
   circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。"
   unhandled-error: "不明なエラー"
@@ -980,6 +981,8 @@ desktop/views/components/drive.folder.vue:
     rename: "名前を変更"
     rename-folder: "フォルダ名の変更"
     input-new-folder-name: "新しいフォルダ名を入力してください"
+    else-folders: "その他"
+    set-as-upload-folder: "既定アップロード先に設定"
 
 desktop/views/components/drive.vue:
   search: "検索"
@@ -1143,6 +1146,9 @@ common/views/components/drive-settings.vue:
   max: "容量"
   in-use: "使用中"
   stats: "統計"
+  default-upload-folder: "既定のアップロード先フォルダ"
+  default-upload-folder-name: "フォルダ"
+  change-default-upload-folder: "フォルダを変更"
 
 common/views/components/mute-and-block.vue:
   mute-and-block: "ミュートとブロック"
diff --git a/src/client/app/common/scripts/post-form.ts b/src/client/app/common/scripts/post-form.ts
index 7cd2e7c310..1d93b4c268 100644
--- a/src/client/app/common/scripts/post-form.ts
+++ b/src/client/app/common/scripts/post-form.ts
@@ -245,7 +245,7 @@ export default (opts) => ({
 		},
 
 		upload(file) {
-			(this.$refs.uploader as any).upload(file);
+			(this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder);
 		},
 
 		onChangeUploadings(uploads) {
diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue
index 1dfb0589e4..74e30d29e8 100644
--- a/src/client/app/common/views/components/messaging-room.form.vue
+++ b/src/client/app/common/views/components/messaging-room.form.vue
@@ -158,7 +158,7 @@ export default Vue.extend({
 		},
 
 		upload(file) {
-			(this.$refs.uploader as any).upload(file);
+			(this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder);
 		},
 
 		onUploaded(file) {
diff --git a/src/client/app/common/views/components/settings/drive.vue b/src/client/app/common/views/components/settings/drive.vue
index 7bdc806ae7..9b049c98e3 100644
--- a/src/client/app/common/views/components/settings/drive.vue
+++ b/src/client/app/common/views/components/settings/drive.vue
@@ -11,6 +11,12 @@
 		<header>{{ $t('stats') }}</header>
 		<div ref="chart" style="margin-bottom: -16px; margin-left: -8px; color: #000;"></div>
 	</section>
+
+	<section>
+		<header>{{ $t('default-upload-folder') }}</header>
+		<ui-input v-model="uploadFolderName" readonly>{{ $t('default-upload-folder-name') }}</ui-input>
+		<ui-button @click="chooseUploadFolder()">{{ $t('change-default-upload-folder') }}</ui-button>
+	</section>
 </ui-card>
 </template>
 
@@ -26,7 +32,8 @@ export default Vue.extend({
 		return {
 			fetching: true,
 			usage: null,
-			capacity: null
+			capacity: null,
+			uploadFolderName: null
 		};
 	},
 
@@ -40,10 +47,25 @@ export default Vue.extend({
 					l: 0.5
 				})
 			};
-		}
+		},
+
+		uploadFolder: {
+			get() { return this.$store.state.settings.uploadFolder; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'uploadFolder', value }); }
+		},
 	},
 
 	mounted() {
+		if (this.uploadFolder == null) {
+			this.uploadFolderName = this.$t('@._settings.root');
+		} else {
+			this.$root.api('drive/folders/show', {
+				folderId: this.uploadFolder
+			}).then(folder => {
+				this.uploadFolderName = folder.name;
+			});
+		}
+	
 		this.$root.api('drive').then(info => {
 			this.capacity = info.capacity;
 			this.usage = info.usage;
@@ -152,6 +174,13 @@ export default Vue.extend({
 
 				chart.render();
 			});
+		},
+
+		chooseUploadFolder() {
+			this.$chooseDriveFolder().then(folder => {
+				this.uploadFolder = folder ? folder.id : null;
+				this.uploadFolderName = folder ? folder.name : this.$t('@._settings.root');
+			})
 		}
 	}
 });
diff --git a/src/client/app/common/views/widgets/post-form.vue b/src/client/app/common/views/widgets/post-form.vue
index e180290f95..5e577c9a43 100644
--- a/src/client/app/common/views/widgets/post-form.vue
+++ b/src/client/app/common/views/widgets/post-form.vue
@@ -122,7 +122,7 @@ export default define({
 		},
 
 		upload(file) {
-			(this.$refs.uploader as any).upload(file);
+			(this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder);
 		},
 
 		onDragover(e) {
diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue
index bc74ed4317..cf59d51b01 100644
--- a/src/client/app/desktop/views/components/drive.folder.vue
+++ b/src/client/app/desktop/views/components/drive.folder.vue
@@ -20,6 +20,9 @@
 		<template v-if="!hover"><fa :icon="['far', 'folder']" fixed-width/></template>
 		{{ folder.name }}
 	</p>
+	<p class="upload" v-if="$store.state.settings.uploadFolder == folder.id">
+		{{ $t('upload-folder') }}
+	</p>
 </div>
 </template>
 
@@ -73,6 +76,14 @@ export default Vue.extend({
 				text: this.$t('@.delete'),
 				icon: ['far', 'trash-alt'],
 				action: this.deleteFolder
+			}, null, {
+				type: 'nest',
+				text: this.$t('contextmenu.else-folders'),
+				menu: [{
+					type: 'item',
+					text: this.$t('contextmenu.set-as-upload-folder'),
+					action: this.setAsUploadFolder
+				}]
 			}], {
 				closed: () => {
 					this.isContextmenuShowing = false;
@@ -213,6 +224,13 @@ export default Vue.extend({
 		deleteFolder() {
 			this.$root.api('drive/folders/delete', {
 				folderId: this.folder.id
+			}).then(() => {
+				if (this.$store.state.settings.uploadFolder === this.folder.id) {
+					this.$store.dispatch('settings/set', {
+						key: 'uploadFolder',
+						value: null
+					});
+				}
 			}).catch(err => {
 				switch(err.id) {
 					case 'b0fc8a17-963c-405d-bfbc-859a487295e1':
@@ -229,7 +247,14 @@ export default Vue.extend({
 						});
 				}
 			});
-		}
+		},
+
+		setAsUploadFolder() {
+			this.$store.dispatch('settings/set', {
+				key: 'uploadFolder',
+				value: this.folder.id
+			});
+		},
 	}
 });
 </script>
@@ -279,4 +304,10 @@ export default Vue.extend({
 			margin-left 2px
 			text-align left
 
+	> .upload
+		margin 4px 4px
+		font-size 0.8em
+		text-align right
+		color var(--desktopDriveFolderFg)
+
 </style>
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 852d2c393d..f5c89e24f6 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -38,6 +38,7 @@ const defaultSettings = {
 	homeProfiles: {},
 	mobileHomeProfiles: {},
 	deckProfiles: {},
+	uploadFolder: null,
 };
 
 const defaultDeviceSettings = {