From b0261b4a7f8b660a725dbab537357bb02caf7547 Mon Sep 17 00:00:00 2001 From: Matthew Humphreys Date: Thu, 8 Feb 2024 21:38:06 +0100 Subject: [PATCH 1/6] added api endpoint to update user setting Signed-off-by: Matthew Humphreys --- api/users.go | 34 ++++++++++++++++++++++++++++++++++ model/user.go | 20 ++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/api/users.go b/api/users.go index 175a70eff..ad36c51c3 100644 --- a/api/users.go +++ b/api/users.go @@ -28,6 +28,7 @@ func configGinUsersRouter(router *gin.Engine, daoWrapper dao.DaoWrapper) { router.POST("/api/users/settings/seekingTime", routes.updateSeekingTime) router.POST("/api/users/settings/customSpeeds", routes.updateCustomSpeeds) router.POST("/api/users/settings/autoSkip", routes.updateAutoSkip) + router.POST("/api/users/settings/defaultMode", routes.updateDefaultMode) router.POST("/api/users/resetPassword", routes.resetPassword) @@ -755,6 +756,39 @@ func (r usersRoutes) updateAutoSkip(c *gin.Context) { } } +// updateDefaultMode updates whether the default stream mode for a user should be "beta" +func (r usersRoutes) updateDefaultMode(c *gin.Context) { + u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User + if u == nil { + _ = c.Error(tools.RequestError{ + Status: http.StatusUnauthorized, + CustomMessage: "login required", + }) + return + } + + var req struct{ Value model.DefaultModeSetting } + if err := c.BindJSON(&req); err != nil { + _ = c.Error(tools.RequestError{ + Status: http.StatusBadRequest, + CustomMessage: "can not bind body to request", + Err: err, + }) + return + } + + settingBytes, _ := json.Marshal(req.Value) + err := r.DaoWrapper.UsersDao.AddUserSetting(&model.UserSetting{UserID: u.ID, Type: model.DefaultMode, Value: string(settingBytes)}) + if err != nil { + _ = c.Error(tools.RequestError{ + Status: http.StatusInternalServerError, + CustomMessage: "can not add user setting", + Err: err, + }) + return + } +} + func (r usersRoutes) exportPersonalData(c *gin.Context) { var resp personalData u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User diff --git a/model/user.go b/model/user.go index 5b30425b8..e0e6fc25f 100755 --- a/model/user.go +++ b/model/user.go @@ -59,6 +59,7 @@ const ( SeekingTime UserDefinedSpeeds AutoSkip + DefaultMode ) type UserSetting struct { @@ -218,6 +219,25 @@ func (u User) GetAutoSkipEnabled() (AutoSkipSetting, error) { return AutoSkipSetting{Enabled: false}, nil } +// DefaultModeSetting wraps whether the default stream mode for the user is beta +type DefaultModeSetting struct { + Beta bool `json:"beta"` +} + +func (u User) GetDefaultMode() (DefaultModeSetting, error) { + for _, setting := range u.Settings { + if setting.Type == DefaultMode { + var m DefaultModeSetting + err := json.Unmarshal([]byte(setting.Value), &m) + if err != nil { + return DefaultModeSetting{Beta: false}, err + } + return m, nil + } + } + return DefaultModeSetting{Beta: false}, nil +} + type argonParams struct { memory uint32 iterations uint32 From 90cb3c1246650ce98263ccc443e64693b34b6625 Mon Sep 17 00:00:00 2001 From: Matthew Humphreys Date: Thu, 8 Feb 2024 21:47:45 +0100 Subject: [PATCH 2/6] added frontend components to update user setting Signed-off-by: Matthew Humphreys --- web/template/user-settings.gohtml | 15 ++++++++++++++- web/ts/user-settings.ts | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/web/template/user-settings.gohtml b/web/template/user-settings.gohtml index b3857a061..5f98a7acb 100644 --- a/web/template/user-settings.gohtml +++ b/web/template/user-settings.gohtml @@ -150,7 +150,20 @@ peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600 dark:peer-checked:bg-indigo-600"> - Skip + + + +
+

