Author: adrian
Date: Fri Apr 23 14:16:49 2010
New Revision: 8732

URL: http://svn.slimdevices.com/jive?rev=8732&view=rev
Log:
Bug: 15929
Description: send jiveapplets query to squeezenetwork after trying all local 
servers, no longer needs a valid playerid to get applet list from squeezenetwork

Modified:
    
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerApplet.lua

Modified: 
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.5/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerApplet.lua?rev=8732&r1=8731&r2=8732&view=diff
==============================================================================
--- 
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerApplet.lua
 (original)
+++ 
7.5/trunk/squeezeplay/src/squeezeplay/share/applets/SetupAppletInstaller/SetupAppletInstallerApplet.lua
 Fri Apr 23 14:16:49 2010
@@ -68,8 +68,8 @@
        self.auto = action and action == 'auto'
 
        local v1, v2, v3, v4 = string.match(JIVE_VERSION, 
"(%d+)%.(%d+)%.(%d+)%sr(%d+)")
-       local version = v1 .. "." .. v2 .. "." .. v3 .. "." .. v4
-       log:info("requesting applets for version: ", version)
+       self.version = v1 .. "." .. v2 .. "." .. v3 .. "." .. v4
+       log:info("requesting applets for version: ", self.version)
 
        -- find the applet directory
        for dir in package.path:gmatch("([^;]*)%?[^;]*;") do
@@ -81,43 +81,18 @@
                end
        end
 
-       -- query all servers
-       local opt = not self:getSettings()["_RECONLY"]
+       -- query all non Squeezenetwork servers (will try SN later if no useful 
response from these)
        self.waitingfor = 0
+       self.best = {}
+       self.sn = nil
        for id, server in appletManager:callService("iterateSqueezeCenters") do
-               -- need a player for SN query otherwise skip SN, don't need a 
player for SBS
-               local player
-               if server:isSqueezeNetwork() and server:isConnected() then
-                       for p in server:allPlayers() do
-                               if p ~= nil and tostring(p) ~= 
"ff:ff:ff:ff:ff:ff" then
-                                       player = p
-                                       break
-                               end
-                       end
-               end
-               
-               if not server:isSqueezeNetwork() or player ~= nil then
-                       log:info("sending query to ", tostring(server), " 
player ", tostring(player))
-                       server:userRequest(
-                               function(chunk, err)
-                                       if err then
-                                               log:debug(err)
-                                       elseif chunk then
-                                               self:menuSink(server, 
chunk.data)
-                                       end
-                               end,
-                               player,
-                               { "jiveapplets", 
-                                 "target:" .. System:getMachine(), 
-                                 "version:" .. version,
-                                 opt and "optstr:other|user" or "optstr:none",
-                         }
-                       )
+               if server:isSqueezeNetwork() then
+                       self.sn = server
+               else
+                       self:sendRequest(server)
                        self.waitingfor = self.waitingfor + 1
                end
        end
-
-       self.responses = {}
 
        -- start a timer which will fire if one or more servers does not respond
        -- needs to be long enough for async fetch of repo by the server before 
it responds
@@ -136,12 +111,36 @@
 end
 
 
+function sendRequest(self, server)
+       log:info("sending query to ", tostring(server))
+       local opt = not self:getSettings()["_RECONLY"]
+       server:userRequest(
+               function(chunk, err)
+                       if err then
+                               log:debug(err)
+                       elseif chunk then
+                               self:menuSink(server, chunk.data)
+                       end
+               end,
+               nil,
+               { "jiveapplets",
+                 "target:" .. System:getMachine(), 
+                 "version:" .. self.version,
+                 opt and "optstr:other|user" or "optstr:none",
+         }
+       )
+end
+
+
 function menuSink(self, server, data)
 
        if server ~= nil then
-               -- stash response & wait until all responses received
-               log:info("reponse received from ", tostring(server));
-               self.responses[#self.responses+1] = { server = server, data = 
data }
+               -- stash response if best so far (most entries)
+               data.count = tonumber(data.count)
+               log:info("reponse received from ", tostring(server), " with ", 
data.count, " entries");
+               if self.best.count == nil or self.best.count < data.count then
+                       self.best = { server = server, count = data.count, data 
= data }
+               end
                self.waitingfor = self.waitingfor - 1
        else
                -- timer called sink, give up waiting for more
@@ -153,18 +152,22 @@
                return
        end
 
+       -- if we got no entries in all responses, try squeezenetwork if not 
already tried
+       if (self.best.count == nil or self.best.count == 0) and self.sn then
+               log:info("no entries - sending query to squeezenetwork");
+               sendRequest(self, self.sn)
+               self.sn = nil
+               self.waitingfor = 1
+               self.timer:restart()
+               return
+       end
+
+       -- at this point have the best response we are going to get...
+       data, server = self.best.data, self.best.server
+       log:info("best received from ", tostring(server), " with ", data and 
data.count or 0, " entries");
+
        -- kill the timer 
        self.timer:stop()
-
-       -- use the response with the most entries
-       data, server = nil, nil
-       for _, response in pairs(self.responses) do
-               if data == nil or data.count < tonumber(response.data.count) 
then
-                       data = response.data
-                       data.count = tonumber(data.count)
-                       server = response.server
-               end
-       end
 
        if self.menu then
                self.window:removeWidget(self.menu)
@@ -364,7 +367,7 @@
                text = tostring(self:string("REMOVE")) .. " : " .. ver, 
                sound = "WINDOWSHOW",
                callback = function(event, menuItem)
-                                          self.toremove[entry.name] = 1
+                                          self.toremove[name] = 1
                                           self:action()
                                   end,
        })

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

Reply via email to