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