The branch, frodo has been updated
via 6f32f687e4d97b282ededfa047b6295466a0ef55 (commit)
from 64d578931af1b98ed9b5abd374b2cc1e241a00c9 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=6f32f687e4d97b282ededfa047b6295466a0ef55
commit 6f32f687e4d97b282ededfa047b6295466a0ef55
Author: M. Kaijser <[email protected]>
Date: Mon Apr 15 11:36:44 2013 +0200
[service.xbmc.versioncheck] 0.1.4
diff --git a/service.xbmc.versioncheck/.gitignore
b/service.xbmc.versioncheck/.gitignore
index 1dc7da7..fa0349c 100644
--- a/service.xbmc.versioncheck/.gitignore
+++ b/service.xbmc.versioncheck/.gitignore
@@ -2,3 +2,4 @@
.project
.pydevproject
pysrc
+*.pyc
diff --git a/service.xbmc.versioncheck/addon.xml
b/service.xbmc.versioncheck/addon.xml
index b761876..11d3953 100644
--- a/service.xbmc.versioncheck/addon.xml
+++ b/service.xbmc.versioncheck/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="service.xbmc.versioncheck"
name="XBMC Version Check"
- version="0.1.3"
+ version="0.1.4"
provider-name="Team XBMC">
<requires>
<import addon="xbmc.addon" version="12.0.0"/>
diff --git a/service.xbmc.versioncheck/changelog.txt
b/service.xbmc.versioncheck/changelog.txt
index fd5cd08..1d63f3e 100644
--- a/service.xbmc.versioncheck/changelog.txt
+++ b/service.xbmc.versioncheck/changelog.txt
@@ -1,3 +1,6 @@
+v0.1.4
+- We can now upgrade xbmc on Linux. This works either via polkit or shell
wrapper as fallback
+
v0.1.3
- Update with 13.0 Gotham_alpha2
diff --git a/service.xbmc.versioncheck/icon.png
b/service.xbmc.versioncheck/icon.png
index a7ad3eb..8eb53e5 100644
Binary files a/service.xbmc.versioncheck/icon.png and
b/service.xbmc.versioncheck/icon.png differ
diff --git a/service.xbmc.versioncheck/resources/language/English/strings.po
b/service.xbmc.versioncheck/resources/language/English/strings.po
index 38b4c9a..89cc8d6 100644
--- a/service.xbmc.versioncheck/resources/language/English/strings.po
+++ b/service.xbmc.versioncheck/resources/language/English/strings.po
@@ -60,10 +60,30 @@ msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr ""
+msgctxt "#32012"
+msgid "A new version is available, do you want to upgrade now?"
+msgstr ""
+
+msgctxt "#32013"
+msgid "Upgrade successful"
+msgstr ""
+
+msgctxt "#32014"
+msgid "Do you want to restart Xbmc to finish the upgrade?"
+msgstr ""
+
+msgctxt "#32015"
+msgid "Do you want to check for a new version?"
+msgstr ""
+
msgctxt "#32020"
msgid "General"
msgstr ""
msgctxt "#32021"
msgid "Enable XBMC version check?"
+msgstr ""
+
+msgctxt "#32022"
+msgid "Please enter your password"
msgstr ""
\ No newline at end of file
diff --git a/service.xbmc.versioncheck/service.py
b/service.xbmc.versioncheck/service.py
index 49acf3a..c7bae6d 100644
--- a/service.xbmc.versioncheck/service.py
+++ b/service.xbmc.versioncheck/service.py
@@ -18,235 +18,81 @@
#
-import os
import platform
import xbmc
-import xbmcaddon
-import xbmcgui
-import xbmcvfs
+import lib.common
+from lib.common import log
+from lib.common import upgrade_message as _upgrademessage
-if sys.version_info < (2, 7):
- import simplejson
-else:
- import json as simplejson
+__addon__ = lib.common.__addon__
+__addonversion__ = lib.common.__addonversion__
+__addonname__ = lib.common.__addonname__
+__addonpath__ = lib.common.__addonpath__
+__icon__ = lib.common.__icon__
+__localize__ = lib.common.__localize__
-__addon__ = xbmcaddon.Addon()
-__addonversion__ = __addon__.getAddonInfo('version')
-__addonname__ = __addon__.getAddonInfo('name')
-__addonpath__ = __addon__.getAddonInfo('path').decode('utf-8')
-__icon__ = __addon__.getAddonInfo('icon')
-__localize__ = __addon__.getLocalizedString
-
-def log(txt):
- if isinstance (txt,str):
- txt = txt.decode("utf-8")
- message = u'%s: %s' % (__addonname__, txt)
- xbmc.log(msg=message.encode("utf-8"), level=xbmc.LOGDEBUG)
class Main:
def __init__(self):
+ linux = False
+ packages = []
if __addon__.getSetting("versioncheck_enable") == 'true' and not
xbmc.getCondVisibility('System.HasAddon(os.openelec.tv)'):
if not sys.argv[0]:
xbmc.executebuiltin('XBMC.AlarmClock(CheckAtBoot,XBMC.RunScript(service.xbmc.versioncheck,
started),00:00:30,silent)')
xbmc.executebuiltin('XBMC.AlarmClock(CheckWhileRunning,XBMC.RunScript(service.xbmc.versioncheck,
started),24:00:00,silent,loop)')
elif sys.argv[0] and sys.argv[1] == 'started':
if xbmc.getCondVisibility('System.Platform.Linux'):
- oldversion = _versionchecklinux('xbmc')
+ packages = ['xbmc']
+ _versionchecklinux(packages)
else:
- oldversion = _versioncheck()
- if oldversion[0]:
- _upgrademessage(oldversion[1])
+ oldversion, msg = _versioncheck()
+ if oldversion:
+ _upgrademessage(msg, False)
else:
pass
def _versioncheck():
# initial vars
- oldversion = False
- msg = ''
+ from lib.json import get_installedversion, get_versionfilelist
+ from lib.versions import compare_version
# retrieve versionlists from supplied version file
- version_file = os.path.join(__addonpath__, 'resources/versions.txt')
- # Eden didn't have xbmcvfs.File()
- if xbmcaddon.Addon('xbmc.addon').getAddonInfo('version') < "11.9.3":
- file = open(version_file, 'r')
- else:
- file = xbmcvfs.File(version_file)
- data = file.read()
- file.close()
- version_query = unicode(data, 'utf-8', errors='ignore')
- version_query = simplejson.loads(version_query)
-
- # Create seperate version lists
- versionlist_stable = version_query['releases']['stable']
- versionlist_rc = version_query['releases']['releasecandidate']
- versionlist_beta = version_query['releases']['beta']
- versionlist_alpha = version_query['releases']['alpha']
- versionlist_prealpha = version_query['releases']['prealpha']
-
- # retrieve current installed version
- json_query = xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method":
"Application.GetProperties", "params": {"properties": ["version", "name"]},
"id": 1 }')
- json_query = unicode(json_query, 'utf-8', errors='ignore')
- json_query = simplejson.loads(json_query)
- version_installed = []
- if json_query.has_key('result') and
json_query['result'].has_key('version'):
- version_installed = json_query['result']['version']
- log("Version installed %s" %version_installed)
- # set oldversion flag to false
- oldversion = False
-
- ### Check to upgrade to newest available stable version
- # check on smaller major version. Smaller version than available always
notify
- if version_installed['major'] < int(versionlist_stable[0]['major']):
- msg = __localize__(32003)
- oldversion = True
- log("Version available %s" %versionlist_stable[0])
-
- # check on same major version installed and available
- elif version_installed['major'] == int(versionlist_stable[0]['major']):
- # check on smaller minor version
- if version_installed['minor'] < int(versionlist_stable[0]['minor']):
- msg = __localize__(32003)
- oldversion = True
- log("Version available %s" %versionlist_stable[0])
- # check if not installed a stable so always notify
- elif version_installed['tag'] != "stable":
- msg = __localize__(32008)
- oldversion = True
- log("Version available %s" %versionlist_stable[0])
- else:
- log("Last available stable installed")
-
- ### Check to upgrade to newest available RC version if not installed stable
- ## Check also oldversion hasn't been set true by previous check because if
so this need to be skipped
- if not oldversion and version_installed['tag'] != "stable":
- # only check on equal or lower major because newer installed
beta/alpha/prealpha version will be higher
- if versionlist_rc and version_installed['major'] <=
int(versionlist_rc[0]['major']):
- if version_installed['revision'] <= versionlist_rc[0]['revision']:
- msg = __localize__(32004)
- oldversion = True
- log("Version available %s" %versionlist_rc[0])
-
- # exclude if installed RC on checking for newer beta
- if not oldversion and versionlist_beta and version_installed['tag']
not in ["releasecandidate"]:
- if version_installed['major'] <= int(versionlist_beta[0]['major']):
- if version_installed['revision'] <
versionlist_beta[0]['revision']:
- msg = __localize__(32005)
- oldversion = True
- log("Version available %s" %versionlist_beta[0])
-
- # exclude if installed RC or beta on checking for newer alpha
- if not oldversion and versionlist_alpha and version_installed['tag']
not in ["releasecandidate", "beta"]:
- if version_installed['major'] <=
int(versionlist_alpha[0]['major']):
- if version_installed['revision'] <
versionlist_alpha[0]['revision']:
- msg = __localize__(32006)
- oldversion = True
- log("Version available %s" %versionlist_alpha[0])
-
- # exclude if installed RC, beta or alpha on checking for newer prealpha
- if not oldversion and versionlist_prealpha and
version_installed['tag'] not in ["releasecandidate", "beta", "alpha"]:
- if version_installed['major'] <=
int(versionlist_prealpha[0]['major']):
- if version_installed['revision'] <
versionlist_prealpha[0]['revision']:
- msg = __localize__(32007)
- oldversion = True
- log("Version available %s" %versionlist_prealpha[0])
-
- # Nothing to see here, move along
- else:
- # Nothing to see here, move along
- pass
+ versionlist = get_versionfilelist()
+ # retrieve version installed
+ version_installed = get_installedversion()
+ # copmpare installed and available
+ oldversion, msg = compare_version(version_installed, versionlist)
return oldversion, msg
-def _versionchecklinux(package):
+def _versionchecklinux(packages):
if (platform.dist()[0] == "Ubuntu" or platform.dist()[0] == "Debian"):
- oldversion, msg = _versioncheckapt(package)
+ try:
+ # try aptdeamon first
+ from lib.aptdeamonhandler import AptdeamonHandler
+ handler = AptdeamonHandler()
+ except:
+ # fallback to shell
+ # since we need the user password, ask to check for new version
first
+ if _upgrademessage(32015, True):
+ from lib.shellhandlerapt import ShellHandlerApt
+ sudo = True
+ handler = ShellHandlerApt(sudo)
+
else:
log("Unsupported platform %s" %platform.dist()[0])
sys.exit(0)
- return oldversion, msg
-
-def _versioncheckapt(package):
- #check for linux using Apt
- # initial vars
- oldversion = False
- msg = ''
- result = ''
-
- # try to import apt
- try:
- import apt
- from aptdaemon import client
- from aptdaemon import errors
- except:
- log('python apt import error')
- sys.exit(0)
- apt_client = client.AptClient()
- try:
- result = apt_client.update_cache(wait=True)
- if (result == "exit-success"):
- log("Finished updating the cache")
- else:
- log("Error updating the cache %s" %result)
- except errors.NotAuthorizedError:
- log("You are not allowed to update the cache")
- sys.exit(0)
-
- trans = apt_client.upgrade_packages([package])
- trans.simulate(reply_handler=_apttransstarted,
error_handler=_apterrorhandler)
- pkg = trans.packages[4][0]
- if (pkg == package):
- cache=apt.Cache()
- cache.open(None)
- cache.upgrade()
- if (cache[package].installed and cache[package].installed.version !=
cache[package].candidate.version):
- log("Version installed %s" %cache[package].installed.version)
- log("Version available %s" %cache[package].candidate.version)
- oldversion = True
- msg = __localize__(32011)
- elif (cache[package].installed):
- log("Already on newest version %s"
%cache[package].installed.version)
- else:
- log("No installed package found, probably manual install")
- sys.exit(0)
- return oldversion, msg
-
-def _apttransstarted():
- pass
+ if handler:
+ if handler.check_upgrade_available(packages[0]):
+ if _upgrademessage(32012, True):
+ if handler.upgrade_package(packages[0]):
+ from lib.common import message_upgrade_success,
message_restart
+ message_upgrade_success()
+ message_restart()
+ else:
+ log("Error: no handler found")
-def _apterrorhandler(error):
- raise error
-def _upgrademessage(msg):
- # Don't show while watching a video
- while(xbmc.Player().isPlayingVideo() and not xbmc.abortRequested):
- xbmc.sleep(1000)
- i = 0
- while(i < 5 and not xbmc.abortRequested):
- xbmc.sleep(1000)
- i += 1
- # Detect if it's first run and only show OK dialog + ask to disable on that
- firstrun = __addon__.getSetting("versioncheck_firstrun") != 'false'
- if firstrun and not xbmc.abortRequested:
- xbmcgui.Dialog().ok(__addonname__,
- msg,
- __localize__(32001),
- __localize__(32002))
- # sets check to false which is checked on startup
- if xbmcgui.Dialog().yesno(__addonname__,
- __localize__(32009),
- __localize__(32010)):
- __addon__.setSetting("versioncheck_enable", 'false')
- # set first run to false to only show a popup next startup / every two
days
- __addon__.setSetting("versioncheck_firstrun", 'false')
- # Show notification after firstrun
- elif not xbmc.abortRequested:
- log(__localize__(32001) + '' + __localize__(32002))
- xbmc.executebuiltin("XBMC.Notification(%s, %s, %d, %s)"
%(__addonname__,
-
__localize__(32001) + '' + __localize__(32002),
- 15000,
- __icon__))
- else:
- pass
if (__name__ == "__main__"):
log('Version %s started' % __addonversion__)
-----------------------------------------------------------------------
Summary of changes:
service.xbmc.versioncheck/.gitignore | 1 +
service.xbmc.versioncheck/addon.xml | 2 +-
service.xbmc.versioncheck/changelog.txt | 3 +
service.xbmc.versioncheck/icon.png | Bin 26829 -> 33618 bytes
service.xbmc.versioncheck/lib/__init__.py | 1 +
service.xbmc.versioncheck/lib/aptdeamonhandler.py | 109 +++++++++
service.xbmc.versioncheck/lib/common.py | 87 +++++++
service.xbmc.versioncheck/lib/json.py | 57 +++++
service.xbmc.versioncheck/lib/shellhandlerapt.py | 118 ++++++++++
service.xbmc.versioncheck/lib/versions.py | 90 +++++++
.../resources/language/English/strings.po | 20 ++
.../resources/polkit/10-allow-update.pkla | 6 +
service.xbmc.versioncheck/resources/polkit/README | 10 +
service.xbmc.versioncheck/service.py | 244 ++++----------------
14 files changed, 548 insertions(+), 200 deletions(-)
create mode 100644 service.xbmc.versioncheck/lib/__init__.py
create mode 100644 service.xbmc.versioncheck/lib/aptdeamonhandler.py
create mode 100644 service.xbmc.versioncheck/lib/common.py
create mode 100644 service.xbmc.versioncheck/lib/json.py
create mode 100644 service.xbmc.versioncheck/lib/shellhandlerapt.py
create mode 100644 service.xbmc.versioncheck/lib/versions.py
create mode 100644
service.xbmc.versioncheck/resources/polkit/10-allow-update.pkla
create mode 100644 service.xbmc.versioncheck/resources/polkit/README
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons