From a21ecf213a5a1bb46fe20e6a7cadafaf916bb694 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sun, 15 Nov 2020 16:11:16 +0800 Subject: [PATCH] =?utf8?q?=E7=9B=B4=E6=92=AD=E4=BF=A1=E6=81=AF=E5=8D=95?= =?utf8?q?=E7=8B=AC=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + CV/Var.go | 8 +++- F/api.go | 10 ++++- Reply/F.go | 4 +- Reply/Reply.go | 8 +++- Reply/gtk.go | 54 ++++++++++++++++++++++- demo/ui/1.glade | 1 + demo/ui/2.glade | 114 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 193 insertions(+), 7 deletions(-) create mode 100644 demo/ui/2.glade diff --git a/.gitignore b/.gitignore index 626e18e..f326797 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ demo/qtbox demo/main demo/face/* demo/demo.run +demo/ui/*.glade~ diff --git a/CV/Var.go b/CV/Var.go index 3c3909e..d5842e7 100644 --- a/CV/Var.go +++ b/CV/Var.go @@ -1,5 +1,9 @@ package cv - + +import ( + "time" +) + var ( Live []string//直播链接 Live_qn string @@ -7,6 +11,8 @@ var ( Cookie string Title string Rev float64//营收 + Live_Start_Time time.Time//直播开始时间 + Liveing bool//是否在直播 ) //from player-loader-2.0.11.min.js diff --git a/F/api.go b/F/api.go index 43f5812..aa40083 100644 --- a/F/api.go +++ b/F/api.go @@ -1,6 +1,7 @@ package F import ( + "time" "strconv" "strings" @@ -147,6 +148,7 @@ func (i *api) Get_live(qn ...string) (o *api) { if e := r.S(`"durl":[`, `]`, 0, 0).Err;e == nil { if urls := p.Json().GetArrayFrom("[" + r.RS + "]", "url");urls != nil { apilog.W("直播中") + c.Liveing = true o.Live_status = 1 for _,v := range urls { o.Live = append(o.Live, v.(string)) @@ -157,6 +159,9 @@ func (i *api) Get_live(qn ...string) (o *api) { if e := r.S(`player-loader-`, `.min`, 0, 0).Err;e == nil { c.VERSION = r.RS } + if e := r.S(`"live_time":"`, `"`, 0, 0).Err;e == nil { + c.Live_Start_Time,_ = time.Parse("2006-01-02 15:04:05", r.RS) + } apilog.W("api version", c.VERSION) } @@ -201,6 +206,7 @@ func (i *api) Get_live(qn ...string) (o *api) { apilog.W("未在直播") return case 1: + c.Liveing = true apilog.W("直播中") default: apilog.W("live_status:", live_status) @@ -219,7 +225,9 @@ func (i *api) Get_live(qn ...string) (o *api) { if i := p.Json().GetValFrom(res, "data.play_url.current_qn"); i != nil { cu_qn = strconv.Itoa(int(i.(float64))) } - + if i := p.Json().GetValFrom(res, "data.live_time"); i != nil { + c.Live_Start_Time = time.Unix(int64(i.(float64)),0).In(time.FixedZone("UTC-8", -8*60*60)) + } if len(qn) != 0 && qn[0] != "0" && qn[0] != "" { if _,ok := c.Default_qn[qn[0]];!ok{ apilog.W("清晰度未找到", qn[0], ",使用默认") diff --git a/Reply/F.go b/Reply/F.go index c2f5712..1ef436d 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -125,12 +125,12 @@ var ( func ShowRevf(){ if!IsOn("ShowRev") {return} if ShowRev_start { - p.Logf().New().Open("danmu.log").Base(1, "Rev").I("营收 ¥", c.Rev) + p.Logf().New().Open("danmu.log").Base(1, "Rev").I(fmt.Sprintf("营收 ¥%.2f",c.Rev)) return } ShowRev_start = true for { - p.Logf().New().Open("danmu.log").Base(1, "Rev").I("营收 ¥", c.Rev) + p.Logf().New().Open("danmu.log").Base(1, "Rev").I(fmt.Sprintf("营收 ¥%.2f",c.Rev)) for c.Rev == ShowRev_old {p.Sys().Timeoutf(60)} ShowRev_old = c.Rev } diff --git a/Reply/Reply.go b/Reply/Reply.go index 6518efd..5b31fbd 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -2,6 +2,7 @@ package reply import ( "fmt" + "time" "bytes" "strconv" "compress/zlib" @@ -359,8 +360,8 @@ func (replyF) preparing(s string) { Obs_R(false) Obsf(false) Saveflv_wait() - c.Rev = 0 go ShowRevf() + c.Liveing = false } if p.Sys().Type(roomid) == "float64" { Gui_show(Itos([]interface{}{"房间", roomid, "下播了"}), "0room") @@ -385,6 +386,11 @@ func (replyF) live(s string) { Obs_R(true) go Saveflvf() } + { + c.Rev = 0 //营收 + c.Liveing = true //直播i标志 + c.Live_Start_Time = time.Now() //开播h时间 + } if p.Sys().Type(roomid) == "float64" { Gui_show(Itos([]interface{}{"房间", roomid, "开播了"}), "0room") msglog.I("房间", int(roomid.(float64)), "开播了") diff --git a/Reply/gtk.go b/Reply/gtk.go index 85c635c..0552d16 100644 --- a/Reply/gtk.go +++ b/Reply/gtk.go @@ -5,12 +5,14 @@ import ( "errors" "time" "log" + "fmt" "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" "github.com/gotk3/gotk3/gdk" p "github.com/qydysky/part" F "github.com/qydysky/bili_danmu/F" + c "github.com/qydysky/bili_danmu/CV" ) const ( max = 50 @@ -58,6 +60,8 @@ func Gtk_danmu() { var win *gtk.Window var scrolledwindow0 *gtk.ScrolledWindow var viewport0 *gtk.Viewport + var w2_textView0 *gtk.TextView + var w2_textView1 *gtk.TextView application, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE) if err != nil {log.Println(err);return} @@ -68,13 +72,17 @@ func Gtk_danmu() { builder, err := gtk.BuilderNewFromFile("ui/1.glade") if err != nil {log.Println(err);return} + builder2, err := gtk.BuilderNewFromFile("ui/2.glade") + if err != nil {log.Println(err);return} { signals := map[string]interface{}{ "on_main_window_destroy": onMainWindowDestroy, } builder.ConnectSignals(signals) + builder2.ConnectSignals(signals) } + { obj, err := builder.GetObject("main_window") if err != nil {log.Println(err);return} @@ -83,6 +91,28 @@ func Gtk_danmu() { application.AddWindow(win) defer win.ShowAll() } + { + obj, err := builder2.GetObject("main_window") + if err != nil {log.Println(err);return} + win2, err := isWindow(obj) + if err != nil {log.Println(err);return} + application.AddWindow(win2) + defer win2.ShowAll() + } + {//营收 + obj, err := builder2.GetObject("t0") + if err != nil {log.Println(err);return} + if tmp,ok := obj.(*gtk.TextView); ok { + w2_textView0 = tmp + }else{log.Println("cant find #t0 in .glade");return} + } + {//直播时长 + obj, err := builder2.GetObject("t1") + if err != nil {log.Println(err);return} + if tmp,ok := obj.(*gtk.TextView); ok { + w2_textView1 = tmp + }else{log.Println("cant find #t1 in .glade");return} + } { obj, err := builder.GetObject("scrolledwindow0") if err != nil {log.Println(err);return} @@ -113,7 +143,7 @@ func Gtk_danmu() { var e error if pro_style,e = gtk.CssProviderNew();e == nil{ if e = pro_style.LoadFromPath(`ui/1.css`);e == nil{ - if scr,e := gdk.ScreenGetDefault();e == nil { + if scr := win.GetScreen();scr != nil { gtk.AddProviderForScreen(scr,pro_style,gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) } }else{log.Println(e)} @@ -234,10 +264,30 @@ func Gtk_danmu() { }) } }() - + glib.TimeoutAdd(uint(3000), func()(o bool){ o = true //y("sssss",load_face("")) + {//营收 + if IsOn("ShowRev") { + b,e := w2_textView0.GetBuffer() + if e != nil {log.Println(e);return} + b.SetText(fmt.Sprintf("¥%.2f",c.Rev)) + } + } + {//时长 + if c.Liveing { + b,e := w2_textView1.GetBuffer() + if e != nil {log.Println(e);return} + d := time.Since(c.Live_Start_Time).Round(time.Second) + h := d / time.Hour + d -= h * time.Hour + m := d / time.Minute + d -= m * time.Minute + s := d / time.Second + b.SetText(fmt.Sprintf("%02d:%02d:%02d", h, m, s)) + } + } if gtkGetList.Len() == 0 {return} el := gtkGetList.Front() if el == nil {return} diff --git a/demo/ui/1.glade b/demo/ui/1.glade index 8e68158..e0030ab 100644 --- a/demo/ui/1.glade +++ b/demo/ui/1.glade @@ -4,6 +4,7 @@ False + 弹幕 mouse 400 500 diff --git a/demo/ui/2.glade b/demo/ui/2.glade new file mode 100644 index 0000000..e2bd81e --- /dev/null +++ b/demo/ui/2.glade @@ -0,0 +1,114 @@ + + + + + + False + 弹幕机信息 + mouse + 400 + 500 + True + + + + + + True + True + never + + + True + False + none + + + True + False + vertical + 3 + 2 + + + True + False + 项目 + 16 + + + 0 + 0 + + + + + True + False + True + 值 + + + 1 + 0 + + + + + True + False + 营收(启动后) + + + 0 + 2 + + + + + True + True + natural + False + right + False + False + + + 1 + 2 + + + + + True + False + 直播时长 + + + 0 + 1 + + + + + True + True + False + right + False + False + + + 1 + 1 + + + + + + + + + + -- 2.39.2