← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~googol-hush/openlp/trivial2 into lp:openlp

 

Andreas Preikschat has proposed merging lp:~googol-hush/openlp/trivial2 into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~googol-hush/openlp/trivial2/+merge/54962

Hello,

- Moved the version method, so that it can be called from everywhere.
- Removed hard coded version numbers.

(I updated to .version file, to avoid that people have a completely incorrect version number, if they run from source, but without "-d")
-- 
https://code.launchpad.net/~googol-hush/openlp/trivial2/+merge/54962
Your team OpenLP Core is requested to review the proposed merge of lp:~googol-hush/openlp/trivial2 into lp:openlp.
=== modified file 'openlp.pyw'
--- openlp.pyw	2011-03-25 15:51:28 +0000
+++ openlp.pyw	2011-03-26 16:42:27 +0000
@@ -29,7 +29,6 @@
 import logging
 from optparse import OptionParser
 from traceback import format_exception
-from subprocess import Popen, PIPE
 
 from PyQt4 import QtCore, QtGui
 
@@ -40,7 +39,8 @@
 from openlp.core.ui.firsttimeform import FirstTimeForm
 from openlp.core.ui.exceptionform import ExceptionForm
 from openlp.core.ui import SplashScreen, ScreenList
-from openlp.core.utils import AppLocation, LanguageManager, VersionThread
+from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \
+    get_application_version
 
 log = logging.getLogger()
 
@@ -71,87 +71,6 @@
     The core application class. This class inherits from Qt's QApplication
     class in order to provide the core of the application.
     """
-    app_version = None
-
-    def get_version(self):
-        """
-        Load and store current Application Version
-        """
-        if self.app_version:
-            return self.app_version
-        if u'--dev-version' in sys.argv or u'-d' in sys.argv:
-            # If we're running the dev version, let's use bzr to get the version
-            try:
-                # If bzrlib is availble, use it
-                from bzrlib.branch import Branch
-                b = Branch.open_containing('.')[0]
-                b.lock_read()
-                try:
-                    # Get the branch's latest revision number.
-                    revno = b.revno()
-                    # Convert said revision number into a bzr revision id.
-                    revision_id = b.dotted_revno_to_revision_id((revno,))
-                    # Get a dict of tags, with the revision id as the key.
-                    tags = b.tags.get_reverse_tag_dict()
-                    # Check if the latest
-                    if revision_id in tags:
-                        full_version = u'%s' % tags[revision_id][0]
-                    else:
-                        full_version = '%s-bzr%s' % \
-                            (sorted(b.tags.get_tag_dict().keys())[-1], revno)
-                finally:
-                    b.unlock()
-            except:
-                # Otherwise run the command line bzr client
-                bzr = Popen((u'bzr', u'tags', u'--sort', u'time'), stdout=PIPE)
-                output, error = bzr.communicate()
-                code = bzr.wait()
-                if code != 0:
-                    raise Exception(u'Error running bzr tags')
-                lines = output.splitlines()
-                if len(lines) == 0:
-                    tag = u'0.0.0'
-                    revision = u'0'
-                else:
-                    tag, revision = lines[-1].split()
-                bzr = Popen((u'bzr', u'log', u'--line', u'-r', u'-1'),
-                    stdout=PIPE)
-                output, error = bzr.communicate()
-                code = bzr.wait()
-                if code != 0:
-                    raise Exception(u'Error running bzr log')
-                latest = output.split(u':')[0]
-                full_version = latest == revision and tag or \
-                    u'%s-bzr%s' % (tag, latest)
-        else:
-            # We're not running the development version, let's use the file
-            filepath = AppLocation.get_directory(AppLocation.VersionDir)
-            filepath = os.path.join(filepath, u'.version')
-            fversion = None
-            try:
-                fversion = open(filepath, u'r')
-                full_version = unicode(fversion.read()).rstrip()
-            except IOError:
-                log.exception('Error in version file.')
-                full_version = u'0.0.0-bzr000'
-            finally:
-                if fversion:
-                    fversion.close()
-        bits = full_version.split(u'-')
-        self.app_version = {
-            u'full': full_version,
-            u'version': bits[0],
-            u'build': bits[1] if len(bits) > 1 else None
-        }
-        if self.app_version[u'build']:
-            log.info(
-                u'Openlp version %s build %s',
-                self.app_version[u'version'],
-                self.app_version[u'build']
-            )
-        else:
-            log.info(u'Openlp version %s' % self.app_version[u'version'])
-        return self.app_version
 
     def run(self):
         """
