update history

This commit is contained in:
Aynakeya
2022-07-01 14:11:20 -07:00
parent d4bf5eb138
commit 332f46bdbd
12 changed files with 145 additions and 4 deletions

View File

@@ -36,6 +36,22 @@
"en": "Basic",
"zh-CN": "基础设置"
},
"gui.history.artist": {
"en": "Artist",
"zh-CN": "歌手"
},
"gui.history.operation": {
"en": "Operation",
"zh-CN": "操作"
},
"gui.history.title": {
"en": "Title",
"zh-CN": "歌名"
},
"gui.history.user": {
"en": "User",
"zh-CN": "用户"
},
"gui.player.button.lrc": {
"en": "lrc",
"zh-CN": "歌词"
@@ -168,6 +184,10 @@
"en": "Config",
"zh-CN": "设置"
},
"gui.tab.history": {
"en": "History",
"zh-CN": "播放历史"
},
"gui.tab.player": {
"en": "Player",
"zh-CN": "播放器"

View File

@@ -6,7 +6,7 @@ import (
"path"
)
const VERSION = "alpha 0.6.7"
const VERSION = "alpha 0.6.8"
const CONFIG_PATH = "./config.ini"
const Assests_PATH = "./assets"

View File

@@ -10,6 +10,8 @@ import (
var MainPlayer *player.Player
var UserPlaylist *player.Playlist
var History *player.Playlist
var HistoryUser *player.User
var SystemPlaylist *player.Playlist
var LiveClient liveclient.LiveClient
var PlaylistManager []*player.Playlist
@@ -27,6 +29,9 @@ func Initialize() {
CurrentLyric = player.NewLyric("")
loadPlaylists()
History = player.NewPlaylist("history", player.PlaylistConfig{RandomNext: false})
HistoryUser = &player.User{Name: "History"}
MainPlayer.ObserveProperty("idle-active", handleMpvIdlePlayNext)
UserPlaylist.Handler.RegisterA(player.EventPlaylistInsert, "controller.playnextwhenadd", handlePlaylistAdd)
MainPlayer.ObserveProperty("time-pos", handleLyricUpdate)

16
controller/history.go Normal file
View File

@@ -0,0 +1,16 @@
package controller
import "AynaLivePlayer/player"
func AddToHistory(media *player.Media) {
l().Tracef("add media %s (%s) to history", media.Title, media.Artist)
media = media.Copy()
History.Push(media)
return
}
func ToHistoryMedia(media *player.Media) *player.Media {
media = media.Copy()
media.User = HistoryUser
return media
}

View File

@@ -29,6 +29,7 @@ func Play(media *player.Media) {
return
}
CurrentMedia = media
AddToHistory(media)
if err := MainPlayer.Play(media); err != nil {
l().Warn("play failed", err)
}

1
go.mod
View File

@@ -13,6 +13,7 @@ require (
github.com/go-ole/go-ole v1.2.6
github.com/go-resty/resty/v2 v2.7.0
github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526
github.com/jinzhu/copier v0.3.5
github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca
github.com/lucor/goinfo v0.0.0-20210802170112-c078a2b0f08b
github.com/mitchellh/panicwrap v1.0.0

2
go.sum
View File

@@ -39,6 +39,8 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526 h1:NfuKjkj/Xc2z1xZIj+EmNCm5p1nKJPyw3F4E20usXvg=
github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc=
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca h1:ozPUX9TKQZVek4lZWYRsQo7uS8vJ+q4OOHvRhHiCLfU=
github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=

View File

@@ -46,6 +46,9 @@ func Initialize() {
container.NewTabItem(i18n.T("gui.tab.playlist"),
newPaddedBoarder(nil, nil, createPlaylists(), nil, createPlaylistMedias()),
),
container.NewTabItem(i18n.T("gui.tab.history"),
newPaddedBoarder(nil, nil, nil, nil, createHistoryList()),
),
container.NewTabItem(i18n.T("gui.tab.config"),
newPaddedBoarder(nil, nil, nil, nil, createConfigLayout()),
),

76
gui/history_list.go Normal file
View File

@@ -0,0 +1,76 @@
package gui
import (
"AynaLivePlayer/controller"
"AynaLivePlayer/event"
"AynaLivePlayer/i18n"
"AynaLivePlayer/player"
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
type HistoryContainer struct {
Playlist *player.Playlist
List *widget.List
}
var History = &PlaylistContainer{}
func createHistoryList() fyne.CanvasObject {
History.Playlist = controller.History
History.List = widget.NewList(
func() int {
return History.Playlist.Size()
},
func() fyne.CanvasObject {
return container.NewBorder(nil, nil,
widget.NewLabel("index"),
container.NewHBox(
widget.NewButtonWithIcon("", theme.MediaPlayIcon(), nil),
widget.NewButtonWithIcon("", theme.ContentAddIcon(), nil),
),
container.NewGridWithColumns(3,
newLabelWithWrapping("title", fyne.TextTruncate),
newLabelWithWrapping("artist", fyne.TextTruncate),
newLabelWithWrapping("user", fyne.TextTruncate)))
},
func(id widget.ListItemID, object fyne.CanvasObject) {
m := History.Playlist.Playlist[History.Playlist.Size()-id-1]
object.(*fyne.Container).Objects[0].(*fyne.Container).Objects[0].(*widget.Label).SetText(
m.Title)
object.(*fyne.Container).Objects[0].(*fyne.Container).Objects[1].(*widget.Label).SetText(
m.Artist)
object.(*fyne.Container).Objects[0].(*fyne.Container).Objects[2].(*widget.Label).SetText(
m.ToUser().Name)
object.(*fyne.Container).Objects[1].(*widget.Label).SetText(fmt.Sprintf("%d", id))
btns := object.(*fyne.Container).Objects[2].(*fyne.Container).Objects
btns[0].(*widget.Button).OnTapped = func() {
controller.Play(controller.ToHistoryMedia(m))
}
btns[1].(*widget.Button).OnTapped = func() {
controller.UserPlaylist.Push(controller.ToHistoryMedia(m))
}
})
registerHistoryHandler()
return container.NewBorder(
container.NewBorder(nil, nil,
widget.NewLabel("#"), widget.NewLabel(i18n.T("gui.history.operation")),
container.NewGridWithColumns(3,
widget.NewLabel(i18n.T("gui.history.title")),
widget.NewLabel(i18n.T("gui.history.artist")),
widget.NewLabel(i18n.T("gui.history.user")))),
nil, nil, nil,
History.List,
)
}
func registerHistoryHandler() {
History.Playlist.Handler.RegisterA(player.EventPlaylistUpdate, "gui.history.update", func(event *event.Event) {
History.Playlist.Lock.RLock()
History.List.Refresh()
History.Playlist.Lock.RUnlock()
})
}

View File

@@ -1,6 +1,9 @@
package player
import "AynaLivePlayer/liveclient"
import (
"AynaLivePlayer/liveclient"
"github.com/jinzhu/copier"
)
type Media struct {
Title string
@@ -34,3 +37,9 @@ func (m *Media) DanmuUser() *liveclient.DanmuUser {
}
return nil
}
func (m *Media) Copy() *Media {
newMedia := &Media{}
copier.Copy(newMedia, m)
return newMedia
}

View File

@@ -20,3 +20,11 @@ func TestStruct(t *testing.T) {
z, ok := x.(*B)
fmt.Println(z, ok)
}
func TestMedia_Copy(t *testing.T) {
m := &Media{Title: "asdf", User: &User{Name: "123"}}
m2 := m.Copy()
fmt.Println(m, m2)
m2.User.(*User).Name = "456"
fmt.Println(m.User.(*User).Name, m2)
}

View File

@@ -7,7 +7,6 @@
- 文本输出
- web输出
- 历史记录
- 黑名单
- 进入beta版本
@@ -16,7 +15,8 @@
----
Finished
- 2022/6/29: 跳过闲置歌单
- 2022.7.01: 历史记录
- 2022.6.29: 跳过闲置歌单
- 2022.6.26: i18n
- 2022.6.25: kuwo歌单
- 2022.6.25: 设置界面