Author: titmuss
Date: Sat Jan 19 15:40:22 2008
New Revision: 1518
URL: http://svn.slimdevices.com?rev=1518&root=Jive&view=rev
Log:
Bug: N/A
Description:
Fix crasher in HomeMenu:hideToHome()
Use a weak table for the player instances. This is needed to ensure equality
when moving
between servers, and makes sure the slim server applet correctly detects when
the player
has moved.
Go directly to home when switching servers, do not collect $200.
Changing music source only works for ip3k players.
Modified:
trunk/jive/src/pkg/jive/share/applets/SetupSlimServers/SetupSlimServersApplet.lua
trunk/jive/src/pkg/jive/share/jive/slim/Player.lua
trunk/jive/src/pkg/jive/share/jive/ui/HomeMenu.lua
Modified:
trunk/jive/src/pkg/jive/share/applets/SetupSlimServers/SetupSlimServersApplet.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/share/applets/SetupSlimServers/SetupSlimServersApplet.lua?rev=1518&root=Jive&r1=1517&r2=1518&view=diff
==============================================================================
---
trunk/jive/src/pkg/jive/share/applets/SetupSlimServers/SetupSlimServersApplet.lua
(original)
+++
trunk/jive/src/pkg/jive/share/applets/SetupSlimServers/SetupSlimServersApplet.lua
Sat Jan 19 15:40:22 2008
@@ -134,30 +134,34 @@
self.serverMenu:removeItem(self.serverList[server:getIpPort()])
end
- local currentPlayer = self.sdApplet:getCurrentPlayer()
+ local currentPlayer = self.sdApplet:getCurrentPlayer()
-- new entry
local item
- if server and currentPlayer then
+ if server and currentPlayer and currentPlayer:canConnectToServer() then
+ local f = function()
+ self:connectPlayer(currentPlayer, server)
+ end
+
item = {
text = server:getName(),
sound = "WINDOWSHOW",
- callback = function()
- self:connectPlayer(currentPlayer,
server)
- end,
+ callback = f,
+ connectFunc = f,
weight = 1
}
-
- -- check current player
- if server == currentPlayer:getSlimServer() then
- item.style = 'checked'
- end
else
item = {
text = server and server:getName() or address,
weight = 1,
style = 'itemNoAction'
}
+ end
+
+ -- check current player
+ if server == currentPlayer:getSlimServer() then
+ item.style = 'checked' -- XXXX NoAction
+ item.callback = nil
end
self.serverMenu:addItem(item)
@@ -194,12 +198,19 @@
end
-function _updateServerList(self, server)
+function _updateServerList(self, player)
+ local server = player and player:getSlimServer()
+
for id, item in pairs(self.serverList) do
if server == id then
- item.style = 'checked'
+ item.style = 'checked' -- XXXX NoAction
+ item.callback = nil
else
item.style = nil
+
+ if player and player:canConnectToServer() then
+ item.callback = item.connectFunc
+ end
end
self.serverMenu:updatedItem(item)
end
@@ -207,12 +218,19 @@
function notify_playerNew(self, player)
+ if player == self.waitForConnect.player
+ and player:getSlimServer() == self.waitForConnect.server then
+
+ self.waitForConnect = nil
+ jiveMain:closeToHome()
+ end
+
local currentPlayer = self.sdApplet:getCurrentPlayer()
if player ~= currentPlayer then
return
end
- _updateServerList(self, player:getSlimServer())
+ _updateServerList(self, player)
end
@@ -222,23 +240,23 @@
return
end
- _updateServerList(self, player:getSlimServer())
+ _updateServerList(self, player)
end
function notify_playerCurrent(self, player)
- _updateServerList(self, player and player:getSlimServer())
+ _updateServerList(self, player)
end
-- connect player to server
function connectPlayer(self, player, server)
- log:warn("connect ", player, " to ", server)
-
-- tell the player to move servers
- local ip, port = server:getIpPort()
- player:send({'connect', ip})
-
+ self.waitForConnect = {
+ player = player,
+ server = server
+ }
+ player:connectToServer(server)
local window = Popup("popupIcon")
window:addWidget(Icon("iconConnecting"))
@@ -258,31 +276,13 @@
-- scan all servers waiting for the player
self.sdApplet:discover()
- if player:getSlimServer() == server then
- self:_connectPlayerDone(player, server)
- end
+ -- we detect when the connect to the new server
+ -- with notify_playerNew
timeout = timeout + 1
if timeout == CONNECT_TIMEOUT then
self:_connectPlayerFailed(player,
server)
end
- end)
-
- self:tieAndShowWindow(window)
-end
-
-
--- sucessfully connected player to server
-function _connectPlayerDone(self, player, server)
- local window = Popup("popupIcon")
- window:addWidget(Icon("iconConnected"))
-
- local statusLabel = Label("text",
self:string("SLIMSERVER_CONNECTED_TO", server:getName()))
- window:addWidget(statusLabel)
-
- window:addTimer(2000,
- function()
- window:hide()
end)
self:tieAndShowWindow(window)
Modified: trunk/jive/src/pkg/jive/share/jive/slim/Player.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/share/jive/slim/Player.lua?rev=1518&root=Jive&r1=1517&r2=1518&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/share/jive/slim/Player.lua (original)
+++ trunk/jive/src/pkg/jive/share/jive/slim/Player.lua Sat Jan 19 15:40:22 2008
@@ -29,7 +29,7 @@
local debug = require("jive.utils.debug")
-- stuff we need
-local _assert, tonumber, tostring, pairs = _assert, tonumber, tostring, pairs
+local _assert, setmetatable, tonumber, tostring, pairs = _assert,
setmetatable, tonumber, tostring, pairs
local os = require("os")
local string = require("string")
@@ -67,6 +67,7 @@
-- list of players index by id.
local players = {}
+setmetatable(players, { __mode = 'v' })
-- _getSink
@@ -343,7 +344,8 @@
self.jnt:notify('playerDelete', self)
self:offStage()
- players[self.id] = nil
+ -- The global players table uses weak values, it will be removed
+ -- when all references are freed.
end
@@ -821,6 +823,20 @@
end
+-- returns true if this player can connect to another server
+function canConnectToServer(self)
+ return self.model == "squeezebox2"
+ or self.model == "receiver"
+ or self.model == "transporter"
+end
+
+-- tell the player to connect to another server
+function connectToServer(self, server)
+ local ip, port = server:getIpPort()
+ self:send({'connect', ip})
+end
+
+
function getConnected(self)
return self.connected
end
Modified: trunk/jive/src/pkg/jive/share/jive/ui/HomeMenu.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/share/jive/ui/HomeMenu.lua?rev=1518&root=Jive&r1=1517&r2=1518&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/share/jive/ui/HomeMenu.lua (original)
+++ trunk/jive/src/pkg/jive/share/jive/ui/HomeMenu.lua Sat Jan 19 15:40:22 2008
@@ -61,7 +61,7 @@
local k = 1
for i = 1, #stack do
- if stack[i].alwaysOnTop and ~hideAlwaysOnTop then
+ if stack[i].alwaysOnTop and hideAlwaysOnTop == false then
k = i + 1
end
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins