mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-06 10:22:50 +08:00
update history
This commit is contained in:
@@ -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": "播放器"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
16
controller/history.go
Normal 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
|
||||
}
|
||||
@@ -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
1
go.mod
@@ -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
2
go.sum
@@ -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=
|
||||
|
||||
@@ -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
76
gui/history_list.go
Normal 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()
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user