Author: titmuss
Date: Thu Apr 17 05:11:16 2008
New Revision: 2263

URL: http://svn.slimdevices.com?rev=2263&root=Jive&view=rev
Log:
 [EMAIL PROTECTED] (orig r2247):  adrian | 2008-04-16 20:32:39 +0100
 Bug: N/A
 Description: customisable sound effects via download from SC
 
 [EMAIL PROTECTED] (orig r2248):  adrian | 2008-04-16 20:35:35 +0100
 Bug: N/A
 Description: move the splash.wav file (need by 2247)
 
 [EMAIL PROTECTED] (orig r2249):  adrian | 2008-04-16 20:44:08 +0100
 Bug: N/A
 Description: update Makefile.in
 
 [EMAIL PROTECTED] (orig r2261):  awy | 2008-04-17 12:20:40 +0100
 Add scanner - no accelerated-audio mode at present. 
 [EMAIL PROTECTED] (orig r2262):  titmuss | 2008-04-17 13:09:25 +0100
  [EMAIL PROTECTED] (orig r2243):  bklaas | 2008-04-16 14:46:26 +0100
  Bug: 5465
  Description: Screen dims too quickly to read the help message. Add a comma to 
help string.
  [EMAIL PROTECTED] (orig r2244):  bklaas | 2008-04-16 14:49:59 +0100
  Bug: 5412
  Description: put downloading software screen into Test applet for later work 
on this bug
  [EMAIL PROTECTED] (orig r2245):  bklaas | 2008-04-16 16:03:08 +0100
  Bug: 7846
  Description: shorter strings for some langs in BSP_SCREEN_LOCKED
  
  [EMAIL PROTECTED] (orig r2246):  adrian | 2008-04-16 18:56:40 +0100
  Bug: 7837
  Description: only show Applet Installer when connected to SC and have
  a player as this allows the server to be found
  
 

Added:
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/sounds/splash.wav
   (with props)
    7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/Scanner.lua
Removed:
    7.2/trunk/squeezeplay/src/squeezeplay/share/jive/splash.wav
Modified:
    7.2/trunk/   (props changed)
    7.2/trunk/squeezeplay/src/squeezeplay/Makefile.am
    7.2/trunk/squeezeplay/src/squeezeplay/Makefile.in
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/DefaultSkinApplet.lua
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerMeta.lua
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
    
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
    7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
    7.2/trunk/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
    
7.2/trunk/squeezeplay/src/squeezeplay_desktop/share/applets/Test/TestApplet.lua
    
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
    
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/strings.txt

Propchange: 7.2/trunk/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Thu Apr 17 05:11:16 2008
@@ -1,5 +1,5 @@
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.0/trunk:2237
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/trunk:2239
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.0/trunk:2246
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/trunk:2262
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:2013
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/SN:1083
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/scrolling:1378

