]> www.vanbest.org Git - motioneye-debian/commitdiff
generalize update mechanism for platforms that support it
authorCalin Crisan <ccrisan@gmail.com>
Sun, 5 Mar 2017 18:49:00 +0000 (20:49 +0200)
committerCalin Crisan <ccrisan@gmail.com>
Sun, 5 Mar 2017 18:49:00 +0000 (20:49 +0200)
motioneye/handlers.py
motioneye/templates/main.html
motioneye/templates/version.html
motioneye/update.py

index 1d30196a16b07a68bcdbbe661e0b8ed7fd0b7d7a..78e775812643f50e2eb9e0b5873164c86eb8328c 100644 (file)
@@ -203,12 +203,14 @@ class MainHandler(BaseHandler):
         main_sections = config.get_additional_structure(camera=False, separators=True)[0]
         camera_sections = config.get_additional_structure(camera=True, separators=True)[0]
         
-        motion_info = motionctl.find_motion(); 
+        motion_info = motionctl.find_motion() 
+        os_version = update.get_os_version()
 
         self.render('main.html',
                 frame=False,
                 version=motioneye.VERSION,
                 motion_version=motion_info[1] if motion_info else '(none)',
+                os_version=' '.join(os_version),
                 enable_update=settings.ENABLE_UPDATE,
                 enable_reboot=settings.ENABLE_REBOOT,
                 add_remove_cameras=settings.ADD_REMOVE_CAMERAS,
@@ -1764,10 +1766,10 @@ class UpdateHandler(BaseHandler):
         logging.debug('listing versions')
         
         versions = update.get_all_versions()
-        current_version = update.get_version()
-        update_version = None
-        if versions and update.compare_versions(versions[-1], current_version) > 0:
-            update_version = versions[-1]
+        current_version = update.get_os_version()[1]  # os version is returned as (name, version) tuple
+        recent_versions = [v for v in versions if update.compare_versions(v, current_version) > 0]
+        recent_versions.sort(cmp=update.compare_versions)
+        update_version = recent_versions[-1] if recent_versions else None
 
         self.finish_json({
             'update_version': update_version,
@@ -1805,8 +1807,15 @@ class PowerHandler(BaseHandler):
 
 class VersionHandler(BaseHandler):
     def get(self):
+        import motioneye
+
+        motion_info = motionctl.find_motion()
+        os_version = update.get_os_version()
+
         self.render('version.html',
-                version=update.get_version(),
+                version=motioneye.VERSION,
+                os_version=' '.join(os_version),
+                motion_version=motion_info[1] if motion_info else '',
                 hostname=socket.gethostname())
 
     post = get
index de06837f20cdc5d061e8ba1b2b60574e838b97fb..d32f3a65167aa1eafc8770448ac25e06ef848b10 100644 (file)
                         <td class="settings-item-label"><span class="settings-item-label">Motion Version</span></td>
                         <td class="settings-item-value"><span class="settings-item-label">{{motion_version}}</span></td>
                     </tr>
+                    <tr class="settings-item advanced-setting">
+                        <td class="settings-item-label"><span class="settings-item-label">OS Version</span></td>
+                        <td class="settings-item-value"><span class="settings-item-label">{{os_version}}</span></td>
+                    </tr>
                     {% if enable_update %}
                     <tr class="settings-item advanced-setting">
                         <td class="settings-item-label"><span class="settings-item-label">Software Update</span></td>
index d3a9249833a58a304f19c852af67a093a7636cd2..41281f56cb509671f463c81aac9da872c60de16e 100644 (file)
@@ -11,5 +11,7 @@
 
 {% block body %}
 hostname = "{{hostname}}"<br>
-version = "{{version}}"
+version = "{{version}}"<br>
+motion_version = "{{motion_version}}"<br>
+os_version = "{{os_version}}"
 {% endblock %}
index 265cb97ecb92ef0f1fbdd2de55192c9b3828245f..88a67d62e0d338e84324829864a73724d118ae9d 100644 (file)
 
 import logging
 import re
+import subprocess
 
 
-# versions
+def get_os_version():
+    try:
+        import platformupdate
+        
+        return platformupdate.get_os_version()
 
-def get_version():
-    import motioneye
-    
-    return motioneye.VERSION
+    except ImportError:
+        return _get_os_version_lsb_release()
 
 
-def get_all_versions():
-    return []
+def _get_os_version_lsb_release():
+    try:
+        output = subprocess.check_output('lsb_release -sri', shell=True)
+        lines = output.strip().split()
+        name, version = lines
+        if version.lower() == 'rolling':
+            version = ''
+        
+        return name, version
+
+    except:
+        return _get_os_version_uname()
+
+
+def _get_os_version_uname():
+    try:
+        output = subprocess.check_output('uname -rs', shell=True)
+        lines = output.strip().split()
+        name, version = lines
+        
+        return name, version
+
+    except:
+        return ('Linux', '')  # most likely :)
 
 
 def compare_versions(version1, version2):
@@ -68,7 +93,23 @@ def compare_versions(version1, version2):
         return 0
 
 
+def get_all_versions():
+    try:
+        import platformupdate
+
+    except ImportError:
+        return []
+    
+    return platformupdate.get_all_versions()
+
+
 def perform_update(version):
-    logging.error('updating is not implemented')
+    logging.info('updating to version %(version)s...' % {'version': version})
+
+    try:
+        import platformupdate
+
+    except ImportError:
+        logging.error('updating is not implemented')
     
-    return False
+    platformupdate.perform_update(version)