Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1032 option to make beta default mode #1328

Merged
merged 6 commits into from
Apr 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 {
Mjaethers marked this conversation as resolved.
Show resolved Hide resolved
_ = 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
Loading