#!/usr/bin/env tclsh #Создан: пт 19 июн 2020 15:42:10 #Изменён: Сб 10 окт 2020 18:30:25 # Сценарий удаления треков с указанной оценкой из mpd proc mpd {args} { set mpd [socket 127.0.0.1 6600] foreach command $args { puts $mpd $command } puts $mpd close flush $mpd set mpd_answer [split [read $mpd] "\n"] 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] } else { return [list 1 $answer_code] } } else { return [list 1 $mpd_answer] } } set playlistlength [regsub {^[^:]*:\s+} [lindex [mpd status] 6] {}] set commented {} for {set pos 0} {$pos <= $playlistlength} {incr pos} { array unset song set info [mpd "playlistinfo $pos"] foreach metadata $info { regexp -expanded {^([^:]+):\s+(.*)$} $metadata match key value set song([string tolower $key]) $value } if {[info exists song(comment)] && [regexp {^[1-5]\+?$} $song(comment)]} { lappend commented $song(id) } } mpd {*}[lmap id $commented {list deleteid $id}]