From eac8b7b7755d1bd7d85a8efccae3d6c4e2458596 Mon Sep 17 00:00:00 2001 From: Aynakeya Date: Wed, 24 Aug 2022 15:13:13 -0700 Subject: [PATCH] local search algorithm optimization/diange medal permission/ --- app/gui/main.go | 1 + assets/translation.json | 20 ++++++++++++++++---- plugin/diange/diange.go | 19 ++++++++++++++++++- provider/local.go | 9 ++++++--- 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/app/gui/main.go b/app/gui/main.go index f3041fa..9f09961 100644 --- a/app/gui/main.go +++ b/app/gui/main.go @@ -25,5 +25,6 @@ func main() { controller.ClosePlugins(plugins...) controller.Destroy() _ = config.SaveToConfigFile(config.ConfigPath) + //i18n.SaveTranslation() logger.Logger.Info("================Program End================") } diff --git a/assets/translation.json b/assets/translation.json index 7355eb5..ad28906 100644 --- a/assets/translation.json +++ b/assets/translation.json @@ -224,6 +224,18 @@ "en": "Basic Diange Configuration", "zh-CN": "点歌基本设置" }, + "plugin.diange.medal.level": { + "en": "Level", + "zh-CN": "等级" + }, + "plugin.diange.medal.name": { + "en": "Name", + "zh-CN": "牌子名" + }, + "plugin.diange.medal.perm": { + "en": "Medal Permission", + "zh-CN": "牌子点歌权限" + }, "plugin.diange.permission": { "en": "Permission", "zh-CN": "点歌权限" @@ -348,6 +360,10 @@ "en": "Stop", "zh-CN": "停止" }, + "plugin.webinfo.server_preview": { + "en": "Server Preview", + "zh-CN": "效果预览" + }, "plugin.webinfo.server_status": { "en": "Server Status", "zh-CN": "服务器状态" @@ -363,10 +379,6 @@ "plugin.webinfo.title": { "en": "Web Output", "zh-CN": "Web输出" - }, - "plugin.webinfo.server_preview": { - "en": "Server Preview", - "zh-CN":"效果预览" } } } diff --git a/plugin/diange/diange.go b/plugin/diange/diange.go index 7b91c79..23b6148 100644 --- a/plugin/diange/diange.go +++ b/plugin/diange/diange.go @@ -27,6 +27,8 @@ type Diange struct { UserPermission bool PrivilegePermission bool AdminPermission bool + MedalName string + MedalPermission int QueueMax int UserCoolDown int CustomCMD string @@ -117,6 +119,10 @@ func (d *Diange) Execute(command string, args []string, danmu *liveclient.DanmuM l().Trace("privilege permission check: ", perm) perm = perm || (d.AdminPermission && (danmu.User.Admin)) l().Trace("admin permission check: ", perm) + // if use medal check + if d.MedalName != "" && d.MedalPermission >= 0 { + perm = perm || ((danmu.User.Medal.Name == d.MedalName) && danmu.User.Medal.Level >= d.MedalPermission) + } if !perm { return } @@ -147,6 +153,17 @@ func (d *Diange) CreatePanel() fyne.CanvasObject { widget.NewCheckWithData(i18n.T("plugin.diange.privilege"), binding.BindBool(&d.PrivilegePermission)), widget.NewCheckWithData(i18n.T("plugin.diange.admin"), binding.BindBool(&d.AdminPermission)), ) + dgMdPerm := container.NewBorder(nil, nil, + widget.NewLabel(i18n.T("plugin.diange.medal.perm")), nil, + container.NewGridWithColumns(2, + container.NewBorder(nil, nil, + widget.NewLabel(i18n.T("plugin.diange.medal.name")), nil, + widget.NewEntryWithData(binding.BindString(&d.MedalName))), + container.NewBorder(nil, nil, + widget.NewLabel(i18n.T("plugin.diange.medal.level")), nil, + widget.NewEntryWithData(binding.IntToString(binding.BindInt(&d.MedalPermission)))), + ), + ) dgQueue := container.NewBorder(nil, nil, widget.NewLabel(i18n.T("plugin.diange.queue_max")), nil, widget.NewEntryWithData(binding.IntToString(binding.BindInt(&d.QueueMax))), @@ -170,6 +187,6 @@ func (d *Diange) CreatePanel() fyne.CanvasObject { dgSourceCMD := container.NewBorder( nil, nil, widget.NewLabel(i18n.T("plugin.diange.source_cmd")), nil, container.NewVBox(sourceCmds...)) - d.panel = container.NewVBox(dgPerm, dgQueue, dgCoolDown, dgShortCut, dgSourceCMD) + d.panel = container.NewVBox(dgPerm, dgMdPerm, dgQueue, dgCoolDown, dgShortCut, dgSourceCMD) return d.panel } diff --git a/provider/local.go b/provider/local.go index ca79a25..9d72982 100644 --- a/provider/local.go +++ b/provider/local.go @@ -80,13 +80,16 @@ func (l *Local) Search(keyword string) ([]*player.Media, error) { keywords := strings.Split(keyword, " ") for _, p := range l.Playlists { for _, m := range p.Medias { + title := strings.ToLower(m.Title) + artist := strings.ToLower(m.Artist) n := 0 for _, k := range keywords { - if strings.Contains(m.Title, k) || strings.Contains(m.Artist, k) { + kw := strings.ToLower(k) + if strings.Contains(title, kw) || strings.Contains(artist, kw) { n++ } - if k == m.Title { - n += 2 + if kw == title { + n += 3 } } if n > 0 {