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,
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,
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
<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>
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):
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)