diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 66039e7de8..2437a2faad 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -434,6 +434,7 @@ func prepareMigrationTasks() []*migration { newMigration(354, "Add org wiki settings to user table", v1_27.AddOrgWikiSettings), newMigration(355, "Migrate update server metadata to repo manifest", v1_27.MigrateUpdateServerFieldsToManifest), newMigration(356, "Rename package_type to extension_type in repo manifest", v1_27.RenamePackageTypeToExtensionType), + newMigration(357, "Drop display_name from repo manifest and update stream config", v1_27.DropDisplayNameColumns), } return preparedMigrations } diff --git a/models/migrations/v1_27/v358.go b/models/migrations/v1_27/v358.go new file mode 100644 index 0000000000..d70b9bb117 --- /dev/null +++ b/models/migrations/v1_27/v358.go @@ -0,0 +1,16 @@ +// Copyright 2026 Moko Consulting +// SPDX-License-Identifier: GPL-3.0-or-later + +package v1_27 + +import "xorm.io/xorm" + +// DropDisplayNameColumns removes the display_name column from repo_manifest +// and update_stream_config. Display name is now computed from extension_type + name. +func DropDisplayNameColumns(x *xorm.Engine) error { + if _, err := x.Exec("ALTER TABLE repo_manifest DROP COLUMN IF EXISTS display_name"); err != nil { + return err + } + _, err := x.Exec("ALTER TABLE update_stream_config DROP COLUMN IF EXISTS display_name") + return err +} diff --git a/models/repo/repo_manifest.go b/models/repo/repo_manifest.go index a2a5ecb7bb..9e4193a68b 100644 --- a/models/repo/repo_manifest.go +++ b/models/repo/repo_manifest.go @@ -39,7 +39,6 @@ type RepoMetadata struct { ElementName string `xorm:"TEXT 'element_name'"` // full element name override, e.g. "pkg_mokowaas" (auto-constructed if empty) // distribution metadata (used by update server feed generation) - DisplayName string `xorm:"TEXT 'display_name'"` // human-readable name for update feeds, e.g. "Package - MokoWaaS" Maintainer string `xorm:"TEXT 'maintainer'"` // maintainer/author name MaintainerURL string `xorm:"TEXT 'maintainer_url'"` // maintainer website InfoURL string `xorm:"TEXT 'info_url'"` // extension info/product page URL @@ -115,6 +114,20 @@ func (m *RepoMetadata) ElementNameMismatch() bool { return auto != "" && m.ElementName != auto } +// DerivedDisplayName computes the display name from ExtensionType and Name. +// Format: "Package - MokoSuiteBackup" (titlecased type + repo name). +// Falls back to just the Name if ExtensionType is empty. +func (m *RepoMetadata) DerivedDisplayName() string { + if m.Name == "" { + return "" + } + if m.ExtensionType == "" { + return m.Name + } + title := strings.ToUpper(m.ExtensionType[:1]) + m.ExtensionType[1:] + return title + " - " + m.Name +} + // GetRepoMetadata returns the metadata for a repo, or nil if none exists. func GetRepoMetadata(ctx context.Context, repoID int64) (*RepoMetadata, error) { m := new(RepoMetadata) diff --git a/models/updateserver/update_stream_config.go b/models/updateserver/update_stream_config.go index 62e8e38608..c822df62ee 100644 --- a/models/updateserver/update_stream_config.go +++ b/models/updateserver/update_stream_config.go @@ -33,7 +33,6 @@ type UpdateStreamConfig struct { KeyPrefix string `xorm:"VARCHAR(20) 'key_prefix'"` // org-specific license key prefix (e.g. "ACME") // Extension metadata — used in update feed generation. ExtensionName string `xorm:"TEXT 'extension_name'"` // element identifier (e.g. pkg_mokowaas, com_mokowaas) - DisplayName string `xorm:"TEXT 'display_name'"` // human-readable name (e.g. "Package - MokoWaaS") Description string `xorm:"TEXT"` // short description for update feeds ExtensionType string `xorm:"VARCHAR(50) 'extension_type'"` // component, module, plugin, package, template, library Maintainer string `xorm:"TEXT"` // maintainer/author name diff --git a/routers/api/v1/repo/license_key.go b/routers/api/v1/repo/license_key.go index b47dccd4cb..feb25a329e 100644 --- a/routers/api/v1/repo/license_key.go +++ b/routers/api/v1/repo/license_key.go @@ -7,6 +7,7 @@ import ( "net/http" "time" + repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo" updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/structs" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/timeutil" @@ -21,6 +22,11 @@ func GetLicenseSettings(ctx *context.APIContext) { ctx.JSON(http.StatusOK, &structs.LicenseSettings{}) return } + // Compute display_name from repo metadata + var displayName string + if meta, err := repo_model.GetRepoMetadata(ctx, ctx.Repo.Repository.ID); err == nil && meta != nil { + displayName = meta.DerivedDisplayName() + } ctx.JSON(http.StatusOK, &structs.LicenseSettings{ LicensingEnabled: cfg.LicensingEnabled, RequireKey: cfg.RequireKey, @@ -28,7 +34,7 @@ func GetLicenseSettings(ctx *context.APIContext) { Platform: cfg.Platform, SupportURL: cfg.SupportURL, ExtensionName: cfg.ExtensionName, - DisplayName: cfg.DisplayName, + DisplayName: displayName, ExtensionType: cfg.ExtensionType, Maintainer: cfg.Maintainer, MaintainerURL: cfg.MaintainerURL, @@ -51,7 +57,6 @@ func UpdateLicenseSettings(ctx *context.APIContext) { Platform: form.Platform, SupportURL: form.SupportURL, ExtensionName: form.ExtensionName, - DisplayName: form.DisplayName, ExtensionType: form.ExtensionType, Maintainer: form.Maintainer, MaintainerURL: form.MaintainerURL, diff --git a/routers/api/v1/repo/manifest.go b/routers/api/v1/repo/manifest.go index 79dbe341c4..cea722f3ef 100644 --- a/routers/api/v1/repo/manifest.go +++ b/routers/api/v1/repo/manifest.go @@ -23,7 +23,7 @@ type apiMetadata struct { Platform string `json:"platform"` StandardsVersion string `json:"standards_version"` StandardsSource string `json:"standards_source"` - DisplayName string `json:"display_name"` + DisplayName string `json:"display_name"` // read-only, computed from extension_type + name Maintainer string `json:"maintainer"` MaintainerURL string `json:"maintainer_url"` InfoURL string `json:"info_url"` @@ -72,7 +72,7 @@ func GetRepoMetadata(ctx *context.APIContext) { Platform: m.Platform, StandardsVersion: m.StandardsVersion, StandardsSource: m.StandardsSource, - DisplayName: m.DisplayName, + DisplayName: m.DerivedDisplayName(), Maintainer: m.Maintainer, MaintainerURL: m.MaintainerURL, InfoURL: m.InfoURL, @@ -115,7 +115,6 @@ func UpdateRepoMetadata(ctx *context.APIContext) { Platform: req.Platform, StandardsVersion: req.StandardsVersion, StandardsSource: req.StandardsSource, - DisplayName: req.DisplayName, Maintainer: req.Maintainer, MaintainerURL: req.MaintainerURL, InfoURL: req.InfoURL, @@ -143,7 +142,7 @@ func UpdateRepoMetadata(ctx *context.APIContext) { Platform: m.Platform, StandardsVersion: m.StandardsVersion, StandardsSource: m.StandardsSource, - DisplayName: m.DisplayName, + DisplayName: m.DerivedDisplayName(), Maintainer: m.Maintainer, MaintainerURL: m.MaintainerURL, InfoURL: m.InfoURL, diff --git a/routers/web/org/update_streams.go b/routers/web/org/update_streams.go index dc041afed3..c9364e5f4d 100644 --- a/routers/web/org/update_streams.go +++ b/routers/web/org/update_streams.go @@ -50,7 +50,6 @@ func SettingsUpdateStreamsPost(ctx *context.Context) { SupportURL: ctx.FormString("support_url"), KeyPrefix: strings.ToUpper(strings.TrimSpace(ctx.FormString("key_prefix"))), ExtensionName: ctx.FormString("extension_name"), - DisplayName: ctx.FormString("display_name"), Description: ctx.FormString("feed_description"), ExtensionType: ctx.FormString("extension_type"), Maintainer: ctx.FormString("maintainer"), diff --git a/routers/web/repo/setting/metadata.go b/routers/web/repo/setting/metadata.go index a91550a260..67596d5747 100644 --- a/routers/web/repo/setting/metadata.go +++ b/routers/web/repo/setting/metadata.go @@ -120,7 +120,6 @@ func saveMetadata(ctx *context.Context) { manifest.ElementName = existing.ElementName manifest.StandardsVersion = existing.StandardsVersion manifest.StandardsSource = existing.StandardsSource - manifest.DisplayName = existing.DisplayName manifest.Maintainer = existing.Maintainer manifest.MaintainerURL = existing.MaintainerURL manifest.Language = existing.Language diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index 02b9bd2790..48326fb47a 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -696,7 +696,6 @@ func handleSettingsPostAdvanced(ctx *context.Context) { DownloadGating: form.DownloadGating, SupportURL: form.SupportURL, ExtensionName: form.ExtensionName, - DisplayName: form.DisplayName, ExtensionType: form.ExtensionType, TargetVersion: form.TargetVersion, Maintainer: form.Maintainer, diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go index bf18acb8fe..9272a82417 100644 --- a/services/forms/repo_form.go +++ b/services/forms/repo_form.go @@ -139,7 +139,6 @@ type RepoSettingForm struct { DownloadGating string SupportURL string ExtensionName string - DisplayName string ExtensionType string TargetVersion string Maintainer string diff --git a/services/updateserver/joomla.go b/services/updateserver/joomla.go index a4a3f3d7ca..6fb24241bd 100644 --- a/services/updateserver/joomla.go +++ b/services/updateserver/joomla.go @@ -198,8 +198,8 @@ func resolveExtensionMetadata(ctx context.Context, repo *repo_model.Repository, if manifest.ExtensionType != "" { m.ExtType = manifest.ExtensionType } - if manifest.DisplayName != "" { - m.DisplayName = manifest.DisplayName + if dn := manifest.DerivedDisplayName(); dn != "" { + m.DisplayName = dn } if manifest.TargetVersion != "" { m.TargetVersion = manifest.TargetVersion diff --git a/templates/org/settings/update_streams.tmpl b/templates/org/settings/update_streams.tmpl index 920fffcc79..79b7e301ea 100644 --- a/templates/org/settings/update_streams.tmpl +++ b/templates/org/settings/update_streams.tmpl @@ -86,11 +86,6 @@

{{ctx.Locale.Tr "org.settings.extension_name_help"}}

-
- - -

{{ctx.Locale.Tr "org.settings.display_name_help"}}

-
diff --git a/templates/repo/settings/licensing.tmpl b/templates/repo/settings/licensing.tmpl index 7dc52faf5c..02fcb35d45 100644 --- a/templates/repo/settings/licensing.tmpl +++ b/templates/repo/settings/licensing.tmpl @@ -67,11 +67,6 @@

{{ctx.Locale.Tr "org.settings.extension_name_help"}}

-
- - -

{{ctx.Locale.Tr "org.settings.display_name_help"}}

-
diff --git a/templates/repo/settings/metadata.tmpl b/templates/repo/settings/metadata.tmpl index 50be865767..852466ce2a 100644 --- a/templates/repo/settings/metadata.tmpl +++ b/templates/repo/settings/metadata.tmpl @@ -87,9 +87,9 @@
- - {{$pkgType := .Manifest.PackageType}} + {{$pkgType := .Manifest.ExtensionType}} {{range $val := StringUtils.Split "component,module,plugin,package,template,library,file" ","}} {{end}}