@@ -183,8 +102,7 @@
         # make sure Qt really display the splash screen
         self.processEvents()
         # start the main app window
-        self.mainWindow = MainWindow(screens, self.app_version,
-            self.clipboard())
+        self.mainWindow = MainWindow(screens, self.clipboard())
         self.mainWindow.show()
         if show_splash:
             # now kill the splashscreen
@@ -196,7 +114,7 @@
         update_check = QtCore.QSettings().value(
             u'general/update check', QtCore.QVariant(True)).toBool()
         if update_check:
-            VersionThread(self.mainWindow, self.app_version).start()
+            VersionThread(self.mainWindow).start()
         return self.exec_()
 
     def hookException(self, exctype, value, traceback):
@@ -274,7 +192,7 @@
     app.setOrganizationName(u'OpenLP')
     app.setOrganizationDomain(u'openlp.org')
     app.setApplicationName(u'OpenLP')
-    app.setApplicationVersion(app.get_version()[u'version'])
+    app.setApplicationVersion(get_application_version()[u'version'])
     # First time checks in settings
     if not QtCore.QSettings().value(u'general/has run wizard',
         QtCore.QVariant(False)).toBool():

=== modified file 'openlp/.version'
--- openlp/.version	2010-09-14 18:18:47 +0000
+++ openlp/.version	2011-03-26 16:42:27 +0000
@@ -1,1 +1,1 @@
-1.9.2-bzr987
\ No newline at end of file
+1.9.5-bzr1421
\ No newline at end of file

=== modified file 'openlp/core/lib/plugin.py'
--- openlp/core/lib/plugin.py	2011-03-24 20:07:31 +0000
+++ openlp/core/lib/plugin.py	2011-03-26 16:42:27 +0000
@@ -32,6 +32,7 @@
 
 from openlp.core.lib import Receiver
 from openlp.core.lib.ui import UiStrings
+from openlp.core.utils import get_application_version
 
 log = logging.getLogger(__name__)
 
@@ -145,7 +146,10 @@
         self.textStrings = {}
         self.setPluginTextStrings()
         self.nameStrings = self.textStrings[StringContent.Name]
-        self.version = version if version else u'1.9.5'
+        if version:
+            self.version = version
+        else:
+            self.version = get_application_version()[u'version']
         self.settingsSection = self.name.lower()
         self.icon = None
         self.mediaItemClass = mediaItemClass

=== modified file 'openlp/core/ui/aboutform.py'
--- openlp/core/ui/aboutform.py	2011-03-24 19:04:02 +0000
+++ openlp/core/ui/aboutform.py	2011-03-26 16:42:27 +0000
@@ -28,25 +28,26 @@
 
 from aboutdialog import Ui_AboutDialog
 from openlp.core.lib import translate
+from openlp.core.utils import get_application_version
 
 class AboutForm(QtGui.QDialog, Ui_AboutDialog):
     """
     The About dialog
     """
 
-    def __init__(self, parent, applicationVersion):
+    def __init__(self, parent):
         """
         Do some initialisation stuff
         """
         QtGui.QDialog.__init__(self, parent)
-        self.applicationVersion = applicationVersion
+        applicationVersion = get_application_version()
         self.setupUi(self)
         about_text = self.aboutTextEdit.toPlainText()
         about_text = about_text.replace(u'<version>',
-            self.applicationVersion[u'version'])
-        if self.applicationVersion[u'build']:
+            applicationVersion[u'version'])
+        if applicationVersion[u'build']:
             build_text = unicode(translate('OpenLP.AboutForm', ' build %s')) % \
