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

Reply via email to