Always use beta stream when available

+ +
diff --git a/web/ts/user-settings.ts b/web/ts/user-settings.ts index 2180ca783..d466ee3bd 100644 --- a/web/ts/user-settings.ts +++ b/web/ts/user-settings.ts @@ -10,6 +10,7 @@ export enum UserSetting { SeekingTime = "seekingTime", CustomSpeeds = "customSpeeds", AutoSkip = "autoSkip", + DefaultMode = "defaultMode", } export function updatePreference(t: UserSetting, value: string | boolean | number[]): Promise { From e41b3df879ec948975d777bd04e176e1fa6598d2 Mon Sep 17 00:00:00 2001 From: Matthew Humphreys Date: Thu, 8 Feb 2024 22:02:00 +0100 Subject: [PATCH 3/6] watchPageData set according to user setting Signed-off-by: Matthew Humphreys --- web/watch.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/watch.go b/web/watch.go index f866d0f10..08ed26005 100644 --- a/web/watch.go +++ b/web/watch.go @@ -110,11 +110,18 @@ func (r mainRoutes) WatchPage(c *gin.Context) { c.Redirect(http.StatusFound, strings.Split(c.Request.RequestURI, "?")[0]) return } - if _, dvr := c.GetQuery("dvr"); dvr { + // Check if user wants to use beta stream mode + mode, err := tumLiveContext.User.GetDefaultMode() + if err != nil { + logger.Error("Couldn't decode user setting", "err", err) + } + + if _, dvr := c.GetQuery("dvr"); dvr || mode.Beta { data.DVR = "?dvr" } else { data.DVR = "" } + data.CutOffLength = api.CutOffLength if strings.HasPrefix(data.Version, "unit-") { data.Description = data.Unit.GetDescriptionHTML() From 4fb87f2a6bed437a9185ccf42d83263352703138 Mon Sep 17 00:00:00 2001 From: Matthew Humphreys Date: Fri, 9 Feb 2024 19:56:43 +0100 Subject: [PATCH 4/6] removed some duplicate code Signed-off-by: Matthew Humphreys --- api/users.go | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/api/users.go b/api/users.go index ad36c51c3..8efe73d42 100644 --- a/api/users.go +++ b/api/users.go @@ -726,14 +726,7 @@ func (r usersRoutes) updateSeekingTime(c *gin.Context) { } func (r usersRoutes) updateAutoSkip(c *gin.Context) { - u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User - if u == nil { - _ = c.Error(tools.RequestError{ - Status: http.StatusUnauthorized, - CustomMessage: "login required", - }) - return - } + u := getUserFromContext(c) var req struct{ Value model.AutoSkipSetting } if err := c.BindJSON(&req); err != nil { _ = c.Error(tools.RequestError{ @@ -758,15 +751,7 @@ func (r usersRoutes) updateAutoSkip(c *gin.Context) { // updateDefaultMode updates whether the default stream mode for a user should be "beta" func (r usersRoutes) updateDefaultMode(c *gin.Context) { - u := c.MustGet("TUMLiveContext").(tools.TUMLiveContext).User - if u == nil { - _ = c.Error(tools.RequestError{ - Status: http.StatusUnauthorized, - CustomMessage: "login required", - }) - return - } - + u := getUserFromContext(c) var req struct{ Value model.DefaultModeSetting } if err := c.BindJSON(&req); err != nil { _ = c.Error(tools.RequestError{ From 1ad3ca8bbefae72dd7ecc2efdae226661a1f9180 Mon Sep 17 00:00:00 2001 From: Matthew Humphreys Date: Fri, 9 Feb 2024 19:59:38 +0100 Subject: [PATCH 5/6] consistent spelling Signed-off-by: Matthew Humphreys --- web/template/user-settings.gohtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/template/user-settings.gohtml b/web/template/user-settings.gohtml index 5f98a7acb..fcf662ff8 100644 --- a/web/template/user-settings.gohtml +++ b/web/template/user-settings.gohtml @@ -154,7 +154,7 @@
-

Always use beta stream when available

+

Always use beta Stream when Available