rendered paste bodymenu channel {
m|ndless' mp3 Player:{
if ($dialog(mmp3)) { dialog -ve mmp3 mmp3 }
else { dialog -md mmp3 mmp3 }
}
}
; DIALOG
dialog mmp3 {
title "m|ndless' mp3 Player"
option dbu
size -1 -1 200 200
box "",230, 1 1 198 33
text "No Music Playing", 1, 4 7 154 7
text "00:00 / 00:00",2,160 7 37 7
button "<<",100,4 20 37 12
button "&Play",101,42 20 38 12
button "Paus&e",102,81 20 38 12
button "&Stop",103,120 20 38 12
button ">>",104,159 20 38 12
box "",231, 1 30 198 169
list 3, 3 36 194 154, hsbar, vsbar, sort
button "+ File",105, 4 186 18 10
button "+ Dir",106, 24 186 18 10
button "- Sel",107, 158 186 18 10
button "- All",108, 178 186 18 10
menu "&File",150
menu "&Options", 170
item "Add &File",151,150
item "Add &Dir",152,150
item break,153,150
item "Delete &Selected",154,150
item "Delete &All",155,150
item break,156,150
item "&Load Playlist",157,150,
item "Save &Playlist",158,150
item break,159,150
item "E&xit",160,150
menu "Play &Mode",183,170
item "&Single",184,183
item "&Continuous",185,183
menu "Play &Order",171,170
item "&Normal",172,171
item "&Shuffle",173,171
item break,177,170
menu "&Announcing",178,170
item "O&n",179,178
item "O&ff",180,178
item break,181,178
item "&Configure",182,178
button "", 255,0 0 0 0, ok default
}
; EVENTS
;dialog init
on *:dialog:mmp3:init:0:startup
; +File button
on *:dialog:mmp3:sclick:105:plusfile
; +Dir button
on *:dialog:mmp3:sclick:106:plusdir
; -Sel button
on *:dialog:mmp3:sclick:107:minsel
; -All button
on *:dialog:mmp3:sclick:108:minall
; Play button
on *:dialog:mmp3:sclick:101:playmp3
; Pause button
on *:dialog:mmp3:sclick:102:pausemp3
; Stop button
on *:dialog:mmp3:sclick:103:stopmp3
; Next button
on *:dialog:mmp3:sclick:104:playnext
; Previous button
on *:dialog:mmp3:sclick:100:playprev
; double click mp3
on *:dialog:mmp3:dclick:3:playmp3
; menu add file
on *:dialog:mmp3:menu:151:plusfile
; menu add dir
on *:dialog:mmp3:menu:152:plusdir
; menu del sel
on *:dialog:mmp3:menu:154:minsel
; menu del all
on *:dialog:mmp3:menu:155:minall
; menu load playlist
on *:dialog:mmp3:menu:157:loadplaylist
; menu save playlist
on *:dialog:mmp3:menu:158:saveplaylist
; menu exit
on *:dialog:mmp3:menu:160:dialog -x mmp3
; halt enter
on *:dialog:mmp3:sclick:255:halt
; menu play mode single
on *:dialog:mmp3:menu:184:modesingle
; menu play mode continuous
on *:dialog:mmp3:menu:185:modecontin
; menu play order normal
on *:dialog:mmp3:menu:172:ordernormal
; menu play order shuffle
on *:dialog:mmp3:menu:173:ordershuffle
; menu announce on
on *:dialog:mmp3:menu:179:announceon
; menu announce off
on *:dialog:mmp3:menu:180:announceoff
; configure announce
on *:dialog:mmp3:menu:182:$dialog(mannounce,mannounce)
; on exit : cleanup
on *:exit:cleanup
; on load
on *:load:.unset %mmp3-* | echo -a mp3 player loaded.
; ALIASES
alias -l mp3list return sounds\mp3list.mrc
alias -l mp3src return sounds\mp3src.mrc
alias -l mp3player { if ($dialog(mmp3)) return $true }
alias -l history return sounds\history.tmp
alias -l cleanup {
unset %mmp3-paused
.remove $history
}
alias -l announceoff {
if (%mmp3-announce) { unset %mmp3-announce | did -u mmp3 179 }
did -c mmp3 180
}
alias -l announceon {
if (!%mmp3-announce) { set %mmp3-announce true | did -u mmp3 180 }
did -c mmp3 179
}
alias -l ordernormal {
if (%mmp3-shuffle) { unset %mmp3-shuffle | did -u mmp3 173 }
did -c mmp3 172
}
alias -l ordershuffle {
if (!%mmp3-shuffle) { set %mmp3-shuffle true | did -u mmp3 172 }
did -c mmp3 173
}
alias -l modesingle {
if (%mmp3-contin) { unset %mmp3-contin | did -u mmp3 185 }
did -c mmp3 184
}
alias -l modecontin {
if (!%mmp3-contin) { set %mmp3-contin true | did -u mmp3 184 }
did -c mmp3 185
}
alias -l startup {
if (%mmp3-paused) { unset %mmp3-paused }
if (%mmp3-shuffle) { did -c mmp3 173 }
else { did -c mmp3 172 }
if (%mmp3-announce) { did -c mmp3 179 }
else { did -c mmp3 180 }
if (%mmp3-contin) { did -c mmp3 185 }
else { did -c mmp3 184 }
.timer -m 1 1 addmp3
}
alias -l saveplaylist {
:begin
var %file = $sfile(*.mpl,Save Playlist ...,Ok)
if (%file) {
if ($right(%file,4) !== .mpl) {
var %tmp = $input(Wrong file extension selected! Playlists should have extension .mpl !,260,Error)
goto begin
}
if ($len($nopath(%file)) == 4) {
var %tmp = $input(Corrupt filename selected! Playlists should have extension .mpl AND have a filename!,260,Error)
goto begin
}
:continue
.copy -o $mp3list %file
.copy -o $mp3src $left(%file,$calc($len(%file) - 4)) $+ .src
}
}
alias -l loadplaylist {
:begin
var %file = $sfile(*.mpl,Select Playlist to load...,Ok)
if ($isfile(%file)) {
minall
.copy -o %file $mp3list
.copy -o $left(%file,$calc($len(%file) - 4)) $+ .src $mp3src
addmp3
}
}
alias -l minsel {
var %tmp = $read($mp3list, swt, $did(mmp3,3).sel)
write -dl $+ $readn $mp3src
write -dl $+ $readn $mp3list
did -d mmp3 3 $did(mmp3,3).sel
}
alias -l minall {
.remove $mp3list
.remove $mp3src
did -r mmp3 3
}
alias -l plusfile {
var %file = $sfile(*.mp3,Select mp3 to add,Ok)
if (%file) {
addlist %file
addmp3 %file
}
}
alias -l plusdir {
unset %mp3dir
set %mp3dir $sdir(Select directory, Ok)
echo -a dir: %mp3dir
if (%mp3dir) { set %i 1 | set %total $findfile(%mp3dir,*.mp3,0) | echo -a Adding %total mp3's to list, this could take a while ... | .timermp3list 0 0 makelist }
}
alias makelist {
if (%i <= %total) {
var %file = $findfile(%mp3dir,*.mp3,%i)
if (!$read($mp3src,w,%file)) {
write $mp3src %file
write $mp3list $getinfo(%file)
}
inc %i
}
else { .timermp3list off | echo -a Finished adding %total mp3's to list | unset %i | unset %total | unset %mp3dir | addmp3 }
}
alias -l addmp3 {
var %count = $lines($mp3list)
if ($1) {
did -a mmp3 3 $read($mp3list,%count)
}
else {
did -r mmp3 3
var %i = 1
while (%i <= %count) {
did -a mmp3 3 $read($mp3list,%i)
inc %i
}
}
did -z mmp3 3
}
alias -l addlist {
var %file = $1-
if (!$read($mp3src,w,%file)) {
write $mp3src %file
write $mp3list $getinfo(%file)
}
}
alias -l getinfo {
var %x = $1-
var %artist = $mp3(%x).artist
var %title = $mp3(%x).title
if ((%artist == $null) || (%title == $null)) {
return $left($nopath(%x),$calc($len($nopath(%x)) - 4))
}
else { return %artist - %title }
}
alias -l playmp3 {
if ($did(mmp3,3).sel) {
did -a mmp3 1 $did(mmp3,3).seltext
dialog -t mmp3 $did(mmp3,3).seltext
.timersetinfo 0 1 setinfo
if (%mmp3-paused) {
unset %mmp3-paused
splay resume
}
else {
var %tmp = $read($mp3list,swt,$did(mmp3,3).seltext)
var %src = $read($mp3src,$readn)
.splay -p %src
if (%mmp3-announce) { announce %src }
}
}
else {
var %tmp = $input(No File Selected!,260, Error)
dialog -ve mmp3
}
write $history $did(mmp3,3).seltext
}
alias -l stopmp3 {
splay stop
did -a mmp3 2 00:00 / 00:00
did -a mmp3 1 No Music Playing
dialog -t mmp3 m|ndless' mp3 Player
if (%mmp3-paused) { unset %mmp3-paused }
.timersetinfo off
}
alias -l pausemp3 {
if (%mmp3-paused) { unset %mmp3-paused | splay resume | .timersetinfo 0 1 setinfo }
else { splay pause | set %mmp3-paused true | .timersetinfo off }
}
alias -l setinfo {
if ($mp3player) {
if ($inmp3) {
var %long = $calc($int($calc($inmp3.pos / 1000)) / 60)
var %mins = $int(%long)
var %secs = $calc(%long - %mins)
var %secs = $round($calc(%secs * 60),0)
if (%mins < 10) { %mins = $+(0,%mins) }
if (%secs < 10) { %secs = $+(0,%secs) }
did -a mmp3 2 $+(%mins,:,%secs) / $getlength($inmp3.fname)
}
else {
.timersetinfo off
if (!%mmp3-contin) { stopmp3 }
else {
if (!%mmp3-shuffle) { playnext }
else { shuffle }
playmp3
}
}
}
else { splay stop | .timersetinfo off }
}
alias -l getlength {
return $right($duration($calc($mp3($inmp3.fname).length / 1000),3),4)
}
alias -l playnext {
if (%mmp3-shuffle) { shuffle }
else {
if ($did(mmp3,3).sel == $did(mmp3,3).lines) { did -c mmp3 3 1 }
else { did -c mmp3 3 $calc($did(mmp3,3).sel + 1) }
if ($inmp3) { unset %mmp3-paused | playmp3 }
}
if ($inmp3) { unset %mmp3-paused | playmp3 }
}
alias -l shuffle {
if (%mmp3-paused) { unset %mmp3-paused }
did -c mmp3 3 $rand(1,$did(mmp3,3).lines)
}
alias -l playprev {
var %tmp = $read($history,w, $did(mmp3,3).seltext)
did -c mmp3 3 $didwm(mmp3,3,$read($history,$calc($readn - 1)))
write -d $history
if ($inmp3) { unset %mmp3-paused | playmp3 }
}
alias -l announce {
if ($server) {
if (!%mmp3-noid3) {
echo -at No settings for m|ndless' mp3 Player found. Running single time initialisation.
$dialog(mannounce,mannounce)
}
var %artist = $mp3($1-).artist
var %title = $mp3($1-).title
if ((%artist == $null) || (%title == $null)) {
var %msg = $replace(%mmp3-noid3,&filename,$left($nopath($inmp3.fname),$calc($len($nopath($inmp3.fname)) - 4)))
}
else {
var %msg = $replace(%mmp3-msg,&artist,%artist,&title,%title)
}
if (!%mmp3-sep) { set %mmp3-sep <> }
if (%mmp3-saylen) { %msg = $+(%msg,$chr(160),%mmp3-sep $getlength($inmp3.fname)) }
if (%mmp3-saybit) { %msg = $+(%msg,$chr(160),%mmp3-sep $mp3($inmp3.fname).bitrate,Kbs) }
if (%mmp3-saysize) { %msg = $+(%msg,$chr(160),%mmp3-sep $bytes($file($inmp3.fname).size,m),Mb) }
if (!%mmp3-ann) { set %mp3-ann all }
if (%mmp3-ann == all) {
var %chans = $chan(0)
var %i = 1
while (%i <= %chans) {
var %t = $replace(%msg,&chan,$chan(%i))
%t
inc %i
}
}
else {
if (%mmp3-ann == dont) {
var %chans = $chan(0)
var %i = 1
while (%i <= %chans) {
if ( $matchtok(%mmp3-chans-dont,$chan(%i),1,$chr(44)) ) { }
else {
var %t = $replace(%msg,&chan,$chan(%i))
%t
}
inc %i
}
}
elseif (%mmp3-ann == only) {
var %chans = $chan(0)
var %i = 1
while (%i <= %chans) {
if ( $matchtok(%mmp3-chans-only,$chan(%i),1,$chr(44)) ) {
var %t = $replace(%msg,&chan,$chan(%i))
%t
}
inc %i
}
}
}
}
}
;=========================================================================================================
; MMP3 ANNOUNCE CONFIG DIALOG
; Dialog
dialog mannounce {
size -1 -1 150 160
title "m|ndless' mp3 Player announce config"
option dbu
box "Misc. Options",254, 2 2 146 30
check "Say Track Length",1,5 11 60 7
check "Say Track Bitrate",2,5 22 60 7
check "Say Track Filesize",3,75 11 60 7
text "Separator:",250,75 22 30 7
edit "",70,104 19 25 11,limit 5
box "Chan Options",253,2 35 146 41
radio "Announce in all chans",10,5 44 68 7
radio "Don't say in these chans:",11,5 55 69 7
edit "#chan1,#chan2,...",20,75 52 70 11,autohs
radio "Only say in these chans:",12,5 66 69 7
edit "#chan1,#chan2,...",21,75 63 70 11,autohs
box "Message",252,2 78 146 65
edit "",50,5 85 140 11,autohs
text "If song has no id3 tag : ",251,10 100 100 7
edit "",51,10 108 135 11
text "Important Note: Do not use /ame or /amsg in your msg, use /describe or /msg instead!!!",249,5 123 135 15
button "Ok",200,60 146 30 12
button "",255,0 0 0 0, ok default
}
; Events
on *:dialog:mannounce:init:0:{
if (%mmp3-saylen) { did -c mannounce 1 }
if (%mmp3-saybit) { did -c mannounce 2 }
if (%mmp3-saysize) { did -c mannounce 3 }
if (!%mmp3-sep) { set %mmp3-sep <> }
did -a mannounce 70 %mmp3-sep
if (!%mmp3-ann) { %mmp3-ann = all }
if (%mmp3-ann == all) { did -c mannounce 10 | did -b mannounce 20,21 }
if (%mmp3-ann == dont) { did -c mannounce 11 | did -b mannounce 21 }
if (%mmp3-ann == only) { did -c mannounce 12 | did -b mannounce 20 }
did -ra mannounce 20 %mmp3-chans-dont
did -ra mannounce 21 %mmp3-chans-only
if (!%mmp3-msg) { %mmp3-msg = /describe &chan is listening to &artist - &title }
did -a mannounce 50 %mmp3-msg
if (!%mmp3-noid3) { %mmp3-noid3 = /describe &chan is listening to &filename }
did -a mannounce 51 %mmp3-noid3
}
; Ok button
on *:dialog:mannounce:sclick:200:{
if ($did(mannounce,1).state == 1) { set %mmp3-saylen true }
else { unset %mmp3-saylen }
if ($did(mannounce,2).state == 1) { set %mmp3-saybit true }
else { unset %mmp3-saybit }
if ($did(mannounce,3).state == 1) { set %mmp3-saysize true }
else { unset %mmp3-saysize }
if ($did(mannounce,10).state == 1) { set %mmp3-ann all }
if ($did(mannounce,11).state == 1) { set %mmp3-ann dont }
if ($did(mannounce,12).state == 1) { set %mmp3-ann only }
%mmp3-chans-dont = $did(mannounce,20).text
%mmp3-chans-only = $did(mannounce,21).text
set %mmp3-msg $did(mannounce,50).text
set %mmp3-noid3 $did(mannounce,51).text
set %mmp3-sep $did(mannounce,70).text
dialog -x mannounce
dialog -v mmp3
}
; radio buttons
on *:dialog:mannounce:sclick:11:{ did -e mannounce 20 | did -b mannounce 21 }
on *:dialog:mannounce:sclick:12:{ did -e mannounce 21 | did -b mannounce 20 }
on *:dialog:mannounce:sclick:10:{ did -b mannounce 20,21 }