From f9180811680aa66706d722384cba4d82d7a2e52c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 6 Jun 2018 02:48:26 +0900
Subject: [PATCH] wip

---
 .../app/desktop/views/components/home.vue     | 52 +++++++++++++++++++
 src/client/app/store.ts                       | 15 ++++++
 src/server/api/private/signup.ts              | 48 -----------------
 3 files changed, 67 insertions(+), 48 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index 636ed871c7..d3ba84a4b3 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -76,6 +76,50 @@ import Vue from 'vue';
 import * as XDraggable from 'vuedraggable';
 import * as uuid from 'uuid';
 
+const defaultDesktopHomeWidgets = {
+	left: [
+		'profile',
+		'calendar',
+		'activity',
+		'rss',
+		'trends',
+		'photo-stream',
+		'version'
+	],
+	right: [
+		'broadcast',
+		'notifications',
+		'users',
+		'polls',
+		'server',
+		'donation',
+		'nav',
+		'tips'
+	]
+};
+
+//#region Construct home data
+const _defaultDesktopHomeWidgets = [];
+
+defaultDesktopHomeWidgets.left.forEach(widget => {
+	_defaultDesktopHomeWidgets.push({
+		name: widget,
+		id: uuid(),
+		place: 'left',
+		data: {}
+	});
+});
+
+defaultDesktopHomeWidgets.right.forEach(widget => {
+	_defaultDesktopHomeWidgets.push({
+		name: widget,
+		id: uuid(),
+		place: 'right',
+		data: {}
+	});
+});
+//#endregion
+
 export default Vue.extend({
 	components: {
 		XDraggable
@@ -119,6 +163,14 @@ export default Vue.extend({
 		}
 	},
 
+	created() {
+		if (this.$store.state.i.clientSettings == null || this.$store.state.i.clientSettings.home == null) {
+			this.api('i/update_home', {
+				home: _defaultDesktopHomeWidgets
+			});
+		}
+	},
+
 	mounted() {
 		this.connection = (this as any).os.stream.getConnection();
 		this.connectionId = (this as any).os.stream.use();
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 905ec0501c..00cae3b857 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -7,6 +7,20 @@ import { hostname } from './config';
 const defaultSettings = {
 	home: [],
 	mobileHome: [],
+	deck: {
+		columns: [/*{
+			type: 'widgets',
+			widgets: []
+		}, */{
+			type: 'home'
+		}, {
+			type: 'notifications'
+		}, {
+			type: 'local'
+		}, {
+			type: 'global'
+		}]
+	},
 	fetchOnScroll: true,
 	showMaps: true,
 	showPostFormOnTopOfTl: false,
@@ -156,6 +170,7 @@ export default (os: MiOS) => new Vuex.Store({
 
 			actions: {
 				merge(ctx, settings) {
+					if (settings == null) return;
 					Object.entries(settings).forEach(([key, value]) => {
 						ctx.commit('set', { key, value });
 					});
diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts
index cf51dec4d2..14d4b8a3fc 100644
--- a/src/server/api/private/signup.ts
+++ b/src/server/api/private/signup.ts
@@ -1,4 +1,3 @@
-import * as uuid from 'uuid';
 import * as Koa from 'koa';
 import * as bcrypt from 'bcryptjs';
 import { generate as generateKeypair } from '../../../crypto_key';
@@ -11,28 +10,6 @@ recaptcha.init({
 	secret_key: config.recaptcha.secret_key
 });
 
-const home = {
-	left: [
-		'profile',
-		'calendar',
-		'activity',
-		'rss',
-		'trends',
-		'photo-stream',
-		'version'
-	],
-	right: [
-		'broadcast',
-		'notifications',
-		'users',
-		'polls',
-		'server',
-		'donation',
-		'nav',
-		'tips'
-	]
-};
-
 export default async (ctx: Koa.Context) => {
 	// Verify recaptcha
 	// ただしテスト時はこの機構は障害となるため無効にする
@@ -82,28 +59,6 @@ export default async (ctx: Koa.Context) => {
 	// Generate secret
 	const secret = generateUserToken();
 
-	//#region Construct home data
-	const homeData = [];
-
-	home.left.forEach(widget => {
-		homeData.push({
-			name: widget,
-			id: uuid(),
-			place: 'left',
-			data: {}
-		});
-	});
-
-	home.right.forEach(widget => {
-		homeData.push({
-			name: widget,
-			id: uuid(),
-			place: 'right',
-			data: {}
-		});
-	});
-	//#endregion
-
 	// Create account
 	const account: IUser = await User.insert({
 		avatarId: null,
@@ -135,9 +90,6 @@ export default async (ctx: Koa.Context) => {
 		},
 		settings: {
 			autoWatch: true
-		},
-		clientSettings: {
-			home: homeData
 		}
 	});