Skip to content

Commit

Permalink
1032 option to make beta default mode (#1328)
Browse files Browse the repository at this point in the history
* added api endpoint to update user setting

Signed-off-by: Matthew Humphreys <[email protected]>

* added frontend components to update user setting

Signed-off-by: Matthew Humphreys <[email protected]>

* watchPageData set according to user setting

Signed-off-by: Matthew Humphreys <[email protected]>

* removed some duplicate code

Signed-off-by: Matthew Humphreys <[email protected]>

* consistent spelling

Signed-off-by: Matthew Humphreys <[email protected]>

* make sure user is signed in

Signed-off-by: Matthew Humphreys <[email protected]>

---------

Signed-off-by: Matthew Humphreys <[email protected]>
  • Loading branch information
Mjaethers authored Apr 24, 2024
1 parent df9db01 commit 759d9de
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 3 deletions.
29 changes: 28 additions & 1 deletion api/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -729,10 +730,11 @@ func (r usersRoutes) updateAutoSkip(c *gin.Context) {
if u == nil {
_ = c.Error(tools.RequestError{
Status: http.StatusUnauthorized,
CustomMessage: "login required",
CustomMessage: "login required for updating user settings",
})
return
}

var req struct{ Value model.AutoSkipSetting }
if err := c.BindJSON(&req); err != nil {
_ = c.Error(tools.RequestError{
Expand All @@ -755,6 +757,31 @@ 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 := getUserFromContext(c)
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
Expand Down
20 changes: 20 additions & 0 deletions model/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const (
SeekingTime
UserDefinedSpeeds
AutoSkip
DefaultMode
)

type UserSetting struct {
Expand Down Expand Up @@ -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
Expand Down
15 changes: 14 additions & 1 deletion web/template/user-settings.gohtml
Original file line number Diff line number Diff line change
Expand Up @@ -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"></div>
<span class="ml-3 text-sm font-medium text-3">Skip</span>
</label>
</span>
</section>
<section x-data="{ defaultMode: {{toJson .TUMLiveContext.User.GetDefaultMode}} }">
<h2>Always use beta Stream when Available</h2>
<span class="mr-2">
<label class="relative inline-flex items-center cursor-pointer">
<input :checked="defaultMode.beta" type="checkbox" x-model="defaultMode.beta" class="sr-only peer"
@change="global.updatePreference(global.UserSetting.DefaultMode, defaultMode)"/>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-600
dark:peer-focus:ring-indigo-600 rounded-full peer dark:bg-gray-600 peer-checked:after:translate-x-full
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"></div>
</label>
</span>
</section>
Expand Down
1 change: 1 addition & 0 deletions web/ts/user-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string> {
Expand Down
9 changes: 8 additions & 1 deletion web/watch.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit 759d9de

Please sign in to comment.