Add mediashout import

This commit is contained in:
Jonathan Corwin 2012-07-05 00:04:11 +01:00
parent 9c1005ac3c
commit 1edfac99e6
2 changed files with 127 additions and 8 deletions

View File

@ -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,

View 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()