forked from openlp/openlp
Head785
This commit is contained in:
commit
1cb25db4e9
@ -271,12 +271,23 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
self.edit_song_form.exec_()
|
self.edit_song_form.exec_()
|
||||||
|
|
||||||
def onDeleteClick(self):
|
def onDeleteClick(self):
|
||||||
item = self.ListView.currentItem()
|
items = self.ListView.selectedIndexes()
|
||||||
if item:
|
if items:
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
if len(items) == 1:
|
||||||
self.parent.songmanager.delete_song(item_id)
|
del_message = self.trUtf8('Delete song?')
|
||||||
row = self.ListView.row(item)
|
else:
|
||||||
self.ListView.takeItem(row)
|
del_message = unicode(self.trUtf8('Delete %d song?')) % len(items)
|
||||||
|
ans = QtGui.QMessageBox.question(self,
|
||||||
|
self.trUtf8('Delete Confirmation'), del_message,
|
||||||
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok|
|
||||||
|
QtGui.QMessageBox.Cancel),
|
||||||
|
QtGui.QMessageBox.Ok)
|
||||||
|
if ans == QtGui.QMessageBox.Cancel:
|
||||||
|
return
|
||||||
|
for item in items:
|
||||||
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
|
self.parent.songmanager.delete_song(item_id)
|
||||||
|
self.onSearchTextButtonClick()
|
||||||
|
|
||||||
def generateSlideData(self, service_item):
|
def generateSlideData(self, service_item):
|
||||||
raw_footer = []
|
raw_footer = []
|
||||||
|
@ -44,7 +44,6 @@ if os.name == u'nt':
|
|||||||
PAGE_BOTH = 6
|
PAGE_BOTH = 6
|
||||||
else:
|
else:
|
||||||
import uno
|
import uno
|
||||||
from com.sun.star.beans import PropertyValue
|
|
||||||
from com.sun.star.awt.FontWeight import BOLD
|
from com.sun.star.awt.FontWeight import BOLD
|
||||||
from com.sun.star.awt.FontSlant import ITALIC
|
from com.sun.star.awt.FontSlant import ITALIC
|
||||||
from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH
|
from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH
|
||||||
@ -71,7 +70,8 @@ class SofImport(object):
|
|||||||
to SongImport for writing song to disk
|
to SongImport for writing song to disk
|
||||||
"""
|
"""
|
||||||
self.song = None
|
self.song = None
|
||||||
self.manager = songmanager
|
self.manager = songmanager
|
||||||
|
self.process_started = False
|
||||||
|
|
||||||
def import_sof(self, filename):
|
def import_sof(self, filename):
|
||||||
self.start_ooo()
|
self.start_ooo()
|
||||||
@ -85,17 +85,9 @@ class SofImport(object):
|
|||||||
TODO: The presentation/Impress plugin may already have it running
|
TODO: The presentation/Impress plugin may already have it running
|
||||||
"""
|
"""
|
||||||
if os.name == u'nt':
|
if os.name == u'nt':
|
||||||
manager = Dispatch(u'com.sun.star.ServiceManager')
|
self.start_ooo_process()
|
||||||
manager._FlagAsMethod(u'Bridge_GetStruct')
|
self.desktop = self.manager.createInstance(u'com.sun.star.frame.Desktop')
|
||||||
manager._FlagAsMethod(u'Bridge_GetValueObject')
|
|
||||||
self.desktop = manager.createInstance(u'com.sun.star.frame.Desktop')
|
|
||||||
else:
|
else:
|
||||||
cmd = u'openoffice.org -nologo -norestore -minimized -invisible ' \
|
|
||||||
+ u'-nofirststartwizard ' \
|
|
||||||
+ '-accept="socket,host=localhost,port=2002;urp;"'
|
|
||||||
process = QtCore.QProcess()
|
|
||||||
process.startDetached(cmd)
|
|
||||||
process.waitForStarted()
|
|
||||||
context = uno.getComponentContext()
|
context = uno.getComponentContext()
|
||||||
resolver = context.ServiceManager.createInstanceWithContext(
|
resolver = context.ServiceManager.createInstanceWithContext(
|
||||||
u'com.sun.star.bridge.UnoUrlResolver', context)
|
u'com.sun.star.bridge.UnoUrlResolver', context)
|
||||||
@ -107,12 +99,29 @@ class SofImport(object):
|
|||||||
+ 'port=2002;urp;StarOffice.ComponentContext')
|
+ 'port=2002;urp;StarOffice.ComponentContext')
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
time.sleep(1)
|
self.start_ooo_process()
|
||||||
loop += 1
|
loop += 1
|
||||||
manager = ctx.ServiceManager
|
manager = ctx.ServiceManager
|
||||||
self.desktop = manager.createInstanceWithContext(
|
self.desktop = manager.createInstanceWithContext(
|
||||||
"com.sun.star.frame.Desktop", ctx )
|
"com.sun.star.frame.Desktop", ctx )
|
||||||
|
|
||||||
|
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')
|
||||||
|
else:
|
||||||
|
cmd = u'openoffice.org -nologo -norestore -minimized -invisible ' \
|
||||||
|
+ u'-nofirststartwizard ' \
|
||||||
|
+ '-accept="socket,host=localhost,port=2002;urp;"'
|
||||||
|
process = QtCore.QProcess()
|
||||||
|
process.startDetached(cmd)
|
||||||
|
process.waitForStarted()
|
||||||
|
self.process_started = True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def open_ooo_file(self, filepath):
|
def open_ooo_file(self, filepath):
|
||||||
"""
|
"""
|
||||||
Open the passed file in OpenOffice.org Writer
|
Open the passed file in OpenOffice.org Writer
|
||||||
@ -129,10 +138,12 @@ class SofImport(object):
|
|||||||
|
|
||||||
def close_ooo(self):
|
def close_ooo(self):
|
||||||
"""
|
"""
|
||||||
Close down OpenOffice.org.
|
Close RTF file. Note, on Windows we'll leave OOo running
|
||||||
TODO: Further checks that it have other docs open, e.g. Impress!
|
Leave running on Windows
|
||||||
"""
|
"""
|
||||||
self.desktop.terminate()
|
self.document.close(True)
|
||||||
|
if self.process_started:
|
||||||
|
self.desktop.terminate()
|
||||||
|
|
||||||
def process_doc(self):
|
def process_doc(self):
|
||||||
"""
|
"""
|
||||||
@ -273,7 +284,8 @@ class SofImport(object):
|
|||||||
Add a song number, store as alternate title. Also use the song
|
Add a song number, store as alternate title. Also use the song
|
||||||
number to work out which songbook we're in
|
number to work out which songbook we're in
|
||||||
"""
|
"""
|
||||||
self.song.set_song_number(song_no)
|
self.song.set_song_number(song_no)
|
||||||
|
self.song.set_alternate_title(song_no + u'.')
|
||||||
if int(song_no) <= 640:
|
if int(song_no) <= 640:
|
||||||
self.song.set_song_book(u'Songs of Fellowship 1',
|
self.song.set_song_book(u'Songs of Fellowship 1',
|
||||||
u'Kingsway Publications')
|
u'Kingsway Publications')
|
||||||
@ -313,8 +325,11 @@ class SofImport(object):
|
|||||||
author2 = authors[i].strip()
|
author2 = authors[i].strip()
|
||||||
if author2.find(u' ') == -1 and i < len(authors) - 1:
|
if author2.find(u' ') == -1 and i < len(authors) - 1:
|
||||||
author2 = author2 + u' ' \
|
author2 = author2 + u' ' \
|
||||||
+ authors[i + 1].strip().split(u' ')[-1]
|
+ authors[i + 1].strip().split(u' ')[-1]
|
||||||
self.song.add_author(author2)
|
if author2.endswith(u'.'):
|
||||||
|
author2 = author2[:-1]
|
||||||
|
if author2:
|
||||||
|
self.song.add_author(author2)
|
||||||
|
|
||||||
def add_verse_line(self, text):
|
def add_verse_line(self, text):
|
||||||
"""
|
"""
|
||||||
@ -337,11 +352,11 @@ class SofImport(object):
|
|||||||
"""
|
"""
|
||||||
if self.currentverse.strip() == u'':
|
if self.currentverse.strip() == u'':
|
||||||
return
|
return
|
||||||
if self.is_chorus:
|
if self.is_chorus:
|
||||||
versetag = 'C'
|
versetag = u'C'
|
||||||
splitat = None
|
splitat = None
|
||||||
else:
|
else:
|
||||||
versetag = 'V'
|
versetag = u'V'
|
||||||
splitat = self.verse_splits(self.song.get_song_number())
|
splitat = self.verse_splits(self.song.get_song_number())
|
||||||
if splitat:
|
if splitat:
|
||||||
ln = 0
|
ln = 0
|
||||||
|
@ -46,6 +46,7 @@ class SongImport(object):
|
|||||||
self.manager = song_manager
|
self.manager = song_manager
|
||||||
self.title = u''
|
self.title = u''
|
||||||
self.song_number = u''
|
self.song_number = u''
|
||||||
|
self.alternate_title = u''
|
||||||
self.copyright = u''
|
self.copyright = u''
|
||||||
self.comment = u''
|
self.comment = u''
|
||||||
self.theme_name = u''
|
self.theme_name = u''
|
||||||
@ -73,7 +74,7 @@ class SongImport(object):
|
|||||||
|
|
||||||
def get_song_number(self):
|
def get_song_number(self):
|
||||||
"""
|
"""
|
||||||
Return the song number (also known as alternate title)
|
Return the song number
|
||||||
"""
|
"""
|
||||||
return self.song_number
|
return self.song_number
|
||||||
|
|
||||||
@ -82,10 +83,16 @@ class SongImport(object):
|
|||||||
Set the title
|
Set the title
|
||||||
"""
|
"""
|
||||||
self.title = title
|
self.title = title
|
||||||
|
|
||||||
|
def set_alternate_title(self, title):
|
||||||
|
"""
|
||||||
|
Set the alternate title
|
||||||
|
"""
|
||||||
|
self.alternate_title = title
|
||||||
|
|
||||||
def set_song_number(self, song_number):
|
def set_song_number(self, song_number):
|
||||||
"""
|
"""
|
||||||
Set the song number/alternate title
|
Set the song number
|
||||||
"""
|
"""
|
||||||
self.song_number = song_number
|
self.song_number = song_number
|
||||||
|
|
||||||
@ -113,7 +120,7 @@ class SongImport(object):
|
|||||||
def add_verse(self, verse, versetag):
|
def add_verse(self, verse, versetag):
|
||||||
"""
|
"""
|
||||||
Add a verse. This is the whole verse, lines split by \n
|
Add a verse. This is the whole verse, lines split by \n
|
||||||
Verse tag can be V1/C1/B1 etc, or 'V' and 'C' (will count the verses/
|
Verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the verses/
|
||||||
choruses itself) or None, where it will assume verse
|
choruses itself) or None, where it will assume verse
|
||||||
It will also attempt to detect duplicates. In this case it will just
|
It will also attempt to detect duplicates. In this case it will just
|
||||||
add to the verse order
|
add to the verse order
|
||||||
@ -121,16 +128,17 @@ class SongImport(object):
|
|||||||
for (oldversetag, oldverse) in self.verses:
|
for (oldversetag, oldverse) in self.verses:
|
||||||
if oldverse.strip() == verse.strip():
|
if oldverse.strip() == verse.strip():
|
||||||
self.verse_order_list.append(oldversetag)
|
self.verse_order_list.append(oldversetag)
|
||||||
return
|
return
|
||||||
if versetag == u'C':
|
if versetag.startswith(u'C'):
|
||||||
self.choruscount += 1
|
self.choruscount += 1
|
||||||
|
if versetag == u'C':
|
||||||
versetag += unicode(self.choruscount)
|
versetag += unicode(self.choruscount)
|
||||||
if versetag == u'V' or not versetag:
|
if versetag == u'V' or not versetag:
|
||||||
self.versecount += 1
|
self.versecount += 1
|
||||||
versetag = u'V' + unicode(self.versecount)
|
versetag = u'V' + unicode(self.versecount)
|
||||||
self.verses.append([versetag, verse])
|
self.verses.append([versetag, verse.rstrip()])
|
||||||
self.verse_order_list.append(versetag)
|
self.verse_order_list.append(versetag)
|
||||||
if self.choruscount > 0 and not versetag.startswith(u'C'):
|
if versetag.startswith(u'V') and self.contains_verse(u'C1'):
|
||||||
self.verse_order_list.append(u'C1')
|
self.verse_order_list.append(u'C1')
|
||||||
|
|
||||||
def repeat_verse(self):
|
def repeat_verse(self):
|
||||||
@ -138,7 +146,10 @@ class SongImport(object):
|
|||||||
Repeat the previous verse in the verse order
|
Repeat the previous verse in the verse order
|
||||||
"""
|
"""
|
||||||
self.verse_order_list.append(self.verse_order_list[-1])
|
self.verse_order_list.append(self.verse_order_list[-1])
|
||||||
|
|
||||||
|
def contains_verse(self, versetag):
|
||||||
|
return versetag in self.verse_order_list
|
||||||
|
|
||||||
def check_complete(self):
|
def check_complete(self):
|
||||||
"""
|
"""
|
||||||
Check the mandatory fields are entered (i.e. title and a verse)
|
Check the mandatory fields are entered (i.e. title and a verse)
|
||||||
@ -173,7 +184,8 @@ class SongImport(object):
|
|||||||
"""
|
"""
|
||||||
song = Song()
|
song = Song()
|
||||||
song.title = self.title
|
song.title = self.title
|
||||||
song.search_title = self.remove_punctuation(self.title)
|
song.search_title = self.remove_punctuation(self.title) \
|
||||||
|
+ '@' + self.alternate_title
|
||||||
song.song_number = self.song_number
|
song.song_number = self.song_number
|
||||||
song.search_lyrics = u''
|
song.search_lyrics = u''
|
||||||
sxml = SongXMLBuilder()
|
sxml = SongXMLBuilder()
|
||||||
@ -235,6 +247,7 @@ class SongImport(object):
|
|||||||
print u'========================================' \
|
print u'========================================' \
|
||||||
+ u'========================================'
|
+ u'========================================'
|
||||||
print u'TITLE: ' + self.title
|
print u'TITLE: ' + self.title
|
||||||
|
print u'ALT TITLE: ' + self.alternate_title
|
||||||
for (versetag, versetext) in self.verses:
|
for (versetag, versetext) in self.verses:
|
||||||
print u'VERSE ' + versetag + u': ' + versetext
|
print u'VERSE ' + versetag + u': ' + versetext
|
||||||
print u'ORDER: ' + u' '.join(self.verse_order_list)
|
print u'ORDER: ' + u' '.join(self.verse_order_list)
|
||||||
|
@ -27,7 +27,7 @@ import logging
|
|||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Plugin, build_icon, PluginStatus
|
from openlp.core.lib import Plugin, build_icon, PluginStatus, Receiver
|
||||||
from openlp.plugins.songs.lib import SongManager, SongMediaItem, SongsTab, \
|
from openlp.plugins.songs.lib import SongManager, SongMediaItem, SongsTab, \
|
||||||
SofImport
|
SofImport
|
||||||
from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \
|
from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \
|
||||||
@ -187,8 +187,20 @@ class SongsPlugin(Plugin):
|
|||||||
filename = QtGui.QFileDialog.getOpenFileName(
|
filename = QtGui.QFileDialog.getOpenFileName(
|
||||||
None, self.trUtf8('Open Songs of Fellowship file'),
|
None, self.trUtf8('Open Songs of Fellowship file'),
|
||||||
u'', u'Songs of Fellowship file (*.rtf *.RTF)')
|
u'', u'Songs of Fellowship file (*.rtf *.RTF)')
|
||||||
sofimport = SofImport(self.songmanager)
|
try:
|
||||||
sofimport.import_sof(unicode(filename))
|
sofimport = SofImport(self.songmanager)
|
||||||
|
sofimport.import_sof(unicode(filename))
|
||||||
|
except:
|
||||||
|
log.exception('Could not import SoF file')
|
||||||
|
QtGui.QMessageBox.critical(None,
|
||||||
|
self.ImportSongMenu.trUtf8('Import Error'),
|
||||||
|
self.ImportSongMenu.trUtf8('Error importing Songs of '
|
||||||
|
+ 'Fellowship file.\nOpenOffice.org must be installed'
|
||||||
|
+ ' and you must be using an unedited copy of the RTF'
|
||||||
|
+ ' included with the Songs of Fellowship Music Editions'),
|
||||||
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
|
||||||
|
QtGui.QMessageBox.Ok)
|
||||||
|
Receiver.send_message(u'load_song_list')
|
||||||
|
|
||||||
def onExportOpenlp1ItemClicked(self):
|
def onExportOpenlp1ItemClicked(self):
|
||||||
self.openlp_export_form.show()
|
self.openlp_export_form.show()
|
||||||
|
Loading…
Reference in New Issue
Block a user