From a0c320b9641f93028d66332b119535ce5149f042 Mon Sep 17 00:00:00 2001
From: HFO4 <912394456@qq.com>
Date: Wed, 29 Jan 2020 14:25:14 +0800
Subject: [PATCH] Feat: set default view method in file manager

---
 models/migration.go         |  2 ++
 pkg/serializer/setting.go   | 48 ++++++++++++++++++++-----------------
 pkg/serializer/share.go     |  6 ++++-
 routers/controllers/site.go |  2 ++
 4 files changed, 35 insertions(+), 23 deletions(-)

diff --git a/models/migration.go b/models/migration.go
index 5bef34f..a09d2a6 100644
--- a/models/migration.go
+++ b/models/migration.go
@@ -164,6 +164,8 @@ Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; verti
 		{Name: "temp_path", Value: "temp", Type: "path"},
 		{Name: "score_enabled", Value: "1", Type: "score"},
 		{Name: "share_score_rate", Value: "80", Type: "score"},
+		{Name: "home_view_method", Value: "icon", Type: "view"},
+		{Name: "share_view_method", Value: "list", Type: "view"},
 	}
 
 	for _, value := range defaultSettings {
diff --git a/pkg/serializer/setting.go b/pkg/serializer/setting.go
index 46be7f6..6913b26 100644
--- a/pkg/serializer/setting.go
+++ b/pkg/serializer/setting.go
@@ -4,17 +4,19 @@ import model "github.com/HFO4/cloudreve/models"
 
 // SiteConfig 站点全局设置序列
 type SiteConfig struct {
-	SiteName       string `json:"title"`
-	LoginCaptcha   bool   `json:"loginCaptcha"`
-	RegCaptcha     bool   `json:"regCaptcha"`
-	ForgetCaptcha  bool   `json:"forgetCaptcha"`
-	EmailActive    bool   `json:"emailActive"`
-	QQLogin        bool   `json:"QQLogin"`
-	Themes         string `json:"themes"`
-	DefaultTheme   string `json:"defaultTheme"`
-	ScoreEnabled   bool   `json:"score_enabled"`
-	ShareScoreRate string `json:"share_score_rate"`
-	User           User   `json:"user"`
+	SiteName           string `json:"title"`
+	LoginCaptcha       bool   `json:"loginCaptcha"`
+	RegCaptcha         bool   `json:"regCaptcha"`
+	ForgetCaptcha      bool   `json:"forgetCaptcha"`
+	EmailActive        bool   `json:"emailActive"`
+	QQLogin            bool   `json:"QQLogin"`
+	Themes             string `json:"themes"`
+	DefaultTheme       string `json:"defaultTheme"`
+	ScoreEnabled       bool   `json:"score_enabled"`
+	ShareScoreRate     string `json:"share_score_rate"`
+	HomepageViewMethod string `json:"home_view_method"`
+	ShareViewMethod    string `json:"share_view_method"`
+	User               User   `json:"user"`
 }
 
 func checkSettingValue(setting map[string]string, key string) string {
@@ -32,16 +34,18 @@ func BuildSiteConfig(settings map[string]string, user *model.User) Response {
 	}
 	return Response{
 		Data: SiteConfig{
-			SiteName:       checkSettingValue(settings, "siteName"),
-			LoginCaptcha:   model.IsTrueVal(checkSettingValue(settings, "login_captcha")),
-			RegCaptcha:     model.IsTrueVal(checkSettingValue(settings, "reg_captcha")),
-			ForgetCaptcha:  model.IsTrueVal(checkSettingValue(settings, "forget_captcha")),
-			EmailActive:    model.IsTrueVal(checkSettingValue(settings, "email_active")),
-			QQLogin:        model.IsTrueVal(checkSettingValue(settings, "qq_login")),
-			Themes:         checkSettingValue(settings, "themes"),
-			DefaultTheme:   checkSettingValue(settings, "defaultTheme"),
-			ScoreEnabled:   model.IsTrueVal(checkSettingValue(settings, "score_enabled")),
-			ShareScoreRate: checkSettingValue(settings, "share_score_rate"),
-			User:           userRes,
+			SiteName:           checkSettingValue(settings, "siteName"),
+			LoginCaptcha:       model.IsTrueVal(checkSettingValue(settings, "login_captcha")),
+			RegCaptcha:         model.IsTrueVal(checkSettingValue(settings, "reg_captcha")),
+			ForgetCaptcha:      model.IsTrueVal(checkSettingValue(settings, "forget_captcha")),
+			EmailActive:        model.IsTrueVal(checkSettingValue(settings, "email_active")),
+			QQLogin:            model.IsTrueVal(checkSettingValue(settings, "qq_login")),
+			Themes:             checkSettingValue(settings, "themes"),
+			DefaultTheme:       checkSettingValue(settings, "defaultTheme"),
+			ScoreEnabled:       model.IsTrueVal(checkSettingValue(settings, "score_enabled")),
+			ShareScoreRate:     checkSettingValue(settings, "share_score_rate"),
+			HomepageViewMethod: checkSettingValue(settings, "home_view_method"),
+			ShareViewMethod:    checkSettingValue(settings, "share_view_method"),
+			User:               userRes,
 		}}
 }
diff --git a/pkg/serializer/share.go b/pkg/serializer/share.go
index 9eba5c3..c33e46d 100644
--- a/pkg/serializer/share.go
+++ b/pkg/serializer/share.go
@@ -61,7 +61,11 @@ func BuildShareResponse(share *model.Share, unlocked bool) Share {
 	}
 
 	if share.IsDir {
-
+		source := share.GetSourceFolder()
+		resp.Source = &shareSource{
+			Name: source.Name,
+			Size: 0,
+		}
 	} else {
 		source := share.GetSourceFile()
 		resp.Source = &shareSource{
diff --git a/routers/controllers/site.go b/routers/controllers/site.go
index cecb533..629aa4d 100644
--- a/routers/controllers/site.go
+++ b/routers/controllers/site.go
@@ -23,6 +23,8 @@ func SiteConfig(c *gin.Context) {
 		"defaultTheme",
 		"score_enabled",
 		"share_score_rate",
+		"home_view_method",
+		"share_view_method",
 	})
 
 	// 如果已登录,则同时返回用户信息