This commit is contained in:
Tim Bentley 2011-03-11 16:01:51 +00:00
commit bb93aed796
41 changed files with 758 additions and 223 deletions

View File

@ -4,11 +4,11 @@ Dual Monitor Setup
The first step in getting OpenLP working on your system is to setup your
computer properly for dual monitors. This is not very difficult, but the steps
do vary depending on operating system.
will vary depending on operating system.
Most modern computers do have the ability for dual monitors. To be certain
Most modern computers have the ability for dual monitors. To be certain,
check your computer's documentation. A typical desktop computer capable of dual
monitors will have two of, or a combination of the two connectors below.
monitors will have two of, or a combination of the two, connectors below.
**VGA**
@ -18,8 +18,8 @@ monitors will have two of, or a combination of the two connectors below.
.. image:: pics/dvi.png
A laptop computer setup only varies slightly, generally you will need only one
of outputs pictured above since your laptops screen serves as one of the
A laptop computer setup only varies slightly. Generally you will need only one
of the outputs pictured above since your laptop screen serves as one of the
monitors. Sometimes with older laptops a key stroke generally involving the
:kbd:`Fn` key and another key is required to enable the second monitor on
laptops.
@ -27,9 +27,10 @@ laptops.
Some computers also incorporate the use of :abbr:`S-Video (Separate Video)` or
:abbr:`HDMI (High-Definition Multimedia Interface)` connections.
A typical OpenLP set up consist of your normal single monitor setup, with your
projector setup as the second monitor. With the option of extending your
desktop across the second monitor, or your operating system's equivalent.
A typical OpenLP setup consist of your normal single monitor, with your
projector hooked up to your computer as the second monitor. With the option of
extending your desktop across the second monitor, or your operating system's
equivalent.
Microsoft Windows
-----------------
@ -46,8 +47,8 @@ press :kbd:`Windows+P`.
The more traditional way is also fairly straight forward. Go to
:guilabel:`Control Panel` and click on :guilabel:`Display`. This will open up
the :guilabel:`Display` dialog. You can also bypass this step by right click on
a blank area on your desktop and selecting :guilabel:`Resolution`.
the :guilabel:`Display` dialog. You may also bypass this step by a right click
on a blank area on your desktop and selecting :guilabel:`Resolution`.
.. image:: pics/winsevendisplay.png
@ -66,7 +67,7 @@ a blank place on the desktop and click :guilabel:`Personalization`.
.. image:: pics/vistapersonalize.png
From the :guilabel:`Personalization` window click on :guilabel:`Display
Settings`. Then enable the montior that represents your projector and make sure
Settings`. Click on the monitor that represents your projector and make sure
you have checked :guilabel:`Extend the desktop onto this monitor`.
.. image:: pics/vistadisplaysettings.png
@ -77,7 +78,7 @@ Windows XP
From :guilabel:`Control Panel` select :guilabel:`Display`, or right click on a
blank area of the desktop and select :guilabel:`Properties`. From the
:guilabel:`Display Properties` window click on the :guilabel:`Settings` tab.
Then click on the monitor that represents your projector and make sure you have
Click on the monitor that represents your projector and make sure you have
checked :guilabel:`Extend my Windows desktop onto this monitor`.
.. image:: pics/xpdisplaysettings.png
@ -87,7 +88,7 @@ Linux
Due to the vast varieties of hardware, distributions, desktops, and drivers
this is not an exhaustive guide to dual monitor setup on Linux. This guide
assumes that you have properly set up any proprietary drivers if needed. You
assumes you have properly set up any proprietary drivers if needed. You
should seek out your distributions documentation if this general guide does not
work.
@ -123,7 +124,8 @@ Linux Systems Using nVidia Drivers
This guide is for users of the proprietary nVidia driver on Linux Distributions.
It is assumed that you have properly setup your drivers according to your
distribution's documentation, and you have a working ``xorg.conf`` file in place.
distribution's documentation, and you have a working ``xorg.conf`` file in
place.
If you wish to make the changes permanent in setting up your system for dual
monitors it will be necessary to modify your ``xorg.conf`` file. It is always a
@ -166,7 +168,7 @@ After clicking :guilabel:`Configure`, select :guilabel:`TwinView`. Then click
.. image:: pics/twinview.png
Then click :guilabel:`Apply` and if you are happy with the way things look click
Click :guilabel:`Apply` and if you are happy with the way things look click
:guilabel:`Keep` to keep your new settings. Don't worry if all goes wrong the
settings will return back to the previous settings in 15 seconds without any
action. nVidia Settings should take care of selecting your optimum resolution
@ -175,6 +177,6 @@ on :guilabel:`Save to X Configuration File`.
.. image:: pics/xorgwrite.png
Then click :guilabel:`Save` and you should be set. You may want to restart X or
Click :guilabel:`Save` and you should be set. You may want to restart X or
your machine just to make sure all the settings carry over the next time you log
in.

View File

@ -18,7 +18,7 @@ The Main Window contains all the tools and plugins that make OpenLP function
Media Manager
-------------
The Media Manager contains a number of tabs that plugins supply to OpenLP.
The Media Manager contains a number of tabs the plugins supply to OpenLP.
Each tab in the Media Manager is called a **Media Item**
.. image:: pics/mediamanager.png
@ -36,20 +36,20 @@ with them.
Service File
------------
A service file, is the file that is created when you save your work on OpenLP.
A service file is the file that is created when you save your service in OpenLP.
The service file consist of **Service Items**
Service Item
------------
A service item are the **media items** that are in the **service manager**
Service items are the **media items** that are in the **service manager**
Service Manger
--------------
The service manager contains the media items in your service file. This is the
area from which your media items go live, and you can also save, open, and edit
services files.
area where your media items go live. You can also save, open, and edit
services files from here.
.. image:: pics/servicemanager.png
@ -65,6 +65,6 @@ Theme Manager
-------------
The theme manager is where themes are created and edited. Themes are the text
styles backgrounds that you use to personalize your services.
styles and backgrounds that you use to personalize your services.
.. image:: pics/thememanager.png

View File

@ -15,5 +15,4 @@ Contents:
glossary
dualmonitors
mediamanager
songs
songs

View File

@ -8,26 +8,26 @@ converters provided to get data from other formats into OpenLP.
Song Importer
=============
If you are using an earlier version of OpenLP or come from another software
If you are using an earlier version of OpenLP or, come from another software
package, you may be able to convert your existing database to work in OpenLP
2.0. To access the Song Importer :menuselection:`File --> Import --> Song`.
You will then see the Song Importer window, then click :guilabel:`Next`.
2.0. To access the Song Importer click :menuselection:`File --> Import --> Song`.
You will see the Song Importer window, then click :guilabel:`Next`.
.. image:: pics/songimporter.png
After choosing :guilabel:`Next` you can then select from the various types of
After choosing :guilabel:`Next` you can select from the various types of
software that OpenLP will convert songs from.
.. image:: pics/songimporterchoices.png
Then click on the file folder icon to choose the file of the song database you
Click on the file folder icon to choose the file of the song database you
want to import. See the following sections for information on the different
formats that OpenLP will import.
Importing from OpenLP Version 1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Converting from OpenLP Version 1 is a pretty simple process. You will first
Converting from OpenLP Version 1 is a simple process. First you will
need to locate your version 1 database file.
Windows XP::
@ -38,33 +38,34 @@ Windows Vista / Windows 7::
C:\ProgramData\openlp.org\Data\songs.olp
After clicking :guilabel:`Next` your conversion should be complete.
After clicking :guilabel:`Next` your conversion will be complete.
.. image:: pics/finishedimport.png
Then press :guilabel:`Finish` and you should now be ready to use your OpenLP
version one songs.
Press :guilabel:`Finish` and you will now be ready to use your OpenLP
version 1 songs.
Importing from OpenSong
^^^^^^^^^^^^^^^^^^^^^^^
Converting from OpenSong you will need to locate your songs database. In the
Converting from OpenSong, you will need to locate your songs database. In the
later versions of OpenSong you are asked to define the location of this. The
songs will be located in a folder named :guilabel:`Songs`. This folder should
contain files with all your songs in them without a file extension. (file.xxx).
When you have located this folder you will then need to select the songs from
songs will be located in a folder named :guilabel:`Songs`. This folder will
contain files with all your songs in them, without a file extension. (file.xxx).
When you have located this folder you will need to select the songs from
the folder.
.. image:: pics/selectsongs.png
On most operating systems to select all the songs, first select the first song
in the lest then press shift and select the last song in the list. After this
press :guilabel:`Next` and you should see that your import has been successful.
On most operating systems, to select all the songs, first select the first song
in the list, press the shift key, and select the last song in the list. After
this press :guilabel:`Next` and you will see that your import has been
successful.
.. image:: pics/finishedimport.png
Press :guilabel:`Finish` and you will now be ready to use your songs imported
from OpenSong.
Press :guilabel:`Finish` and OpenLP will be ready to use your songs that you
imported from OpenSong.
Importing from CCLI Song Select
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -79,22 +80,23 @@ Then search for your desired song. For this example we will be adding the song
.. image:: pics/songselectsongsearch.png
For the song you are searching for select `lyrics` This should take you to a
page displaying the lyrics and copyright info for your song.
For the song you are searching for, select `lyrics` This will take you to a
page displaying the lyrics and copyright information for your song.
.. image:: pics/songselectlyrics.png
Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. Then
choose either the .txt or .usr file. You will then be asked to chose a download
Next, hover over the :guilabel:`Lyrics` menu from the upper right corner.
Choose either the .txt or .usr file. You will be asked to chose a download
location if your browser does not automatically select that for you. Select
this file from the OpenLP import window and then click :guilabel:`Next` You can
also select multiple songs for import at once on most operating systems by
selecting the first item in the list then holding shift select the last item in
the list. When finished you should see that your import has completed.
selecting the first item in the list then holding the shift key and select the
last item in the list. When finished, you will see that your import has
completed.
.. image:: pics/finishedimport.png
Press :guilabel:`Finish` and you will now be ready to use your songs imported
Press :guilabel:`Finish` and OpenLP will be ready to use your songs imported
from CCLI SongSelect.

View File

@ -248,9 +248,8 @@ def resize_image(image, width, height, background=QtCore.Qt.black):
``height``
The new image height.
``background``
``background``
The background colour defaults to black.
"""
log.debug(u'resize_image - start')
if isinstance(image, QtGui.QImage):

View File

@ -349,11 +349,11 @@ class MediaManagerItem(QtGui.QWidget):
Validates whether an image still exists and, if it does, is the
thumbnail representation of the image up to date.
"""
if not os.path.exists(image):
if not os.path.exists(unicode(image)):
return False
if os.path.exists(thumb):
imageDate = os.stat(image).st_mtime
thumbDate = os.stat(thumb).st_mtime
imageDate = os.stat(unicode(image)).st_mtime
thumbDate = os.stat(unicode(thumb)).st_mtime
# If image has been updated rebuild icon
if imageDate > thumbDate:
self.iconFromFile(image, thumb)

View File

@ -114,8 +114,8 @@ class Plugin(QtCore.QObject):
"""
log.info(u'loaded')
def __init__(self, name, version=None, pluginHelpers=None,
mediaItemClass=None, settingsTabClass=None):
def __init__(self, name, pluginHelpers=None, mediaItemClass=None,
settingsTabClass=None, version=None):
"""
This is the constructor for the plugin object. This provides an easy
way for descendent plugins to populate common data. This method *must*
@ -123,7 +123,7 @@ class Plugin(QtCore.QObject):
class MyPlugin(Plugin):
def __init__(self):
Plugin.__init__(self, u'MyPlugin', u'0.1')
Plugin.__init__(self, u'MyPlugin', version=u'0.1')
``name``
Defaults to *None*. The name of the plugin.
@ -145,8 +145,7 @@ class Plugin(QtCore.QObject):
self.textStrings = {}
self.setPluginTextStrings()
self.nameStrings = self.textStrings[StringContent.Name]
if version:
self.version = version
self.version = version if version else u'1.9.4'
self.settingsSection = self.name.lower()
self.icon = None
self.mediaItemClass = mediaItemClass

View File

@ -226,7 +226,7 @@ class Ui_AboutDialog(object):
'Portions copyright \xa9 2004-2011 '
'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri,\n'
'Meinert Jordan, Andreas Preikschat, Christian Richter, Philip\n'
'Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carstenn'
'Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten\n'
'Tinggaard, Frode Woldsund')
licence = translate('OpenLP.AboutForm',
'This program is free software; you can redistribute it and/or '

View File

@ -66,6 +66,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
'Starting Updates')
self.downloading = unicode(translate('OpenLP.FirstTimeWizard',
'Downloading %s'))
QtCore.QObject.connect(self,
QtCore.SIGNAL(u'currentIdChanged(int)'),
self.onCurrentIdChanged)
def exec_(self, edit=False):
"""
@ -83,9 +86,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
if self.webAccess:
self.internetGroupBox.setVisible(True)
self.noInternetLabel.setVisible(False)
treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget)
treewidgetitem.setText(0, self.songsText)
self._loadChild(treewidgetitem, u'songs', u'languages', u'songs')
# If songs database exists do not allow a copy
songs = os.path.join(AppLocation.get_section_data_path(u'songs'),
u'songs.sqlite')
if not os.path.exists(songs):
treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget)
treewidgetitem.setText(0, self.songsText)
self._loadChild(treewidgetitem, u'songs', u'languages', u'songs')
treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget)
treewidgetitem.setText(0, self.biblesText)
self._loadChild(treewidgetitem, u'bibles', u'translations',
@ -112,12 +119,12 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
child.setFlags(QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
def initializePage(self, id):
def onCurrentIdChanged(self, pageId):
"""
Set up the pages for Initial run through dialog
Detects Page changes and updates as approprate.
"""
wizardPage = self.page(id)
if wizardPage == self.DefaultsPage:
if self.page(pageId) == self.DefaultsPage:
self.themeSelectionComboBox.clear()
listIterator = QtGui.QTreeWidgetItemIterator(
self.selectionTreeWidget)
while listIterator.value():
@ -130,6 +137,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
listIterator += 1
def accept(self):
Receiver.send_message(u'cursor_busy')
self._updateMessage(self.startUpdates)
# Set up the Plugin status's
self._pluginStatus(self.songsCheckBox, u'songs/status')
@ -193,6 +201,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
QtCore.QVariant(self.themeSelectionComboBox.currentText()))
QtCore.QSettings().setValue(u'general/first time',
QtCore.QVariant(False))
Receiver.send_message(u'cursor_normal')
return QtGui.QWizard.accept(self)
def _pluginStatus(self, field, tag):

View File

@ -224,4 +224,4 @@ class Ui_FirstTimeWizard(object):
self.themeSelectionLabel.setText(translate('OpenLP.FirstTimeWizard',
'Select the default Theme'))
self.messageLabel.setText(translate('OpenLP.FirstTimeWizard',
'Press Finish to apply all you changes and start OpenLP'))
'Press finish to apply all your changes and start OpenLP'))

View File

@ -90,8 +90,8 @@ class MainDisplay(DisplayWidget):
"""
Set up and build the output screen
"""
log.debug(u'Setup live = %s for monitor %s ' % (self.isLive,
self.screens.monitor_number))
log.debug(u'Start setup for monitor %s (live = %s)' %
(self.screens.monitor_number, self.isLive))
self.usePhonon = QtCore.QSettings().value(
u'media/use phonon', QtCore.QVariant(True)).toBool()
self.phononActive = False
@ -102,6 +102,7 @@ class MainDisplay(DisplayWidget):
self.videoWidget.setVisible(False)
self.videoWidget.setGeometry(QtCore.QRect(0, 0,
self.screen[u'size'].width(), self.screen[u'size'].height()))
log.debug(u'Setup Phonon for monitor %s' % self.screens.monitor_number)
self.mediaObject = Phonon.MediaObject(self)
self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject)
Phonon.createPath(self.mediaObject, self.videoWidget)
@ -109,6 +110,7 @@ class MainDisplay(DisplayWidget):
QtCore.QObject.connect(self.mediaObject,
QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'),
self.videoStart)
log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number)
self.webView = QtWebKit.QWebView(self)
self.webView.setGeometry(0, 0,
self.screen[u'size'].width(), self.screen[u'size'].height())
@ -165,6 +167,8 @@ class MainDisplay(DisplayWidget):
self.primary = False
else:
self.primary = True
log.debug(
u'Finished setup for monitor %s' % self.screens.monitor_number)
def text(self, slide):
"""
@ -245,7 +249,8 @@ class MainDisplay(DisplayWidget):
js = u'show_image("");'
self.frame.evaluateJavaScript(js)
# Update the preview frame.
Receiver.send_message(u'maindisplay_active')
if self.isLive:
Receiver.send_message(u'maindisplay_active')
def resetImage(self):
"""
@ -259,7 +264,8 @@ class MainDisplay(DisplayWidget):
self.displayImage(None)
self.override = {}
# Update the preview frame.
Receiver.send_message(u'maindisplay_active')
if self.isLive:
Receiver.send_message(u'maindisplay_active')
def resetVideo(self):
"""
@ -276,7 +282,8 @@ class MainDisplay(DisplayWidget):
self.frame.evaluateJavaScript(u'show_video("close");')
self.override = {}
# Update the preview frame.
Receiver.send_message(u'maindisplay_active')
if self.isLive:
Receiver.send_message(u'maindisplay_active')
def videoPlay(self):
"""
@ -347,7 +354,8 @@ class MainDisplay(DisplayWidget):
self.videoWidget.setVisible(True)
self.audio.setVolume(vol)
# Update the preview frame.
Receiver.send_message(u'maindisplay_active')
if self.isLive:
Receiver.send_message(u'maindisplay_active')
return self.preview()
def videoStart(self, newState, oldState):
@ -481,7 +489,8 @@ class MainDisplay(DisplayWidget):
self.videoPlay()
self.hideMode = None
# Trigger actions when display is active again
Receiver.send_message(u'maindisplay_active')
if self.isLive:
Receiver.send_message(u'maindisplay_active')
def __hideMouse(self):
# Hide mouse cursor when moved over display if enabled in settings
@ -507,9 +516,6 @@ class AudioPlayer(QtCore.QObject):
``parent``
The parent widget.
``screens``
The list of screens.
"""
log.debug(u'AudioPlayer Initialisation started')
QtCore.QObject.__init__(self, parent)

View File

@ -232,7 +232,7 @@ class Ui_MainWindow(object):
self.LanguageGroup = QtGui.QActionGroup(mainWindow)
self.LanguageGroup.setExclusive(True)
self.LanguageGroup.setObjectName(u'LanguageGroup')
self.LanguageGroup.setDisabled(LanguageManager.auto_language)
add_actions(self.LanguageGroup, [self.AutoLanguageItem])
qmList = LanguageManager.get_qm_list()
savedLanguage = LanguageManager.get_language()
for key in sorted(qmList.keys()):
@ -425,14 +425,14 @@ class Ui_MainWindow(object):
translate('OpenLP.MainWindow', '&Online Help'))
self.helpWebSiteItem.setText(
translate('OpenLP.MainWindow', '&Web Site'))
self.AutoLanguageItem.setText(
translate('OpenLP.MainWindow', '&Auto Detect'))
self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow',
'Use the system language, if available.'))
for item in self.LanguageGroup.actions():
item.setText(item.objectName())
item.setStatusTip(unicode(translate('OpenLP.MainWindow',
'Set the interface language to %s')) % item.objectName())
self.AutoLanguageItem.setText(
translate('OpenLP.MainWindow', '&Autodetect'))
self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow',
'Use the system language, if available.'))
self.ToolsAddToolItem.setText(
translate('OpenLP.MainWindow', 'Add &Tool...'))
self.ToolsAddToolItem.setStatusTip(translate('OpenLP.MainWindow',
@ -550,8 +550,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtCore.SIGNAL(u'triggered()'),
self.ServiceManagerContents.printServiceOrder)
# i18n set signals for languages
QtCore.QObject.connect(self.AutoLanguageItem,
QtCore.SIGNAL(u'toggled(bool)'), self.setAutoLanguage)
self.LanguageGroup.triggered.connect(LanguageManager.set_language)
QtCore.QObject.connect(self.ModeDefaultItem,
QtCore.SIGNAL(u'triggered()'), self.onModeDefaultItemClicked)

View File

@ -415,47 +415,75 @@ class ServiceManager(QtGui.QWidget):
"""
if not self.fileName():
return self.saveFileAs()
else:
fileName = self.fileName()
log.debug(u'ServiceManager.saveFile - %s' % fileName)
SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection,
split_filename(fileName)[0])
service = []
serviceFileName = fileName.replace(u'.osz', u'.osd')
zip = None
file = None
try:
write_list = []
zip = zipfile.ZipFile(unicode(fileName), 'w')
for item in self.serviceItems:
service.append({u'serviceitem': \
item[u'service_item'].get_service_repr()})
if item[u'service_item'].uses_file():
for frame in item[u'service_item'].get_frames():
if item[u'service_item'].is_image():
path_from = frame[u'path']
else:
path_from = unicode(os.path.join(
frame[u'path'],
frame[u'title']))
# On write a file once
if not path_from in write_list:
write_list.append(path_from)
zip.write(path_from.encode(u'utf-8'))
file = open(serviceFileName, u'wb')
cPickle.dump(service, file)
file.close()
zip.write(serviceFileName.encode(u'utf-8'))
except IOError:
log.exception(u'Failed to save service to disk')
finally:
if file:
file.close()
if zip:
zip.close()
delete_file(serviceFileName)
self.mainwindow.addRecentFile(fileName)
self.setModified(False)
path_file_name = unicode(self.fileName())
(path, file_name) = os.path.split(path_file_name)
(basename, extension) = os.path.splitext(file_name)
service_file_name = basename + '.osd'
log.debug(u'ServiceManager.saveFile - %s' % path_file_name)
SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection,
path)
service = []
write_list = []
total_size = 0
for item in self.serviceItems:
service.append({u'serviceitem':
item[u'service_item'].get_service_repr()})
if not item[u'service_item'].uses_file():
continue
for frame in item[u'service_item'].get_frames():
if item[u'service_item'].is_image():
path_from = frame[u'path']
else:
path_from = os.path.join(frame[u'path'], frame[u'title'])
# Only write a file once
if path_from in write_list:
continue
file_size = os.path.getsize(path_from)
size_limit = 52428800 # 50MiB
#if file_size > size_limit:
# # File exeeds size_limit bytes, ask user
# message = unicode(translate('OpenLP.ServiceManager',
# 'Do you want to include \n%.1f MB file "%s"\n'
# 'into the service file?\nThis may take some time.\n\n'
# 'Please note that you need to\ntake care of that file'
# ' yourself,\nif you leave it out.')) % \
# (file_size/1048576, os.path.split(path_from)[1])
# ans = QtGui.QMessageBox.question(self.mainwindow,
# translate('OpenLP.ServiceManager', 'Including Large '
# 'File'), message, QtGui.QMessageBox.StandardButtons(
# QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel),
# QtGui.QMessageBox.Ok)
# if ans == QtGui.QMessageBox.Cancel:
# continue
write_list.append(path_from)
total_size += file_size
log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' %
total_size)
service_content = cPickle.dumps(service)
# Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be
# extracted using unzip in UNIX.
allow_zip_64 = (total_size > 2147483648 + len(service_content))
log.debug(u'ServiceManager.saveFile - allowZip64 is %s' %
allow_zip_64)
zip = None
try:
zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED,
allow_zip_64)
# First we add service contents.
# We save ALL filenames into ZIP using UTF-8.
zip.writestr(service_file_name.encode(u'utf-8'),
service_content)
# Finally add all the listed media files.
for path_from in write_list:
zip.write(path_from, path_from.encode(u'utf-8'))
except IOError:
log.exception(u'Failed to save service to disk')
return False
finally:
if zip:
zip.close()
self.mainwindow.addRecentFile(path_file_name)
self.setModified(False)
return True
def saveFileAs(self):

View File

@ -162,7 +162,7 @@ class SlideController(QtGui.QWidget):
self.themeScreen.setText(
translate('OpenLP.SlideController', 'Blank to Theme'))
self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen',
u':/slides/slide_desktop.png', False)
u':/slides/slide_desktop.png', False)
self.desktopScreen.setText(
translate('OpenLP.SlideController', 'Show Desktop'))
self.hideMenu.setDefaultAction(self.blankScreen)

View File

@ -112,9 +112,13 @@ class LanguageManager(object):
"""
language = u'en'
if action:
action_name = u'%s' % action.objectName()
qm_list = LanguageManager.get_qm_list()
language = u'%s' % qm_list[action_name]
action_name = unicode(action.objectName())
if action_name == u'AutoLanguageItem':
LanguageManager.auto_language = True
else:
LanguageManager.auto_language = False
qm_list = LanguageManager.get_qm_list()
language = unicode(qm_list[action_name])
if LanguageManager.auto_language:
language = u'[%s]' % language
# This needs to be here for the setValue to work

View File

@ -40,7 +40,7 @@ class AlertsPlugin(Plugin):
log.info(u'Alerts Plugin loaded')
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'Alerts', u'1.9.4', plugin_helpers,
Plugin.__init__(self, u'Alerts', plugin_helpers,
settingsTabClass=AlertsTab)
self.weight = -3
self.icon = build_icon(u':/plugins/plugin_alerts.png')

View File

@ -37,7 +37,7 @@ class BiblePlugin(Plugin):
log.info(u'Bible Plugin loaded')
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'Bibles', u'1.9.4', plugin_helpers,
Plugin.__init__(self, u'Bibles', plugin_helpers,
BibleMediaItem, BiblesTab)
self.weight = -9
self.icon_path = u':/plugins/plugin_bibles.png'

View File

@ -449,8 +449,7 @@ class BibleMediaItem(MediaManagerItem):
if restore:
old_text = unicode(combo.currentText())
combo.clear()
for i in range(range_from, range_to + 1):
combo.addItem(unicode(i))
combo.addItems([unicode(i) for i in range(range_from, range_to + 1)])
if restore and combo.findText(old_text) != -1:
combo.setCurrentIndex(combo.findText(old_text))
@ -704,8 +703,7 @@ class BibleMediaItem(MediaManagerItem):
service_item.theme = None
else:
service_item.theme = self.settings.bible_theme
for slide in raw_slides:
service_item.add_from_text(slide[:30], slide)
[service_item.add_from_text(slide[:30], slide) for slide in raw_slides]
return True
def formatTitle(self, start_item, old_item):
@ -744,8 +742,7 @@ class BibleMediaItem(MediaManagerItem):
else:
verse_range = start_chapter + verse_separator + start_verse + \
range_separator + old_chapter + verse_separator + old_verse
title = u'%s %s (%s)' % (start_book, verse_range, bibles)
return title
return u'%s %s (%s)' % (start_book, verse_range, bibles)
def checkTitle(self, item, old_item):
"""

View File

@ -47,7 +47,7 @@ class CustomPlugin(Plugin):
log.info(u'Custom Plugin loaded')
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'Custom', u'1.9.4', plugin_helpers,
Plugin.__init__(self, u'Custom', plugin_helpers,
CustomMediaItem, CustomTab)
self.weight = -5
self.manager = Manager(u'custom', init_schema)

View File

@ -35,8 +35,7 @@ class ImagePlugin(Plugin):
log.info(u'Image Plugin loaded')
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'Images', u'1.9.4', plugin_helpers,
ImageMediaItem)
Plugin.__init__(self, u'Images', plugin_helpers, ImageMediaItem)
self.weight = -7
self.icon_path = u':/plugins/plugin_images.png'
self.icon = build_icon(self.icon_path)

View File

@ -38,7 +38,7 @@ class MediaPlugin(Plugin):
log.info(u'%s MediaPlugin loaded', __name__)
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'Media', u'1.9.4', plugin_helpers,
Plugin.__init__(self, u'Media', plugin_helpers,
MediaMediaItem, MediaTab)
self.weight = -6
self.icon_path = u':/plugins/plugin_media.png'

View File

@ -51,7 +51,7 @@ class PresentationPlugin(Plugin):
"""
log.debug(u'Initialised')
self.controllers = {}
Plugin.__init__(self, u'Presentations', u'1.9.4', plugin_helpers)
Plugin.__init__(self, u'Presentations', plugin_helpers)
self.weight = -8
self.icon_path = u':/plugins/plugin_presentations.png'
self.icon = build_icon(self.icon_path)

View File

@ -38,7 +38,7 @@ class RemotesPlugin(Plugin):
"""
remotes constructor
"""
Plugin.__init__(self, u'Remotes', u'1.9.4', plugin_helpers,
Plugin.__init__(self, u'Remotes', plugin_helpers,
settingsTabClass=RemoteTab)
self.icon = build_icon(u':/plugins/plugin_remote.png')
self.weight = -1

View File

@ -159,15 +159,15 @@ class SongMediaItem(MediaManagerItem):
def onSearchTextButtonClick(self):
search_keywords = unicode(self.searchTextEdit.displayText())
search_results = []
# search_type = self.searchTypeComboBox.currentIndex()
search_type = self.searchTextEdit.currentSearchType()
if search_type == SongSearch.Entire:
log.debug(u'Entire Song Search')
search_results = self.parent.manager.get_all_objects(Song,
or_(Song.search_title.like(u'%' + self.whitespace.sub(u' ',
search_keywords.lower()) + u'%'),
Song.search_lyrics.like(u'%' + search_keywords.lower() + \
u'%')), Song.search_title.asc())
Song.search_lyrics.like(u'%' + search_keywords.lower() + u'%'),
Song.comments.like(u'%' + search_keywords.lower() + u'%')),
Song.search_title.asc())
self.displayResultsSong(search_results)
elif search_type == SongSearch.Titles:
log.debug(u'Titles Search')
@ -198,7 +198,7 @@ class SongMediaItem(MediaManagerItem):
Handle the exit from the edit dialog and trigger remote updates
of songs
"""
log.debug(u'onSongListLoad')
log.debug(u'onSongListLoad - start')
# Called to redisplay the song list screen edit from a search
# or from the exit of the Song edit dialog. If remote editing is active
# Trigger it and clean up so it will not update again.
@ -213,6 +213,7 @@ class SongMediaItem(MediaManagerItem):
self.parent.serviceManager.replaceServiceItem(item)
self.onRemoteEditClear()
self.onSearchTextButtonClick()
log.debug(u'onSongListLoad - finished')
def displayResultsSong(self, searchresults):
log.debug(u'display results Song')
@ -252,11 +253,13 @@ class SongMediaItem(MediaManagerItem):
if self.searchAsYouType:
search_length = 1
if self.searchTextEdit.currentSearchType() == SongSearch.Entire:
search_length = 3
elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics:
search_length = 7
elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics:
search_length = 6
if len(text) > search_length:
self.onSearchTextButtonClick()
elif len(text) == 0:
self.onClearTextButtonClick()
def onImportClick(self):
if not hasattr(self, u'import_wizard'):
@ -445,10 +448,9 @@ class SongMediaItem(MediaManagerItem):
add_song = False
editId = song.id
break
if add_song:
if self.addSongFromService:
editId = self.openLyrics.xml_to_song(item.xml_version)
self.onSearchTextButtonClick()
if add_song and self.addSongFromService:
editId = self.openLyrics.xml_to_song(item.xml_version)
self.onSearchTextButtonClick()
# Update service with correct song id.
if editId:
Receiver.send_message(u'service_item_update',

View File

@ -96,7 +96,7 @@ class OooImport(SongImport):
"""
if os.name == u'nt':
self.start_ooo_process()
self.desktop = self.manager.createInstance(
self.desktop = self.ooo_manager.createInstance(
u'com.sun.star.frame.Desktop')
else:
context = uno.getComponentContext()
@ -118,9 +118,9 @@ class OooImport(SongImport):
def start_ooo_process(self):
try:
if os.name == u'nt':
self.manager = Dispatch(u'com.sun.star.ServiceManager')
self.manager._FlagAsMethod(u'Bridge_GetStruct')
self.manager._FlagAsMethod(u'Bridge_GetValueObject')
self.ooo_manager = Dispatch(u'com.sun.star.ServiceManager')
self.ooo_manager._FlagAsMethod(u'Bridge_GetStruct')
self.ooo_manager._FlagAsMethod(u'Bridge_GetValueObject')
else:
cmd = get_uno_command()
process = QtCore.QProcess()
@ -134,9 +134,11 @@ class OooImport(SongImport):
"""
Open the passed file in OpenOffice.org Impress
"""
self.filepath = filepath
if os.name == u'nt':
url = u'file:///' + filepath.replace(u'\\', u'/')
url = filepath.replace(u'\\', u'/')
url = url.replace(u':', u'|').replace(u' ', u'%20')
url = u'file:///' + url
else:
url = uno.systemPathToFileUrl(filepath)
properties = []
@ -190,10 +192,7 @@ class OooImport(SongImport):
if slidetext.strip() == u'':
slidetext = u'\f'
text += slidetext
song = SongImport(self.manager)
songs = SongImport.process_songs_text(self.manager, text)
for song in songs:
song.finish()
self.process_songs_text(text)
return
def process_doc(self):
@ -215,6 +214,16 @@ class OooImport(SongImport):
if textportion.BreakType in (PAGE_AFTER, PAGE_BOTH):
paratext += u'\f'
text += paratext + u'\n'
songs = SongImport.process_songs_text(self.manager, text)
for song in songs:
song.finish()
self.process_songs_text(text)
def process_songs_text(self, text):
songtexts = self.tidy_text(text).split(u'\f')
self.set_defaults()
for songtext in songtexts:
if songtext.strip():
self.process_song_text(songtext.strip())
if self.check_complete():
self.finish()
self.set_defaults()
if self.check_complete():
self.finish()

View File

@ -29,10 +29,11 @@ songs from the database to the OpenLyrics format.
"""
import logging
import os
import re
from lxml import etree
from openlp.core.lib import Receiver, translate
from openlp.core.lib import check_directory_exists, Receiver, translate
from openlp.plugins.songs.lib import OpenLyrics
log = logging.getLogger(__name__)
@ -50,8 +51,7 @@ class OpenLyricsExport(object):
self.manager = parent.plugin.manager
self.songs = songs
self.save_path = save_path
if not os.path.exists(self.save_path):
os.mkdir(self.save_path)
check_directory_exists(self.save_path)
def do_export(self):
"""
@ -69,6 +69,10 @@ class OpenLyricsExport(object):
song.title)
xml = openLyrics.song_to_xml(song)
tree = etree.ElementTree(etree.fromstring(xml))
tree.write(os.path.join(self.save_path, song.title + u'.xml'),
filename = u'%s (%s).xml' % (song.title,
u', '.join([author.display_name for author in song.authors]))
filename = re.sub(
r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_')
tree.write(os.path.join(self.save_path, filename),
encoding=u'utf-8', xml_declaration=True, pretty_print=True)
return True

View File

@ -72,6 +72,7 @@ class SofImport(OooImport):
to SongImport for writing song to disk
"""
OooImport.__init__(self, manager, **kwargs)
self.song = False
def process_ooo_document(self):
"""
@ -94,8 +95,8 @@ class SofImport(OooImport):
if paragraph.supportsService("com.sun.star.text.Paragraph"):
self.process_paragraph(paragraph)
if self.song:
self.song.finish()
self.song = None
self.finish()
self.song = False
def process_paragraph(self, paragraph):
"""
@ -143,7 +144,7 @@ class SofImport(OooImport):
self.blanklines += 1
if self.blanklines > 1:
return
if self.song.title != u'':
if self.title != u'':
self.finish_verse()
return
self.blanklines = 0
@ -161,17 +162,17 @@ class SofImport(OooImport):
self.skip_to_close_bracket = True
return
if text.startswith(u'Copyright'):
self.song.add_copyright(text)
self.add_copyright(text)
return
if text == u'(Repeat)':
self.finish_verse()
self.song.repeat_verse()
self.repeat_verse()
return
if self.song.title == u'':
if self.song.copyright == u'':
self.add_author(text)
if self.title == u'':
if self.copyright == u'':
self.add_sof_author(text)
else:
self.song.add_copyright(text)
self.add_copyright(text)
return
self.add_verse_line(text)
@ -183,15 +184,15 @@ class SofImport(OooImport):
into line
"""
text = textportion.getString()
text = SongImport.tidy_text(text)
text = self.tidy_text(text)
if text.strip() == u'':
return text
if textportion.CharWeight == BOLD:
boldtext = text.strip()
if boldtext.isdigit() and self.song.song_number == '':
if boldtext.isdigit() and self.song_number == '':
self.add_songnumber(boldtext)
return u''
if self.song.title == u'':
if self.title == u'':
text = self.uncap_text(text)
self.add_title(text)
return text
@ -207,10 +208,11 @@ class SofImport(OooImport):
"""
if self.song:
self.finish_verse()
if not self.song.check_complete():
if not self.check_complete():
return
self.song.finish()
self.song = SongImport(self.manager)
self.finish()
self.song = True
self.set_defaults()
self.skip_to_close_bracket = False
self.is_chorus = False
self.italics = False
@ -221,17 +223,17 @@ class SofImport(OooImport):
Add a song number, store as alternate title. Also use the song
number to work out which songbook we're in
"""
self.song.song_number = song_no
self.song.alternate_title = song_no + u'.'
self.song.song_book_pub = u'Kingsway Publications'
self.song_number = song_no
self.alternate_title = song_no + u'.'
self.song_book_pub = u'Kingsway Publications'
if int(song_no) <= 640:
self.song.song_book = u'Songs of Fellowship 1'
self.song_book = u'Songs of Fellowship 1'
elif int(song_no) <= 1150:
self.song.song_book = u'Songs of Fellowship 2'
self.song_book = u'Songs of Fellowship 2'
elif int(song_no) <= 1690:
self.song.song_book = u'Songs of Fellowship 3'
self.song_book = u'Songs of Fellowship 3'
else:
self.song.song_book = u'Songs of Fellowship 4'
self.song_book = u'Songs of Fellowship 4'
def add_title(self, text):
"""
@ -243,10 +245,10 @@ class SofImport(OooImport):
title = title[1:]
if title.endswith(u','):
title = title[:-1]
self.song.title = title
self.title = title
self.import_wizard.incrementProgressBar(u'Processing song ' + title, 0)
def add_author(self, text):
def add_sof_author(self, text):
"""
Add the author. OpenLP stores them individually so split by 'and', '&'
and comma.
@ -254,7 +256,7 @@ class SofImport(OooImport):
"Mr Smith" and "Mrs Smith".
"""
text = text.replace(u' and ', u' & ')
self.song.parse_author(text)
self.parse_author(text)
def add_verse_line(self, text):
"""
@ -262,7 +264,7 @@ class SofImport(OooImport):
we're beyond the second line of first verse, then this indicates
a change of verse. Italics are a chorus
"""
if self.italics != self.is_chorus and ((len(self.song.verses) > 0) or
if self.italics != self.is_chorus and ((len(self.verses) > 0) or
(self.currentverse.count(u'\n') > 1)):
self.finish_verse()
if self.italics:
@ -282,14 +284,14 @@ class SofImport(OooImport):
splitat = None
else:
versetag = u'V'
splitat = self.verse_splits(self.song.song_number)
splitat = self.verse_splits(self.song_number)
if splitat:
ln = 0
verse = u''
for line in self.currentverse.split(u'\n'):
ln += 1
if line == u'' or ln > splitat:
self.song.add_verse(verse, versetag)
self.add_sof_verse(verse, versetag)
ln = 0
if line:
verse = line + u'\n'
@ -298,12 +300,18 @@ class SofImport(OooImport):
else:
verse += line + u'\n'
if verse:
self.song.add_verse(verse, versetag)
self.add_sof_verse(verse, versetag)
else:
self.song.add_verse(self.currentverse, versetag)
self.add_sof_verse(self.currentverse, versetag)
self.currentverse = u''
self.is_chorus = False
def add_sof_verse(self, lyrics, tag):
self.add_verse(lyrics, tag)
if not self.is_chorus and u'C1' in self.verse_order_list_generated:
self.verse_order_list_generated.append(u'C1')
self.verse_order_list_generated_useful = True
def uncap_text(self, text):
"""
Words in the title are in all capitals, so we lowercase them.

View File

@ -103,23 +103,7 @@ class SongImport(QtCore.QObject):
def register(self, import_wizard):
self.import_wizard = import_wizard
@staticmethod
def process_songs_text(manager, text):
songs = []
songtexts = SongImport.tidy_text(text).split(u'\f')
song = SongImport(manager)
for songtext in songtexts:
if songtext.strip():
song.process_song_text(songtext.strip())
if song.check_complete():
songs.append(song)
song = SongImport(manager)
if song.check_complete():
songs.append(song)
return songs
@staticmethod
def tidy_text(text):
def tidy_text(self, text):
"""
Get rid of some dodgy unicode and formatting characters we're not
interested in. Some can be converted to ascii.
@ -146,12 +130,12 @@ class SongImport(QtCore.QObject):
def process_verse_text(self, text):
lines = text.split(u'\n')
if text.lower().find(self.copyright_string) >= 0 \
or text.find(SongStrings.CopyrightSymbol) >= 0:
or text.find(unicode(SongStrings.CopyrightSymbol)) >= 0:
copyright_found = False
for line in lines:
if (copyright_found or
line.lower().find(self.copyright_string) >= 0 or
line.find(SongStrings.CopyrightSymbol) >= 0):
line.find(unicode(SongStrings.CopyrightSymbol)) >= 0):
copyright_found = True
self.add_copyright(line)
else:
@ -240,7 +224,7 @@ class SongImport(QtCore.QObject):
self.verse_counts[verse_def[0]] = int(verse_def[1:])
self.verses.append([verse_def, verse_text.rstrip(), lang])
self.verse_order_list_generated.append(verse_def)
def repeat_verse(self):
"""
Repeat the previous verse in the verse order

View File

@ -53,8 +53,7 @@ class SongsPlugin(Plugin):
"""
Create and set up the Songs plugin.
"""
Plugin.__init__(self, u'Songs', u'1.9.4', plugin_helpers,
SongMediaItem, SongsTab)
Plugin.__init__(self, u'Songs', plugin_helpers, SongMediaItem, SongsTab)
self.weight = -10
self.manager = Manager(u'songs', init_schema)
self.icon_path = u':/plugins/plugin_songs.png'

View File

@ -42,7 +42,7 @@ class SongUsagePlugin(Plugin):
log.info(u'SongUsage Plugin loaded')
def __init__(self, plugin_helpers):
Plugin.__init__(self, u'SongUsage', u'1.9.4', plugin_helpers)
Plugin.__init__(self, u'SongUsage', plugin_helpers)
self.weight = -4
self.icon = build_icon(u':/plugins/plugin_songusage.png')
self.manager = None

13
resources/debian/Makefile Normal file
View File

@ -0,0 +1,13 @@
#!/usr/bin/make -f
# -*- makefile -*-
build:
mkdir -p openlp/i18n
for TSFILE in resources/i18n/*.ts; do\
lrelease-qt4 $$TSFILE -qm openlp/i18n/`basename $$TSFILE .ts`.qm;\
done
install:
clean:

View File

@ -0,0 +1,389 @@
openlp (1.9.4+bzr1355-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 06 Mar 2011 00:10:03 -0500
openlp (1.9.4+bzr1355-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 06 Mar 2011 00:07:03 -0500
openlp (1.9.4+bzr1355-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 06 Mar 2011 00:05:27 -0500
openlp (1.9.4+bzr1355-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 06 Mar 2011 00:03:17 -0500
openlp (1.9.4+bzr1350-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 05 Mar 2011 00:08:15 -0500
openlp (1.9.4+bzr1350-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 05 Mar 2011 00:06:40 -0500
openlp (1.9.4+bzr1350-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 05 Mar 2011 00:05:09 -0500
openlp (1.9.4+bzr1350-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 05 Mar 2011 00:03:14 -0500
openlp (1.9.4+bzr1347-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 04 Mar 2011 00:04:49 -0500
openlp (1.9.4+bzr1347-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 04 Mar 2011 00:04:15 -0500
openlp (1.9.4+bzr1347-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 04 Mar 2011 00:03:34 -0500
openlp (1.9.4+bzr1347-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 04 Mar 2011 00:02:43 -0500
openlp (1.9.4+bzr1344-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 03 Mar 2011 00:03:56 -0500
openlp (1.9.4+bzr1344-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 03 Mar 2011 00:03:30 -0500
openlp (1.9.4+bzr1344-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 03 Mar 2011 00:03:05 -0500
openlp (1.9.4+bzr1344-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 03 Mar 2011 00:02:26 -0500
openlp (1.9.4+bzr1342-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 01 Mar 2011 00:03:44 -0500
openlp (1.9.4+bzr1342-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 01 Mar 2011 00:03:28 -0500
openlp (1.9.4+bzr1342-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 01 Mar 2011 00:03:03 -0500
openlp (1.9.4+bzr1342-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 01 Mar 2011 00:02:28 -0500
openlp (1.9.4+bzr1341-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 27 Feb 2011 00:04:05 -0500
openlp (1.9.4+bzr1341-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 27 Feb 2011 00:03:48 -0500
openlp (1.9.4+bzr1341-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 27 Feb 2011 00:03:20 -0500
openlp (1.9.4+bzr1341-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 27 Feb 2011 00:02:34 -0500
openlp (1.9.4+bzr1337-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 26 Feb 2011 00:04:02 -0500
openlp (1.9.4+bzr1337-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 26 Feb 2011 00:03:44 -0500
openlp (1.9.4+bzr1337-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 26 Feb 2011 00:03:18 -0500
openlp (1.9.4+bzr1337-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 26 Feb 2011 00:02:32 -0500
openlp (1.9.4+bzr1332-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 25 Feb 2011 00:04:00 -0500
openlp (1.9.4+bzr1332-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 25 Feb 2011 00:03:41 -0500
openlp (1.9.4+bzr1332-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 25 Feb 2011 00:03:16 -0500
openlp (1.9.4+bzr1332-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Fri, 25 Feb 2011 00:02:36 -0500
openlp (1.9.4+bzr1328-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 24 Feb 2011 00:03:47 -0500
openlp (1.9.4+bzr1328-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 24 Feb 2011 00:03:31 -0500
openlp (1.9.4+bzr1328-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 24 Feb 2011 00:03:07 -0500
openlp (1.9.4+bzr1328-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Thu, 24 Feb 2011 00:02:28 -0500
openlp (1.9.4+bzr1324-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Wed, 23 Feb 2011 00:03:48 -0500
openlp (1.9.4+bzr1324-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Wed, 23 Feb 2011 00:03:33 -0500
openlp (1.9.4+bzr1324-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Wed, 23 Feb 2011 00:03:08 -0500
openlp (1.9.4+bzr1324-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Wed, 23 Feb 2011 00:02:28 -0500
openlp (1.9.4+bzr1322-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 22 Feb 2011 00:04:06 -0500
openlp (1.9.4+bzr1322-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 22 Feb 2011 00:03:52 -0500
openlp (1.9.4+bzr1322-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 22 Feb 2011 00:03:28 -0500
openlp (1.9.4+bzr1322-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Tue, 22 Feb 2011 00:02:42 -0500
openlp (1.9.4+bzr1320-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Mon, 21 Feb 2011 00:03:59 -0500
openlp (1.9.4+bzr1320-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Mon, 21 Feb 2011 00:03:45 -0500
openlp (1.9.4+bzr1320-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Mon, 21 Feb 2011 00:03:21 -0500
openlp (1.9.4+bzr1320-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Mon, 21 Feb 2011 00:02:41 -0500
openlp (1.9.4+bzr1316-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 20 Feb 2011 05:32:08 -0500
openlp (1.9.4+bzr1316-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 20 Feb 2011 05:31:51 -0500
openlp (1.9.4+bzr1316-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 20 Feb 2011 05:31:28 -0500
openlp (1.9.4+bzr1316-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sun, 20 Feb 2011 05:30:49 -0500
openlp (1.9.4+bzr1315-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 16:24:12 -0500
openlp (1.9.4+bzr1315-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 16:23:51 -0500
openlp (1.9.4+bzr1315-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 16:23:28 -0500
openlp (1.9.4+bzr1315-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 16:22:49 -0500
openlp (1.9.4+bzr1314-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 15:35:36 -0500
openlp (1.9.4+bzr1314-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 15:35:21 -0500
openlp (1.9.4+bzr1314-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 15:34:53 -0500
openlp (1.9.4+bzr1314-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 15:34:10 -0500
openlp (1.9.4+bzr1313-0ubuntu1~natty1) natty; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 13:58:14 -0500
openlp (1.9.4+bzr1313-0ubuntu1~maverick1) maverick; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 13:57:40 -0500
openlp (1.9.4+bzr1313-0ubuntu1~lucid1) lucid; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 13:57:11 -0500
openlp (1.9.4+bzr1313-0ubuntu1~karmic1) karmic; urgency=low
* Autobuild
-- <openlp@projecthq.biz> Sat, 19 Feb 2011 13:56:17 -0500
openlp (0.0.0+bzr664-0ubuntu1) karmic; urgency=low
* Initial release
-- Michael Gorven <michael@gorven.za.net> Fri, 06 Nov 2009 09:46:40 +0200

View File

@ -0,0 +1 @@
5

View File

@ -0,0 +1,19 @@
Source: openlp
Section: python
Priority: extra
Maintainer: OpenLP Developers <openlp-dev@lists.launchpad.net>
Build-Depends: cdbs, debhelper (>= 5), python-setuptools, python-support,
python, qt4-dev-tools
Standards-Version: 3.8.3
Homepage: http://openlp.org/
Package: openlp
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python-qt4,
python-qt4-phonon, python-sqlalchemy, python-chardet, python-beautifulsoup,
python-lxml, python-sqlite, python-enchant
Conflicts: python-openlp
Description: Church lyrics projection application
OpenLP is free church presentation software, or lyrics projection software,
used to display slides of songs, Bible verses, videos, images, and even
presentations for church worship using a computer and a data projector.

View File

@ -0,0 +1,10 @@
Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat
Upstream-Name: OpenLP
Upstream-Maintainer: OpenLP Developers <openlp-dev@lists.launchpad.net>
Upstream-Source: http://openlp.org/
Files: *
Copyright: (c) 2008-2009 Raoul Snyman
License: GPL-2
X-Comment: On Debian GNU/Linux systems, the complete text of the
GPL-2 License can be found in /usr/share/common-licenses/GPL-2

View File

@ -0,0 +1 @@
documentation

View File

@ -0,0 +1 @@
resources/openlp.desktop /usr/share/applications

View File

@ -0,0 +1 @@
2

View File

@ -0,0 +1 @@
2.5-

21
resources/debian/debian/rules Executable file
View File

@ -0,0 +1,21 @@
#!/usr/bin/make -f
DEB_PYTHON_SYSTEM := pysupport
DEB_MAKE_BUILD_TARGET := build
DEB_MAKE_INSTALL_TARGET :=
DEB_MAKE_CLEAN_TARGET :=
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/python-distutils.mk
include /usr/share/cdbs/1/class/makefile.mk
binary-post-install/openlp::
for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \
mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \
cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \
done
mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \
cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg
cd debian/openlp/usr/bin/ && mv openlp.pyw openlp

View File

@ -0,0 +1,30 @@
# Copyright 1999-2009 Gentoo Foundation
# Copyright 2010 Jaak Ristioja
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=2
RESTRICT_PYTHON_ABIS="3.*"
inherit python
DESCRIPTION="Free church presentation software"
HOMEPAGE="http://openlp.org/"
SRC_URI="mirror://sourceforge/${PN}/${PV}/OpenLP-${PV}-src.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 sparc x86 x86-fbsd x86-freebsd amd64-linux x86-linux x86-macos x86-solaris"
RDEPEND=">=dev-lang/python-2.5.0
dev-python/beautifulsoup
dev-python/chardet
dev-python/lxml
dev-python/pyenchant
dev-python/PyQt4[X,multimedia]
dev-python/sqlalchemy"
DEPEND="${RDEPEND}"
PYTHON_DEPEND="2:2.5"
PYTHON_MODNAME="openlp"
S=${WORKDIR}/OpenLP-${PV}-src