98 lines · 2.3 KB · Go
RawDownload
// Copyright 2023 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package setting import (	"sync" 	"forgejo.org/modules/log"	"forgejo.org/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]} 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"),		},	}} 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}