Modified: 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.am
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/Makefile.am?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.am (original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.am Thu Apr 17 05:11:16 2008
@@ -113,9 +113,7 @@
        share/jive/AppletMeta.lua \
        share/jive/Iconbar.lua \
        share/jive/global_strings.txt \
-       share/jive/splash.png \
-       share/jive/splash.wav \
-       share/jive/app.png
+       share/jive/splash.png
 
 jiveuidir = $(pkgdatadir)/jive/ui
 dist_jiveui_DATA = \
@@ -536,6 +534,7 @@
        share/applets/DefaultSkin/sounds/pushleft.wav \
        share/applets/DefaultSkin/sounds/pushright.wav \
        share/applets/DefaultSkin/sounds/select.wav \
+       share/applets/DefaultSkin/sounds/splash.wav \
        share/applets/DefaultSkin/sounds/shutdown.wav \
        share/applets/DefaultSkin/sounds/docking.wav
 

Modified: 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.in
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/Makefile.in?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.in (original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/Makefile.in Thu Apr 17 05:11:16 2008
@@ -417,9 +417,7 @@
        share/jive/AppletMeta.lua \
        share/jive/Iconbar.lua \
        share/jive/global_strings.txt \
-       share/jive/splash.png \
-       share/jive/splash.wav \
-       share/jive/app.png
+       share/jive/splash.png
 
 jiveuidir = $(pkgdatadir)/jive/ui
 dist_jiveui_DATA = \
@@ -842,6 +840,7 @@
        share/applets/DefaultSkin/sounds/pushleft.wav \
        share/applets/DefaultSkin/sounds/pushright.wav \
        share/applets/DefaultSkin/sounds/select.wav \
+       share/applets/DefaultSkin/sounds/splash.wav \
        share/applets/DefaultSkin/sounds/shutdown.wav \
        share/applets/DefaultSkin/sounds/docking.wav
 

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/DefaultSkinApplet.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/DefaultSkinApplet.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/DefaultSkinApplet.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/DefaultSkinApplet.lua
 Thu Apr 17 05:11:16 2008
@@ -744,6 +744,34 @@
        s.volumePopup.title.font = FONT_BOLD_15px
        s.volumePopup.title.align = "center"
        s.volumePopup.title.bgImg = false
+
+       s.scanner = {}
+       s.scanner.horizontal = 1
+       s.scanner.img = volumeBar
+       s.scanner.bgImg = volumeBackground
+
+       s.scannerGroup = {}
+       s.scannerGroup.border = { 16, 5, 16, 10 }
+       s.scannerGroup.order = { "elapsed", "slider", "remain" }
+       s.scannerGroup.text = {}
+       s.scannerGroup.text.fg = TEXT_COLOR
+       s.scannerGroup.text.font = FONT_13px
+       s.scannerGroup.text.w = 55
+       -- s.scannerGroup.padding = { 0, 0, 0, 0 }
+       s.scannerGroup.text.padding = { 8, 0, 0, 0}
+
+       s.scannerPopup = {}
+       s.scannerPopup.x = 0
+       s.scannerPopup.y = screenHeight - 80
+       s.scannerPopup.w = screenWidth
+       s.scannerPopup.h = 80
+       s.scannerPopup.bgImg = helpBox
+       s.scannerPopup.title = {}
+       s.scannerPopup.title.border = 10
+       s.scannerPopup.title.fg = TEXT_COLOR
+       s.scannerPopup.title.font = FONT_BOLD_15px
+       s.scannerPopup.title.align = "center"
+       s.scannerPopup.title.bgImg = false
 
        -- titles with artwork and song info
        s.albumtitle = {}

Added: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/sounds/splash.wav
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/sounds/splash.wav?rev=2263&root=Jive&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/DefaultSkin/sounds/splash.wav
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerMeta.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerMeta.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerMeta.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerMeta.lua
 Thu Apr 17 05:11:16 2008
@@ -23,7 +23,7 @@
 local jul           = require("jive.utils.log")
 
 local appletManager = appletManager
-
+local jnt           = jnt
 
 module(...)
 oo.class(_M, AppletMeta)
@@ -38,6 +38,14 @@
 end
 
 function registerApplet(self)
-       jiveMain:addItem(self:menuItem('appletSetupAppletInstaller', 
'advancedSettings', "APPLET_INSTALLER", function(applet, ...) applet:menu(...) 
end))
+       jnt:subscribe(self)
+       self.menu = self:menuItem('appletSetupAppletInstaller', 
'advancedSettings', self:string("APPLET_INSTALLER"), function(applet, ...) 
applet:menu(...) end)
 end
 
+function notify_playerCurrent(self, player)
+       if player == nil or player.slimServer:isSqueezeNetwork() then
+               jiveMain:removeItem(self.menu)
+       else
+               jiveMain:addItem(self.menu)
+       end
+end

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
 Thu Apr 17 05:11:16 2008
@@ -23,10 +23,16 @@
 local table           = require("table")
 
 local oo              = require("loop.simple")
-
+local os              = require("os")
+local io              = require("io")
+local lfs             = require("lfs")
+
+local AppletManager   = require("jive.AppletManager")
 local Applet          = require("jive.Applet")
 local Audio           = require("jive.ui.Audio")
 local Checkbox        = require("jive.ui.Checkbox")
+local RadioButton     = require("jive.ui.RadioButton")
+local RadioGroup      = require("jive.ui.RadioGroup")
 local Framework       = require("jive.ui.Framework")
 local SimpleMenu      = require("jive.ui.SimpleMenu")
 local Window          = require("jive.ui.Window")
@@ -36,7 +42,12 @@
 local Textarea        = require("jive.ui.Textarea")
 local jul             = require("jive.utils.log")
 
+local RequestHttp     = require("jive.net.RequestHttp")
+local SocketHttp      = require("jive.net.SocketHttp")
+
 local log             = jul.logger("applets.setup")
+
+local jnt             = jnt
 
 local EVENT_WINDOW_POP       = jive.ui.EVENT_WINDOW_POP
 local EVENT_KEY_PRESS        = jive.ui.EVENT_KEY_PRESS
@@ -51,7 +62,24 @@
 oo.class(_M, Applet)
 
 
-local effects = {
+local PATH = "applets/DefaultSkin/sounds/"
+
+local REFRESH_TIME = 300
+
+local sounds = {
+       BUMP       = { default = "bump.wav",      chan = 1 },
+       CLICK      = { default = "click.wav",     chan = 0 },
+       JUMP       = { default = "jump.wav",      chan = 0 },
+       WINDOWSHOW = { default = "pushleft.wav",  chan = 1 },
+       WINDOWHIDE = { default = "pushright.wav", chan = 1 },
+       SELECT     = { default = "select.wav",    chan = 0 },
+       PLAYBACK   = { default = "select.wav",    chan = 0 },
+       DOCKING    = { default = "docking.wav",   chan = 1 },
+       STARTUP    = { default = "splash.wav",    chan = 1 },
+       SHUTDOWN   = { default = "shutdown.wav",  chan = 1 }
+}
+
+local groups = {
        SOUND_NAVIGATION = {
                "WINDOWSHOW",
                "WINDOWHIDE",
@@ -113,7 +141,7 @@
 
        -- add sounds
        local effectsEnabled = false
-       for k,v in pairs(effects) do
+       for k,v in pairs(groups) do
                local soundEnabled = Framework:isSoundEnabled(v[1])
                effectsEnabled = effectsEnabled or soundEnabled
 
@@ -140,7 +168,6 @@
                                end
                        end,
                        soundEnabled
-                       
                )
 
                allButtons[button] = v
@@ -175,6 +202,27 @@
        )
 
        window:addWidget(menu)
+
+       self.menu = menu
+       self.server = self:_getCurrentServer()
+
+       -- look for any server based sounds
+       if self.server then
+               log:info("found server - requesting sounds list")
+               self.server.comet:request(
+                       function(chunk, err)
+                               if err then
+                                       log:debug(err)
+                               elseif chunk then
+                                       self:_serverSink(chunk.data)
+                               end
+                       end,
+                       false,
+                       { "jivesounds" }
+               )
+       elseif self:getSettings()["_CUSTOM"] then
+               self:_customMenu({})
+       end
 
        self:tieAndShowWindow(window)
        return window
@@ -230,6 +278,194 @@
 end
 
 
+function _getCurrentServer(self)
+       local manager = AppletManager:getAppletInstance("SlimDiscovery")
+       local server
+       if manager and manager:getCurrentPlayer() then
+               server = manager:getCurrentPlayer():getSlimServer()
+               if server:isSqueezeNetwork() then
+                       server = nil
+               end
+       end
+       return server
+end
+
+
+function _serverSink(self, data)
+       local custom = {}
+       if data.item_loop then
+               for _,entry in pairs(data.item_loop) do
+                       log:info("server sounds: ", entry.name)
+                       custom[entry.name] = entry
+               end
+               self:_customMenu(custom)
+       elseif self:getSettings()["_CUSTOM"] then
+               self:_customMenu({})
+       end
+end
+
+
+function _customMenu(self, custom)
+       self.menu:addItem({
+               text = self:string("SOUND_CUSTOMIZE"),
+               weight = 100,
+               callback = function(event, item)
+                                          local window = Window("window", 
item.text)
+                                          local menu = SimpleMenu("menu")
+                                          
menu:setComparator(menu.itemComparatorAlpha)
+                                          window:addWidget(Textarea("help", 
self:string("SOUND_CUSTOM_HELP")))
+                                          window:addWidget(menu)
+                                          for k,v in pairs(sounds) do
+                                                  menu:addItem({
+                                                                               
        text = self:string("SOUND_" .. k),
+                                                                               
        callback = function() self:_customSoundMenu(k, custom) end
+                                                                               
})
+                                          end
+                                          window:show()
+                                  end
+       })
+end
+
+
+function _customSoundMenu(self, sound, custom)
+       local window = Window("window", self:string("SOUND_" .. sound))
+       local menu = SimpleMenu("menu")
+       local group = RadioGroup()
+       menu:setComparator(menu.itemComparatorWeightAlpha)
+       window:addWidget(Textarea("help", 
self:string("SOUND_CUSTOMSOUND_HELP")))
+       window:addWidget(menu)
+
+       local settings = self:getSettings()
+
+       menu:addItem({
+               weight = 1,
+               text = self:string("SOUND_DEFAULT"),
+               icon = RadioButton("radio",
+                                                  group,
+                                                  function()
+                                                          log:info("setting 
default as active sound for ", sound)
+                                                          
self:_setCustom(sound, nil)
+                                                          
Framework:playSound(sound)
+                                                  end,
+                                                  settings["_CUSTOM"] == nil 
or settings["_CUSTOM"][sound] == nil
+               )
+       })
+
+       for _,v in pairs(custom) do
+               menu:addItem({
+                       weight = 10,
+                       text = v.name,
+                       icon = RadioButton("radio",
+                                                          group,
+                                                          function()
+                                                                  local path = 
Framework:findFile(PATH) .. v.file
+                                                                  local attr = 
lfs.attributes(path)
+                                                                  if attr then
+                                                                          
log:info("setting ", v.file, " as active sound for ", sound)
+                                                                          
self:_setCustom(sound, v.file)
+                                                                          
Framework:playSound(sound)
+                                                                  end
+                                                          end,
+                                                          settings["_CUSTOM"] 
~= nil and settings["_CUSTOM"][sound] == v.file
+                                                  ),
+                       focusGained = function()
+                                                         local path = 
Framework:findFile(PATH) .. v.file
+                                                         local attr = 
lfs.attributes(path)
+                                                         if attr and os.time() 
- attr.modification < REFRESH_TIME then
+                                                                 
log:info("using local copy of: ", v.file)
+                                                         else
+                                                                 
log:info("fetching: ", v.file)
+                                                                 
self:_fetchFile(v.url, path, function() end)
+                                                         end
+                                                 end
+               })
+       end
+
+       window:show()
+end
+
+
+function _setCustom(self, sound, file)
+       local settings = self:getSettings()
+
+       if settings["_CUSTOM"] == nil then
+               settings["_CUSTOM"] = {}
+       end
+       settings["_CUSTOM"][sound] = file
+
+       local cust = 0
+       for k,_ in pairs(settings["_CUSTOM"]) do
+               cust = cust + 1
+       end
+       if cust == 0 then
+               settings["_CUSTOM"] = nil
+       end
+       
+       self:_loadSounds(sound)
+end
+
+
+function _fetchFile(self, url, path, callback)
+       self.last = path
+
+       if self.fetch == nil then
+               self.fetch = {}
+       end
+       if self.fetch[path] then
+               log:warn("already fetching ", path, " not fetching again")
+               return
+       end
+       self.fetch[path] = 1
+
+       local req = RequestHttp(
+               function(chunk, err)
+                       self.fetch[path] = nil
+                       if err then
+                               log:error("error fetching background from 
server: ", path, " ", url)
+                       end
+                       if chunk then
+                               log:info("fetched background from server: ", 
path, " ", url)
+                               local fh = io.open(path, "wb")
+                               if fh then
+                                       fh:write(chunk)
+                                       fh:close()
+                                       if path == self.last then
+                                               callback()
+                                       end
+                               else
+                                       log:error("unable to open ", path, " 
for writing")
+                               end
+                       end
+               end,
+               'GET',
+               url
+       )
+
+       local uri  = req:getURI()
+       local http = SocketHttp(jnt, uri.host, uri.port, uri.host)
+
+       http:fetch(req)
+end
+
+
+function _loadSounds(self, sound)
+       local settings = self:getSettings()
+
+       for k,v in pairs(sounds) do
+               if sound == nil or sound == k then
+                       local file = settings["_CUSTOM"] and 
settings["_CUSTOM"][k] or sounds[k]["default"]
+                       Framework:loadSound(k, PATH .. file, sounds[k]["chan"])
+
+                       local enabled = settings[k]
+                       if enabled == nil then
+                               enabled = true
+                       end
+                       Framework:enableSound(k, enabled)
+               end
+       end
+end
+
+
 --[[
 
 =head1 LICENSE

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
 Thu Apr 17 05:11:16 2008
@@ -42,33 +42,22 @@
 end
 
 function registerApplet(meta)
-       
+
+       -- set volume
        local settings = meta:getSettings()
-       for k,v in pairs(settings) do
-               if k == "_VOLUME" then
-                       Audio:setEffectVolume(v)
-               else
-                       Framework:enableSound(k, v)
-               end
-       end
+       Audio:setEffectVolume(settings["_VOLUME"])
 
-       local sndpath = "applets/DefaultSkin/sounds/"
+       -- load sounds
+       local obj = appletManager:loadApplet("SetupSoundEffects")
 
        -- The startup sound needs to be played with the minimum
        -- delay, load and play it first
-       Framework:loadSound("STARTUP", "jive/splash.wav", 1)
+       obj:_loadSounds("STARTUP")
        Framework:playSound("STARTUP")
-
-       -- Load sounds
-       Framework:loadSound("BUMP", sndpath .. "bump.wav", 1)
-       Framework:loadSound("CLICK", sndpath .. "click.wav", 0)
-       Framework:loadSound("JUMP", sndpath .. "jump.wav", 0)
-       Framework:loadSound("WINDOWSHOW", sndpath .. "pushleft.wav", 1)
-       Framework:loadSound("WINDOWHIDE", sndpath .. "pushright.wav", 1)
-       Framework:loadSound("SELECT", sndpath .. "select.wav", 0)
-       Framework:loadSound("PLAYBACK", sndpath .. "select.wav", 0)
-       Framework:loadSound("DOCKING", sndpath .. "docking.wav", 1)
-       Framework:loadSound("SHUTDOWN", sndpath .. "shutdown.wav", 1)
+       
+       -- Load all other sounds
+       obj:_loadSounds(nil) -- nil is default from settings
+       appletManager:freeApplet("SetupSoundEffects")
 
        -- add a menu to load us
        jiveMain:addItem(meta:menuItem('appletSetupSoundEffects', 
'advancedSettings', "SOUND_EFFECTS", function(applet, ...) 
applet:settingsShow(...) end))

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
 Thu Apr 17 05:11:16 2008
@@ -83,3 +83,44 @@
        IT      Usare la rotellina per regolare il volume degli effetti sonori.
        NL      Gebruik het wiel om het volume van de geluidseffecten aan te 
passen.
 
+SOUND_CUSTOMIZE
+       EN      Customize Sounds
+
+SOUND_DEFAULT
+       EN      Default
+
+SOUND_BUMP
+       EN      Menu Bump
+
+SOUND_CLICK
+       EN      Click
+
+SOUND_JUMP
+       EN      Jump
+
+SOUND_WINDOWSHOW
+       EN      Show New Window
+
+SOUND_WINDOWHIDE
+       EN      Hide Window
+
+SOUND_SELECT
+       EN      Menu Select Item
+
+SOUND_PLAYBACK
+       EN      Playback
+
+SOUND_DOCKING
+       EN      Docking
+
+SOUND_STARTUP
+       EN      Startup
+
+SOUND_SHUTDOWN
+       EN      Shutdown
+
+SOUND_CUSTOM_HELP
+       EN      Select the action that you would like to customize.
+
+SOUND_CUSTOMSOUND_HELP
+       EN      Select the sound you would like to use for this action.

Added: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/Scanner.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/Scanner.lua?rev=2263&root=Jive&view=auto
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/Scanner.lua 
(added)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/Scanner.lua 
Thu Apr 17 05:11:16 2008
@@ -1,0 +1,310 @@
+
+-- Private class to handle player position scanner 
+
+local tostring, tonumber = tostring, tonumber
+
+local oo                     = require("loop.base")
+local os                     = require("os")
+local math                   = require("math")
+local string                = require("string")
+
+local Framework              = require("jive.ui.Framework")
+local Group                  = require("jive.ui.Group")
+local Icon                   = require("jive.ui.Icon")
+local Label                  = require("jive.ui.Label")
+local Popup                  = require("jive.ui.Popup")
+local Slider                 = require("jive.ui.Slider")
+local Timer                  = require("jive.ui.Timer")
+local Window                 = require("jive.ui.Window")
+
+local debug                  = require("jive.utils.debug")
+local log                    = require("jive.utils.log").logger("player")
+
+
+local EVENT_KEY_ALL          = jive.ui.EVENT_KEY_ALL
+local EVENT_KEY_PRESS        = jive.ui.EVENT_KEY_PRESS
+local EVENT_KEY_HOLD         = jive.ui.EVENT_KEY_HOLD
+local EVENT_KEY_DOWN         = jive.ui.EVENT_KEY_DOWN
+local EVENT_KEY_UP           = jive.ui.EVENT_KEY_UP
+local EVENT_SCROLL           = jive.ui.EVENT_SCROLL
+
+local EVENT_CONSUME          = jive.ui.EVENT_CONSUME
+local EVENT_UNUSED           = jive.ui.EVENT_UNUSED
+
+local KEY_GO                 = jive.ui.KEY_GO
+local KEY_BACK               = jive.ui.KEY_BACK
+local KEY_FWD                = jive.ui.KEY_FWD
+local KEY_REW                = jive.ui.KEY_REW
+
+-- Tuning
+local POSITION_STEP = 5
+local POPUP_AUTOCLOSE_INTERVAL = 10000  -- close popup after this much 
inactivity
+local POPUP_AUTOINVOKE_INTERVAL = 1300 -- invoke gotoTime after this much 
inactivity
+local ACCELERATION_INTERVAL = 350       -- events faster than this cause 
acceleration
+local ACCELERATION_INTERVAL_SLOW = 200  -- but less so unless faster than this
+
+
+module(..., oo.class)
+
+local function _secondsToString(seconds)
+       local min = math.floor(seconds / 60)
+       local sec = math.floor(seconds - (min*60))
+
+       return string.format("%d:%02d", min, sec)
+end
+
+local function _updateDisplay(self)
+       self.title:setValue(self.applet:string("SLIMBROWSER_SCANNER"))
+       self.slider:setValue(tonumber(self.elapsed))
+       local strElapsed = _secondsToString(self.elapsed)
+       local strRemain = "-" .. _secondsToString(self.duration - self.elapsed)
+
+       self.scannerGroup:setWidgetValue("elapsed", strElapsed)
+       self.scannerGroup:setWidgetValue("remain", strRemain)
+end
+
+
+local function _updateElapsedTime(self)
+       if not self.popup then
+               self.displayTimer:stop()
+               self.holdTimer:stop()
+               return
+       end
+
+       self.elapsed, self.duration = self.player:getTrackElapsed()
+       _updateDisplay(self)
+end
+
+
+local function _openPopup(self)
+       if self.popup or not self.player then
+               return
+       end
+
+       -- we need a local copy of the elapsed time
+       self.elapsed, self.duration = self.player:getTrackElapsed()
+       if not self.elapsed or not self.duration or not 
self.player:isTrackSeekable() then
+               -- don't show the popup if the player state is not loaded
+               -- or if we cannot seek in this track
+               return
+       end
+       
+       local popup = Popup("scannerPopup")
+       popup:setAutoHide(false)
+
+       local title = Label("title", "")
+       popup:addWidget(title)
+
+       local slider = Slider("scanner")
+       slider:setRange(0, tonumber(self.duration), tonumber(self.elapsed))
+       self.scannerGroup = Group("scannerGroup", {
+                                             elapsed = Label("text", ""),
+                                             slider = slider,
+                                             remain = Label("text", "")
+                                     })
+       popup:addWidget(self.scannerGroup)
+       popup:addListener(EVENT_KEY_ALL | EVENT_SCROLL,
+                         function(event)
+                                 return self:event(event)
+                         end)
+
+       -- we handle events
+       popup.brieflyHandler = false
+
+       -- open the popup
+       self.popup = popup
+       self.title = title
+       self.slider = slider
+
+       self.displayTimer:restart()
+
+       _updateDisplay(self)
+
+       popup:showBriefly(POPUP_AUTOCLOSE_INTERVAL,
+               function()
+                       self.popup = nil
+               end,
+               Window.transitionPushPopupUp,
+               Window.transitionPushPopupDown
+       )
+
+end
+
+
+local function _updateSelectedTime(self)
+       if not self.popup then
+               self.displayTimer:stop()
+               self.holdTimer:stop()
+               return
+       end
+       if self.delta == 0 then
+               return
+       end
+
+       -- Now that the user has changed the position, stop tracking the actual 
playing position
+       self.displayTimer:stop()
+
+       -- keep the popup window open
+       self.popup:showBriefly()
+
+       -- accelation
+       local now = Framework:getTicks()
+       local interval = now - self.lastUpdate
+       if self.accelDelta ~= self.delta or interval > ACCELERATION_INTERVAL 
then
+               self.accelCount = 0
+       end
+
+       self.accelCount = math.min(self.accelCount + 1, self.duration/15, 50)
+       self.accelDelta = self.delta
+       self.lastUpdate = now
+
+       -- change position
+       local accel
+       if interval > ACCELERATION_INTERVAL_SLOW then
+               accel = self.accelCount / 15
+       else
+               accel = self.accelCount / 10
+       end
+       local new = math.abs(self.elapsed) + self.delta * accel * POSITION_STEP
+       
+       if new > self.duration then 
+               new = self.duration
+       elseif new < 0 then
+               new = 0
+       end
+
+       -- self.elapsed = self.player:gotoTime(new) or self.elapsed
+       self.elapsed = new
+       _updateDisplay(self)
+       self.autoInvokeTimer:restart()
+end
+
+
+function _gotoTime(self)
+       self.autoInvokeTimer:stop()
+       if not self.popup then
+               return
+       end
+       self.player:gototime(math.floor(self.elapsed))
+       self.displayTimer:restart()
+end
+
+function __init(self, applet)
+       local obj = oo.rawnew(self, {})
+
+       obj.applet = applet
+       obj.lastUpdate = 0
+       obj.displayTimer = Timer(1000, function() _updateElapsedTime(obj) end)
+       obj.autoInvokeTimer = Timer(POPUP_AUTOINVOKE_INTERVAL, function() 
_gotoTime(obj) end, true)
+       obj.holdTimer = Timer(100, function() _updateSelectedTime(obj) end)
+
+       return obj
+end
+
+
+function setPlayer(self, player)
+       self.player = player
+end
+
+
+function event(self, event)
+       local onscreen = true
+       if not self.popup then
+               onscreen = false
+               _openPopup(self)
+       end
+
+       local type = event:getType()
+       
+       if type == EVENT_SCROLL then
+               local scroll = event:getScroll()
+
+               if scroll > 0 then
+                       self.delta = 1
+               elseif scroll < 0 then
+                       self.delta = -1
+               else
+                       self.delta = 0
+               end
+               _updateSelectedTime(self)
+
+       elseif type == EVENT_KEY_PRESS then
+               local keycode = event:getKeycode()
+
+               -- GO closes the popup & executes any pending change
+               if keycode & KEY_GO ~= 0 then
+                       if self.autoInvokeTimer:isRunning() then 
_gotoTime(self) end
+                       self.popup:showBriefly(0)
+                       return EVENT_CONSUME
+               -- BACK closes the popup & cancels any pending change
+               elseif keycode & KEY_BACK ~= 0 then
+                       self.autoInvokeTimer:stop()
+                       self.popup:showBriefly(0)
+                        return EVENT_CONSUME
+               end
+
+               -- any other keys forward to the lower window
+               if keycode & (KEY_FWD|KEY_REW) == 0 then
+                       local lower = self.popup:getLowerWindow()
+                       if lower then
+                               Framework:dispatchEvent(lower, event)
+                       end
+
+                       self.popup:showBriefly(0)
+                       return EVENT_CONSUME
+               end
+
+               return EVENT_CONSUME
+       else
+               local keycode = event:getKeycode()
+
+               -- we're only interested in volume keys
+               if keycode & (KEY_FWD|KEY_REW) == 0 then
+                       return EVENT_CONSUME
+               end
+
+               -- stop volume update on key up
+               if type == EVENT_KEY_UP then
+                       self.delta = 0
+                       self.muting = false
+                       self.holdTimer:stop()
+                       return EVENT_CONSUME
+               end
+
+               -- update position
+               -- We could add "or type == EVENT_KEY_HOLD" to this test,
+               -- in which case the hold-fwd/hold-rew used to enter this mode
+               -- would immediately start scanning, but I think that it is 
better
+               -- without this.
+               if type == EVENT_KEY_DOWN then
+                       if keycode == KEY_FWD then
+                               self.delta = 1
+                       elseif keycode == KEY_REW thlocal EVENT_KEY_DOWN        
 = jive.ui.EVENT_KEY_DOWNen
+                               self.delta = -1
+                       else
+                               self.delta = 0
+                       end
+
+                       self.holdTimer:restart()
+                       if onscreen then
+                               _updateSelectedTime(self)
+                       end
+
+                       return EVENT_CONSUME
+               end
+       end
+
+       return EVENT_CONSUME
+end
+
+
+--[[
+
+=head1 LICENSE
+
+Copyright 2007 Logitech. All Rights Reserved.
+
+This file is subject to the Logitech Public Source License Version 1.0. Please 
see the LICENCE file for details.
+
+=cut
+--]]

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
 Thu Apr 17 05:11:16 2008
@@ -50,6 +50,7 @@
                              
 local DB                     = require("applets.SlimBrowser.DB")
 local Volume                 = require("applets.SlimBrowser.Volume")
+local Scanner                = require("applets.SlimBrowser.Scanner")
 
 local debug                  = require("jive.utils.debug")
 
@@ -82,6 +83,7 @@
 local KEY_PAUSE              = jive.ui.KEY_PAUSE
 local KEY_VOLUME_DOWN        = jive.ui.KEY_VOLUME_DOWN
 local KEY_VOLUME_UP          = jive.ui.KEY_VOLUME_UP
+local KEY_GO                 = jive.ui.KEY_GO
 
 local jiveMain               = jiveMain
 local appletManager          = appletManager
@@ -1038,10 +1040,8 @@
                return EVENT_CONSUME
        end,
 
-       ["rew-hold"] = function()
-               Framework:playSound("PLAYBACK")
-               _player:scan_rew()
-               return EVENT_CONSUME
+       ["rew-hold"] = function(self, event)
+               return self.scanner:event(event)
        end,
 
        ["fwd"] = function()
@@ -1050,10 +1050,8 @@
                return EVENT_CONSUME
        end,
 
-       ["fwd-hold"] = function()
-               Framework:playSound("PLAYBACK")
-               _player:scan_fwd()
-               return EVENT_CONSUME
+       ["fwd-hold"] = function(self, event)
+               return self.scanner:event(event)
        end,
 
        ["volup-down"] = function(self, event)
@@ -1063,6 +1061,11 @@
        ["voldown-down"] = function(self, event)
                return self.volume:event(event)
        end,
+--[[   
+       ["go-hold"] = function(self, event)
+               return self.scanner:event(event)
+       end,
+--]]
 }
 
 
@@ -1329,6 +1332,7 @@
        [KEY_FWD]   = 'fwd',
        [KEY_REW]   = 'rew',
        [KEY_ADD]   = 'add',
+       [KEY_GO]    = 'go',
 }
 -- internal actionNames:
 --                               'inputDone'
@@ -2077,6 +2081,9 @@
                self.volume:setPlayer(player)
        end
 
+    -- update the scanner object
+    self.scanner:setPlayer(player)
+
        -- nothing to do if we don't have a player
        -- NOTE don't move this, the code above needs to run when disconnecting
        -- for all players.
@@ -2361,6 +2368,7 @@
        jnt:subscribe(self)
 
        self.volume = Volume(self)
+       self.scanner = Scanner(self)
 end
 
 --[[

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt 
(original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt 
Thu Apr 17 05:11:16 2008
@@ -139,3 +139,6 @@
        IT      Aggiornamento firmware Squeezebox
        NL      Squeezebox-firmware wordt bijgewerkt
 
+SLIMBROWSER_SCANNER
+       EN      Song Position
+

Modified: 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua (original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/slim/Player.lua Thu Apr 17 
05:11:16 2008
@@ -978,6 +978,21 @@
        end
 end
 
+-- gototime
+-- jump to new time in song
+function gototime(self, time)
+       self.trackSeen = Framework:getTicks() / 1000
+       self.trackTime = time
+       log:debug("Sending player:time(", time, ")")
+       self:send({'time', time })
+       return nil
+end
+
+-- isTrackSeekable
+-- Try to work out if SC can seek in this track - only really a guess
+function isTrackSeekable(self)
+       return self.trackDuration and not self.state.remote
+end
 
 -- mute
 -- mutes or ummutes the player, returns a negitive value if the player is muted

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay_desktop/share/applets/Test/TestApplet.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay_desktop/share/applets/Test/TestApplet.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay_desktop/share/applets/Test/TestApplet.lua 
(original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay_desktop/share/applets/Test/TestApplet.lua 
Thu Apr 17 05:11:16 2008
@@ -152,6 +152,11 @@
                                        self:lockedScreen(menuItem)
                                end
                        },
+                       { text = "Downloading Software",
+                               sound = "WINDOWSHOW",
+                               callback = function(event, menuItem)
+                                       self:downloadingSoftware(menuItem)
+                       end },
                        { text = "Connecting Popup",
                                sound = "WINDOWSHOW",
                                callback = function(event, menuItem)
@@ -454,6 +459,49 @@
        self:tieAndShowWindow(popup)
        return popup
 end
+
+function downloadingSoftware(self, menuItem)
+
+       local popup = Popup("popupIcon")
+
+       --FIXME, this window does not layout correctly (Bug 5412)
+       local icon = Icon("iconConnecting")
+       local text = Label("text", "\nDownloading Firmware")
+       local label = Label("downloading", "0%")
+
+       popup:addWidget(label)
+       popup:addWidget(icon)
+       popup:addWidget(text)
+
+
+       local state = 1
+       popup:addTimer(1000, function()
+                                      if state == 1 then
+                                              label:setValue("5%")
+                                      elseif state == 2 then
+                                              label:setValue("10%")
+                                      elseif state == 3 then
+                                              label:setValue("27%")
+                                      elseif state == 4 then
+                                              label:setValue("43%")
+                                      elseif state == 5 then
+                                              label:setValue("52%")
+                                      elseif state == 6 then
+                                              label:setValue("74%")
+                                      elseif state == 7 then
+                                              icon:setStyle("iconConnected")
+                                              label:setValue("100%")
+                                               text:setValue("\nDownloading 
Complete!")
+                                      else
+                                              popup:hide()
+                                      end
+                                      state = state + 1
+                              end)
+
+       self:tieAndShowWindow(popup)
+       return popup
+end
+
 
 function connectingPopup(self, menuItem)
 

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
 Thu Apr 17 05:11:16 2008
@@ -688,7 +688,7 @@
        popup:show()
 
        self.lockedPopup = popup
-       self.lockedTimer = Timer(2000,
+       self.lockedTimer = Timer(5000,
                                 function()
                                         self:_setBrightness(true, 0, 0)
                                         self:_setCPUSpeed(false)

Modified: 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/strings.txt
URL: 
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/strings.txt?rev=2263&root=Jive&r1=2262&r2=2263&view=diff
==============================================================================
--- 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/strings.txt
 (original)
+++ 
7.2/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/strings.txt
 Thu Apr 17 05:11:16 2008
@@ -6,17 +6,17 @@
 
 BSP_SCREEN_LOCKED
        DA      LÃ¥st
-       DE      LCD gesperrt. Drücken Sie HINZUFÜGEN und WIEDERGABE.
+       DE      Gesperrt
        EN      Locked
-       ES      Pantalla bloqueada. Pulse AGREGAR y REPRODUCIR para desbloquear.
-       FR      Ecran verrouillé. Appuyez sur ADD et PLAY pour le 
déverrouiller.
-       IT      Schermo bloccato. Premere AGGIUNGI e RIPRODUCI per sbloccarlo.
-       NL      Scherm vergrendeld. Druk op TOEVOEGEN en AFSPELEN om het te 
ontgrendelen.
+       ES      Bloqueda
+       FR      Verrouillé
+       IT      Bloccato
+       NL      Vergrendeld
 
 BSP_SCREEN_LOCKED_HELP
        DA      For at låse op, tryk ADD og PLAY på samme tid.
        DE      Drücken Sie zum Aufheben der Sperre gleichzeitig ADD und PLAY.
-       EN      To unlock press the ADD and PLAY buttons at the same time.
+       EN      To unlock, press the ADD and PLAY buttons at the same time.
        ES      Para desbloquear, pulse los botones ADD y PLAY simultáneamente.
        FR      Pour déverrouiller, appuyez sur les boutons ADD et PLAY 
simultanément.
        IT      Per sbloccare premere contemporaneamente i pulsanti ADD e PLAY.

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to