Index: jive_squeezeboxjive/share/applets/SqueezeboxJive/strings.txt =================================================================== --- jive_squeezeboxjive/share/applets/SqueezeboxJive/strings.txt (revision 986) +++ jive_squeezeboxjive/share/applets/SqueezeboxJive/strings.txt (working copy) @@ -212,3 +212,34 @@ IT Annullare o confermare la disattivazione del telecomando NL Annuleer of bevestig het uitzetten van je controller +NETWORK_PROBLEM + DE Netwerkproblem + EN Network Problem + ES Problema de red + FR Problème réseau + IT Problema di rete + NL Netwerkprobleem + +NETWORK_TRY_AGAIN + DE Erneut versuchen. + EN Try again + ES Vuelva a intentarlo + FR Réessayer + IT Riprova + NL Opnieuw proberen + +NETWORK_CHOOSE_NETWORK + DE Netzwerk wählen + EN Choose Network + ES Elegir red + FR Choisir un réseau + IT Scegli rete + NL Netwerk kiezen + +NETWORK_PROBLEM_HELP + DE Probleme beim Verbinden der Fernbedienung mit %s + EN This remote is having trouble connecting to %s. + ES Este mando tiene problemas para conectarse a %s. + FR Cette télécommande ne peut se connecter à %s. + IT Problema di connessione del telecomando a %s + NL Deze afstandsbediening kan geen verbinding maken met %s. Index: jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua =================================================================== --- jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua (revision 986) +++ jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua (working copy) @@ -33,6 +33,7 @@ local jnt = jnt local iconbar = iconbar +local appletManager = appletManager local EVENT_ACTION = jive.ui.EVENT_ACTION local EVENT_CONSUME = jive.ui.EVENT_CONSUME @@ -72,6 +73,15 @@ function init(self) self.Wireless = Wireless(jnt, "eth0") + -- override system isConnected function + self.networkConnected = false + jnt.isConnected = function() + + log:warn("isConnected=", self.networkConnected) + + return self.networkConnected + end + iconbar.iconWireless:addTimer(5000, -- every 5 seconds function() self:update() @@ -215,6 +225,58 @@ end +function notify_networkConnected(self) + + log:warn("notify_networkConnected") + + if self.networkErrorWindow then + self.networkErrorWindow:hide() + self.networkErrorWindow = nil + end +end + + +function notify_networkDisconnected(self, pendingRequests) + + log:warn("notify_networkDisconnected pendingRequests=", pendingRequests) + + if self.networkErrorWindow or not pendingRequests then + return + end + + local ssid = "linksys" -- XXX + + local window = Window("window", "HAHAHA", squeezeboxjiveTitleStyle) + + local menu = SimpleMenu("menu") + + menu:addItem({ + text = self:string("NETWORK_TRY_AGAIN"), + sound = "WINDOWSHOW", + callback = function() + -- connecting popup + local setupWireless = appletManager:loadApplet("SetupWireless") + setupWireless:settingsConnect(ssid) + end, + }) + + menu:addItem({ + text = self:string("NETWORK_CHOOSE_NETWORK"), + sound = "WINDOWSHOW", + callback = function() + local setupWireless = appletManager:loadApplet("SetupWireless") + setupWireless:settingsNetworksShow() + end, + }) + + window:addWidget(Textarea("help", self:string("NETWORK_PROBLEM", ssid))) + window:addWidget(menu) + + self:tieAndShowWindow(window) + self.networkErrorWindow = window +end + + function setDate(self, date) -- matches date format 2007-09-08T20:40:42+00:00 local CCYY, MM, DD, hh, mm, ss, TZ = string.match(date, "(%d%d%d%d)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)([-+]%d%d:%d%d)") @@ -264,7 +326,25 @@ -- wireless strength local quality = self.Wireless:getLinkQuality() - iconbar:setWirelessSignal(quality ~= nil and quality or "ERROR") + if quality == nil then + if self.networkConnected then + self.networkConnected = false + iconbar:setWirelessSignal("ERROR") + + -- send notification we are disconnected + jnt:notify("networkDisconnected", false) + end + + else + if not self.networkConnected then + self.networkConnected = true + + -- send notification we are connected + jnt:notify("networkConnected") + end + + iconbar:setWirelessSignal(quality) + end end Index: jive_squeezeboxjive/share/applets/SetupWireless/SetupWirelessApplet.lua =================================================================== --- jive_squeezeboxjive/share/applets/SetupWireless/SetupWirelessApplet.lua (revision 986) +++ jive_squeezeboxjive/share/applets/SetupWireless/SetupWirelessApplet.lua (working copy) @@ -232,6 +232,18 @@ end +function settingsConnect(self, ssid) + self.scanResults = {} + self.ssid = ssid + + jnt:perform(function() + self:t_connect(self.ssid) + end) + + connect(self, true) +end + + function _networksShow(self, title, help) local window = Window("window", title, wirelessTitleStyle) @@ -939,9 +951,6 @@ self.psk = nil self.key = nil - -- send notification we're on a new network - jnt:notify("networkConnected") - -- popup confirmation local window = Popup("popupIcon") window:addWidget(Icon("iconConnected")) Index: jive_squeezeboxjive/share/applets/SetupWireless/strings.txt =================================================================== --- jive_squeezeboxjive/share/applets/SetupWireless/strings.txt (revision 986) +++ jive_squeezeboxjive/share/applets/SetupWireless/strings.txt (working copy) @@ -595,26 +595,3 @@ IT Immettere l'indirizzo IP del server DNS. NL Voer het IP-adres van je DNS-server in. -NETWORK_PROBLEM - DE Netwerkproblem - EN Network Problem - ES Problema de red - FR Problème réseau - IT Problema di rete - NL Netwerkprobleem - -NETWORK_CHOOSE_NETWORK - DE Netzwerk wählen - EN Choose Network - ES Elegir red - FR Choisir un réseau - IT Scegli rete - NL Netwerk kiezen - -NETWORK_PROBLEM_HELP - DE Probleme beim Verbinden der Fernbedienung mit %s - EN This remote is having trouble connecting to %s. - ES Este mando tiene problemas para conectarse a %s. - FR Cette télécommande ne peut se connecter à %s. - IT Problema di connessione del telecomando a %s - NL Deze afstandsbediening kan geen verbinding maken met %s. Index: jive/share/applets/SetupLanguage/SetupLanguageApplet.lua =================================================================== --- jive/share/applets/SetupLanguage/SetupLanguageApplet.lua (revision 986) +++ jive/share/applets/SetupLanguage/SetupLanguageApplet.lua (working copy) @@ -29,6 +29,8 @@ local SimpleMenu = require("jive.ui.SimpleMenu") local Textarea = require("jive.ui.Textarea") local Window = require("jive.ui.Window") +local Icon = require("jive.ui.Icon") +local Popup = require("jive.ui.Popup") local log = require("jive.utils.log").logger("applets.setup") local locale = require("jive.utils.locale") @@ -165,6 +167,48 @@ end +function popupTestShow(self, instead) + local window = Popup("popupIcon") + window:setAllowScreensaver(false) + + local icon = Icon("iconConnecting") + icon:addTimer(2000, function() + self:popupTestShow2(true) + end) + window:addWidget(icon) + + window:addWidget(Label("text", "foo")) + + log:warn("POPUP ONE") + if instead == true then + window:showInstead() + else + window:show() + end +end + + +function popupTestShow2(self, instead) + local window = Window("window") + window:setAllowScreensaver(false) + + local icon = Icon("iconConnected") + icon:addTimer(2000, function() + self:popupTestShow(true) + end) + window:addWidget(icon) + + window:addWidget(Label("text", "bar")) + + log:warn("POPUP TWO") + if instead == true then + window:showInstead() + else + window:show() + end +end + + --[[ =head1 LICENSE Index: jive/share/applets/SetupLanguage/SetupLanguageMeta.lua =================================================================== --- jive/share/applets/SetupLanguage/SetupLanguageMeta.lua (revision 986) +++ jive/share/applets/SetupLanguage/SetupLanguageMeta.lua (working copy) @@ -52,6 +52,9 @@ local advancedSettings = remoteSettings:subMenu(meta:string("ADVANCED_SETTINGS"), 1000) advancedSettings:addItem(meta:menuItem("LANGUAGE", function(applet, ...) applet:settingsShow(...) end)) + + + jiveMain:addItem(meta:menuItem("popup test", function(applet, ...) applet:popupTestShow(...) end)) end Index: jive/share/jive/net/NetworkThread.lua =================================================================== --- jive/share/jive/net/NetworkThread.lua (revision 986) +++ jive/share/jive/net/NetworkThread.lua (working copy) @@ -347,6 +347,22 @@ --[[ +=head2 self:isConnect() + +Returns true if the network is connect, false otherwise. + +=cut +--]] +function isConnected(self) + log:warn("in NetworkThread isConnectd") + + -- this function should be modified by the platform specific jive code + return true +end + + +--[[ + =head2 __init() Creates a new NetworkThread. The thread starts immediately. Index: jive/share/jive/net/Comet.lua =================================================================== --- jive/share/jive/net/Comet.lua (revision 986) +++ jive/share/jive/net/Comet.lua (working copy) @@ -137,6 +137,8 @@ function start(self) if not self.active then + log:warn('Comet:start()') + -- Begin handshake _handshake(self) end @@ -144,8 +146,7 @@ function disconnect(self) if self.active then - - log:debug('Comet:disconnect()') + log:warn('Comet:disconnect()') local data = { { channel = '/meta/disconnect', @@ -263,7 +264,7 @@ end _connect = function(self) - log:debug('Comet:_connect()') + log:warn('Comet:_connect()') -- Connect and subscribe to all events for this clientId local data = { { @@ -608,8 +609,10 @@ if log:isDebug() then log:debug("Comet:request(", func, ", reqid:", id, ", ", playerid, ", ", table.concat(request, ","), ", priority:", priority, ")") end - - if not self.active then + + -- XXX: Move the networkConnected logic into TcpSocket when the socket is + -- able to automatically retry requests. + if not self.active or not self.jnt.isConnected() then -- Add subscription to pending requests, to be sent during connect/reconnect table.insert( self.pending_reqs, { reqid = id, @@ -618,7 +621,12 @@ request = request, priority = priority, } ) - self.jnt:notify('cometDisconnected', self, #self.pending_reqs) + + if not self.jnt.isConnected() then + self.jnt:notify('networkDisconnected', self, true) + else + self.jnt:notify('cometDisconnected', self, #self.pending_reqs) + end else local cmd = {} cmd[1] = playerid or '' @@ -817,6 +825,8 @@ return end + log:warn('Comet:_active(', active, ')') + self.active = active if active then