openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #07482
[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