2022-06-27 15:51:02 +08:00
package data
import (
2025-03-15 23:28:40 +08:00
"strconv"
2022-08-07 13:09:59 +08:00
"github.com/alist-org/alist/v3/cmd/flags"
2022-06-27 15:51:02 +08:00
"github.com/alist-org/alist/v3/internal/conf"
2024-12-25 21:08:22 +08:00
"github.com/alist-org/alist/v3/internal/db"
2022-06-27 15:51:02 +08:00
"github.com/alist-org/alist/v3/internal/model"
2023-11-06 16:56:55 +08:00
"github.com/alist-org/alist/v3/internal/offline_download/tool"
2022-12-18 19:51:20 +08:00
"github.com/alist-org/alist/v3/internal/op"
2022-12-30 00:24:10 +08:00
"github.com/alist-org/alist/v3/pkg/utils"
2022-06-28 14:18:10 +08:00
"github.com/alist-org/alist/v3/pkg/utils/random"
2022-06-27 15:51:02 +08:00
"github.com/pkg/errors"
"gorm.io/gorm"
)
2022-06-28 14:18:10 +08:00
var initialSettingItems [ ] model . SettingItem
2022-06-27 15:51:02 +08:00
func initSettings ( ) {
2022-08-27 18:35:05 +08:00
InitialSettings ( )
2022-06-27 15:51:02 +08:00
// check deprecated
2022-12-18 19:51:20 +08:00
settings , err := op . GetSettingItems ( )
2022-06-27 15:51:02 +08:00
if err != nil {
2022-12-30 00:24:10 +08:00
utils . Log . Fatalf ( "failed get settings: %+v" , err )
2022-06-27 15:51:02 +08:00
}
2024-12-25 21:08:22 +08:00
settingMap := map [ string ] * model . SettingItem { }
for _ , v := range settings {
if ! isActive ( v . Key ) && v . Flag != model . DEPRECATED {
v . Flag = model . DEPRECATED
err = op . SaveSettingItem ( & v )
2022-12-18 19:51:20 +08:00
if err != nil {
2022-12-30 00:24:10 +08:00
utils . Log . Fatalf ( "failed save setting: %+v" , err )
2022-12-18 19:51:20 +08:00
}
2022-06-27 15:51:02 +08:00
}
2024-12-25 21:08:22 +08:00
settingMap [ v . Key ] = & v
2022-06-27 15:51:02 +08:00
}
2022-12-18 19:51:20 +08:00
// create or save setting
2024-12-25 21:08:22 +08:00
save := false
2022-07-23 20:42:12 +08:00
for i := range initialSettingItems {
2022-12-18 19:51:20 +08:00
item := & initialSettingItems [ i ]
2024-08-03 13:11:09 +08:00
item . Index = uint ( i )
2024-03-05 16:29:26 +08:00
if item . PreDefault == "" {
item . PreDefault = item . Value
}
2022-12-18 19:51:20 +08:00
// err
2024-12-25 21:08:22 +08:00
stored , ok := settingMap [ item . Key ]
if ! ok {
stored , err = op . GetSettingItemByKey ( item . Key )
if err != nil && ! errors . Is ( err , gorm . ErrRecordNotFound ) {
utils . Log . Fatalf ( "failed get setting: %+v" , err )
continue
}
2022-12-18 19:51:20 +08:00
}
2024-03-05 16:29:26 +08:00
if stored != nil && item . Key != conf . VERSION && stored . Value != item . PreDefault {
2022-12-18 19:51:20 +08:00
item . Value = stored . Value
}
2024-12-25 21:08:22 +08:00
_ , err = op . HandleSettingItemHook ( item )
if err != nil {
utils . Log . Errorf ( "failed to execute hook on %s: %+v" , item . Key , err )
continue
}
// save
2022-12-18 19:51:20 +08:00
if stored == nil || * item != * stored {
2024-12-25 21:08:22 +08:00
save = true
}
}
if save {
err = db . SaveSettingItems ( initialSettingItems )
if err != nil {
utils . Log . Fatalf ( "failed save setting: %+v" , err )
2022-12-30 00:24:10 +08:00
} else {
2024-12-25 21:08:22 +08:00
op . SettingCacheUpdate ( )
2022-06-27 15:51:02 +08:00
}
}
}
func isActive ( key string ) bool {
for _ , item := range initialSettingItems {
if item . Key == key {
return true
}
}
return false
}
2022-06-28 14:18:10 +08:00
2022-08-27 18:35:05 +08:00
func InitialSettings ( ) [ ] model . SettingItem {
2022-06-28 14:18:10 +08:00
var token string
2022-08-07 13:09:59 +08:00
if flags . Dev {
2022-06-28 14:18:10 +08:00
token = "dev_token"
} else {
token = random . Token ( )
}
initialSettingItems = [ ] model . SettingItem {
// site settings
2022-06-29 16:08:55 +08:00
{ Key : conf . VERSION , Value : conf . Version , Type : conf . TypeString , Group : model . SITE , Flag : model . READONLY } ,
2022-09-25 17:57:54 +08:00
//{Key: conf.ApiUrl, Value: "", Type: conf.TypeString, Group: model.SITE},
//{Key: conf.BasePath, Value: "", Type: conf.TypeString, Group: model.SITE},
2022-06-29 16:08:55 +08:00
{ Key : conf . SiteTitle , Value : "AList" , Type : conf . TypeString , Group : model . SITE } ,
2022-08-30 16:13:01 +08:00
{ Key : conf . Announcement , Value : "### repo\nhttps://github.com/alist-org/alist" , Type : conf . TypeText , Group : model . SITE } ,
2022-08-27 23:07:48 +08:00
{ Key : "pagination_type" , Value : "all" , Type : conf . TypeSelect , Options : "all,pagination,load_more,auto_load_more" , Group : model . SITE } ,
{ Key : "default_page_size" , Value : "30" , Type : conf . TypeNumber , Group : model . SITE } ,
2022-12-10 19:03:09 +08:00
{ Key : conf . AllowIndexed , Value : "false" , Type : conf . TypeBool , Group : model . SITE } ,
2023-04-27 16:33:01 +08:00
{ Key : conf . AllowMounted , Value : "true" , Type : conf . TypeBool , Group : model . SITE } ,
2023-05-12 16:50:48 +08:00
{ Key : conf . RobotsTxt , Value : "User-agent: *\nAllow: /" , Type : conf . TypeText , Group : model . SITE } ,
2022-06-28 14:18:10 +08:00
// style settings
2022-09-25 21:20:32 +08:00
{ Key : conf . Logo , Value : "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg" , Type : conf . TypeText , Group : model . STYLE } ,
2022-07-12 14:03:03 +08:00
{ Key : conf . Favicon , Value : "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg" , Type : conf . TypeString , Group : model . STYLE } ,
2022-08-13 15:11:46 +08:00
{ Key : conf . MainColor , Value : "#1890ff" , Type : conf . TypeString , Group : model . STYLE } ,
2022-08-09 18:06:04 +08:00
{ Key : "home_icon" , Value : "🏠" , Type : conf . TypeString , Group : model . STYLE } ,
2022-08-30 19:34:11 +08:00
{ Key : "home_container" , Value : "max_980px" , Type : conf . TypeSelect , Options : "max_980px,hope_container" , Group : model . STYLE } ,
2022-12-20 20:04:37 +08:00
{ Key : "settings_layout" , Value : "list" , Type : conf . TypeSelect , Options : "list,responsive" , Group : model . STYLE } ,
2022-06-28 14:18:10 +08:00
// preview settings
2022-06-29 16:08:55 +08:00
{ Key : conf . TextTypes , Value : "txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp,tsx,vtt,srt,ass,rs,lrc" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2023-01-18 10:50:28 +08:00
{ Key : conf . AudioTypes , Value : "mp3,flac,ogg,m4a,wav,opus,wma" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2024-03-04 14:23:44 +08:00
{ Key : conf . VideoTypes , Value : "mp4,mkv,avi,mov,rmvb,webm,flv,m3u8" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2022-08-08 00:51:05 +08:00
{ Key : conf . ImageTypes , Value : "jpg,tiff,jpeg,png,gif,bmp,svg,ico,swf,webp" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2022-08-23 16:50:54 +08:00
//{Key: conf.OfficeTypes, Value: "doc,docx,xls,xlsx,ppt,pptx", Type: conf.TypeText, Group: model.PREVIEW, Flag: model.PRIVATE},
2025-02-09 18:33:38 +08:00
{ Key : conf . ProxyTypes , Value : "m3u8,url" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2022-12-20 20:07:19 +08:00
{ Key : conf . ProxyIgnoreHeaders , Value : "authorization,referer" , Type : conf . TypeText , Group : model . PREVIEW , Flag : model . PRIVATE } ,
2022-08-18 11:18:11 +08:00
{ Key : "external_previews" , Value : ` { } ` , Type : conf . TypeText , Group : model . PREVIEW } ,
2022-08-23 16:50:54 +08:00
{ Key : "iframe_previews" , Value : ` {
"doc,docx,xls,xlsx,ppt,pptx" : {
2022-08-31 17:32:57 +08:00
"Microsoft" : "https://view.officeapps.live.com/op/view.aspx?src=$e_url" ,
"Google" : "https://docs.google.com/gview?url=$e_url&embedded=true"
2022-08-23 16:50:54 +08:00
} ,
"pdf" : {
2022-09-11 18:27:28 +08:00
"PDF.js" : "https://alist-org.github.io/pdf.js/web/viewer.html?file=$e_url"
2022-12-19 13:34:06 +08:00
} ,
"epub" : {
2023-02-20 16:08:10 +08:00
"EPUB.js" : "https://alist-org.github.io/static/epub.js/viewer.html?url=$e_url"
2022-08-23 16:50:54 +08:00
}
2022-08-08 13:03:34 +08:00
} ` , Type : conf . TypeText , Group : model . PREVIEW } ,
2022-08-23 16:50:54 +08:00
// {Key: conf.OfficeViewers, Value: `{
// "Microsoft":"https://view.officeapps.live.com/op/view.aspx?src=$url",
// "Google":"https://docs.google.com/gview?url=$url&embedded=true",
//}`, Type: conf.TypeText, Group: model.PREVIEW},
// {Key: conf.PdfViewers, Value: `{
// "pdf.js":"https://alist-org.github.io/pdf.js/web/viewer.html?file=$url"
//}`, Type: conf.TypeText, Group: model.PREVIEW},
2022-09-07 19:18:19 +08:00
{ Key : "audio_cover" , Value : "https://jsd.nn.ci/gh/alist-org/logo@main/logo.svg" , Type : conf . TypeString , Group : model . PREVIEW } ,
2022-06-29 16:08:55 +08:00
{ Key : conf . AudioAutoplay , Value : "true" , Type : conf . TypeBool , Group : model . PREVIEW } ,
{ Key : conf . VideoAutoplay , Value : "true" , Type : conf . TypeBool , Group : model . PREVIEW } ,
2025-02-16 12:24:10 +08:00
{ Key : conf . PreviewArchivesByDefault , Value : "true" , Type : conf . TypeBool , Group : model . PREVIEW } ,
2025-03-15 23:28:40 +08:00
{ Key : conf . ReadMeAutoRender , Value : "true" , Type : conf . TypeBool , Group : model . PREVIEW } ,
{ Key : conf . FilterReadMeScripts , Value : "true" , Type : conf . TypeBool , Group : model . PREVIEW } ,
2022-06-28 14:18:10 +08:00
// global settings
2022-06-29 16:08:55 +08:00
{ Key : conf . HideFiles , Value : "/\\/README.md/i" , Type : conf . TypeText , Group : model . GLOBAL } ,
2022-08-27 18:35:05 +08:00
{ Key : "package_download" , Value : "true" , Type : conf . TypeBool , Group : model . GLOBAL } ,
2024-07-11 18:13:22 +08:00
{ Key : conf . CustomizeHead , PreDefault : ` <script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=String.prototype.replaceAll"></script> ` , Type : conf . TypeText , Group : model . GLOBAL , Flag : model . PRIVATE } ,
2022-06-29 16:08:55 +08:00
{ Key : conf . CustomizeBody , Type : conf . TypeText , Group : model . GLOBAL , Flag : model . PRIVATE } ,
{ Key : conf . LinkExpiration , Value : "0" , Type : conf . TypeNumber , Group : model . GLOBAL , Flag : model . PRIVATE } ,
2023-11-25 20:27:23 +08:00
{ Key : conf . SignAll , Value : "true" , Type : conf . TypeBool , Group : model . GLOBAL , Flag : model . PRIVATE } ,
2022-08-08 16:29:56 +08:00
{ Key : conf . PrivacyRegs , Value : ` ( ? : ( ? : \ d | [ 1 - 9 ] \ d | 1 \ d \ d | 2 [ 0 - 4 ] \ d | 25 [ 0 - 5 ] ) \ . ) { 3 } ( ? : \ d | [ 1 - 9 ] \ d | 1 \ d \ d | 2 [ 0 - 4 ] \ d | 25 [ 0 - 5 ] )
2022-09-03 19:48:11 +08:00
( [ [ : xdigit : ] ] { 1 , 4 } ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 7 } | : : | : ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 1 , 6 } | [ [ : xdigit : ] ] { 1 , 4 } : ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 1 , 5 } | ( ? : [ [ : xdigit : ] ] { 1 , 4 } : ) { 2 } ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 1 , 4 } | ( ? : [ [ : xdigit : ] ] { 1 , 4 } : ) { 3 } ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 1 , 3 } | ( ? : [ [ : xdigit : ] ] { 1 , 4 } : ) { 4 } ( ? : : [ [ : xdigit : ] ] { 1 , 4 } ) { 1 , 2 } | ( ? : [ [ : xdigit : ] ] { 1 , 4 } : ) { 5 } : [ [ : xdigit : ] ] { 1 , 4 } | ( ? : [ [ : xdigit : ] ] { 1 , 4 } : ) { 1 , 6 } : )
( ? U ) access_token = ( . * ) & ` ,
2022-08-08 12:52:54 +08:00
Type : conf . TypeText , Group : model . GLOBAL , Flag : model . PRIVATE } ,
2025-06-12 21:29:43 +08:00
{ Key : conf . OcrApi , Value : "https://api.nn.ci/ocr/file/json" , Type : conf . TypeString , Group : model . GLOBAL } , // TODO: This can be replace by a community-hosted endpoint, see https://github.com/xhofe/ocr_api_server
2022-11-22 15:54:18 +08:00
{ Key : conf . FilenameCharMapping , Value : ` { "/": "|"} ` , Type : conf . TypeText , Group : model . GLOBAL } ,
2023-02-07 16:39:14 +08:00
{ Key : conf . ForwardDirectLinkParams , Value : "false" , Type : conf . TypeBool , Group : model . GLOBAL } ,
2023-10-26 19:21:09 +08:00
{ Key : conf . IgnoreDirectLinkParams , Value : "sign,alist_ts" , Type : conf . TypeString , Group : model . GLOBAL } ,
2023-08-14 22:54:38 +08:00
{ Key : conf . WebauthnLoginEnabled , Value : "false" , Type : conf . TypeBool , Group : model . GLOBAL , Flag : model . PUBLIC } ,
2022-11-30 22:10:07 +08:00
2022-06-28 14:18:10 +08:00
// single settings
2022-06-29 16:08:55 +08:00
{ Key : conf . Token , Value : token , Type : conf . TypeString , Group : model . SINGLE , Flag : model . PRIVATE } ,
2024-02-23 15:37:40 +08:00
{ Key : conf . SearchIndex , Value : "none" , Type : conf . TypeSelect , Options : "database,database_non_full_text,bleve,meilisearch,none" , Group : model . INDEX } ,
2023-01-07 00:59:30 +08:00
{ Key : conf . AutoUpdateIndex , Value : "false" , Type : conf . TypeBool , Group : model . INDEX } ,
2022-12-05 16:45:11 +08:00
{ Key : conf . IgnorePaths , Value : "" , Type : conf . TypeText , Group : model . INDEX , Flag : model . PRIVATE , Help : ` one path per line ` } ,
2023-01-17 17:33:18 +08:00
{ Key : conf . MaxIndexDepth , Value : "20" , Type : conf . TypeNumber , Group : model . INDEX , Flag : model . PRIVATE , Help : ` max depth of index ` } ,
2022-11-28 13:45:25 +08:00
{ Key : conf . IndexProgress , Value : "{}" , Type : conf . TypeText , Group : model . SINGLE , Flag : model . PRIVATE } ,
2022-12-27 22:11:22 +08:00
2023-03-02 17:55:33 +08:00
// SSO settings
{ Key : conf . SSOLoginEnabled , Value : "false" , Type : conf . TypeBool , Group : model . SSO , Flag : model . PUBLIC } ,
2023-07-20 16:30:30 +08:00
{ Key : conf . SSOLoginPlatform , Type : conf . TypeSelect , Options : "Casdoor,Github,Microsoft,Google,Dingtalk,OIDC" , Group : model . SSO , Flag : model . PUBLIC } ,
2023-03-06 20:59:45 +08:00
{ Key : conf . SSOClientId , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSOClientSecret , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
2023-10-02 14:42:40 +08:00
{ Key : conf . SSOOIDCUsernameKey , Value : "name" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
2023-04-26 16:01:40 +08:00
{ Key : conf . SSOOrganizationName , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSOApplicationName , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSOEndpointName , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSOJwtPublicKey , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
2024-12-09 07:33:46 -08:00
{ Key : conf . SSOExtraScopes , Value : "" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
2023-07-20 16:30:30 +08:00
{ Key : conf . SSOAutoRegister , Value : "false" , Type : conf . TypeBool , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSODefaultDir , Value : "/" , Type : conf . TypeString , Group : model . SSO , Flag : model . PRIVATE } ,
{ Key : conf . SSODefaultPermission , Value : "0" , Type : conf . TypeNumber , Group : model . SSO , Flag : model . PRIVATE } ,
2023-09-22 16:45:51 +08:00
{ Key : conf . SSOCompatibilityMode , Value : "false" , Type : conf . TypeBool , Group : model . SSO , Flag : model . PUBLIC } ,
2023-12-31 13:46:13 +08:00
// ldap settings
{ Key : conf . LdapLoginEnabled , Value : "false" , Type : conf . TypeBool , Group : model . LDAP , Flag : model . PUBLIC } ,
{ Key : conf . LdapServer , Value : "" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapManagerDN , Value : "" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapManagerPassword , Value : "" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapUserSearchBase , Value : "" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapUserSearchFilter , Value : "(uid=%s)" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapDefaultDir , Value : "/" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapDefaultPermission , Value : "0" , Type : conf . TypeNumber , Group : model . LDAP , Flag : model . PRIVATE } ,
{ Key : conf . LdapLoginTips , Value : "login with ldap" , Type : conf . TypeString , Group : model . LDAP , Flag : model . PUBLIC } ,
2024-03-02 15:35:10 +08:00
2025-02-16 12:22:11 +08:00
// s3 settings
2024-03-02 15:35:10 +08:00
{ Key : conf . S3AccessKeyId , Value : "" , Type : conf . TypeString , Group : model . S3 , Flag : model . PRIVATE } ,
{ Key : conf . S3SecretAccessKey , Value : "" , Type : conf . TypeString , Group : model . S3 , Flag : model . PRIVATE } ,
{ Key : conf . S3Buckets , Value : "[]" , Type : conf . TypeString , Group : model . S3 , Flag : model . PRIVATE } ,
2024-12-10 20:17:46 +08:00
2025-02-16 12:22:11 +08:00
// ftp settings
2024-12-10 20:17:46 +08:00
{ Key : conf . FTPPublicHost , Value : "127.0.0.1" , Type : conf . TypeString , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPPasvPortMap , Value : "" , Type : conf . TypeText , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPProxyUserAgent , Value : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " +
"Chrome/87.0.4280.88 Safari/537.36" , Type : conf . TypeString , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPMandatoryTLS , Value : "false" , Type : conf . TypeBool , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPImplicitTLS , Value : "false" , Type : conf . TypeBool , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPTLSPrivateKeyPath , Value : "" , Type : conf . TypeString , Group : model . FTP , Flag : model . PRIVATE } ,
{ Key : conf . FTPTLSPublicCertPath , Value : "" , Type : conf . TypeString , Group : model . FTP , Flag : model . PRIVATE } ,
2025-02-16 12:22:11 +08:00
// traffic settings
{ Key : conf . TaskOfflineDownloadThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . Download . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . TaskOfflineDownloadTransferThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . Transfer . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . TaskUploadThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . Upload . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . TaskCopyThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . Copy . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . TaskDecompressDownloadThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . Decompress . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . TaskDecompressUploadThreadsNum , Value : strconv . Itoa ( conf . Conf . Tasks . DecompressUpload . Workers ) , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . StreamMaxClientDownloadSpeed , Value : "-1" , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . StreamMaxClientUploadSpeed , Value : "-1" , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . StreamMaxServerDownloadSpeed , Value : "-1" , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
{ Key : conf . StreamMaxServerUploadSpeed , Value : "-1" , Type : conf . TypeNumber , Group : model . TRAFFIC , Flag : model . PRIVATE } ,
2022-06-28 14:18:10 +08:00
}
2023-11-06 16:56:55 +08:00
initialSettingItems = append ( initialSettingItems , tool . Tools . Items ( ) ... )
2022-08-07 13:09:59 +08:00
if flags . Dev {
2022-08-27 18:35:05 +08:00
initialSettingItems = append ( initialSettingItems , [ ] model . SettingItem {
{ Key : "test_deprecated" , Value : "test_value" , Type : conf . TypeString , Flag : model . DEPRECATED } ,
{ Key : "test_options" , Value : "a" , Type : conf . TypeSelect , Options : "a,b,c" } ,
{ Key : "test_help" , Type : conf . TypeString , Help : "this is a help message" } ,
} ... )
2022-07-11 22:36:30 +08:00
}
2022-08-27 18:35:05 +08:00
return initialSettingItems
2022-06-28 14:18:10 +08:00
}