From 3743d645435cf16e2d900c4872b1d9c30fe147f9 Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Sat, 10 Oct 2020 20:03:50 +0300 Subject: [PATCH] mptk: progress bar --- scripts/mpfilter | 4 +++- scripts/mptk | 29 ++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/scripts/mpfilter b/scripts/mpfilter index 29b836c..19d1c80 100755 --- a/scripts/mpfilter +++ b/scripts/mpfilter @@ -1,7 +1,7 @@ #!/usr/bin/env tclsh #Создан: пт 19 июн 2020 15:42:10 -#Изменён: Сб 10 окт 2020 18:20:25 +#Изменён: Сб 10 окт 2020 18:30:25 # Сценарий удаления треков с указанной оценкой из mpd @@ -19,6 +19,8 @@ proc mpd {args} { set mpd_status [lindex $mpd_answer 0] set answer_code [lindex $mpd_answer 1] + close $mpd + if {[string match "OK MPD *" $mpd_status]} { if {![string match "ACK*" $answer_code]} { return [lrange $mpd_answer 1 end-2] diff --git a/scripts/mptk b/scripts/mptk index 608cb4b..7517873 100755 --- a/scripts/mptk +++ b/scripts/mptk @@ -26,6 +26,18 @@ package require Tk set music_directory "/mnt/DATA/Музыка/" +proc float2time {float} { + set seconds [expr {int(fmod($float, 60))}] + set minutes [expr {int($float / 60)}] + set hours [expr {int($minutes / 60)}] + + if {$hours == 0} { + format "%02d:%02d" $minutes $seconds + } else { + format "%02d:%02d:%02d" $hours $minutes $seconds + } +} + namespace eval mpd { array set settings { host 127.0.0.1 @@ -43,6 +55,8 @@ namespace eval mpd { set mpd_status [lindex $mpd_answer 0] set answer_code [lindex $mpd_answer end-1] + close $mpd + if {$answer_code == "OK"} { if {![string match "ACK*" $answer_code]} { return [lrange $mpd_answer 1 end-2] @@ -65,17 +79,26 @@ namespace eval mpd { set song([string tolower $key]) $value } - if {$song(state) != "stop"} { + # parray song + + if {[info exists song(id)]} { if {[info exists song(comment)]} { ::gui::hl_rating $song(comment) } - return [format "♫ %s/%s: %s - %s\n\[%s - %s\]\n~ %s ~\n\[%s\] repeat: %s random: %s single: %s consume: %s" \ + set current_position [expr {round($song(elapsed)) * 30 / round($song(duration))}] + + return [format "♫ %s/%s: %s - %s\n\[%s - %s\]\n\ + ~ %s ~\n\n\[%s\] repeat: %s random: %s single: %s consume: %s\n\ + \[%s\] %s/%s" \ [incr song(song)] $song(playlistlength) \ $song(artist) $song(title) $song(date) \ $song(album) $song(genre) $song(state) \ [state $song(repeat)] [state $song(random)] \ - [state $song(single)] [state $song(consume)]] + [state $song(single)] [state $song(consume)] \ + "[string repeat ━ $current_position]᚛[string repeat ─ [expr {30-$current_position}]]" \ + [float2time $song(elapsed)] \ + [float2time $song(duration)]] } else { return "\[stopped\]" }