mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.5 KiB
100 lines
2.5 KiB
// Copyright 2023 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package setting |
|
|
|
import ( |
|
"sync" |
|
|
|
"code.gitea.io/gitea/modules/log" |
|
"code.gitea.io/gitea/modules/setting/config" |
|
) |
|
|
|
type PictureStruct struct { |
|
DisableGravatar *config.Value[bool] |
|
EnableFederatedAvatar *config.Value[bool] |
|
} |
|
|
|
type OpenWithEditorApp struct { |
|
DisplayName string |
|
OpenURL string |
|
} |
|
|
|
type OpenWithEditorAppsType []OpenWithEditorApp |
|
|
|
func (t OpenWithEditorAppsType) ToTextareaString() string { |
|
ret := "" |
|
for _, app := range t { |
|
ret += app.DisplayName + " = " + app.OpenURL + "\n" |
|
} |
|
return ret |
|
} |
|
|
|
func DefaultOpenWithEditorApps() OpenWithEditorAppsType { |
|
return OpenWithEditorAppsType{ |
|
{ |
|
DisplayName: "VS Code", |
|
OpenURL: "vscode://vscode.git/clone?url={url}", |
|
}, |
|
{ |
|
DisplayName: "VSCodium", |
|
OpenURL: "vscodium://vscode.git/clone?url={url}", |
|
}, |
|
{ |
|
DisplayName: "Intellij IDEA", |
|
OpenURL: "jetbrains://idea/checkout/git?idea.required.plugins.id=Git4Idea&checkout.repo={url}", |
|
}, |
|
} |
|
} |
|
|
|
type RepositoryStruct struct { |
|
OpenWithEditorApps *config.Value[OpenWithEditorAppsType] |
|
GitGuideRemoteName *config.Value[string] |
|
} |
|
|
|
type ConfigStruct struct { |
|
Picture *PictureStruct |
|
Repository *RepositoryStruct |
|
} |
|
|
|
var ( |
|
defaultConfig *ConfigStruct |
|
defaultConfigOnce sync.Once |
|
) |
|
|
|
func initDefaultConfig() { |
|
config.SetCfgSecKeyGetter(&cfgSecKeyGetter{}) |
|
defaultConfig = &ConfigStruct{ |
|
Picture: &PictureStruct{ |
|
DisableGravatar: config.ValueJSON[bool]("picture.disable_gravatar").WithFileConfig(config.CfgSecKey{Sec: "picture", Key: "DISABLE_GRAVATAR"}), |
|
EnableFederatedAvatar: config.ValueJSON[bool]("picture.enable_federated_avatar").WithFileConfig(config.CfgSecKey{Sec: "picture", Key: "ENABLE_FEDERATED_AVATAR"}), |
|
}, |
|
Repository: &RepositoryStruct{ |
|
OpenWithEditorApps: config.ValueJSON[OpenWithEditorAppsType]("repository.open-with.editor-apps"), |
|
GitGuideRemoteName: config.ValueJSON[string]("repository.git-guide-remote-name").WithDefault("origin"), |
|
}, |
|
} |
|
} |
|
|
|
func Config() *ConfigStruct { |
|
defaultConfigOnce.Do(initDefaultConfig) |
|
return defaultConfig |
|
} |
|
|
|
type cfgSecKeyGetter struct{} |
|
|
|
func (c cfgSecKeyGetter) GetValue(sec, key string) (v string, has bool) { |
|
if key == "" { |
|
return "", false |
|
} |
|
cfgSec, err := CfgProvider.GetSection(sec) |
|
if err != nil { |
|
log.Error("Unable to get config section: %q", sec) |
|
return "", false |
|
} |
|
cfgKey := ConfigSectionKey(cfgSec, key) |
|
if cfgKey == nil { |
|
return "", false |
|
} |
|
return cfgKey.Value(), true |
|
}
|
|
|