-                self.applicationVersion[u'build']
+                applicationVersion[u'build']
         else:
             build_text = u''
         about_text = about_text.replace(u'<revision>', build_text)

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2011-03-24 21:20:38 +0000
+++ openlp/core/ui/mainwindow.py	2011-03-26 16:42:27 +0000
@@ -38,7 +38,7 @@
     ThemeManager, SlideController, PluginForm, MediaDockManager, \
     ShortcutListForm, DisplayTagForm
 from openlp.core.utils import AppLocation, add_actions, LanguageManager, \
-    ActionList
+    ActionList, get_application_version
 
 log = logging.getLogger(__name__)
 
@@ -469,14 +469,13 @@
 
     actionList = ActionList()
 
-    def __init__(self, screens, applicationVersion, clipboard):
+    def __init__(self, screens, clipboard):
         """
         This constructor sets up the interface, the various managers, and the
         plugins.
         """
         QtGui.QMainWindow.__init__(self)
         self.screens = screens
-        self.applicationVersion = applicationVersion
         self.clipboard = clipboard
         # Set up settings sections for the main application
         # (not for use by plugins)
@@ -487,7 +486,7 @@
         self.serviceNotSaved = False
         self.actionList = ActionList()
         self.settingsmanager = SettingsManager(screens)
-        self.aboutForm = AboutForm(self, applicationVersion)
+        self.aboutForm = AboutForm(self)
         self.settingsForm = SettingsForm(self.screens, self, self)
         self.displayTagForm = DisplayTagForm(self)
         self.shortcutForm = ShortcutListForm(self)
@@ -651,7 +650,7 @@
             'version from http://openlp.org/.'))
         QtGui.QMessageBox.question(self,
             translate('OpenLP.MainWindow', 'OpenLP Version Updated'),
-            version_text % (version, self.applicationVersion[u'full']))
+            version_text % (version, get_application_version()[u'full']))
 
     def show(self):
         """
@@ -734,7 +733,6 @@
         """
         Show the About form
         """
-        self.aboutForm.applicationVersion = self.applicationVersion
         self.aboutForm.exec_()
 
     def onPluginItemClicked(self):

=== modified file 'openlp/core/ui/printservicedialog.py'
--- openlp/core/ui/printservicedialog.py	2011-03-24 19:04:02 +0000
+++ openlp/core/ui/printservicedialog.py	2011-03-26 16:42:27 +0000
@@ -64,8 +64,7 @@
             'Options'))
         self.optionsButton.setToolButtonStyle(
             QtCore.Qt.ToolButtonTextBesideIcon)
-        self.optionsButton.setIcon(QtGui.QIcon(
-            build_icon(u':/system/system_configure.png')))
+        self.optionsButton.setIcon(build_icon(u':/system/system_configure.png'))
         self.optionsButton.setCheckable(True)
         self.toolbar.addWidget(self.optionsButton)
         self.closeButton = self.toolbar.addAction(
@@ -80,24 +79,23 @@
             translate('OpenLP.PrintServiceForm', 'Copy as HTML'))
         self.toolbar.addSeparator()
         self.zoomInButton = QtGui.QToolButton(self.toolbar)
-        self.zoomInButton.setIcon(QtGui.QIcon(
-            build_icon(u':/general/general_zoom_in.png')))
+        self.zoomInButton.setIcon(build_icon(u':/general/general_zoom_in.png'))
         self.zoomInButton.setToolTip(translate('OpenLP.PrintServiceForm',
             'Zoom In'))
         self.zoomInButton.setObjectName(u'zoomInButton')
         self.zoomInButton.setIconSize(QtCore.QSize(22, 22))
         self.toolbar.addWidget(self.zoomInButton)
         self.zoomOutButton = QtGui.QToolButton(self.toolbar)
-        self.zoomOutButton.setIcon(QtGui.QIcon(
-            build_icon(u':/general/general_zoom_out.png')))
+        self.zoomOutButton.setIcon(
+            build_icon(u':/general/general_zoom_out.png'))
         self.zoomOutButton.setToolTip(translate('OpenLP.PrintServiceForm',
             'Zoom Out'))
         self.zoomOutButton.setObjectName(u'zoomOutButton')
         self.zoomOutButton.setIconSize(QtCore.QSize(22, 22))
         self.toolbar.addWidget(self.zoomOutButton)
         self.zoomOriginalButton = QtGui.QToolButton(self.toolbar)
-        self.zoomOriginalButton.setIcon(QtGui.QIcon(
-            build_icon(u':/general/general_zoom_original.png')))
+        self.zoomOriginalButton.setIcon(
+            build_icon(u':/general/general_zoom_original.png'))
         self.zoomOriginalButton.setToolTip(translate('OpenLP.PrintServiceForm',
             'Zoom Original'))
         self.zoomOriginalButton.setObjectName(u'zoomOriginalButton')

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2011-03-24 19:04:02 +0000
+++ openlp/core/ui/slidecontroller.py	2011-03-26 16:42:27 +0000
@@ -46,6 +46,7 @@
         QtGui.QTableWidget.__init__(self, parent.controller)
         self.parent = parent
 
+
 class SlideController(QtGui.QWidget):
     """
     SlideController is the slide controller widget. This widget is what the

