From f96724af1c9b4a57e0c056e522a6bb31cb4c549c Mon Sep 17 00:00:00 2001 From: David Still Date: Wed, 22 Jan 2014 14:47:05 -0800 Subject: [PATCH 1/2] Pressing SELECT on your XBMC Remote while the Chrome window is open will kill the Chrome process. This currently causes problems with NetfliXBMC thinking that there are multiple streams already open. --- default.py | 42 ++++++++++++++++++++++++++ resources/language/English/strings.xml | 1 + resources/language/German/strings.xml | 1 + 3 files changed, 44 insertions(+) diff --git a/default.py b/default.py index 38cc582..21a8144 100644 --- a/default.py +++ b/default.py @@ -8,6 +8,7 @@ import xbmcplugin import xbmcgui import xbmcaddon +import signal addon = xbmcaddon.Addon() @@ -28,6 +29,7 @@ userDataFolder = xbmc.translatePath("special://profile/addon_data/"+addonID) profileFolder = os.path.join(userDataFolder, 'profile') siteFolder = os.path.join(userDataFolder, 'sites') +browserPIDFile = os.path.join(userDataFolder, 'browser.pid') if not os.path.isdir(userDataFolder): os.mkdir(userDataFolder) @@ -119,6 +121,7 @@ def getFullPath(path, url, useKiosk, userAgent): def showSite(url, stopPlayback, kiosk, userAgent): + fullUrl = "" if stopPlayback == "yes": xbmc.Player().stop() if osWin: @@ -170,6 +173,44 @@ def showSite(url, stopPlayback, kiosk, userAgent): else: xbmc.executebuiltin('XBMC.Notification(Info:,'+str(translation(30005))+'!,5000)') addon.openSettings() + print("fullUrl: %s" % fullUrl) + + if fullUrl != "": + if os.path.exists(browserPIDFile): + os.unlink(browserPIDFile) + fh = open(browserPIDFile, 'w+') + fh.write(fullUrl) + fh.close() + + xbmcgui.Dialog().ok(addon.getAddonInfo('name') , translation(30017)) + killBrowser() + + +def killBrowser(): + if os.path.exists(browserPIDFile): + fh = open(browserPIDFile) + fullUrl = fh.read() + fh.close() + browserPID = -1 + if len(fullUrl) > 0: + # a full re.escape() is too much + fullUrlEsc = fullUrl.replace('"','') + if osWin: + # WINDOWS VERSION NEEDS TO BE FIXED + psgrep = 'tasklist | FIND "chrome"' + if osLinux: + psgrep = '/bin/ps ax | /bin/grep "'+fullUrlEsc+'"' + if osOsx: + psgrep = '/bin/ps ax | /usr/bin/grep "'+fullUrlEsc+'"' + print("process grep: %s" % psgrep) + processList = subprocess.check_output( psgrep, shell=True ) + processMatch = re.findall('^\d*', processList).pop(0) + browserPID = int(processMatch) + else: + browserPID = -1 + if browserPID > 0: + os.kill(browserPID, signal.SIGKILL) + os.unlink(browserPIDFile) def removeSite(title): @@ -275,3 +316,4 @@ def addSiteDir(name, url, mode, iconimage, stopPlayback, kiosk): editSite(url) else: index() + diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index 5ad1cbe..a66ff62 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -15,4 +15,5 @@ Script path Delay after script (in seconds) Use kiosk mode? + Click "OK" to close Chrome diff --git a/resources/language/German/strings.xml b/resources/language/German/strings.xml index a966f2e..1cb209e 100644 --- a/resources/language/German/strings.xml +++ b/resources/language/German/strings.xml @@ -12,4 +12,5 @@ Benutzerdefiniertes Skript vor Chrome starten Script Pfad Pause nach Skript (in Sekunden) + Klicken Sie auf OK, um Chrom zu schließen From 8df74d6caabd16525425d68d58563f1745cad3e9 Mon Sep 17 00:00:00 2001 From: David Still Date: Wed, 22 Jan 2014 16:13:37 -0800 Subject: [PATCH 2/2] use SIGTERM instead of SIGKILL for gracefull exits and fewer errors --- default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.py b/default.py index 21a8144..10e902a 100644 --- a/default.py +++ b/default.py @@ -209,7 +209,7 @@ def killBrowser(): else: browserPID = -1 if browserPID > 0: - os.kill(browserPID, signal.SIGKILL) + os.kill(browserPID, signal.SIGTERM) os.unlink(browserPIDFile)