-# NGL File Server for KVIrc\r
-# Written by LoSko, Noldor, Grifisx (2006)\r
-\r
-# register the script: this must be the first instruction executed\r
-# since it will abort with an error when a greater version is already installed\r
-addon.register("NGLfserv","1.0.0",%NGLlogo,$tr("Written by: Noldor\, Grifisx\, LoSko","NGLfserv"),"3.2.2",NGLfserv_32.png)\r
-{\r
- # This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked\r
- NGLfserv::uninstall::uninstall\r
-}\r
-\r
-# Ok, addon.register succeeded. We can go on with the installation.\r
-\r
-# get the installer helper class (this is pretty standard and included in the distro)\r
-include "utils/installer.kvs"\r
-\r
-# Get the path that this script was launched from\r
-%mypath = $file.extractPath($0)\r
-\r
-# The installer will copy our files and generate automatically an uninstallation alias for them\r
-%installer = $new(installer,0,myinstaller)\r
-\r
-# copy files in each subdirectory\r
-# the pics\r
-%installer->$copyFiles("%mypath/pics/","*.png",$file.localdir("pics/NGLfserv"))\r
-%installer->$copyFiles("%mypath/pics/","NGLfserv_32.png",$file.localdir("pics/"))\r
-\r
-# the translations\r
-#%installer->$copyFiles("%mypath/locale/","*.mo",$file.localdir("locale"))\r
-\r
-# the documentation\r
-#%installer->$copyFiles("%mypath/help/en/NGLfserv/","*.html",$file.localdir("help/en/NGLfserv"))\r
-\r
-# then generate the uninstall alias\r
-%installer->$generateUninstallAlias("NGLfserv::uninstall::uninstallfiles");\r
-\r
-# finally kill the installer helper\r
-delete %installer\r
-\r
-# fetch the complete script\r
-include "main.kvs" %mypath\r
-\r
-# make sure any previous instance is closed\r
-# ______::close\r
-# show it up :)\r
-#________::show\r
-\r
-# File Server Initialization\r
-\r
-NGLfserv::classes::register\r
-NGLfserv::events::init\r
-NGLfserv::config::load\r
-NGLfserv::config::save\r
-\r
-defpopup("NGLfserv")\r
-{\r
- prologue{\r
- if(%FservActive=="OFF") {\r
- %:labelText = File server is OFF\r
- %:status = ON\r
- %:icon = 167\r
- }\r
- else {\r
- %:labelText = File server is ON\r
- %:status = OFF\r
- %:icon = 8\r
- }\r
- }\r
-\r
- label(%:labelText)\r
- \r
- item($tr("Wizard","NGLfserv"),110)\r
- {\r
- if (!$objects.exists(%NGLwizard)) %NGLwizard = $new(NGLfserv::classes::gui::wiz)\r
- else {\r
- %NGLwizard->$show()\r
- %NGLwizard->$raise()\r
- }\r
- }\r
-\r
- item($tr("Options"),20)\r
- {\r
- if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui,%NGLfserver)\r
- else {\r
- %NGLgui->$show()\r
- %NGLgui->$raise()\r
- }\r
- }\r
-\r
- item($tr("Monitor","NGLfserv"),171)\r
- {\r
- if ($objects.exists(%NGLmonitor)) {\r
- %NGLmonitor->$show()\r
- %NGLmonitor->$raise()\r
- }\r
- else{\r
- %NGLmonitor=$new(NGLfserv::classes::gui::monitor,%NGLfserver)\r
- %NGLmonitor->$show()\r
- }\r
- }\r
- \r
- item($tr("Save configuration","NGLfserv"),10)\r
- {\r
- NGLfserv::config::save\r
- }\r
-\r
- separator\r
-\r
- item($tr("Turn fileserver %:status","NGLfserv"),%:icon)\r
- {\r
- if(%FservActive=="OFF") {\r
- %FservActive="ON"\r
- NGLfserv::events::eventshandler ENABLE\r
- }\r
- else {\r
- %FservActive="OFF"\r
- NGLfserv::events::eventshandler DISABLE\r
- }\r
- }\r
-}\r
-\r
-setmenu -q -i=7 %NGLlogo NGLfserv\r
-\r
-addon.setconfigurecallback("NGLfserv")\r
-{\r
- //if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui)\r
- // else %NGLgui->$show()\r
- $new(NGlfserv::classes::gui::wiz)\r
-}\r
-\r
-defpopup(NGLfserv_channel)\r
-{\r
- item($tr("Display ads","NGLfserv"),180)\r
- {\r
- if(%FservChannels{$chan.name}->%rootFolders{}#>0)\r
- {\r
- %normalAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)Fserve active$k(%NGLc1)"] - Triggers:["\r
- %normalAdsCount=0\r
- %normalAdsRowCount=0\r
- %normalAds[0] = %normalAdsPrefix\r
-\r
- // %TDCCAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)TDCC active$k(%NGLc1)"] - Triggers:["\r
-\r
- #-------Gives a shape to the trigger notice\r
- foreach(%tr,%FservChannels{$chan.name}->%rootFolders{}) {\r
- if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),0)) {\r
- %token = "$k(%NGLc2)/ctcp $me %tr->$triggerName() $k(%NGLc1)& "\r
- if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {\r
- %normalAds[%normalAdsRowCount] .= %token\r
- }\r
- else {\r
- %normalAdsRowCount++\r
- %normalAds[%normalAdsRowCount] = %normalAdsPrefix\r
- %normalAds[%normalAdsRowCount] .= %token\r
- }\r
- %normalAdsCount++\r
- }\r
- if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),1)) {\r
- %token = "$k(%NGLc2)%tr->$triggerName() $k(%NGLc1)& "\r
- if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {\r
- %normalAds[%normalAdsRowCount] .= %token\r
- }\r
- else {\r
- %normalAdsRowCount++\r
- %normalAds[%normalAdsRowCount] = %normalAdsPrefix\r
- %normalAds[%normalAdsRowCount] .= %token\r
- }\r
- %normalAdsCount++\r
- }\r
- }\r
- if(!%Send) %sends = 0\r
- else %sends = %Send->$count()\r
- if(!%Queues) %queues = 0\r
- else %queues = %Queues->$count()\r
- if(%normalAdsCount>0) {\r
- for(%i=0; %i<=%normalAdsRowCount; %i++) {\r
- %normalAds[%i]=$str.lefttolast(%normalAds,&)\r
- %normalAds[%i]=$str.lefttolast(%normalAds," ")\r
- %normalAds[%i] .= $k(%NGLc1)] - Users:[$k(%NGLc2)$r$r%Session{}#$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSessions$k(%NGLc1)] - Sends:[$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)] - Queues:[$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)] -$k(%NGLc2) %NGLlogo\r
- say %normalAds[%i]\r
- }\r
- }\r
- }\r
- }\r
-\r
- separator\r
-\r
- item($tr("Show sends","NGLfserv"),77)\r
- {\r
- if(!$objects.exists(%Send)) %sends = 0\r
- else %sends = %Send->$count()\r
- say $k(%NGLc1)"Total Number Of Sends Currently: ["$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo\r
- for(%i=0;%i!=%Send->$count();%i++) {\r
- %id=%Send->$at(%i)->%dcc_id\r
- if(%id) {\r
- %a=$($dcc.transferredBytes(%id)/100)\r
- %b=$($dcc.localFileSize(%id)/100)\r
- %c=$((%b-%a)/($dcc.averageSpeed(%id)/100))\r
- if($($date("e",%c)-1) > 0) %eta .= $($date("e",%c)-1)d" "\r
- if($($date("k",%c)-1) > 0) %eta .= $($date("k",%c)-1)h" "\r
- if($date("M",%c) > 0) %eta .= $date("M",%c)m" "\r
- if($date("S",%c) > 0) %eta .= $date("S",%c)s" "\r
- %progress=done at $k(%NGLc2)$r$r$(100*%a/%b)\%$k(%NGLc1), ETA: $k(%NGLc2)$r$r%eta$k(%NGLc1)\r
- }\r
- else {\r
- %progress=Waiting\r
- }\r
- say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Send->$at(%i)->%file$k(%NGLc1), to $k(%NGLc2)%Send->$at(%i)->%nick$k(%NGLc1), %progress, size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Send->$at(%i)->%size)\r
- }\r
- }\r
-\r
- item($tr("Show queues","NGLfserv"),78)\r
- {\r
- if(!$objects.exists(%Queues)) %queues = 0\r
- else %queues = %Queues->$count()\r
- say $k(%NGLc1)"Total Number Of Queues Currently: ["$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo\r
- for(%i=0; %i!=%Queues->$count(); %i++)\r
- say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Queues->$at(%i)->%file$k(%NGLc1), for $k(%NGLc2)%Queues->$at(%i)->%nick$k(%NGLc1), size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Queues->$at(%i)->%size)\r
- }\r
-\r
- separator\r
-\r
- item($tr("Show statistics","NGLfserv"),119)\r
- {\r
- %bytesSent = $NGLfserv::corefunctions::calc(%NGLSentBytes)\r
- %vect[] = $str.split(" ",%bytesSent)\r
- %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-4))\r
- if($str.right(%vect[0],1) == 0) {\r
- %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))\r
- if($str.right(%vect[0],1) == 0) %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))\r
- }\r
- say $k(%NGLc1)"["$k(%NGLc2)File Server statistics$k(%NGLc1)"] Bytes sent:["$k(%NGLc2)$r$r%vect[0]" "%vect[1]$k(%NGLc1)"] - Files sent:["$k(%NGLc2)$r$r%NGLSentFiles$k(%NGLc1)"] - "$k(%NGLc2)%NGLlogo\r
- }\r
-}\r
-\r
-defpopup -m (channeltextview)\r
-{\r
- extpopup(%NGLlogo,NGLfserv_channel,13,NGLfserv.menu) (%FservChannels{$chan.name})\r
-}\r
-\r
-defpopup(NGLfserv_nick)\r
-{\r
- item($tr("Send file now","NGLfserv"),39)\r
- {\r
- dialog.file(open,%NGLlogo,,,$0) {\r
- if ($0) {\r
- %fl_send = $new(object)\r
- %fl_send->%completepath = $0\r
- %fl_send->%size = $file.size(%fl_send->%completepath)\r
- %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
- %fl_send->%retries = 0\r
- %fl_send->%nick = $1\r
- %fl_send->%initialNick = %fl_send->%nick\r
- %fl_send->%nickStatus = "op"\r
- %fl_send->%ircContext = $context()\r
- %fl_send->%console = $console(%fl_send->%ircContext)\r
- %fl_send->%serverName = $server()\r
-\r
- if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {\r
- %Send->$append(%fl_send)\r
- if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0\r
- %Nick_nr_sends{%fl_send->%nick}++\r
- if($objects.exists(%NGLmonitor)) {\r
- %NGLmonitor->$showSends()\r
- }\r
- NGLfserv::config::saveSendAndQueues\r
- }\r
- }\r
- }\r
- }\r
-\r
- item($tr("Enqueue files","NGLfserv"),257) ($(%Send->$count()>0))\r
- {\r
- dialog.file(openm,%NGLlogo,%G_dir,,$0) {\r
- if ($0) {\r
- %G_dir=$file.extractpath($0)\r
- %files[]=$0\r
- foreach(%file,%files[]){\r
- %fl_send = $new(object)\r
- %fl_send->%completepath = %file\r
- %fl_send->%size = $file.size(%fl_send->%completepath)\r
- %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
- %fl_send->%retries = 0\r
- %fl_send->%nick = $1\r
- %fl_send->%initialNick = %fl_send->%nick\r
- %fl_send->%nickStatus = "op"\r
- %fl_send->%ircContext = $context()\r
- %fl_send->%console = $console(%fl_send->%ircContext)\r
- %fl_send->%serverName = $server()\r
- %Queues->$append(%fl_send)\r
- if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0\r
- %Nick_nr_queues{%fl_send->%nick}++\r
- if($objects.exists(%NGLmonitor)) {\r
- %NGLmonitor->$showQueues()\r
- }\r
- }\r
- NGLfserv::config::saveSendAndQueues\r
- }\r
- }\r
- }\r
-}\r
-\r
-defpopup -m (defaulttextview)\r
-{\r
- extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-defpopup -m (querytextview)\r
-{\r
- extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-defpopup -m (channel)\r
-{\r
- extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-option uintDccSocketTimeout 10\r
-option boolCreateMinimizedDccChat 1\r
-option boolAutoAcceptDccChat 1\r
-option boolAutoAcceptDccSend 1\r
-option boolShowMinimizedDebugWindow 1\r
+# NGL File Server for KVIrc
+# Written by LoSko, Noldor, Grifisx (2006)
+
+# register the script: this must be the first instruction executed
+# since it will abort with an error when a greater version is already installed
+addon.register("NGLfserv","1.0.0",%NGLlogo,$tr("Written by: Noldor\, Grifisx\, LoSko","NGLfserv"),"3.2.2",NGLfserv_32.png)
+{
+ # This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked
+ NGLfserv::uninstall::uninstall
+}
+
+# Ok, addon.register succeeded. We can go on with the installation.
+
+# get the installer helper class (this is pretty standard and included in the distro)
+include "utils/installer.kvs"
+
+# Get the path that this script was launched from
+%mypath = $file.extractPath($0)
+
+# The installer will copy our files and generate automatically an uninstallation alias for them
+%installer = $new(installer,0,myinstaller)
+
+# copy files in each subdirectory
+# the pics
+%installer->$copyFiles("%mypath/pics/","*.png",$file.localdir("pics/NGLfserv"))
+%installer->$copyFiles("%mypath/pics/","NGLfserv_32.png",$file.localdir("pics/"))
+
+# the translations
+#%installer->$copyFiles("%mypath/locale/","*.mo",$file.localdir("locale"))
+
+# the documentation
+#%installer->$copyFiles("%mypath/help/en/NGLfserv/","*.html",$file.localdir("help/en/NGLfserv"))
+
+# then generate the uninstall alias
+%installer->$generateUninstallAlias("NGLfserv::uninstall::uninstallfiles");
+
+# finally kill the installer helper
+delete %installer
+
+# fetch the complete script
+include "main.kvs" %mypath
+
+# make sure any previous instance is closed
+# ______::close
+# show it up :)
+#________::show
+
+# File Server Initialization
+
+NGLfserv::classes::register
+NGLfserv::events::init
+NGLfserv::config::load
+NGLfserv::config::save
+
+defpopup("NGLfserv")
+{
+ prologue{
+ if(%FservActive=="OFF") {
+ %:labelText = File server is OFF
+ %:status = ON
+ %:icon = 167
+ }
+ else {
+ %:labelText = File server is ON
+ %:status = OFF
+ %:icon = 8
+ }
+ }
+
+ label(%:labelText)
+
+ item($tr("Wizard","NGLfserv"),110)
+ {
+ if (!$objects.exists(%NGLwizard)) %NGLwizard = $new(NGLfserv::classes::gui::wiz)
+ else {
+ %NGLwizard->$show()
+ %NGLwizard->$raise()
+ }
+ }
+
+ item($tr("Options"),20)
+ {
+ if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui,%NGLfserver)
+ else {
+ %NGLgui->$show()
+ %NGLgui->$raise()
+ }
+ }
+
+ item($tr("Monitor","NGLfserv"),171)
+ {
+ if ($objects.exists(%NGLmonitor)) {
+ %NGLmonitor->$show()
+ %NGLmonitor->$raise()
+ }
+ else{
+ %NGLmonitor=$new(NGLfserv::classes::gui::monitor,%NGLfserver)
+ %NGLmonitor->$show()
+ }
+ }
+
+ item($tr("Save configuration","NGLfserv"),10)
+ {
+ NGLfserv::config::save
+ }
+
+ separator
+
+ item($tr("Turn fileserver %:status","NGLfserv"),%:icon)
+ {
+ if(%FservActive=="OFF") {
+ %FservActive="ON"
+ NGLfserv::events::eventshandler ENABLE
+ }
+ else {
+ %FservActive="OFF"
+ NGLfserv::events::eventshandler DISABLE
+ }
+ }
+}
+
+setmenu -q -i=7 %NGLlogo NGLfserv
+
+addon.setconfigurecallback("NGLfserv")
+{
+ //if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui)
+ // else %NGLgui->$show()
+ $new(NGlfserv::classes::gui::wiz)
+}
+
+defpopup(NGLfserv_channel)
+{
+ item($tr("Display ads","NGLfserv"),180)
+ {
+ if(%FservChannels{$chan.name}->%rootFolders{}#>0)
+ {
+ %normalAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)Fserve active$k(%NGLc1)"] - Triggers:["
+ %normalAdsCount=0
+ %normalAdsRowCount=0
+ %normalAds[0] = %normalAdsPrefix
+
+ // %TDCCAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)TDCC active$k(%NGLc1)"] - Triggers:["
+
+ #-------Gives a shape to the trigger notice
+ foreach(%tr,%FservChannels{$chan.name}->%rootFolders{}) {
+ if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),0)) {
+ %token = "$k(%NGLc2)/ctcp $me %tr->$triggerName() $k(%NGLc1)& "
+ if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {
+ %normalAds[%normalAdsRowCount] .= %token
+ }
+ else {
+ %normalAdsRowCount++
+ %normalAds[%normalAdsRowCount] = %normalAdsPrefix
+ %normalAds[%normalAdsRowCount] .= %token
+ }
+ %normalAdsCount++
+ }
+ if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),1)) {
+ %token = "$k(%NGLc2)%tr->$triggerName() $k(%NGLc1)& "
+ if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {
+ %normalAds[%normalAdsRowCount] .= %token
+ }
+ else {
+ %normalAdsRowCount++
+ %normalAds[%normalAdsRowCount] = %normalAdsPrefix
+ %normalAds[%normalAdsRowCount] .= %token
+ }
+ %normalAdsCount++
+ }
+ }
+ if(!%Send) %sends = 0
+ else %sends = %Send->$count()
+ if(!%Queues) %queues = 0
+ else %queues = %Queues->$count()
+ if(%normalAdsCount>0) {
+ for(%i=0; %i<=%normalAdsRowCount; %i++) {
+ %normalAds[%i]=$str.lefttolast(%normalAds,&)
+ %normalAds[%i]=$str.lefttolast(%normalAds," ")
+ %normalAds[%i] .= $k(%NGLc1)] - Users:[$k(%NGLc2)$r$r%Session{}#$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSessions$k(%NGLc1)] - Sends:[$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)] - Queues:[$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)] -$k(%NGLc2) %NGLlogo
+ say %normalAds[%i]
+ }
+ }
+ }
+ }
+
+ separator
+
+ item($tr("Show sends","NGLfserv"),77)
+ {
+ if(!$objects.exists(%Send)) %sends = 0
+ else %sends = %Send->$count()
+ say $k(%NGLc1)"Total Number Of Sends Currently: ["$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo
+ for(%i=0;%i!=%Send->$count();%i++) {
+ %id=%Send->$at(%i)->%dcc_id
+ if(%id) {
+ %a=$($dcc.transferredBytes(%id)/100)
+ %b=$($dcc.localFileSize(%id)/100)
+ %c=$((%b-%a)/($dcc.averageSpeed(%id)/100))
+ if($($date("e",%c)-1) > 0) %eta .= $($date("e",%c)-1)d" "
+ if($($date("k",%c)-1) > 0) %eta .= $($date("k",%c)-1)h" "
+ if($date("M",%c) > 0) %eta .= $date("M",%c)m" "
+ if($date("S",%c) > 0) %eta .= $date("S",%c)s" "
+ %progress=done at $k(%NGLc2)$r$r$(100*%a/%b)\%$k(%NGLc1), ETA: $k(%NGLc2)$r$r%eta$k(%NGLc1)
+ }
+ else {
+ %progress=Waiting
+ }
+ say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Send->$at(%i)->%file$k(%NGLc1), to $k(%NGLc2)%Send->$at(%i)->%nick$k(%NGLc1), %progress, size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Send->$at(%i)->%size)
+ }
+ }
+
+ item($tr("Show queues","NGLfserv"),78)
+ {
+ if(!$objects.exists(%Queues)) %queues = 0
+ else %queues = %Queues->$count()
+ say $k(%NGLc1)"Total Number Of Queues Currently: ["$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo
+ for(%i=0; %i!=%Queues->$count(); %i++)
+ say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Queues->$at(%i)->%file$k(%NGLc1), for $k(%NGLc2)%Queues->$at(%i)->%nick$k(%NGLc1), size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Queues->$at(%i)->%size)
+ }
+
+ separator
+
+ item($tr("Show statistics","NGLfserv"),119)
+ {
+ %bytesSent = $NGLfserv::corefunctions::calc(%NGLSentBytes)
+ %vect[] = $str.split(" ",%bytesSent)
+ %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-4))
+ if($str.right(%vect[0],1) == 0) {
+ %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))
+ if($str.right(%vect[0],1) == 0) %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))
+ }
+ say $k(%NGLc1)"["$k(%NGLc2)File Server statistics$k(%NGLc1)"] Bytes sent:["$k(%NGLc2)$r$r%vect[0]" "%vect[1]$k(%NGLc1)"] - Files sent:["$k(%NGLc2)$r$r%NGLSentFiles$k(%NGLc1)"] - "$k(%NGLc2)%NGLlogo
+ }
+}
+
+defpopup -m (channeltextview)
+{
+ extpopup(%NGLlogo,NGLfserv_channel,13,NGLfserv.menu) (%FservChannels{$chan.name})
+}
+
+defpopup(NGLfserv_nick)
+{
+ item($tr("Send file now","NGLfserv"),39)
+ {
+ dialog.file(open,%NGLlogo,,,$0) {
+ if ($0) {
+ %fl_send = $new(object)
+ %fl_send->%completepath = $0
+ %fl_send->%size = $file.size(%fl_send->%completepath)
+ %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+ %fl_send->%retries = 0
+ %fl_send->%nick = $1
+ %fl_send->%initialNick = %fl_send->%nick
+ %fl_send->%nickStatus = "op"
+ %fl_send->%ircContext = $context()
+ %fl_send->%console = $console(%fl_send->%ircContext)
+ %fl_send->%serverName = $server()
+
+ if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {
+ %Send->$append(%fl_send)
+ if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0
+ %Nick_nr_sends{%fl_send->%nick}++
+ if($objects.exists(%NGLmonitor)) {
+ %NGLmonitor->$showSends()
+ }
+ NGLfserv::config::saveSendAndQueues
+ }
+ }
+ }
+ }
+
+ item($tr("Enqueue files","NGLfserv"),257) ($(%Send->$count()>0))
+ {
+ dialog.file(openm,%NGLlogo,%G_dir,,$0) {
+ if ($0) {
+ %G_dir=$file.extractpath($0)
+ %files[]=$0
+ foreach(%file,%files[]){
+ %fl_send = $new(object)
+ %fl_send->%completepath = %file
+ %fl_send->%size = $file.size(%fl_send->%completepath)
+ %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+ %fl_send->%retries = 0
+ %fl_send->%nick = $1
+ %fl_send->%initialNick = %fl_send->%nick
+ %fl_send->%nickStatus = "op"
+ %fl_send->%ircContext = $context()
+ %fl_send->%console = $console(%fl_send->%ircContext)
+ %fl_send->%serverName = $server()
+ %Queues->$append(%fl_send)
+ if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0
+ %Nick_nr_queues{%fl_send->%nick}++
+ if($objects.exists(%NGLmonitor)) {
+ %NGLmonitor->$showQueues()
+ }
+ }
+ NGLfserv::config::saveSendAndQueues
+ }
+ }
+ }
+}
+
+defpopup -m (defaulttextview)
+{
+ extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+defpopup -m (querytextview)
+{
+ extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+defpopup -m (channel)
+{
+ extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+option uintDccSocketTimeout 10
+option boolCreateMinimizedDccChat 1
+option boolAutoAcceptDccChat 1
+option boolAutoAcceptDccSend 1
+option boolShowMinimizedDebugWindow 1
-# Hack for the xgettext: this code will never be executed, but will be added to the translation file\r
-if(0)\r
-{\r
- #Year,Genre,Length,Frequency,Bitrate\r
- $tr("Year",twinsmediaplayer)\r
- $tr("Genre",twinsmediaplayer)\r
- $tr("Length",twinsmediaplayer)\r
- $tr("Frequency",twinsmediaplayer)\r
- $tr("Bitrate",twinsmediaplayer)\r
- $tr("Freq",twinsmediaplayer)\r
- $tr("unknown",twinsmediaplayer)\r
- $tr("stopped",twinsmediaplayer)\r
- $tr("playing",twinsmediaplayer)\r
- $tr("paused",twinsmediaplayer)\r
-}\r
-\r
-class(twins::mediaplayer::window,dockwindow)\r
-{\r
-\r
- createToolButton($0 = $image)\r
- {\r
- %tb = $new(toolbutton,@%m_hContainer)\r
- %tb->$setImage($0)\r
- %tb->$setUsesBigPixmap($false)\r
- %tb->$setUsesTextLabel($false)\r
- %tb->$setAutoRaise($true)\r
- %tb->$setMaximumWidth(24)\r
- %tb->$setMaximumHeight(24)\r
- return %tb\r
- }\r
-\r
- constructor()\r
- {\r
-\r
- twins::mediaplayer::core::config::load\r
- %TwinsMediaPlayer{laststartmode} = "on"\r
- twins::mediaplayer::core::config::save\r
-\r
- %G_hTwinsMediaPlayer{window} = $$\r
- $$->$setCaption($str.printf($tr("Twins MediaPlayer-?s",twinsmediaplayer),$addon.version(twinsmediaplayer)))\r
-\r
- @$setAllowedDockAreas("lrfm")\r
- @$setResizeEnabled($true)\r
-\r
- @%m_hContainer = $new(widget,$this)\r
- %l = $new(layout,@%m_hContainer)\r
-\r
- // Information\r
- @%m_hTextBrowser = $new(textbrowser,@%m_hContainer)\r
- %l->$addMultiCellWidget(@%m_hTextBrowser,0,0,0,6)\r
-\r
-\r
- // ** newline **\r
-\r
-\r
- // Back\r
- @%m_hBack = $$->$createToolButton("twins/16x16/twins_player_back.png")\r
- @%m_hBack->$settooltip($tr("Previous track","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hBack,1,0)\r
- objects.connect @%m_hBack clicked $$ previous\r
-\r
- // Rewind\r
- @%m_hRew = $$->$createToolButton("twins/16x16/twins_player_rewind.png")\r
- @%m_hRew->$settooltip($tr("Rewind","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hRew,1,1)\r
- objects.connect @%m_hRew clicked $$ rew\r
-\r
- // Stop\r
- @%m_hStop = $$->$createToolButton("twins/16x16/twins_player_stop.png")\r
- @%m_hStop->$settooltip($tr("Stop","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hStop,1,2)\r
- objects.connect @%m_hStop clicked $$ stop\r
-\r
- // Pause\r
- @%m_hPause = $$->$createToolButton("twins/16x16/twins_player_pause.png")\r
- @%m_hPause->$settooltip($tr("Pause","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hPause,1,3)\r
- objects.connect @%m_hPause clicked $$ pause\r
-\r
- // Play\r
- @%m_hPlay = $$->$createToolButton("twins/16x16/twins_player_play.png")\r
- @%m_hPlay->$settooltip($tr("Play","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hPlay,1,4)\r
- objects.connect @%m_hPlay clicked $$ play\r
-\r
- // Fast forward\r
- @%m_hFwd = $$->$createToolButton("twins/16x16/twins_player_fastforward.png")\r
- @%m_hFwd->$settooltip($tr("Fast forward","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hFwd,1,5)\r
- objects.connect @%m_hFwd clicked $$ fwd\r
-\r
- // Next\r
- @%m_hNext = $$->$createToolButton("twins/16x16/twins_player_next.png")\r
- @%m_hNext->$settooltip($tr("Next track","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hNext,1,6)\r
- objects.connect @%m_hNext clicked $$ next\r
-\r
-\r
- // ** newline **\r
-\r
-\r
- // Time slider\r
- @%m_hTime = $new(slider,@%m_hContainer)\r
- @%m_hTime->%step=4\r
- @%m_hTime->$setpagestep(@%m_hTime->%step)\r
- @%m_hTime->$settracking(0)\r
- @%m_hTime->$setorientation("Horizontal")\r
- @%m_hTime->$setvalue($($mediaplayer.position / 1000))\r
- %l->$addmulticellWidget(@%m_hTime,2,2,0,1)\r
-\r
- // Time label\r
- @%m_hTimeLabel = $new(label,@%m_hContainer)\r
- @%m_hTimeLabel->$setfont(8,courrier,fixedpitch)\r
- @%m_hTimeLabel->$setalignment(Right)\r
- @%m_hTimeLabel->$setframestyle(Panel,Sunken)\r
- @%m_hTimeLabel->$setmaximumheight(18)\r
- %l->$addmulticellWidget(@%m_hTimeLabel,2,2,2,3)\r
-\r
- // Shuffle\r
- if($mediaplayer.getshuffle)\r
- %pix = "twins/16x16/twins_player_random_on.png"\r
- else\r
- %pix = "twins/16x16/twins_player_random_off.png"\r
- @%m_hShuffle = $$->$createToolButton(%pix)\r
- @%m_hShuffle->$settooltip($tr("Shuffle","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hShuffle,2,4)\r
- objects.connect @%m_hShuffle clicked $$ shuffle\r
-\r
- // Repeat\r
- if($mediaplayer.getrepeat)\r
- %pix = "twins/16x16/twins_player_repeat_on.png"\r
- else\r
- %pix = "twins/16x16/twins_player_repeat_off.png"\r
- @%m_hRepeat = $$->$createToolButton(%pix)\r
- @%m_hRepeat->$settooltip($tr("Repeat current track","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hRepeat,2,5)\r
- objects.connect @%m_hRepeat clicked $$ repeat\r
-\r
- // Advertise\r
- @%m_hAdv = $$->$createToolButton("twins/16x16/twins_player_say.png")\r
- @%m_hAdv->$settooltip($tr("Advertise the current track on a channel or in a query","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hadv,2,6)\r
- objects.connect @%m_hAdv clicked $$ advertise\r
-\r
-\r
- // ** Newline **\r
-\r
-\r
- // Configure\r
- @%m_hConfig = $$->$createToolButton("twins/16x16/twins_player_configure.png")\r
- @%m_hConfig->$settooltip($tr("Configure the media player","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hConfig,3,0)\r
- objects.connect @%m_hConfig clicked $$ configure\r
-\r
- // Volume slider\r
- @%m_hVol = $new(slider,@%m_hContainer)\r
- @%m_hVol->$settooltip($tr("Volume control","twinsmediaplayer"))\r
- @%m_hVol->$setorientation("Horizontal")\r
- @%m_hVol->$setminvalue(0)\r
- @%m_hVol->$setmaxvalue(100)\r
- @%m_hVol->%step=5\r
- @%m_hVol->$setpagestep(@%m_hVol->%step)\r
- @%m_hVol->$settracking(1)\r
- @%m_hVol->$setTickInterval(10)\r
- @%m_hVol->$setvalue($($mediaplayer.getvol * 100 / 255))\r
- %l->$addmulticellWidget(@%m_hVol,3,3,1,2)\r
- objects.connect @%m_hVol valueChanged $$ setVol\r
-\r
- // Volume label\r
- @%m_hVolLabel = $new(label,@%m_hContainer)\r
- @%m_hVolLabel->$setfont(8,courrier,fixedpitch)\r
- @%m_hVolLabel->$setalignment(Right)\r
- @%m_hVolLabel->$settooltip($tr("Current volume","twinsmediaplayer"))\r
-// @%m_hVolLabel->$setframestyle(Panel,Sunken)\r
- @%m_hVolLabel->$setmaximumheight(18)\r
- %l->$addWidget(@%m_hVolLabel,3,3)\r
-\r
- // Volume icon\r
- %hVol = $$->$createToolButton("twins/16x16/twins_player_volume.png")\r
- %hVol->$settooltip($tr("Volume","twinsmediaplayer"))\r
- %l->$addWidget(%hVol,3,4)\r
-\r
- // Add to playlist\r
- @%m_hPL = $$->$createToolButton("twins/16x16/twins_player_playlist.png")\r
- @%m_hPL->$settooltip($tr("Open url or add files to playlist","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hPL,3,5)\r
- objects.connect @%m_hPL clicked $$ playMrl\r
-\r
- // Offer\r
- @%m_hOffer = $$->$createToolButton("twins/16x16/twins_player_sayandshare.png")\r
- @%m_hOffer->$settooltip($tr("Advertise and <i>offer</i> the current track on a channel or in a query","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hOffer,3,6)\r
- objects.connect @%m_hOffer clicked $$ offer\r
-\r
-\r
- // ** Newline **\r
-\r
-\r
- // Close\r
- @%m_hClose = $$->$createToolButton("twins/16x16/twins_player_close.png")\r
- @%m_hClose->$settooltip($tr("Close the media player","twinsmediaplayer"))\r
- %l->$addWidget(@%m_hClose,4,0)\r
- objects.connect @%m_hClose clicked $$ close\r
-\r
- // Show player\r
- %show = @$createToolButton("twins/16x16/twins_player_show.png")\r
- %show->$settooltip($tr("Show the player","twinsmediaplayer"))\r
- %l->$addWidget(%show,4,1)\r
- objects.connect %show clicked $$ showPlayer\r
-\r
- // Hide player\r
- %hide = @$createToolButton("twins/16x16/twins_player_hide.png")\r
- %hide->$settooltip($tr("Hide the player","twinsmediaplayer"))\r
- %l->$addWidget(%hide,4,2)\r
- objects.connect %hide clicked $$ hidePlayer\r
-\r
- // Status\r
- @%m_hStatus = $new(label,@%m_hContainer)\r
-// @%m_hStatus->$setfont(8,courrier,fixedpitch)\r
- @%m_hVolLabel->$setalignment(Right)\r
- %l->$addmulticellwidget(@%m_hStatus,4,4,3,6)\r
-\r
-\r
- @$addWidget(@%m_hContainer)\r
-\r
- @$displaystatus\r
- @$checkbuttons()\r
-\r
- @$timerEvent()\r
- @$starttimer($(2000))\r
-\r
- }\r
-\r
- showPlayer()\r
- {\r
- mediaplayer.show -q\r
- }\r
-\r
- hidePlayer()\r
- {\r
- mediaplayer.hide -q\r
- }\r
-\r
- timerEvent()\r
- {\r
- // Update status\r
- @$displaystatus()\r
-\r
- // Update volume\r
- @$updateVol(1)\r
-\r
- // Update time position\r
- @$updateTime\r
-\r
- // Check button status\r
- @$checkbuttons()\r
-\r
- // Display information in main window and update time slider length\r
- @$updateWindow(0)\r
- }\r
-\r
- updateVol($1 = do not send to player)\r
- {\r
- %iVol = $($mediaplayer.getvol * 100 / 255)\r
- if(%iVol<0 || %iVol>100){\r
- @%m_hVol->$setValue(50)\r
- @%m_hVolLabel->$settext("---\%")\r
- } else {\r
- if($math.abs($(%iVol-@%m_hVol->$value))>=@%m_hVol->%step)\r
- @%m_hVol->$setValue(%iVol)\r
- if(%iVol<10)\r
- %iVol=" %iVol"\r
- elseif(%iVol<100)\r
- %iVol=" %iVol"\r
- @%m_hVolLabel->$settext("%iVol\%")\r
- }\r
- }\r
-\r
- setVol()\r
- {\r
- if($mediaplayer.status != "unknown"){\r
- mediaplayer.setvol -q $(@%m_hVol->$value * 255 / 100)\r
- @$updateVol()\r
- }\r
- }\r
-\r
- updateWindow($0 = force update?)\r
- {\r
- if(!$0)\r
- {\r
- // * shunt normal file\r
- if( $mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl)\r
- return\r
- // * shunt flux\r
- elseif( !$mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl && \\r
- @%m_hOldPlay == $mediaplayer.nowplaying ) return\r
- }\r
- @%m_hOldSource = $mediaplayer.mrl\r
- @%m_hOldPlay = $mediaplayer.nowplaying\r
- // * ok do it if playing\r
- if($str.contains(" unknown stopped "," $mediaplayer.status "))\r
- {\r
- %h = "<html><title>$0</title>"\r
- %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"\r
- %h .= $tr("No track being played",twinsmediaplayer)\r
- %h .= "</body></html>"\r
- @%m_hTextBrowser->$setText(%h)\r
- @%m_hOldSource = ""\r
- @%m_hOldPlay = ""\r
- } else {\r
- %info = @$getinfo\r
- @$display(%info{title},%info{artist},%info{album},@$getTech(%info,html))\r
- @%m_hTime->$setmaxvalue($($mediaplayer.length / 1000))\r
- @%m_hTime->$settickinterval($(@%m_hTime->$maxvalue / 4))\r
- }\r
- }\r
-\r
- updateTime($0 = time)\r
- {\r
- if(!@%m_hTime->$maxvalue || $str.contains(" unknown stopped "," $mediaplayer.status "))\r
- {\r
- @%m_hTimeLabel->$settext("--:--:--")\r
- @%m_hTime->$setvalue(0)\r
- return\r
- }\r
- if($isset($0))\r
- %iTime = $0\r
- else\r
- %iTime = $mediaplayer.position\r
- @%m_hTime->$setvalue($(%iTime / 1000))\r
- @%m_hTimeLabel->$settext(@$formatTime(%iTime))\r
- }\r
-\r
- rew()\r
- {\r
- if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){\r
- %iPos = $($mediaplayer.position - 5000)\r
- if(%iPos < 0) %iPos = 0\r
- mediaplayer.jumpto -q %iPos\r
- @$updateTime(%iPos)\r
- }\r
- }\r
-\r
- fwd()\r
- {\r
- if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){\r
- %iPos = $($mediaplayer.position + 5000)\r
- if(%iPos > $mediaplayer.length) %iPos = $mediaplayer.length\r
- mediaplayer.jumpto -q %iPos\r
- @$updateTime(%iPos)\r
- }\r
- }\r
-\r
- formatTime($0 = time in ms)\r
- {\r
- if($str.isunsignednumber($0))\r
- {\r
- %lh = $($0 / 3600000)\r
- %lm = $(($0 % 3600000) / 60000)\r
- %ls = $(($0 % 60000) / 1000)\r
- if(%lh > 0)%r .= %lh"h"\r
- if(%lm < 10)%r .= "0"%lm"m"\r
- else %r .= %lm"m"\r
- if(%ls < 10)%r .= "0"%ls\s\r
- else %r .= %ls\s\r
- return %r\r
- }\r
- }\r
-\r
- playMrl()\r
- {\r
- if(!$objects.exists(%G_hTwinsMediaPlayer{playmrl}))\r
- %G_hTwinsMediaPlayer{playmrl} = $new(twins::mediaplayer::mrldialog,$$)\r
- %G_hTwinsMediaPlayer{playmrl}->$show\r
- }\r
-\r
- offer()\r
- {\r
- @$advertise(1)\r
- }\r
-\r
- advertise($0 = offer?)\r
- {\r
- %w = $active\r
- %info = @$getinfo\r
- if($isset(%info{artist})) %s << "%info{artist} -"\r
- %s << %info{title}\r
- if(%TwinsMediaPlayer{showalbum}&&%info{album}) %s << " (%info{album})"\r
- if($0)\r
- {\r
- %file = $mediaplayer.localfile\r
- if(!%file) %share=$mediaplayer.mrl\r
- else\r
- {\r
- if(!$isset(%TwinsMediaPlayer.sharecount))\r
- %TwinsMediaPlayer.sharecount=1\r
- %nowplaying=$mediaplayer.nowplaying\r
- for(%i=0;%i<%TwinsMediaPlayer{maxoffernamelength};%i++)\r
- {\r
- if(%i==$str.length(%nowplaying))break\r
- %c=$str.mid(%nowplaying,%i,1)\r
- if($str.contains("()[] ",%c))%c="_"\r
- %name .= %c\r
- }\r
- %name .= _%TwinsMediaPlayer.sharecount\r
- %TwinsMediaPlayer.sharecount++\r
- sharedfile.add -t=$(%TwinsMediaPlayer{sharetimeout} * 60) -n=%name %file\r
- %size = $file.size(%file)\r
- %onemeg = $(1024 * 1024)\r
- if(%size > %onemeg)\r
- {\r
- %mb = $(%size / %onemeg)\r
- %rest = $((%size % %onemeg) / 10240)\r
- %size = %mb"."$(%rest / 10)$(%rest % 10)"Mb"\r
- } else {\r
- %size = %size"bytes"\r
- }\r
-\r
- %share = "$b/ctcp $me xdcc get %name$b (%size)"\r
- }\r
- %s .= @$gettech(%info,linear,%share)\r
- } else %s .= @$gettech(%info,linear)\r
- me -r=%w %TwinsMediaPlayer{announce} %s\r
- }\r
-\r
- getInfo()\r
- {\r
- %r{artist} = $mediaplayer.artist\r
- %r{title} = $mediaplayer.title\r
- if(%r{artist} == "" || %r{title} == "")\r
- {\r
- %r{artist} =\r
- %r{title} = $mediaplayer.nowplaying\r
- }\r
- %r{album} = $mediaplayer.album\r
- if($str.equal(%r{album},"Other"))%r{album} =\r
- %length = $mediaplayer.length\r
- if(%length) %r{length} = @$formatTime(%length)\r
- %r{year} = $mediaplayer.year\r
- if(%r{year}=="0")%r{year}=\r
- %bitrate = $mediaplayer.bitrate\r
- if($str.isunsignednumber(%bitrate)) %r{bitrate} = "%bitrate Kbit/s"\r
- %freq = $mediaplayer.samplerate\r
- if($str.isunsignednumber(%freq)) %r{frequency} = "$(%freq / 1000) kHz"\r
- %r{file} = $mediaplayer.localfile\r
- %r{genre} = $mediaplayer.genre\r
- if($str.containsnocase(" other unknown "," %r{genre} "))%r{genre}=\r
-\r
- return %r\r
- }\r
-\r
-\r
- display($0 = title and big header, $1 = top header,$2 = bottom header,$3 = technical informations)\r
- {\r
- %h = "<html><title>$0</title>"\r
-// %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\" text=\""%TwinsMediaPlayer{color:fg:window}"\">"\r
- %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"\r
- %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"\r
- if($1)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:artist}"\"><font color=\""%TwinsMediaPlayer{color:fg:artist}"\" style=\"font-size:10pt;\">"<b>$1</b>"</font></td></tr>"\r
- %h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:title}"\"><font color=\""%TwinsMediaPlayer{color:fg:title}"\" style=\"font-size:12pt;\"><b>"<i>$0</i>"</b></font></td></tr>"\r
- if($2)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:album}"\"><font color=\""%TwinsMediaPlayer{color:fg:album}"\" style=\"font-size:9pt;\">"$2"</font></td></tr>"\r
- if($3)%h .= $3\r
- %h .= "</table>"\r
- %h .= "</body></html>"\r
-\r
- @%m_hTextBrowser->$setText(%h)\r
- }\r
-\r
- getTech($0 = hash of info,$1 = "html" or "linear",$2 = string to insert at the end)\r
- {\r
- %lTags = $array(Year,Genre,Length,Frequency,Bitrate)\r
- foreach(%tag,year,genre,length,freq,bitrate)\r
- if($isset($0{%tag}))\r
- {\r
- if($1 == "html")\r
- {\r
- %tag = $str.upcase($str.left(%tag,1))$str.right(%tag,$($str.len(%tag)-1))\r
- %h .= "<tr><th><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">%tag:</font></th>"\r
- %h .= "<td><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">$0{%tag}</font></td></tr>"\r
- } elseif(%TwinsMediaPlayer{show%tag})%hh <+ $str.replace($0{%tag},""," ")\r
- }\r
- if($1 == "linear")\r
- {\r
- if($2)%hh <+ $2\r
- if($isset(%hh))%h = " ["$str.join(%TwinsMediaPlayer{separator},%hh)"]"\r
- }\r
- return %h\r
- }\r
-\r
- displayStatus()\r
- {\r
- @%m_hStatus->$settext($tr("Status:",twinsmediaplayer)" $tr($mediaplayer.status,twinsmediaplayer)")\r
- }\r
-\r
- play()\r
- {\r
- mediaplayer.play\r
- }\r
-\r
- stop()\r
- {\r
- mediaplayer.stop\r
- }\r
-\r
- pause()\r
- {\r
- mediaplayer.pause\r
- }\r
-\r
- previous()\r
- {\r
- mediaplayer.prev\r
- }\r
-\r
- next()\r
- {\r
- mediaplayer.next\r
- }\r
-\r
- repeat()\r
- {\r
- mediaplayer.setRepeat $(1-$mediaplayer.getrepeat)\r
- @$checkButtons\r
- }\r
-\r
- shuffle()\r
- {\r
- mediaplayer.setShuffle $(1-$mediaplayer.getshuffle)\r
- @$checkButtons\r
- }\r
-\r
- checkButtons()\r
- {\r
- %status = $mediaplayer.status\r
- %bUnknown = $(%status == "unknown")\r
- %bStopped = $(%status == "stopped")\r
- %bPlaying = $(%status == "playing")\r
- %bPaused = $(%status == "paused")\r
- %bAdv = $str.contains(" query channel "," $window.type($active) ")\r
- %bLength = $mediaplayer.length\r
- // play: not playing\r
- // next & previous: always\r
- // stop: not stopped\r
- // pause: playing\r
- // advertise: playing & (channel or query)\r
- @%m_hPlay->$setenabled($(!%bPlaying))\r
- @%m_hPause->$setenabled(%bPlaying)\r
- @%m_hStop->$setenabled($(!%bStopped))\r
- @%m_hOffer->$setenabled($((%bPlaying || %bPaused) && %bAdv))\r
- @%m_hAdv->$setenabled($((%bPlaying || %bPaused) && %bAdv))\r
- @%m_hRew->$setenabled($(%bLength && (%bPlaying || %bPaused)))\r
- @%m_hFwd->$setenabled($(%bLength && (%bPlaying || %bPaused)))\r
- if($mediaplayer.getshuffle)\r
- %pix = "twins/16x16/twins_player_random_on.png"\r
- else\r
- %pix = "twins/16x16/twins_player_random_off.png"\r
- @%m_hShuffle->$setImage(%pix)\r
- if($mediaplayer.getrepeat)\r
- %pix = "twins/16x16/twins_player_repeat_on.png"\r
- else\r
- %pix = "twins/16x16/twins_player_repeat_off.png"\r
- @%m_hRepeat->$setImage(%pix)\r
- }\r
-\r
- configure()\r
- {\r
- twins::mediaplayer::configure\r
- }\r
-\r
- close()\r
- {\r
- if(!%TwinsMediaPlayer{confirmbeforequit})\r
- {\r
- @$quit()\r
- return\r
- }\r
- if(!$objects.exists(%G_hTwinsMediaPlayer{quit}))\r
- %G_hTwinsMediaPlayer{quit} = $new(twins::mediaplayer::confirmbeforequit,$$)\r
- %G_hTwinsMediaPlayer{quit}->$show\r
- objects.connect %G_hTwinsMediaPlayer{quit} quit $$ quit\r
- }\r
- quit()\r
- {\r
- %TwinsMediaPlayer{laststartmode} = "off"\r
- twins::mediaplayer::core::config::save\r
- delete $$\r
- }\r
- destructor()\r
- {\r
- %G_hTwinsMediaPlayer{window}=\r
-\r
- }\r
-}\r
-\r
-// Play an mrl\r
-class(twins::mediaplayer::mrldialog,dialog)\r
-{\r
- constructor()\r
- {\r
-\r
- %l = $new(layout,$$)\r
- %l->$setspacing(10)\r
- %l->$setmargin(20)\r
-\r
- %title = $new(label,$$)\r
- %title->$settext(<center><b><h3>$tr("Choose a file or an Mrl to play","twinsmediaplayer")</h3></b></center><br>)\r
- %l->$addmulticellwidget(%title,0,0,0,1)\r
-\r
- %tracks = $new(button,$$)\r
- %tracks->$settext($tr("Choose a file ","twinsmediaplayer"))\r
- %l->$addmulticellwidget(%tracks,1,1,0,1)\r
- objects.connect %tracks clicked $$ chooseFile\r
-\r
- %lmrl = $new(label,$$)\r
- %lmrl->$settext($tr("Play an mrl (ex.: http://..., or dvd://...):","twinsmediaplayer"))\r
- @%m_hMrl=$new(lineedit,$$)\r
- %vmrl=$new(button,$$)\r
- %vmrl->$settext($tr("Ok","twinsmediaplayer"))\r
- %l->$addmulticellwidget(%lmrl,2,2,0,1)\r
- %l->$addwidget(@%m_hMrl,3,0)\r
- %l->$addwidget(%vmrl,3,1)\r
- objects.connect %vmrl clicked $$ playMrl\r
- if ($int($version(s))<20070107){\r
- @%m_hMrl->$setenabled($str.equal($system.ostype,windows))\r
- %vmrl->$setenabled($str.equal($system.ostype,windows))\r
- }\r
-\r
- %close = $new(button,$$)\r
- %close->$settext($tr(close))\r
- %l->$addmulticellwidget(%close,5,5,0,1)\r
- objects.connect %close clicked $$ close\r
-\r
- }\r
- playMrl()\r
- {\r
- if(!$isset(@%m_hMrl->$text))\r
- dialog.message($tr("Play Mrl","twinsmediaplayer"),$tr("Your Mrl is empty!","twinsmediaplayer"),warning){;}\r
- else mediaplayer.playmrl @%m_hMrl->$text\r
- }\r
- chooseFile()\r
- {\r
- dialog.file (open,$tr("Add File",twinsmediaplayer))\r
- {\r
- if($isset($0))mediaplayer.playmrl "file://$0"\r
- }\r
- }\r
- close()\r
- {\r
- delete $$\r
- }\r
-}\r
-\r
-// Confirm before quit\r
-class(twins::mediaplayer::confirmbeforequit,dialog)\r
-{\r
- constructor()\r
- {\r
- %G_hTwinsMediaPlayer{quit} = $$\r
- $$->$setcaption($tr("Confirm Quit",twinsmediaplayer))\r
-\r
- %l = $new(layout,$$)\r
- %l->$setmargin(20)\r
- %l->$setspacing(20)\r
-\r
- %label = $new(label,$$)\r
- %label->$settext($tr("Do you really want to close the Twins media Player?",twinsmediaplayer))\r
- %l->$addmulticellwidget(%label,0,0,0,1)\r
-\r
- @%m_hRemember = $new(checkbox,$$)\r
- @%m_hRemember->$settext($tr("Remember this choice?",twinsmediaplayer))\r
- %l->$addmulticellwidget(@%m_hRemember,1,1,0,1)\r
-\r
- %yes = $new(button,$$)\r
- %yes->$settext($tr(Yes))\r
- objects.connect %yes clicked $$ yes\r
- %l->$addwidget(%yes,2,0)\r
-\r
- %no = $new(button,$$)\r
- %no->$settext($tr(no))\r
- objects.connect %no clicked $$ no\r
- %l->$addwidget(%no,2,1)\r
- }\r
- destructor()\r
- {\r
- %G_hTwinsMediaPlayer{quit} =\r
- }\r
- yes()\r
- {\r
- if(@%m_hRemember->$ischecked())\r
- {\r
- %TwinsMediaPlayer{confirmbeforequit} = 0\r
- twins::mediaplayer::core::config::save\r
- }\r
- @$emit(quit)\r
- delete $$\r
- }\r
- no()\r
- {\r
- if(@%m_hRemember->$ischecked())\r
- {\r
- %TwinsMediaPlayer{confirmbeforequit} = 1\r
- twins::mediaplayer::core::config::save\r
- }\r
- delete $$\r
- }\r
-}\r
-\r
-\r
-\r
-// Configuration\r
-class(twins::mediaplayer::config,dialog)\r
-{\r
- constructor()\r
- {\r
- twins::mediaplayer::core::config::load\r
-\r
- %G_hTwinsMediaPlayer{config} = $$\r
- $$->$setcaption($tr("Twins Media Player Configuration",twinsmediaplayer))\r
- %ll = $new(layout,$$)\r
- %ll->$setmargin(20)\r
- %ll->$setspacing(20)\r
- @%m_hTabs = $new(tabwidget,$$)\r
- %ll->$addmulticellwidget(@%m_hTabs,0,0,0,2)\r
- %ll->$setrowstretch(0,10)\r
-\r
- //////////// First page: advertising\r
- %hTab{advert} = $new(widget,@%m_hTabs)\r
- %l{advert} = $new(layout,%hTab{advert})\r
- %l{advert}->$setmargin(10)\r
- %l{advert}->$setspacing(20)\r
- @%m_hTabs->$addtab(%hTab{advert},$tr("Advertising",twinsmediaplayer),"twins/16x16/twins_player_sayandshare.png")\r
-\r
- // Selection of technical information\r
- %techTitle = $new(label,%hTab{advert})\r
- %techTitle->$settext($tr("Choose the technical information you want to advertise",twinsmediaplayer))\r
- %l{advert}->$addmulticellwidget(%techTitle,0,0,0,2)\r
- %ic = 0\r
- %ir = 1\r
- @%m_aTags = $array(Album,Genre,Year,Length,Bitrate,Freq)\r
- foreach(%tag,@%m_aTags)\r
- {\r
- @%m_hTag{%tag} = $new(checkbox,%hTab{advert})\r
- @%m_hTag{%tag}->$setchecked(%TwinsMediaPlayer{show%tag})\r
- @%m_hTag{%tag}->$settext($tr(%tag,twinsmediaplayer))\r
- objects.connect @%m_hTag{%tag} toggled $$ updateSample\r
-\r
- %l{advert}->$addwidget(@%m_hTag{%tag},%ir,%ic)\r
- %ic++\r
- if(%ic>2)\r
- {\r
- %ic = 0\r
- %ir++\r
- }\r
- }\r
-\r
- // Announcement string\r
- %lAnnounce = $new(label,%hTab{advert})\r
- %lAnnounce->$settext($tr("Announcement string",twinsmediaplayer))\r
- @%m_hAnnounce = $new(lineedit,%hTab{advert})\r
- @%m_hAnnounce->$settext(%TwinsMediaPlayer{announce})\r
- %l{advert}->$addmulticellwidget(%lAnnounce,%ir,%ir,0,1)\r
- %l{advert}->$addwidget(@%m_hAnnounce,%ir,2)\r
- objects.connect @%m_hAnnounce textchanged $$ updateSample\r
- %ir++\r
-\r
- // Separator of technical information\r
- %lSep = $new(label,%hTab{advert})\r
- %lSep->$settext($tr("Separator string between tecnhical information",twinsmediaplayer))\r
- %l{advert}->$addmulticellwidget(%lSep,%ir,%ir,0,1)\r
- @%m_hSep = $new(lineedit,%hTab{advert})\r
- @%m_hSep->$settext(%TwinsMediaPlayer{separator})\r
- objects.connect @%m_hSep textchanged $$ updateSample\r
- %l{advert}->$addwidget(@%m_hSep,%ir,2)\r
- %ir++\r
-\r
- // Sample\r
- @%m_hSample = $new(label,%hTab{advert})\r
- @%m_hSample->$setframestyle(Panel,Sunken)\r
- @%m_hSample->$setbackgroundcolor(ffffff)\r
- @%m_hSample->$setforegroundcolor(ff00ff)\r
- %l{advert}->$addmulticellwidget(@%m_hSample,%ir,%ir,0,2)\r
- @$updateSample()\r
- %ir++\r
-\r
- // Share timeout\r
- %lShareTimeout = $new(label,%hTab{advert})\r
- %lShareTimeout->$settext($tr("Timeout of file offers",twinsmediaplayer))\r
- @%m_hShareTimeout = $new(spinbox,%hTab{advert})\r
- @%m_hShareTimeout->$setminvalue(1)\r
- @%m_hShareTimeout->$setmaxvalue(60)\r
- @%m_hShareTimeout->$setsuffix(mn)\r
- @%m_hShareTimeout->$setvalue(%TwinsMediaPlayer{sharetimeout})\r
- %l{advert}->$addmulticellwidget(%lShareTimeout,%ir,%ir,0,1)\r
- %l{advert}->$addwidget(@%m_hShareTimeout,%ir,2)\r
- %ir++\r
-\r
- // Max length of offered file names\r
- %lFileNameLength = $new(label,%hTab{advert})\r
- %lFileNameLength->$settext($tr("Max length of offered file names",twinsmediaplayer))\r
- @%m_hFileNameLength = $new(spinbox,%hTab{advert})\r
- @%m_hFileNameLength->$setminvalue(1)\r
- @%m_hFileNameLength->$setmaxvalue(300)\r
- @%m_hFileNameLength->$setvalue(%TwinsMediaPlayer{maxoffernamelength})\r
- %l{advert}->$addmulticellwidget(%lFileNameLength,%ir,%ir,0,1)\r
- %l{advert}->$addwidget(@%m_hFileNameLength,%ir,2)\r
-\r
-\r
- //////////// Second page: look\r
- @%m_hTab{look} = $new(widget,@%m_hTabs)\r
- %l{look} = $new(layout,@%m_hTab{look})\r
- %l{look}->$setmargin(10)\r
- %l{look}->$setspacing(5)\r
- @%m_hTabs->$addtab(@%m_hTab{look},$tr("Look",twinsmediaplayer),149)\r
-\r
- // Colors\r
- %g = @$addColorBox(window,$tr("Window",twinsmediaplayer))\r
- %l{look}->$addwidget(%g,0,0)\r
- %g = @$addColorBox(artist,$tr("Artist",twinsmediaplayer))\r
- %l{look}->$addwidget(%g,1,0)\r
- %g = @$addColorBox(title,$tr("Title",twinsmediaplayer))\r
- %l{look}->$addwidget(%g,2,0)\r
- %g = @$addColorBox(album,$tr("Album",twinsmediaplayer))\r
- %l{look}->$addwidget(%g,2,1)\r
-\r
- // Sample\r
- @%m_hWindowSample = $new(textbrowser,@%m_hTab{look})\r
- %l{look}->$addmulticellwidget(@%m_hWindowSample,0,1,1,1)\r
- @$updateWindowSample()\r
-\r
-\r
- //////////// Third page: the player\r
- %hTab{player} = $new(widget,@%m_hTabs)\r
- %l{player} = $new(layout,%hTab{player})\r
- %l{player}->$setmargin(10)\r
- %l{player}->$setspacing(10)\r
- @%m_hTabs->$addtab(%hTab{player},$tr("Player",twinsmediaplayer),167)\r
-\r
- // Choose\r
- switch($str.lowcase($system.osname)){\r
- case(linux)@%m_aPlayers = $array(amarok,xmms,juk)\r
- case(windows)@%m_aPlayers = $array(winamp)\r
- default:@%m_aPlayers = $array(amarok,xmms,juk,winamp)\r
- }\r
- %lChoose = $new(label,%hTab{player})\r
- %lChoose->$settext($tr("Choose your player",twinsmediaplayer))\r
- @%m_hChoose = $new(combobox,%hTab{player})\r
- foreach(%player,@%m_aPlayers)@%m_hChoose->$insertitem(%player)\r
- %okChosen = $new(button,%hTab{player})\r
- %okChosen->$settext($tr(Ok))\r
- objects.connect %okChosen clicked $$ chosen\r
- @$updatePlayer()\r
-\r
- // Detect\r
- %detect = $new(button, %hTab{player})\r
- %detect->$settext($tr("Auto-detect",twinsmediaplayer))\r
- objects.connect %detect clicked $$ detect\r
- @%m_hDetect = $new(label,%hTab{player})\r
- @%m_hDetect->$setframestyle(Box,Sunken)\r
-\r
- // Layout\r
- %l{player}->$addwidget(%lChoose,0,0)\r
- %l{player}->$addwidget(@%m_hChoose,1,0)\r
- %l{player}->$addwidget(%okChosen,2,0)\r
- %l{player}->$addwidget(%detect,1,1)\r
- %l{player}->$addwidget(@%m_hDetect,2,1)\r
- %l{player}->$setrowstretch(1,5)\r
- %l{player}->$setrowstretch(2,5)\r
-\r
-\r
- /////////// Last page: Start and Quit\r
- %hTab{sq} = $new(widget,@%m_hTabs)\r
- %l{sq} = $new(layout,%hTab{sq})\r
- %l{sq}->$setmargin(10)\r
- %l{sq}->$setspacing(10)\r
- @%m_hTabs->$addtab(%hTab{sq},$tr("Start && Quit",twinsmediaplayer),145)\r
-\r
- // Restart Group\r
- %hStart = $new(groupbox,%hTab{sq})\r
- %hStart->$settitle($tr("Start mode",twinsmediaplayer))\r
- %lStart = $new(layout,%hStart)\r
- %lStart->$setmargin(20)\r
- %lStart->$setspacing(10)\r
- %l{sq}->$addwidget(%hStart,0,0)\r
- // Setup\r
- @%m_szStartMode = %TwinsMediaPlayer{startmode}\r
- foreach(%state,on,off,remember)\r
- {\r
- @%m_hStart{%state} = $new(checkbox,%hStart)\r
- @%m_hStart{%state}->$setchecked($(%TwinsMediaPlayer{startmode}==%state))\r
- objects.connect @%m_hStart{%state} toggled $$ toggleStart%state\r
- }\r
- // Text\r
- @%m_hStart{on}->$settext($tr("Always start the media player with KVIrc",twinsmediaplayer))\r
- @%m_hStart{off}->$settext($tr("Let the user to manually start the media player",twinsmediaplayer))\r
- @%m_hStart{remember}->$settext($tr("Remember the media player state of the last KVIrc session",twinsmediaplayer))\r
- // Layout\r
- %lStart->$addwidget(@%m_hStart{on},0,0)\r
- %lStart->$addwidget(@%m_hStart{off},1,0)\r
- %lStart->$addwidget(@%m_hStart{remember},2,0)\r
-\r
- // Confirm before quit\r
- @%m_hConfirm = $new(checkbox,%hTab{sq})\r
- @%m_hConfirm->$settext($tr("Confirm before quit",twinsmediaplayer))\r
- @%m_hConfirm->$setchecked(%TwinsMediaPlayer{confirmbeforequit})\r
- %l{sq}->$addwidget(@%m_hConfirm,1,0)\r
-\r
-\r
-\r
- // Ok\r
- %ok = $new(button,$$)\r
- %ok->$settext($tr(Ok))\r
- objects.connect %ok clicked $$ ok\r
- %ll->$addwidget(%ok,1,0)\r
-\r
-\r
- // Apply\r
- %apply = $new(button,$$)\r
- %apply->$settext($tr(Apply))\r
- objects.connect %apply clicked $$ apply\r
- %ll->$addwidget(%apply,1,1)\r
-\r
-\r
- // Close\r
- %close = $new(button,$$)\r
- %close->$settext($tr(Close))\r
- objects.connect %close clicked $$ close\r
- %ll->$addwidget(%close,1,2)\r
-\r
- }\r
-\r
- addColorBox($0 = name,$1 = label)\r
- {\r
- %g = $new(groupbox,@%m_hTab{look})\r
- %g->$settitle($1)\r
- %l = $new(layout,%g)\r
- %l->$setspacing(5)\r
- %l->$setmargin(15)\r
-\r
- %labelfg = $new(label,%g)\r
- %labelfg->$settext($tr("Foreground",twinsmediaplayer))\r
-\r
- @%m_hColors{fg:$0} = $new(lineedit,%g)\r
- @%m_hColors{fg:$0}->$settext(%TwinsMediaPlayer{color:fg:$0})\r
- @%m_hColors{fg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))\r
- objects.connect @%m_hColors{fg:$0} textchanged $$ updateWindowSample\r
-\r
- %labelbg = $new(label,%g)\r
- %labelbg->$settext($tr("Background",twinsmediaplayer))\r
-\r
- @%m_hColors{bg:$0} = $new(lineedit,%g)\r
- @%m_hColors{bg:$0}->$settext(%TwinsMediaPlayer{color:bg:$0})\r
- @%m_hColors{bg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))\r
- objects.connect @%m_hColors{bg:$0} textchanged $$ updateWindowSample\r
-\r
- %l->$addwidget(%labelfg,0,0)\r
- %l->$addwidget(@%m_hColors{fg:$0},0,1)\r
- %l->$addwidget(%labelbg,1,0)\r
- %l->$addwidget(@%m_hColors{bg:$0},1,1)\r
-\r
- return %g\r
- }\r
-\r
- updateWindowSample()\r
- {\r
- %h = "<body bgcolor=\""@%m_hColors{bg:window}->$text()"\">"\r
- %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"\r
- %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:artist}->$text()"\">"\r
- %h .= " <font color=\""@%m_hColors{fg:artist}->$text()"\" style=\"font-size:10pt;\">"<b>Radiohead</b>"</font></td></tr>"\r
- %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:title}->$text()"\">"\r
- %h .= " <font color=\""@%m_hColors{fg:title}->$text()"\" style=\"font-size:12pt;\"><b>"<i>Pyramid Song</i>"</b></font></td></tr>"\r
- %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:album}->$text()"\">"\r
- %h .= " <font color=\""@%m_hColors{fg:album}->$text()"\" style=\"font-size:9pt;\">"Amnesiac"</font></td></tr>"\r
- %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Genre:",twinsmediaplayer)"</font></th>"\r
- %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">Brit Pop</font></td></tr>"\r
- %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Length:",twinsmediaplayer)"</font></th>"\r
- %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">04m49s</font></td></tr>"\r
- %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Bitrate:",twinsmediaplayer)"</font></th>"\r
- %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">128 Kbit/s</font></td></tr>"\r
- %h .= "</table></font></body></html>"\r
-\r
- @%m_hWindowSample->$setText(%h)\r
-\r
- }\r
-\r
- updateSample()\r
- {\r
- if($ic&&$isset($me))%nick=$me\r
- else %nick=My_Nick\r
- %s = "* %nick "@%m_hAnnounce->$text()" Radiohead - Pyramid song"\r
- if(@%m_hTag{album}->$ischecked)%s << "(Amnesiac)"\r
- if(@%m_hTag{genre}->$ischecked) %t <+ Rock\r
- if(@%m_hTag{year}->$ischecked) %t <+ 2001\r
- if(@%m_hTag{length}->$ischecked) %t <+ "04m49s"\r
- if(@%m_hTag{bitrate}->$ischecked) %t <+ "128Kbit/s"\r
- if(@%m_hTag{freq}->$ischecked) %t <+ "44kHz"\r
- if($isset(%t)) %s << "["$str.join(@%m_hSep->$text,%t)"]"\r
- %s = $str.replace(%s,"<","<")\r
- %s = $str.replace(%s,">",">")\r
- @%m_hSample->$settext("<font size=-1>%s</font>")\r
- }\r
-\r
- detect()\r
- {\r
- mediaplayer.detect\r
- %result = $mediaplayer.player\r
- if($str.isempty(%result))%result = $tr("none",twinsmediaplayer)\r
- @%m_hDetect->$settext($tr("Found:",twinsmediaplayer) %result)\r
- @$updatePlayer()\r
- }\r
-\r
- updatePlayer()\r
- {\r
- if(!$isset($mediaplayer.player))return\r
- %i=0\r
- foreach(%player,@%m_aPlayers)\r
- {\r
- if($str.equal($mediaplayer.player,@%m_hChoose->$textat(%i)))\r
- {\r
- @%m_hChoose->$setcurrentitem(%i)\r
- return\r
- }\r
- %i++\r
- }\r
- }\r
-\r
- chosen()\r
- {\r
- mediaplayer.setPlayer @%m_hChoose->$current()\r
- }\r
-\r
- toggleStartOn()\r
- {\r
- @$toggleStart(on)\r
- }\r
-\r
- toggleStartOff()\r
- {\r
- @$toggleStart(off)\r
- }\r
-\r
- toggleStartRemember()\r
- {\r
- @$toggleStart(remember)\r
- }\r
- toggleStart($0 = state type)\r
- {\r
- if($0 == @%m_szStartMode)\r
- {\r
- @%m_hStart{$0}->$setchecked(1)\r
- } elseif(@%m_hStart{$0}->$ischecked)\r
- {\r
- %old = @%m_szStartMode\r
- @%m_szStartMode = $0\r
- @%m_hStart{%old}->$setchecked(0)\r
- }\r
- }\r
- ok()\r
- {\r
- @$apply()\r
- @$close()\r
- }\r
-\r
- apply()\r
- {\r
- %TwinsMediaPlayer{sharetimeout} = @%m_hShareTimeout->$value()\r
- %TwinsMediaPlayer{confirmbeforequit} = @%m_hConfirm->$ischecked()\r
- %TwinsMediaPlayer{separator} = @%m_hSep->$text()\r
- %TwinsMediaPlayer{announce} = @%m_hAnnounce->$text()\r
-\r
- foreach(%tag,@%m_aTags)\r
- %TwinsMediaPlayer{show%tag} = @%m_hTag{%tag}->$ischecked()\r
-\r
- foreach(%tag,window,artist,title,album)\r
- foreach(%bg,fg,bg)\r
- %TwinsMediaPlayer{color:%bg:%tag} = @%m_hColors{%bg:%tag}->$text()\r
-\r
- if($isset(@%m_hChoose->$current()))\r
- mediaplayer.setPlayer @%m_hChoose->$current()\r
-\r
- foreach(%state,on,off,remember)\r
- if(@%m_hStart{%state}->$ischecked())\r
- {\r
- %TwinsMediaPlayer{startmode} = %state\r
- break\r
- }\r
-\r
- twins::mediaplayer::core::config::save\r
-\r
- // Update the player look now\r
- if($objects.exists(%G_hTwinsMediaPlayer{window}))\r
- %G_hTwinsMediaPlayer{window}->$updateWindow(1)\r
- }\r
-\r
- close()\r
- {\r
- delete $$\r
- }\r
-\r
- destructor()\r
- {\r
- %G_hTwinsMediaPlayer{config} =\r
- }\r
-}\r
-\r
-\r
-/*\r
-twins::admin::reguninstall --class=$array(twins::mediaplayer::window,\\r
- twins::mediaplayer::confirmbeforequit,\\r
- twins::mediaplayer::config,twins::mediaplayer::mrldialog)\r
-*/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+# Hack for the xgettext: this code will never be executed, but will be added to the translation file
+if(0)
+{
+ #Year,Genre,Length,Frequency,Bitrate
+ $tr("Year",twinsmediaplayer)
+ $tr("Genre",twinsmediaplayer)
+ $tr("Length",twinsmediaplayer)
+ $tr("Frequency",twinsmediaplayer)
+ $tr("Bitrate",twinsmediaplayer)
+ $tr("Freq",twinsmediaplayer)
+ $tr("unknown",twinsmediaplayer)
+ $tr("stopped",twinsmediaplayer)
+ $tr("playing",twinsmediaplayer)
+ $tr("paused",twinsmediaplayer)
+}
+
+class(twins::mediaplayer::window,dockwindow)
+{
+
+ createToolButton($0 = $image)
+ {
+ %tb = $new(toolbutton,@%m_hContainer)
+ %tb->$setImage($0)
+ %tb->$setUsesBigPixmap($false)
+ %tb->$setUsesTextLabel($false)
+ %tb->$setAutoRaise($true)
+ %tb->$setMaximumWidth(24)
+ %tb->$setMaximumHeight(24)
+ return %tb
+ }
+
+ constructor()
+ {
+
+ twins::mediaplayer::core::config::load
+ %TwinsMediaPlayer{laststartmode} = "on"
+ twins::mediaplayer::core::config::save
+
+ %G_hTwinsMediaPlayer{window} = $$
+ $$->$setCaption($str.printf($tr("Twins MediaPlayer-?s",twinsmediaplayer),$addon.version(twinsmediaplayer)))
+
+ @$setAllowedDockAreas("lrfm")
+ @$setResizeEnabled($true)
+
+ @%m_hContainer = $new(widget,$this)
+ %l = $new(layout,@%m_hContainer)
+
+ // Information
+ @%m_hTextBrowser = $new(textbrowser,@%m_hContainer)
+ %l->$addMultiCellWidget(@%m_hTextBrowser,0,0,0,6)
+
+
+ // ** newline **
+
+
+ // Back
+ @%m_hBack = $$->$createToolButton("twins/16x16/twins_player_back.png")
+ @%m_hBack->$settooltip($tr("Previous track","twinsmediaplayer"))
+ %l->$addWidget(@%m_hBack,1,0)
+ objects.connect @%m_hBack clicked $$ previous
+
+ // Rewind
+ @%m_hRew = $$->$createToolButton("twins/16x16/twins_player_rewind.png")
+ @%m_hRew->$settooltip($tr("Rewind","twinsmediaplayer"))
+ %l->$addWidget(@%m_hRew,1,1)
+ objects.connect @%m_hRew clicked $$ rew
+
+ // Stop
+ @%m_hStop = $$->$createToolButton("twins/16x16/twins_player_stop.png")
+ @%m_hStop->$settooltip($tr("Stop","twinsmediaplayer"))
+ %l->$addWidget(@%m_hStop,1,2)
+ objects.connect @%m_hStop clicked $$ stop
+
+ // Pause
+ @%m_hPause = $$->$createToolButton("twins/16x16/twins_player_pause.png")
+ @%m_hPause->$settooltip($tr("Pause","twinsmediaplayer"))
+ %l->$addWidget(@%m_hPause,1,3)
+ objects.connect @%m_hPause clicked $$ pause
+
+ // Play
+ @%m_hPlay = $$->$createToolButton("twins/16x16/twins_player_play.png")
+ @%m_hPlay->$settooltip($tr("Play","twinsmediaplayer"))
+ %l->$addWidget(@%m_hPlay,1,4)
+ objects.connect @%m_hPlay clicked $$ play
+
+ // Fast forward
+ @%m_hFwd = $$->$createToolButton("twins/16x16/twins_player_fastforward.png")
+ @%m_hFwd->$settooltip($tr("Fast forward","twinsmediaplayer"))
+ %l->$addWidget(@%m_hFwd,1,5)
+ objects.connect @%m_hFwd clicked $$ fwd
+
+ // Next
+ @%m_hNext = $$->$createToolButton("twins/16x16/twins_player_next.png")
+ @%m_hNext->$settooltip($tr("Next track","twinsmediaplayer"))
+ %l->$addWidget(@%m_hNext,1,6)
+ objects.connect @%m_hNext clicked $$ next
+
+
+ // ** newline **
+
+
+ // Time slider
+ @%m_hTime = $new(slider,@%m_hContainer)
+ @%m_hTime->%step=4
+ @%m_hTime->$setpagestep(@%m_hTime->%step)
+ @%m_hTime->$settracking(0)
+ @%m_hTime->$setorientation("Horizontal")
+ @%m_hTime->$setvalue($($mediaplayer.position / 1000))
+ %l->$addmulticellWidget(@%m_hTime,2,2,0,1)
+
+ // Time label
+ @%m_hTimeLabel = $new(label,@%m_hContainer)
+ @%m_hTimeLabel->$setfont(8,courrier,fixedpitch)
+ @%m_hTimeLabel->$setalignment(Right)
+ @%m_hTimeLabel->$setframestyle(Panel,Sunken)
+ @%m_hTimeLabel->$setmaximumheight(18)
+ %l->$addmulticellWidget(@%m_hTimeLabel,2,2,2,3)
+
+ // Shuffle
+ if($mediaplayer.getshuffle)
+ %pix = "twins/16x16/twins_player_random_on.png"
+ else
+ %pix = "twins/16x16/twins_player_random_off.png"
+ @%m_hShuffle = $$->$createToolButton(%pix)
+ @%m_hShuffle->$settooltip($tr("Shuffle","twinsmediaplayer"))
+ %l->$addWidget(@%m_hShuffle,2,4)
+ objects.connect @%m_hShuffle clicked $$ shuffle
+
+ // Repeat
+ if($mediaplayer.getrepeat)
+ %pix = "twins/16x16/twins_player_repeat_on.png"
+ else
+ %pix = "twins/16x16/twins_player_repeat_off.png"
+ @%m_hRepeat = $$->$createToolButton(%pix)
+ @%m_hRepeat->$settooltip($tr("Repeat current track","twinsmediaplayer"))
+ %l->$addWidget(@%m_hRepeat,2,5)
+ objects.connect @%m_hRepeat clicked $$ repeat
+
+ // Advertise
+ @%m_hAdv = $$->$createToolButton("twins/16x16/twins_player_say.png")
+ @%m_hAdv->$settooltip($tr("Advertise the current track on a channel or in a query","twinsmediaplayer"))
+ %l->$addWidget(@%m_hadv,2,6)
+ objects.connect @%m_hAdv clicked $$ advertise
+
+
+ // ** Newline **
+
+
+ // Configure
+ @%m_hConfig = $$->$createToolButton("twins/16x16/twins_player_configure.png")
+ @%m_hConfig->$settooltip($tr("Configure the media player","twinsmediaplayer"))
+ %l->$addWidget(@%m_hConfig,3,0)
+ objects.connect @%m_hConfig clicked $$ configure
+
+ // Volume slider
+ @%m_hVol = $new(slider,@%m_hContainer)
+ @%m_hVol->$settooltip($tr("Volume control","twinsmediaplayer"))
+ @%m_hVol->$setorientation("Horizontal")
+ @%m_hVol->$setminvalue(0)
+ @%m_hVol->$setmaxvalue(100)
+ @%m_hVol->%step=5
+ @%m_hVol->$setpagestep(@%m_hVol->%step)
+ @%m_hVol->$settracking(1)
+ @%m_hVol->$setTickInterval(10)
+ @%m_hVol->$setvalue($($mediaplayer.getvol * 100 / 255))
+ %l->$addmulticellWidget(@%m_hVol,3,3,1,2)
+ objects.connect @%m_hVol valueChanged $$ setVol
+
+ // Volume label
+ @%m_hVolLabel = $new(label,@%m_hContainer)
+ @%m_hVolLabel->$setfont(8,courrier,fixedpitch)
+ @%m_hVolLabel->$setalignment(Right)
+ @%m_hVolLabel->$settooltip($tr("Current volume","twinsmediaplayer"))
+// @%m_hVolLabel->$setframestyle(Panel,Sunken)
+ @%m_hVolLabel->$setmaximumheight(18)
+ %l->$addWidget(@%m_hVolLabel,3,3)
+
+ // Volume icon
+ %hVol = $$->$createToolButton("twins/16x16/twins_player_volume.png")
+ %hVol->$settooltip($tr("Volume","twinsmediaplayer"))
+ %l->$addWidget(%hVol,3,4)
+
+ // Add to playlist
+ @%m_hPL = $$->$createToolButton("twins/16x16/twins_player_playlist.png")
+ @%m_hPL->$settooltip($tr("Open url or add files to playlist","twinsmediaplayer"))
+ %l->$addWidget(@%m_hPL,3,5)
+ objects.connect @%m_hPL clicked $$ playMrl
+
+ // Offer
+ @%m_hOffer = $$->$createToolButton("twins/16x16/twins_player_sayandshare.png")
+ @%m_hOffer->$settooltip($tr("Advertise and <i>offer</i> the current track on a channel or in a query","twinsmediaplayer"))
+ %l->$addWidget(@%m_hOffer,3,6)
+ objects.connect @%m_hOffer clicked $$ offer
+
+
+ // ** Newline **
+
+
+ // Close
+ @%m_hClose = $$->$createToolButton("twins/16x16/twins_player_close.png")
+ @%m_hClose->$settooltip($tr("Close the media player","twinsmediaplayer"))
+ %l->$addWidget(@%m_hClose,4,0)
+ objects.connect @%m_hClose clicked $$ close
+
+ // Show player
+ %show = @$createToolButton("twins/16x16/twins_player_show.png")
+ %show->$settooltip($tr("Show the player","twinsmediaplayer"))
+ %l->$addWidget(%show,4,1)
+ objects.connect %show clicked $$ showPlayer
+
+ // Hide player
+ %hide = @$createToolButton("twins/16x16/twins_player_hide.png")
+ %hide->$settooltip($tr("Hide the player","twinsmediaplayer"))
+ %l->$addWidget(%hide,4,2)
+ objects.connect %hide clicked $$ hidePlayer
+
+ // Status
+ @%m_hStatus = $new(label,@%m_hContainer)
+// @%m_hStatus->$setfont(8,courrier,fixedpitch)
+ @%m_hVolLabel->$setalignment(Right)
+ %l->$addmulticellwidget(@%m_hStatus,4,4,3,6)
+
+
+ @$addWidget(@%m_hContainer)
+
+ @$displaystatus
+ @$checkbuttons()
+
+ @$timerEvent()
+ @$starttimer($(2000))
+
+ }
+
+ showPlayer()
+ {
+ mediaplayer.show -q
+ }
+
+ hidePlayer()
+ {
+ mediaplayer.hide -q
+ }
+
+ timerEvent()
+ {
+ // Update status
+ @$displaystatus()
+
+ // Update volume
+ @$updateVol(1)
+
+ // Update time position
+ @$updateTime
+
+ // Check button status
+ @$checkbuttons()
+
+ // Display information in main window and update time slider length
+ @$updateWindow(0)
+ }
+
+ updateVol($1 = do not send to player)
+ {
+ %iVol = $($mediaplayer.getvol * 100 / 255)
+ if(%iVol<0 || %iVol>100){
+ @%m_hVol->$setValue(50)
+ @%m_hVolLabel->$settext("---\%")
+ } else {
+ if($math.abs($(%iVol-@%m_hVol->$value))>=@%m_hVol->%step)
+ @%m_hVol->$setValue(%iVol)
+ if(%iVol<10)
+ %iVol=" %iVol"
+ elseif(%iVol<100)
+ %iVol=" %iVol"
+ @%m_hVolLabel->$settext("%iVol\%")
+ }
+ }
+
+ setVol()
+ {
+ if($mediaplayer.status != "unknown"){
+ mediaplayer.setvol -q $(@%m_hVol->$value * 255 / 100)
+ @$updateVol()
+ }
+ }
+
+ updateWindow($0 = force update?)
+ {
+ if(!$0)
+ {
+ // * shunt normal file
+ if( $mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl)
+ return
+ // * shunt flux
+ elseif( !$mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl && \
+ @%m_hOldPlay == $mediaplayer.nowplaying ) return
+ }
+ @%m_hOldSource = $mediaplayer.mrl
+ @%m_hOldPlay = $mediaplayer.nowplaying
+ // * ok do it if playing
+ if($str.contains(" unknown stopped "," $mediaplayer.status "))
+ {
+ %h = "<html><title>$0</title>"
+ %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"
+ %h .= $tr("No track being played",twinsmediaplayer)
+ %h .= "</body></html>"
+ @%m_hTextBrowser->$setText(%h)
+ @%m_hOldSource = ""
+ @%m_hOldPlay = ""
+ } else {
+ %info = @$getinfo
+ @$display(%info{title},%info{artist},%info{album},@$getTech(%info,html))
+ @%m_hTime->$setmaxvalue($($mediaplayer.length / 1000))
+ @%m_hTime->$settickinterval($(@%m_hTime->$maxvalue / 4))
+ }
+ }
+
+ updateTime($0 = time)
+ {
+ if(!@%m_hTime->$maxvalue || $str.contains(" unknown stopped "," $mediaplayer.status "))
+ {
+ @%m_hTimeLabel->$settext("--:--:--")
+ @%m_hTime->$setvalue(0)
+ return
+ }
+ if($isset($0))
+ %iTime = $0
+ else
+ %iTime = $mediaplayer.position
+ @%m_hTime->$setvalue($(%iTime / 1000))
+ @%m_hTimeLabel->$settext(@$formatTime(%iTime))
+ }
+
+ rew()
+ {
+ if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){
+ %iPos = $($mediaplayer.position - 5000)
+ if(%iPos < 0) %iPos = 0
+ mediaplayer.jumpto -q %iPos
+ @$updateTime(%iPos)
+ }
+ }
+
+ fwd()
+ {
+ if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){
+ %iPos = $($mediaplayer.position + 5000)
+ if(%iPos > $mediaplayer.length) %iPos = $mediaplayer.length
+ mediaplayer.jumpto -q %iPos
+ @$updateTime(%iPos)
+ }
+ }
+
+ formatTime($0 = time in ms)
+ {
+ if($str.isunsignednumber($0))
+ {
+ %lh = $($0 / 3600000)
+ %lm = $(($0 % 3600000) / 60000)
+ %ls = $(($0 % 60000) / 1000)
+ if(%lh > 0)%r .= %lh"h"
+ if(%lm < 10)%r .= "0"%lm"m"
+ else %r .= %lm"m"
+ if(%ls < 10)%r .= "0"%ls\s
+ else %r .= %ls\s
+ return %r
+ }
+ }
+
+ playMrl()
+ {
+ if(!$objects.exists(%G_hTwinsMediaPlayer{playmrl}))
+ %G_hTwinsMediaPlayer{playmrl} = $new(twins::mediaplayer::mrldialog,$$)
+ %G_hTwinsMediaPlayer{playmrl}->$show
+ }
+
+ offer()
+ {
+ @$advertise(1)
+ }
+
+ advertise($0 = offer?)
+ {
+ %w = $active
+ %info = @$getinfo
+ if($isset(%info{artist})) %s << "%info{artist} -"
+ %s << %info{title}
+ if(%TwinsMediaPlayer{showalbum}&&%info{album}) %s << " (%info{album})"
+ if($0)
+ {
+ %file = $mediaplayer.localfile
+ if(!%file) %share=$mediaplayer.mrl
+ else
+ {
+ if(!$isset(%TwinsMediaPlayer.sharecount))
+ %TwinsMediaPlayer.sharecount=1
+ %nowplaying=$mediaplayer.nowplaying
+ for(%i=0;%i<%TwinsMediaPlayer{maxoffernamelength};%i++)
+ {
+ if(%i==$str.length(%nowplaying))break
+ %c=$str.mid(%nowplaying,%i,1)
+ if($str.contains("()[] ",%c))%c="_"
+ %name .= %c
+ }
+ %name .= _%TwinsMediaPlayer.sharecount
+ %TwinsMediaPlayer.sharecount++
+ sharedfile.add -t=$(%TwinsMediaPlayer{sharetimeout} * 60) -n=%name %file
+ %size = $file.size(%file)
+ %onemeg = $(1024 * 1024)
+ if(%size > %onemeg)
+ {
+ %mb = $(%size / %onemeg)
+ %rest = $((%size % %onemeg) / 10240)
+ %size = %mb"."$(%rest / 10)$(%rest % 10)"Mb"
+ } else {
+ %size = %size"bytes"
+ }
+
+ %share = "$b/ctcp $me xdcc get %name$b (%size)"
+ }
+ %s .= @$gettech(%info,linear,%share)
+ } else %s .= @$gettech(%info,linear)
+ me -r=%w %TwinsMediaPlayer{announce} %s
+ }
+
+ getInfo()
+ {
+ %r{artist} = $mediaplayer.artist
+ %r{title} = $mediaplayer.title
+ if(%r{artist} == "" || %r{title} == "")
+ {
+ %r{artist} =
+ %r{title} = $mediaplayer.nowplaying
+ }
+ %r{album} = $mediaplayer.album
+ if($str.equal(%r{album},"Other"))%r{album} =
+ %length = $mediaplayer.length
+ if(%length) %r{length} = @$formatTime(%length)
+ %r{year} = $mediaplayer.year
+ if(%r{year}=="0")%r{year}=
+ %bitrate = $mediaplayer.bitrate
+ if($str.isunsignednumber(%bitrate)) %r{bitrate} = "%bitrate Kbit/s"
+ %freq = $mediaplayer.samplerate
+ if($str.isunsignednumber(%freq)) %r{frequency} = "$(%freq / 1000) kHz"
+ %r{file} = $mediaplayer.localfile
+ %r{genre} = $mediaplayer.genre
+ if($str.containsnocase(" other unknown "," %r{genre} "))%r{genre}=
+
+ return %r
+ }
+
+
+ display($0 = title and big header, $1 = top header,$2 = bottom header,$3 = technical informations)
+ {
+ %h = "<html><title>$0</title>"
+// %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\" text=\""%TwinsMediaPlayer{color:fg:window}"\">"
+ %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"
+ %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"
+ if($1)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:artist}"\"><font color=\""%TwinsMediaPlayer{color:fg:artist}"\" style=\"font-size:10pt;\">"<b>$1</b>"</font></td></tr>"
+ %h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:title}"\"><font color=\""%TwinsMediaPlayer{color:fg:title}"\" style=\"font-size:12pt;\"><b>"<i>$0</i>"</b></font></td></tr>"
+ if($2)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:album}"\"><font color=\""%TwinsMediaPlayer{color:fg:album}"\" style=\"font-size:9pt;\">"$2"</font></td></tr>"
+ if($3)%h .= $3
+ %h .= "</table>"
+ %h .= "</body></html>"
+
+ @%m_hTextBrowser->$setText(%h)
+ }
+
+ getTech($0 = hash of info,$1 = "html" or "linear",$2 = string to insert at the end)
+ {
+ %lTags = $array(Year,Genre,Length,Frequency,Bitrate)
+ foreach(%tag,year,genre,length,freq,bitrate)
+ if($isset($0{%tag}))
+ {
+ if($1 == "html")
+ {
+ %tag = $str.upcase($str.left(%tag,1))$str.right(%tag,$($str.len(%tag)-1))
+ %h .= "<tr><th><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">%tag:</font></th>"
+ %h .= "<td><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">$0{%tag}</font></td></tr>"
+ } elseif(%TwinsMediaPlayer{show%tag})%hh <+ $str.replace($0{%tag},""," ")
+ }
+ if($1 == "linear")
+ {
+ if($2)%hh <+ $2
+ if($isset(%hh))%h = " ["$str.join(%TwinsMediaPlayer{separator},%hh)"]"
+ }
+ return %h
+ }
+
+ displayStatus()
+ {
+ @%m_hStatus->$settext($tr("Status:",twinsmediaplayer)" $tr($mediaplayer.status,twinsmediaplayer)")
+ }
+
+ play()
+ {
+ mediaplayer.play
+ }
+
+ stop()
+ {
+ mediaplayer.stop
+ }
+
+ pause()
+ {
+ mediaplayer.pause
+ }
+
+ previous()
+ {
+ mediaplayer.prev
+ }
+
+ next()
+ {
+ mediaplayer.next
+ }
+
+ repeat()
+ {
+ mediaplayer.setRepeat $(1-$mediaplayer.getrepeat)
+ @$checkButtons
+ }
+
+ shuffle()
+ {
+ mediaplayer.setShuffle $(1-$mediaplayer.getshuffle)
+ @$checkButtons
+ }
+
+ checkButtons()
+ {
+ %status = $mediaplayer.status
+ %bUnknown = $(%status == "unknown")
+ %bStopped = $(%status == "stopped")
+ %bPlaying = $(%status == "playing")
+ %bPaused = $(%status == "paused")
+ %bAdv = $str.contains(" query channel "," $window.type($active) ")
+ %bLength = $mediaplayer.length
+ // play: not playing
+ // next & previous: always
+ // stop: not stopped
+ // pause: playing
+ // advertise: playing & (channel or query)
+ @%m_hPlay->$setenabled($(!%bPlaying))
+ @%m_hPause->$setenabled(%bPlaying)
+ @%m_hStop->$setenabled($(!%bStopped))
+ @%m_hOffer->$setenabled($((%bPlaying || %bPaused) && %bAdv))
+ @%m_hAdv->$setenabled($((%bPlaying || %bPaused) && %bAdv))
+ @%m_hRew->$setenabled($(%bLength && (%bPlaying || %bPaused)))
+ @%m_hFwd->$setenabled($(%bLength && (%bPlaying || %bPaused)))
+ if($mediaplayer.getshuffle)
+ %pix = "twins/16x16/twins_player_random_on.png"
+ else
+ %pix = "twins/16x16/twins_player_random_off.png"
+ @%m_hShuffle->$setImage(%pix)
+ if($mediaplayer.getrepeat)
+ %pix = "twins/16x16/twins_player_repeat_on.png"
+ else
+ %pix = "twins/16x16/twins_player_repeat_off.png"
+ @%m_hRepeat->$setImage(%pix)
+ }
+
+ configure()
+ {
+ twins::mediaplayer::configure
+ }
+
+ close()
+ {
+ if(!%TwinsMediaPlayer{confirmbeforequit})
+ {
+ @$quit()
+ return
+ }
+ if(!$objects.exists(%G_hTwinsMediaPlayer{quit}))
+ %G_hTwinsMediaPlayer{quit} = $new(twins::mediaplayer::confirmbeforequit,$$)
+ %G_hTwinsMediaPlayer{quit}->$show
+ objects.connect %G_hTwinsMediaPlayer{quit} quit $$ quit
+ }
+ quit()
+ {
+ %TwinsMediaPlayer{laststartmode} = "off"
+ twins::mediaplayer::core::config::save
+ delete $$
+ }
+ destructor()
+ {
+ %G_hTwinsMediaPlayer{window}=
+
+ }
+}
+
+// Play an mrl
+class(twins::mediaplayer::mrldialog,dialog)
+{
+ constructor()
+ {
+
+ %l = $new(layout,$$)
+ %l->$setspacing(10)
+ %l->$setmargin(20)
+
+ %title = $new(label,$$)
+ %title->$settext(<center><b><h3>$tr("Choose a file or an Mrl to play","twinsmediaplayer")</h3></b></center><br>)
+ %l->$addmulticellwidget(%title,0,0,0,1)
+
+ %tracks = $new(button,$$)
+ %tracks->$settext($tr("Choose a file ","twinsmediaplayer"))
+ %l->$addmulticellwidget(%tracks,1,1,0,1)
+ objects.connect %tracks clicked $$ chooseFile
+
+ %lmrl = $new(label,$$)
+ %lmrl->$settext($tr("Play an mrl (ex.: http://..., or dvd://...):","twinsmediaplayer"))
+ @%m_hMrl=$new(lineedit,$$)
+ %vmrl=$new(button,$$)
+ %vmrl->$settext($tr("Ok","twinsmediaplayer"))
+ %l->$addmulticellwidget(%lmrl,2,2,0,1)
+ %l->$addwidget(@%m_hMrl,3,0)
+ %l->$addwidget(%vmrl,3,1)
+ objects.connect %vmrl clicked $$ playMrl
+ if ($int($version(s))<20070107){
+ @%m_hMrl->$setenabled($str.equal($system.ostype,windows))
+ %vmrl->$setenabled($str.equal($system.ostype,windows))
+ }
+
+ %close = $new(button,$$)
+ %close->$settext($tr(close))
+ %l->$addmulticellwidget(%close,5,5,0,1)
+ objects.connect %close clicked $$ close
+
+ }
+ playMrl()
+ {
+ if(!$isset(@%m_hMrl->$text))
+ dialog.message($tr("Play Mrl","twinsmediaplayer"),$tr("Your Mrl is empty!","twinsmediaplayer"),warning){;}
+ else mediaplayer.playmrl @%m_hMrl->$text
+ }
+ chooseFile()
+ {
+ dialog.file (open,$tr("Add File",twinsmediaplayer))
+ {
+ if($isset($0))mediaplayer.playmrl "file://$0"
+ }
+ }
+ close()
+ {
+ delete $$
+ }
+}
+
+// Confirm before quit
+class(twins::mediaplayer::confirmbeforequit,dialog)
+{
+ constructor()
+ {
+ %G_hTwinsMediaPlayer{quit} = $$
+ $$->$setcaption($tr("Confirm Quit",twinsmediaplayer))
+
+ %l = $new(layout,$$)
+ %l->$setmargin(20)
+ %l->$setspacing(20)
+
+ %label = $new(label,$$)
+ %label->$settext($tr("Do you really want to close the Twins media Player?",twinsmediaplayer))
+ %l->$addmulticellwidget(%label,0,0,0,1)
+
+ @%m_hRemember = $new(checkbox,$$)
+ @%m_hRemember->$settext($tr("Remember this choice?",twinsmediaplayer))
+ %l->$addmulticellwidget(@%m_hRemember,1,1,0,1)
+
+ %yes = $new(button,$$)
+ %yes->$settext($tr(Yes))
+ objects.connect %yes clicked $$ yes
+ %l->$addwidget(%yes,2,0)
+
+ %no = $new(button,$$)
+ %no->$settext($tr(no))
+ objects.connect %no clicked $$ no
+ %l->$addwidget(%no,2,1)
+ }
+ destructor()
+ {
+ %G_hTwinsMediaPlayer{quit} =
+ }
+ yes()
+ {
+ if(@%m_hRemember->$ischecked())
+ {
+ %TwinsMediaPlayer{confirmbeforequit} = 0
+ twins::mediaplayer::core::config::save
+ }
+ @$emit(quit)
+ delete $$
+ }
+ no()
+ {
+ if(@%m_hRemember->$ischecked())
+ {
+ %TwinsMediaPlayer{confirmbeforequit} = 1
+ twins::mediaplayer::core::config::save
+ }
+ delete $$
+ }
+}
+
+
+
+// Configuration
+class(twins::mediaplayer::config,dialog)
+{
+ constructor()
+ {
+ twins::mediaplayer::core::config::load
+
+ %G_hTwinsMediaPlayer{config} = $$
+ $$->$setcaption($tr("Twins Media Player Configuration",twinsmediaplayer))
+ %ll = $new(layout,$$)
+ %ll->$setmargin(20)
+ %ll->$setspacing(20)
+ @%m_hTabs = $new(tabwidget,$$)
+ %ll->$addmulticellwidget(@%m_hTabs,0,0,0,2)
+ %ll->$setrowstretch(0,10)
+
+ //////////// First page: advertising
+ %hTab{advert} = $new(widget,@%m_hTabs)
+ %l{advert} = $new(layout,%hTab{advert})
+ %l{advert}->$setmargin(10)
+ %l{advert}->$setspacing(20)
+ @%m_hTabs->$addtab(%hTab{advert},$tr("Advertising",twinsmediaplayer),"twins/16x16/twins_player_sayandshare.png")
+
+ // Selection of technical information
+ %techTitle = $new(label,%hTab{advert})
+ %techTitle->$settext($tr("Choose the technical information you want to advertise",twinsmediaplayer))
+ %l{advert}->$addmulticellwidget(%techTitle,0,0,0,2)
+ %ic = 0
+ %ir = 1
+ @%m_aTags = $array(Album,Genre,Year,Length,Bitrate,Freq)
+ foreach(%tag,@%m_aTags)
+ {
+ @%m_hTag{%tag} = $new(checkbox,%hTab{advert})
+ @%m_hTag{%tag}->$setchecked(%TwinsMediaPlayer{show%tag})
+ @%m_hTag{%tag}->$settext($tr(%tag,twinsmediaplayer))
+ objects.connect @%m_hTag{%tag} toggled $$ updateSample
+
+ %l{advert}->$addwidget(@%m_hTag{%tag},%ir,%ic)
+ %ic++
+ if(%ic>2)
+ {
+ %ic = 0
+ %ir++
+ }
+ }
+
+ // Announcement string
+ %lAnnounce = $new(label,%hTab{advert})
+ %lAnnounce->$settext($tr("Announcement string",twinsmediaplayer))
+ @%m_hAnnounce = $new(lineedit,%hTab{advert})
+ @%m_hAnnounce->$settext(%TwinsMediaPlayer{announce})
+ %l{advert}->$addmulticellwidget(%lAnnounce,%ir,%ir,0,1)
+ %l{advert}->$addwidget(@%m_hAnnounce,%ir,2)
+ objects.connect @%m_hAnnounce textchanged $$ updateSample
+ %ir++
+
+ // Separator of technical information
+ %lSep = $new(label,%hTab{advert})
+ %lSep->$settext($tr("Separator string between tecnhical information",twinsmediaplayer))
+ %l{advert}->$addmulticellwidget(%lSep,%ir,%ir,0,1)
+ @%m_hSep = $new(lineedit,%hTab{advert})
+ @%m_hSep->$settext(%TwinsMediaPlayer{separator})
+ objects.connect @%m_hSep textchanged $$ updateSample
+ %l{advert}->$addwidget(@%m_hSep,%ir,2)
+ %ir++
+
+ // Sample
+ @%m_hSample = $new(label,%hTab{advert})
+ @%m_hSample->$setframestyle(Panel,Sunken)
+ @%m_hSample->$setbackgroundcolor(ffffff)
+ @%m_hSample->$setforegroundcolor(ff00ff)
+ %l{advert}->$addmulticellwidget(@%m_hSample,%ir,%ir,0,2)
+ @$updateSample()
+ %ir++
+
+ // Share timeout
+ %lShareTimeout = $new(label,%hTab{advert})
+ %lShareTimeout->$settext($tr("Timeout of file offers",twinsmediaplayer))
+ @%m_hShareTimeout = $new(spinbox,%hTab{advert})
+ @%m_hShareTimeout->$setminvalue(1)
+ @%m_hShareTimeout->$setmaxvalue(60)
+ @%m_hShareTimeout->$setsuffix(mn)
+ @%m_hShareTimeout->$setvalue(%TwinsMediaPlayer{sharetimeout})
+ %l{advert}->$addmulticellwidget(%lShareTimeout,%ir,%ir,0,1)
+ %l{advert}->$addwidget(@%m_hShareTimeout,%ir,2)
+ %ir++
+
+ // Max length of offered file names
+ %lFileNameLength = $new(label,%hTab{advert})
+ %lFileNameLength->$settext($tr("Max length of offered file names",twinsmediaplayer))
+ @%m_hFileNameLength = $new(spinbox,%hTab{advert})
+ @%m_hFileNameLength->$setminvalue(1)
+ @%m_hFileNameLength->$setmaxvalue(300)
+ @%m_hFileNameLength->$setvalue(%TwinsMediaPlayer{maxoffernamelength})
+ %l{advert}->$addmulticellwidget(%lFileNameLength,%ir,%ir,0,1)
+ %l{advert}->$addwidget(@%m_hFileNameLength,%ir,2)
+
+
+ //////////// Second page: look
+ @%m_hTab{look} = $new(widget,@%m_hTabs)
+ %l{look} = $new(layout,@%m_hTab{look})
+ %l{look}->$setmargin(10)
+ %l{look}->$setspacing(5)
+ @%m_hTabs->$addtab(@%m_hTab{look},$tr("Look",twinsmediaplayer),149)
+
+ // Colors
+ %g = @$addColorBox(window,$tr("Window",twinsmediaplayer))
+ %l{look}->$addwidget(%g,0,0)
+ %g = @$addColorBox(artist,$tr("Artist",twinsmediaplayer))
+ %l{look}->$addwidget(%g,1,0)
+ %g = @$addColorBox(title,$tr("Title",twinsmediaplayer))
+ %l{look}->$addwidget(%g,2,0)
+ %g = @$addColorBox(album,$tr("Album",twinsmediaplayer))
+ %l{look}->$addwidget(%g,2,1)
+
+ // Sample
+ @%m_hWindowSample = $new(textbrowser,@%m_hTab{look})
+ %l{look}->$addmulticellwidget(@%m_hWindowSample,0,1,1,1)
+ @$updateWindowSample()
+
+
+ //////////// Third page: the player
+ %hTab{player} = $new(widget,@%m_hTabs)
+ %l{player} = $new(layout,%hTab{player})
+ %l{player}->$setmargin(10)
+ %l{player}->$setspacing(10)
+ @%m_hTabs->$addtab(%hTab{player},$tr("Player",twinsmediaplayer),167)
+
+ // Choose
+ switch($str.lowcase($system.osname)){
+ case(linux)@%m_aPlayers = $array(amarok,xmms,juk)
+ case(windows)@%m_aPlayers = $array(winamp)
+ default:@%m_aPlayers = $array(amarok,xmms,juk,winamp)
+ }
+ %lChoose = $new(label,%hTab{player})
+ %lChoose->$settext($tr("Choose your player",twinsmediaplayer))
+ @%m_hChoose = $new(combobox,%hTab{player})
+ foreach(%player,@%m_aPlayers)@%m_hChoose->$insertitem(%player)
+ %okChosen = $new(button,%hTab{player})
+ %okChosen->$settext($tr(Ok))
+ objects.connect %okChosen clicked $$ chosen
+ @$updatePlayer()
+
+ // Detect
+ %detect = $new(button, %hTab{player})
+ %detect->$settext($tr("Auto-detect",twinsmediaplayer))
+ objects.connect %detect clicked $$ detect
+ @%m_hDetect = $new(label,%hTab{player})
+ @%m_hDetect->$setframestyle(Box,Sunken)
+
+ // Layout
+ %l{player}->$addwidget(%lChoose,0,0)
+ %l{player}->$addwidget(@%m_hChoose,1,0)
+ %l{player}->$addwidget(%okChosen,2,0)
+ %l{player}->$addwidget(%detect,1,1)
+ %l{player}->$addwidget(@%m_hDetect,2,1)
+ %l{player}->$setrowstretch(1,5)
+ %l{player}->$setrowstretch(2,5)
+
+
+ /////////// Last page: Start and Quit
+ %hTab{sq} = $new(widget,@%m_hTabs)
+ %l{sq} = $new(layout,%hTab{sq})
+ %l{sq}->$setmargin(10)
+ %l{sq}->$setspacing(10)
+ @%m_hTabs->$addtab(%hTab{sq},$tr("Start && Quit",twinsmediaplayer),145)
+
+ // Restart Group
+ %hStart = $new(groupbox,%hTab{sq})
+ %hStart->$settitle($tr("Start mode",twinsmediaplayer))
+ %lStart = $new(layout,%hStart)
+ %lStart->$setmargin(20)
+ %lStart->$setspacing(10)
+ %l{sq}->$addwidget(%hStart,0,0)
+ // Setup
+ @%m_szStartMode = %TwinsMediaPlayer{startmode}
+ foreach(%state,on,off,remember)
+ {
+ @%m_hStart{%state} = $new(checkbox,%hStart)
+ @%m_hStart{%state}->$setchecked($(%TwinsMediaPlayer{startmode}==%state))
+ objects.connect @%m_hStart{%state} toggled $$ toggleStart%state
+ }
+ // Text
+ @%m_hStart{on}->$settext($tr("Always start the media player with KVIrc",twinsmediaplayer))
+ @%m_hStart{off}->$settext($tr("Let the user to manually start the media player",twinsmediaplayer))
+ @%m_hStart{remember}->$settext($tr("Remember the media player state of the last KVIrc session",twinsmediaplayer))
+ // Layout
+ %lStart->$addwidget(@%m_hStart{on},0,0)
+ %lStart->$addwidget(@%m_hStart{off},1,0)
+ %lStart->$addwidget(@%m_hStart{remember},2,0)
+
+ // Confirm before quit
+ @%m_hConfirm = $new(checkbox,%hTab{sq})
+ @%m_hConfirm->$settext($tr("Confirm before quit",twinsmediaplayer))
+ @%m_hConfirm->$setchecked(%TwinsMediaPlayer{confirmbeforequit})
+ %l{sq}->$addwidget(@%m_hConfirm,1,0)
+
+
+
+ // Ok
+ %ok = $new(button,$$)
+ %ok->$settext($tr(Ok))
+ objects.connect %ok clicked $$ ok
+ %ll->$addwidget(%ok,1,0)
+
+
+ // Apply
+ %apply = $new(button,$$)
+ %apply->$settext($tr(Apply))
+ objects.connect %apply clicked $$ apply
+ %ll->$addwidget(%apply,1,1)
+
+
+ // Close
+ %close = $new(button,$$)
+ %close->$settext($tr(Close))
+ objects.connect %close clicked $$ close
+ %ll->$addwidget(%close,1,2)
+
+ }
+
+ addColorBox($0 = name,$1 = label)
+ {
+ %g = $new(groupbox,@%m_hTab{look})
+ %g->$settitle($1)
+ %l = $new(layout,%g)
+ %l->$setspacing(5)
+ %l->$setmargin(15)
+
+ %labelfg = $new(label,%g)
+ %labelfg->$settext($tr("Foreground",twinsmediaplayer))
+
+ @%m_hColors{fg:$0} = $new(lineedit,%g)
+ @%m_hColors{fg:$0}->$settext(%TwinsMediaPlayer{color:fg:$0})
+ @%m_hColors{fg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))
+ objects.connect @%m_hColors{fg:$0} textchanged $$ updateWindowSample
+
+ %labelbg = $new(label,%g)
+ %labelbg->$settext($tr("Background",twinsmediaplayer))
+
+ @%m_hColors{bg:$0} = $new(lineedit,%g)
+ @%m_hColors{bg:$0}->$settext(%TwinsMediaPlayer{color:bg:$0})
+ @%m_hColors{bg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))
+ objects.connect @%m_hColors{bg:$0} textchanged $$ updateWindowSample
+
+ %l->$addwidget(%labelfg,0,0)
+ %l->$addwidget(@%m_hColors{fg:$0},0,1)
+ %l->$addwidget(%labelbg,1,0)
+ %l->$addwidget(@%m_hColors{bg:$0},1,1)
+
+ return %g
+ }
+
+ updateWindowSample()
+ {
+ %h = "<body bgcolor=\""@%m_hColors{bg:window}->$text()"\">"
+ %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"
+ %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:artist}->$text()"\">"
+ %h .= " <font color=\""@%m_hColors{fg:artist}->$text()"\" style=\"font-size:10pt;\">"<b>Radiohead</b>"</font></td></tr>"
+ %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:title}->$text()"\">"
+ %h .= " <font color=\""@%m_hColors{fg:title}->$text()"\" style=\"font-size:12pt;\"><b>"<i>Pyramid Song</i>"</b></font></td></tr>"
+ %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:album}->$text()"\">"
+ %h .= " <font color=\""@%m_hColors{fg:album}->$text()"\" style=\"font-size:9pt;\">"Amnesiac"</font></td></tr>"
+ %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Genre:",twinsmediaplayer)"</font></th>"
+ %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">Brit Pop</font></td></tr>"
+ %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Length:",twinsmediaplayer)"</font></th>"
+ %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">04m49s</font></td></tr>"
+ %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Bitrate:",twinsmediaplayer)"</font></th>"
+ %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">128 Kbit/s</font></td></tr>"
+ %h .= "</table></font></body></html>"
+
+ @%m_hWindowSample->$setText(%h)
+
+ }
+
+ updateSample()
+ {
+ if($ic&&$isset($me))%nick=$me
+ else %nick=My_Nick
+ %s = "* %nick "@%m_hAnnounce->$text()" Radiohead - Pyramid song"
+ if(@%m_hTag{album}->$ischecked)%s << "(Amnesiac)"
+ if(@%m_hTag{genre}->$ischecked) %t <+ Rock
+ if(@%m_hTag{year}->$ischecked) %t <+ 2001
+ if(@%m_hTag{length}->$ischecked) %t <+ "04m49s"
+ if(@%m_hTag{bitrate}->$ischecked) %t <+ "128Kbit/s"
+ if(@%m_hTag{freq}->$ischecked) %t <+ "44kHz"
+ if($isset(%t)) %s << "["$str.join(@%m_hSep->$text,%t)"]"
+ %s = $str.replace(%s,"<","<")
+ %s = $str.replace(%s,">",">")
+ @%m_hSample->$settext("<font size=-1>%s</font>")
+ }
+
+ detect()
+ {
+ mediaplayer.detect
+ %result = $mediaplayer.player
+ if($str.isempty(%result))%result = $tr("none",twinsmediaplayer)
+ @%m_hDetect->$settext($tr("Found:",twinsmediaplayer) %result)
+ @$updatePlayer()
+ }
+
+ updatePlayer()
+ {
+ if(!$isset($mediaplayer.player))return
+ %i=0
+ foreach(%player,@%m_aPlayers)
+ {
+ if($str.equal($mediaplayer.player,@%m_hChoose->$textat(%i)))
+ {
+ @%m_hChoose->$setcurrentitem(%i)
+ return
+ }
+ %i++
+ }
+ }
+
+ chosen()
+ {
+ mediaplayer.setPlayer @%m_hChoose->$current()
+ }
+
+ toggleStartOn()
+ {
+ @$toggleStart(on)
+ }
+
+ toggleStartOff()
+ {
+ @$toggleStart(off)
+ }
+
+ toggleStartRemember()
+ {
+ @$toggleStart(remember)
+ }
+ toggleStart($0 = state type)
+ {
+ if($0 == @%m_szStartMode)
+ {
+ @%m_hStart{$0}->$setchecked(1)
+ } elseif(@%m_hStart{$0}->$ischecked)
+ {
+ %old = @%m_szStartMode
+ @%m_szStartMode = $0
+ @%m_hStart{%old}->$setchecked(0)
+ }
+ }
+ ok()
+ {
+ @$apply()
+ @$close()
+ }
+
+ apply()
+ {
+ %TwinsMediaPlayer{sharetimeout} = @%m_hShareTimeout->$value()
+ %TwinsMediaPlayer{confirmbeforequit} = @%m_hConfirm->$ischecked()
+ %TwinsMediaPlayer{separator} = @%m_hSep->$text()
+ %TwinsMediaPlayer{announce} = @%m_hAnnounce->$text()
+
+ foreach(%tag,@%m_aTags)
+ %TwinsMediaPlayer{show%tag} = @%m_hTag{%tag}->$ischecked()
+
+ foreach(%tag,window,artist,title,album)
+ foreach(%bg,fg,bg)
+ %TwinsMediaPlayer{color:%bg:%tag} = @%m_hColors{%bg:%tag}->$text()
+
+ if($isset(@%m_hChoose->$current()))
+ mediaplayer.setPlayer @%m_hChoose->$current()
+
+ foreach(%state,on,off,remember)
+ if(@%m_hStart{%state}->$ischecked())
+ {
+ %TwinsMediaPlayer{startmode} = %state
+ break
+ }
+
+ twins::mediaplayer::core::config::save
+
+ // Update the player look now
+ if($objects.exists(%G_hTwinsMediaPlayer{window}))
+ %G_hTwinsMediaPlayer{window}->$updateWindow(1)
+ }
+
+ close()
+ {
+ delete $$
+ }
+
+ destructor()
+ {
+ %G_hTwinsMediaPlayer{config} =
+ }
+}
+
+
+/*
+twins::admin::reguninstall --class=$array(twins::mediaplayer::window,\
+ twins::mediaplayer::confirmbeforequit,\
+ twins::mediaplayer::config,twins::mediaplayer::mrldialog)
+*/
+
+
+
+
+
+
+