Author: adrian
Date: Wed Apr 16 12:32:39 2008
New Revision: 2247
URL: http://svn.slimdevices.com?rev=2247&root=Jive&view=rev
Log:
Bug: N/A
Description: customisable sound effects via download from SC
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/Makefile.am
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/Makefile.am
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/Makefile.am?rev=2247&root=Jive&r1=2246&r2=2247&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/Makefile.am (original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/Makefile.am Wed Apr 16 12:32:39 2008
@@ -101,8 +101,7 @@
share/jive/AppletMeta.lua \
share/jive/Iconbar.lua \
share/jive/global_strings.txt \
- share/jive/splash.png \
- share/jive/splash.wav
+ share/jive/splash.png
jiveuidir = $(pkgdatadir)/jive/ui
dist_jiveui_DATA = \
@@ -520,6 +519,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.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua?rev=2247&root=Jive&r1=2246&r2=2247&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsApplet.lua
Wed Apr 16 12:32:39 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.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua?rev=2247&root=Jive&r1=2246&r2=2247&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/SetupSoundEffectsMeta.lua
Wed Apr 16 12:32:39 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.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt?rev=2247&root=Jive&r1=2246&r2=2247&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SetupSoundEffects/strings.txt
Wed Apr 16 12:32:39 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.
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins