2020-04-05 09:20:50 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2020-04-05 09:20:50 +03:00
2016-11-04 01:45:16 +03:00
package repo
import (
"fmt"
2023-06-21 19:08:12 +03:00
"strconv"
2016-11-04 01:45:16 +03:00
2022-10-17 02:29:26 +03:00
system_model "code.gitea.io/gitea/models/system"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2024-02-04 16:29:09 +03:00
"code.gitea.io/gitea/modules/optional"
2024-02-27 10:12:22 +03:00
"code.gitea.io/gitea/services/context"
2024-02-04 16:29:09 +03:00
user_service "code.gitea.io/gitea/services/user"
2016-11-04 01:45:16 +03:00
)
2016-11-21 13:03:37 +03:00
// SetEditorconfigIfExists set editor config as render variable
2016-11-05 18:58:53 +03:00
func SetEditorconfigIfExists ( ctx * context . Context ) {
2019-11-15 13:53:20 +03:00
if ctx . Repo . Repository . IsEmpty {
return
}
2023-04-06 23:01:20 +03:00
ec , _ , err := ctx . Repo . GetEditorconfig ( )
2016-11-04 01:45:16 +03:00
if err != nil && ! git . IsErrNotExist ( err ) {
description := fmt . Sprintf ( "Error while getting .editorconfig file: %v" , err )
2022-10-17 02:29:26 +03:00
if err := system_model . CreateRepositoryNotice ( description ) ; err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "ErrCreatingReporitoryNotice" , err )
2016-11-04 01:45:16 +03:00
}
return
}
ctx . Data [ "Editorconfig" ] = ec
}
2016-11-13 05:54:04 +03:00
2016-11-21 13:03:37 +03:00
// SetDiffViewStyle set diff style as render variable
2016-11-13 05:54:04 +03:00
func SetDiffViewStyle ( ctx * context . Context ) {
2021-08-11 03:31:13 +03:00
queryStyle := ctx . FormString ( "style" )
2016-11-19 18:53:34 +03:00
2016-11-19 14:43:10 +03:00
if ! ctx . IsSigned {
2016-11-19 18:53:34 +03:00
ctx . Data [ "IsSplitStyle" ] = queryStyle == "split"
2016-11-19 14:43:10 +03:00
return
}
2016-11-13 05:54:04 +03:00
var (
2022-03-22 10:03:22 +03:00
userStyle = ctx . Doer . DiffViewStyle
2016-11-19 18:53:34 +03:00
style string
2016-11-13 05:54:04 +03:00
)
if queryStyle == "unified" || queryStyle == "split" {
style = queryStyle
} else if userStyle == "unified" || userStyle == "split" {
style = userStyle
} else {
style = "unified"
}
ctx . Data [ "IsSplitStyle" ] = style == "split"
2024-02-04 16:29:09 +03:00
opts := & user_service . UpdateOptions {
DiffViewStyle : optional . Some ( style ) ,
}
if err := user_service . UpdateUser ( ctx , ctx . Doer , opts ) ; err != nil {
ctx . ServerError ( "UpdateUser" , err )
2016-11-13 05:54:04 +03:00
}
}
2018-08-14 20:49:33 +03:00
// SetWhitespaceBehavior set whitespace behavior as render variable
func SetWhitespaceBehavior ( ctx * context . Context ) {
2022-02-08 09:15:04 +03:00
const defaultWhitespaceBehavior = "show-all"
2021-08-11 03:31:13 +03:00
whitespaceBehavior := ctx . FormString ( "whitespace" )
2018-08-14 20:49:33 +03:00
switch whitespaceBehavior {
2022-02-08 09:15:04 +03:00
case "" , "ignore-all" , "ignore-eol" , "ignore-change" :
break
2018-08-14 20:49:33 +03:00
default :
2022-02-08 09:15:04 +03:00
whitespaceBehavior = defaultWhitespaceBehavior
}
if ctx . IsSigned {
2023-09-15 09:13:19 +03:00
userWhitespaceBehavior , err := user_model . GetUserSetting ( ctx , ctx . Doer . ID , user_model . SettingsKeyDiffWhitespaceBehavior , defaultWhitespaceBehavior )
2022-02-08 09:15:04 +03:00
if err == nil {
if whitespaceBehavior == "" {
whitespaceBehavior = userWhitespaceBehavior
} else if whitespaceBehavior != userWhitespaceBehavior {
2023-09-15 09:13:19 +03:00
_ = user_model . SetUserSetting ( ctx , ctx . Doer . ID , user_model . SettingsKeyDiffWhitespaceBehavior , whitespaceBehavior )
2022-02-08 09:15:04 +03:00
}
} // else: we can ignore the error safely
}
// these behaviors are for gitdiff.GetWhitespaceFlag
if whitespaceBehavior == "" {
ctx . Data [ "WhitespaceBehavior" ] = defaultWhitespaceBehavior
} else {
ctx . Data [ "WhitespaceBehavior" ] = whitespaceBehavior
2018-08-14 20:49:33 +03:00
}
}
2023-06-21 19:08:12 +03:00
// SetShowOutdatedComments set the show outdated comments option as context variable
func SetShowOutdatedComments ( ctx * context . Context ) {
showOutdatedCommentsValue := ctx . FormString ( "show-outdated" )
if showOutdatedCommentsValue != "true" && showOutdatedCommentsValue != "false" {
// invalid or no value for this form string -> use default or stored user setting
2024-02-08 04:50:48 +03:00
showOutdatedCommentsValue = "true"
2023-06-21 19:08:12 +03:00
if ctx . IsSigned {
2024-02-08 04:50:48 +03:00
showOutdatedCommentsValue , _ = user_model . GetUserSetting ( ctx , ctx . Doer . ID , user_model . SettingsKeyShowOutdatedComments , showOutdatedCommentsValue )
2023-06-21 19:08:12 +03:00
}
2024-02-08 04:50:48 +03:00
} else if ctx . IsSigned {
2023-06-21 19:08:12 +03:00
// valid value -> update user setting if user is logged in
2024-02-08 04:50:48 +03:00
_ = user_model . SetUserSetting ( ctx , ctx . Doer . ID , user_model . SettingsKeyShowOutdatedComments , showOutdatedCommentsValue )
2023-06-21 19:08:12 +03:00
}
2024-02-08 04:50:48 +03:00
ctx . Data [ "ShowOutdatedComments" ] , _ = strconv . ParseBool ( showOutdatedCommentsValue )
2023-06-21 19:08:12 +03:00
}