=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py	2011-03-24 19:04:02 +0000
+++ openlp/core/utils/__init__.py	2011-03-26 16:42:27 +0000
@@ -33,6 +33,7 @@
 import time
 import urllib2
 from datetime import datetime
+from subprocess import Popen, PIPE
 
 from PyQt4 import QtGui, QtCore
 
@@ -44,9 +45,10 @@
         XDG_BASE_AVAILABLE = False
 
 import openlp
-from openlp.core.lib import Receiver, translate
+from openlp.core.lib import Receiver, translate, check_directory_exists
 
 log = logging.getLogger(__name__)
+APPLICATION_VERSION = {}
 IMAGES_FILTER = None
 UNO_CONNECTION_TYPE = u'pipe'
 #UNO_CONNECTION_TYPE = u'socket'
@@ -56,9 +58,8 @@
     A special Qt thread class to fetch the version of OpenLP from the website.
     This is threaded so that it doesn't affect the loading time of OpenLP.
     """
-    def __init__(self, parent, app_version):
+    def __init__(self, parent):
         QtCore.QThread.__init__(self, parent)
-        self.app_version = app_version
         self.version_splitter = re.compile(
             r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))?')
 
@@ -68,7 +69,8 @@
         """
         time.sleep(1)
         Receiver.send_message(u'maindisplay_blank_check')
-        version = check_latest_version(self.app_version)
+        app_version = get_application_version()
+        version = check_latest_version(app_version)
         remote_version = {}
         local_version = {}
         match = self.version_splitter.match(version)
@@ -80,7 +82,7 @@
                 remote_version[u'revision'] = int(match.group(4))
         else:
             return
-        match = self.version_splitter.match(self.app_version[u'full'])
+        match = self.version_splitter.match(app_version[u'full'])
         if match:
             local_version[u'major'] = int(match.group(1))
             local_version[u'minor'] = int(match.group(2))
@@ -146,8 +148,7 @@
         Return the path OpenLP stores all its data under.
         """
         path = AppLocation.get_directory(AppLocation.DataDir)
-        if not os.path.exists(path):
-            os.makedirs(path)
+        check_directory_exists(path)
         return path
 
     @staticmethod
@@ -157,8 +158,7 @@
         """
         data_path = AppLocation.get_data_path()
         path = os.path.join(data_path, section)
-        if not os.path.exists(path):
-            os.makedirs(path)
+        check_directory_exists(path)
         return path
 
 def _get_os_dir_path(dir_type):
@@ -208,6 +208,85 @@
         return frozen_option
     return non_frozen_option
 
