forked from openlp/openlp
Add mediashout import
This commit is contained in:
parent
9c1005ac3c
commit
1edfac99e6
@ -47,6 +47,7 @@ from songshowplusimport import SongShowPlusImport
|
|||||||
from songproimport import SongProImport
|
from songproimport import SongProImport
|
||||||
from foilpresenterimport import FoilPresenterImport
|
from foilpresenterimport import FoilPresenterImport
|
||||||
from zionworximport import ZionWorxImport
|
from zionworximport import ZionWorxImport
|
||||||
|
from mediashoutimport import MediaShoutImport
|
||||||
# Imports that might fail
|
# Imports that might fail
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
try:
|
try:
|
||||||
@ -141,14 +142,15 @@ class SongFormat(object):
|
|||||||
EasySlides = 6
|
EasySlides = 6
|
||||||
EasyWorship = 7
|
EasyWorship = 7
|
||||||
FoilPresenter = 8
|
FoilPresenter = 8
|
||||||
OpenSong = 9
|
MediaShout = 9
|
||||||
PowerSong = 10
|
OpenSong = 10
|
||||||
SongBeamer = 11
|
PowerSong = 11
|
||||||
SongPro = 12
|
SongBeamer = 12
|
||||||
SongShowPlus = 13
|
SongPro = 13
|
||||||
SongsOfFellowship = 14
|
SongShowPlus = 14
|
||||||
WordsOfWorship = 15
|
SongsOfFellowship = 15
|
||||||
ZionWorx = 16
|
WordsOfWorship = 16
|
||||||
|
ZionWorx = 17
|
||||||
|
|
||||||
# Set optional attribute defaults
|
# Set optional attribute defaults
|
||||||
__defaults__ = {
|
__defaults__ = {
|
||||||
@ -239,6 +241,14 @@ class SongFormat(object):
|
|||||||
u'filter': u'%s (*.foil)' % translate(
|
u'filter': u'%s (*.foil)' % translate(
|
||||||
'SongsPlugin.ImportWizardForm', 'Foilpresenter Song Files')
|
'SongsPlugin.ImportWizardForm', 'Foilpresenter Song Files')
|
||||||
},
|
},
|
||||||
|
MediaShout: {
|
||||||
|
u'class': MediaShoutImport,
|
||||||
|
u'name': u'MediaShout',
|
||||||
|
u'prefix': u'mediaShout',
|
||||||
|
u'selectMode': SongFormatSelect.SingleFile,
|
||||||
|
u'filter': u'%s (*.mdb)' % translate('SongsPlugin.ImportWizardForm',
|
||||||
|
'MediaShout Database')
|
||||||
|
},
|
||||||
OpenSong: {
|
OpenSong: {
|
||||||
u'class': OpenSongImport,
|
u'class': OpenSongImport,
|
||||||
u'name': WizardStrings.OS,
|
u'name': WizardStrings.OS,
|
||||||
@ -324,6 +334,7 @@ class SongFormat(object):
|
|||||||
SongFormat.EasySlides,
|
SongFormat.EasySlides,
|
||||||
SongFormat.EasyWorship,
|
SongFormat.EasyWorship,
|
||||||
SongFormat.FoilPresenter,
|
SongFormat.FoilPresenter,
|
||||||
|
SongFormat.MediaShout,
|
||||||
SongFormat.OpenSong,
|
SongFormat.OpenSong,
|
||||||
SongFormat.PowerSong,
|
SongFormat.PowerSong,
|
||||||
SongFormat.SongBeamer,
|
SongFormat.SongBeamer,
|
||||||
|
108
openlp/plugins/songs/lib/mediashoutimport.py
Normal file
108
openlp/plugins/songs/lib/mediashoutimport.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2012 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
|
||||||
|
# Meinert Jordan, Armin Köhler, Edwin Lunando, Joshua Miller, Stevan Pettit, #
|
||||||
|
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
||||||
|
# Simon Scudder, Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon #
|
||||||
|
# Tibble, Dave Warnock, Frode Woldsund #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
The :mod:`mediashoutimport` module provides the functionality for importing
|
||||||
|
a MediaShout database into the OpenLP database.
|
||||||
|
"""
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import pyodbc
|
||||||
|
|
||||||
|
from openlp.core.lib import translate
|
||||||
|
from openlp.plugins.songs.lib.songimport import SongImport
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
VERSE_TAGS = [u'V', u'C', u'B', u'O', u'P', u'I', u'E']
|
||||||
|
|
||||||
|
class MediaShoutImport(SongImport):
|
||||||
|
"""
|
||||||
|
The :class:`MediaShoutImport` class provides the ability to import the
|
||||||
|
MediaShout Access Database
|
||||||
|
"""
|
||||||
|
def __init__(self, manager, **kwargs):
|
||||||
|
"""
|
||||||
|
Initialise the MediaShout importer.
|
||||||
|
"""
|
||||||
|
SongImport.__init__(self, manager, **kwargs)
|
||||||
|
|
||||||
|
def doImport(self):
|
||||||
|
"""
|
||||||
|
Receive a single file to import.
|
||||||
|
"""
|
||||||
|
conn = pyodbc.connect(u'DRIVER={Microsoft Access Driver (*.mdb)};'
|
||||||
|
u'DBQ=%s;PWD=6NOZ4eHK7k' % self.importSource)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute(u'SELECT Record, Title, Author, Copyright, '
|
||||||
|
u'SongID, CCLI, Notes FROM Songs ORDER BY Title')
|
||||||
|
songs = cursor.fetchall()
|
||||||
|
self.importWizard.progressBar.setMaximum(len(songs))
|
||||||
|
for song in songs:
|
||||||
|
if self.stopImportFlag:
|
||||||
|
break
|
||||||
|
cursor.execute(u'SELECT Type, Number, Text FROM Verses '
|
||||||
|
u'WHERE Record = %s ORDER BY Type, Number' % song.Record)
|
||||||
|
verses = cursor.fetchall()
|
||||||
|
cursor.execute(u'SELECT Type, Number, POrder FROM PlayOrder '
|
||||||
|
u'WHERE Record = %s ORDER BY POrder' % song.Record)
|
||||||
|
verse_order = cursor.fetchall()
|
||||||
|
cursor.execute(u'SELECT Name FROM Themes INNER JOIN SongThemes '
|
||||||
|
u'ON SongThemes.ThemeId = Themes.ThemeId '
|
||||||
|
u'WHERE SongThemes.Record = %s' % song.Record)
|
||||||
|
topics = cursor.fetchall()
|
||||||
|
cursor.execute(u'SELECT Name FROM Groups INNER JOIN SongGroups '
|
||||||
|
u'ON SongGroups.GroupId = Groups.GroupId '
|
||||||
|
u'WHERE SongGroups.Record = %s' % song.Record)
|
||||||
|
topics += cursor.fetchall()
|
||||||
|
self.processSong(song, verses, verse_order, topics)
|
||||||
|
|
||||||
|
def processSong(self, song, verses, verse_order, topics):
|
||||||
|
"""
|
||||||
|
Create the song, i.e. title, verse etc.
|
||||||
|
"""
|
||||||
|
self.setDefaults()
|
||||||
|
self.title = song.Title
|
||||||
|
self.parseAuthor(song.Author)
|
||||||
|
self.addCopyright(song.Copyright)
|
||||||
|
self.comments = song.Notes
|
||||||
|
for topic in topics:
|
||||||
|
self.topics.append(topic.Name)
|
||||||
|
if u'-' in song.SongID:
|
||||||
|
self.songBookName, self.songNumber = song.SongID.split(u'-', 1)
|
||||||
|
else:
|
||||||
|
self.songBookName = song.SongID
|
||||||
|
for verse in verses:
|
||||||
|
tag = VERSE_TAGS[verse.Type] + unicode(verse.Number) \
|
||||||
|
if verse.Type < len(VERSE_TAGS) else u'O'
|
||||||
|
self.addVerse(verse.Text, tag)
|
||||||
|
for order in verse_order:
|
||||||
|
if order.Type < len(VERSE_TAGS):
|
||||||
|
self.verseOrderList.append(VERSE_TAGS[order.Type]
|
||||||
|
+ unicode(order.Number))
|
||||||
|
self.finish()
|
Loading…
Reference in New Issue
Block a user