+def get_application_version():
+    """
+    Returns the application version of the running instance of OpenLP::
+
+        {u'full': u'1.9.4-bzr1249', u'version': u'1.9.4', u'build': u'bzr1249'}
+    """
+    global APPLICATION_VERSION
+    if APPLICATION_VERSION:
+        return APPLICATION_VERSION
+    if u'--dev-version' in sys.argv or u'-d' in sys.argv:
+        # If we're running the dev version, let's use bzr to get the version.
+        try:
+            # If bzrlib is available, use it.
+            from bzrlib.branch import Branch
+            b = Branch.open_containing('.')[0]
+            b.lock_read()
+            try:
+                # Get the branch's latest revision number.
+                revno = b.revno()
+                # Convert said revision number into a bzr revision id.
+                revision_id = b.dotted_revno_to_revision_id((revno,))
+                # Get a dict of tags, with the revision id as the key.
+                tags = b.tags.get_reverse_tag_dict()
+                # Check if the latest
+                if revision_id in tags:
+                    full_version = u'%s' % tags[revision_id][0]
+                else:
+                    full_version = '%s-bzr%s' % \
+                        (sorted(b.tags.get_tag_dict().keys())[-1], revno)
+            finally:
+                b.unlock()
+        except:
+            # Otherwise run the command line bzr client.
+            bzr = Popen((u'bzr', u'tags', u'--sort', u'time'), stdout=PIPE)
+            output, error = bzr.communicate()
+            code = bzr.wait()
+            if code != 0:
+                raise Exception(u'Error running bzr tags')
+            lines = output.splitlines()
+            if len(lines) == 0:
+                tag = u'0.0.0'
+                revision = u'0'
+            else:
+                tag, revision = lines[-1].split()
+            bzr = Popen((u'bzr', u'log', u'--line', u'-r', u'-1'), stdout=PIPE)
+            output, error = bzr.communicate()
+            code = bzr.wait()
+            if code != 0:
+                raise Exception(u'Error running bzr log')
+            latest = output.split(u':')[0]
+            full_version = latest == revision and tag or \
+               u'%s-bzr%s' % (tag, latest)
+    else:
+        # We're not running the development version, let's use the file.
+        filepath = AppLocation.get_directory(AppLocation.VersionDir)
+        filepath = os.path.join(filepath, u'.version')
+        fversion = None
+        try:
+            fversion = open(filepath, u'r')
+            full_version = unicode(fversion.read()).rstrip()
+        except IOError:
+            log.exception('Error in version file.')
+            full_version = u'0.0.0-bzr000'
+        finally:
+            if fversion:
+                fversion.close()
+    bits = full_version.split(u'-')
+    APPLICATION_VERSION = {
+        u'full': full_version,
+        u'version': bits[0],
+        u'build': bits[1] if len(bits) > 1 else None
+    }
+    if APPLICATION_VERSION[u'build']:
+        log.info(u'Openlp version %s build %s',
+            APPLICATION_VERSION[u'version'], APPLICATION_VERSION[u'build'])
+    else:
+        log.info(u'Openlp version %s' % APPLICATION_VERSION[u'version'])
+    return APPLICATION_VERSION
+
 def check_latest_version(current_version):
     """
     Check the latest version of OpenLP against the version file on the OpenLP

=== modified file 'openlp/plugins/songs/lib/xml.py'
--- openlp/plugins/songs/lib/xml.py	2011-03-24 20:07:31 +0000
+++ openlp/plugins/songs/lib/xml.py	2011-03-26 16:42:27 +0000
@@ -68,6 +68,7 @@
 
 from openlp.plugins.songs.lib import clean_song, VerseType
 from openlp.plugins.songs.lib.db import Author, Book, Song, Topic
+from openlp.core.utils import get_application_version
 
 log = logging.getLogger(__name__)
 
@@ -230,8 +231,8 @@
         # Append the necessary meta data to the song.
         song_xml.set(u'xmlns', u'http://openlyrics.info/namespace/2009/song')
         song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION)
-        song_xml.set(u'createdIn', u'OpenLP 1.9.5')  # Use variable
-        song_xml.set(u'modifiedIn', u'OpenLP 1.9.5')  # Use variable
+        song_xml.set(u'createdIn', get_application_version()[u'version'])
+        song_xml.set(u'modifiedIn', get_application_version()[u'version'])
         song_xml.set(u'modifiedDate',
             datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S'))
         properties = etree.SubElement(song_xml, u'properties')


Follow ups