← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/songmaintenance into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/songmaintenance into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)


Merge in some changes to make the edit song dialog a little faster.
-- 
https://code.launchpad.net/~raoul-snyman/openlp/songmaintenance/+merge/27966
Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/songmaintenance into lp:openlp.
=== modified file 'openlp/plugins/songs/forms/editsongdialog.py'
--- openlp/plugins/songs/forms/editsongdialog.py	2010-06-08 15:38:09 +0000
+++ openlp/plugins/songs/forms/editsongdialog.py	2010-06-18 20:02:30 +0000
@@ -439,58 +439,58 @@
 
     def retranslateUi(self, EditSongDialog):
         EditSongDialog.setWindowTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Song Editor'))
+            translate('SongsPlugin.EditSongForm', 'Song Editor'))
         self.TitleLabel.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Title:'))
+            translate('SongsPlugin.EditSongForm', '&Title:'))
         self.AlternativeTitleLabel.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Alternative Title:'))
+            translate('SongsPlugin.EditSongForm', 'Alt&ernative Title:'))
         self.LyricsLabel.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Lyrics:'))
+            translate('SongsPlugin.EditSongForm', '&Lyrics:'))
         self.VerseOrderLabel.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Verse Order:'))
+            translate('SongsPlugin.EditSongForm', '&Verse Order:'))
         self.VerseAddButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Add'))
+            translate('SongsPlugin.EditSongForm', '&Add'))
         self.VerseEditButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Edit'))
+            translate('SongsPlugin.EditSongForm', '&Edit'))
         self.VerseEditAllButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Edit All'))
+            translate('SongsPlugin.EditSongForm', 'Ed&it All'))
         self.VerseDeleteButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Delete'))
+            translate('SongsPlugin.EditSongForm', '&Delete'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.LyricsTab),
-            translate(u'SongsPlugin.EditSongForm', u'Title && Lyrics'))
+            translate('SongsPlugin.EditSongForm', 'Title && Lyrics'))
         self.AuthorsGroupBox.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Authors'))
+            translate('SongsPlugin.EditSongForm', 'Authors'))
         self.AuthorAddButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'&Add to Song'))
+            translate('SongsPlugin.EditSongForm', '&Add to Song'))
         self.AuthorRemoveButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'&Remove'))
-        self.MaintenanceButton.setText(translate(u'SongsPlugin.EditSongForm',
-            u'&Manage Authors, Topics, Books'))
+            translate('SongsPlugin.EditSongForm', '&Remove'))
+        self.MaintenanceButton.setText(translate('SongsPlugin.EditSongForm',
+            '&Manage Authors, Topics, Books'))
         self.TopicGroupBox.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Topic'))
+            translate('SongsPlugin.EditSongForm', 'Topic'))
         self.TopicAddButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'A&dd to Song'))
+            translate('SongsPlugin.EditSongForm', 'A&dd to Song'))
         self.TopicRemoveButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'R&emove'))
+            translate('SongsPlugin.EditSongForm', 'R&emove'))
         self.SongBookGroup.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Song Book'))
+            translate('SongsPlugin.EditSongForm', 'Song Book'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.AuthorsTab),
-            translate(u'SongsPlugin.EditSongForm', u'Authors, Topics && Book'))
+            translate('SongsPlugin.EditSongForm', 'Authors, Topics && Book'))
         self.ThemeGroupBox.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Theme'))
+            translate('SongsPlugin.EditSongForm', 'Theme'))
         self.ThemeAddButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'Add a Theme'))
+            translate('SongsPlugin.EditSongForm', 'Add a &Theme'))
         self.CopyrightGroupBox.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Copyright Information'))
+            translate('SongsPlugin.EditSongForm', 'Copyright Information'))
         self.CopyrightInsertButton.setText(
-            translate(u'SongsPlugin.EditSongForm', u'\xa9'))
+            translate('SongsPlugin.EditSongForm', u'\xa9'))
         self.CCLILabel.setText(
-            translate(u'SongsPlugin.EditSongForm', u'CCLI Number:'))
+            translate('SongsPlugin.EditSongForm', 'CCLI Number:'))
         self.CommentsGroupBox.setTitle(
-            translate(u'SongsPlugin.EditSongForm', u'Comments'))
+            translate('SongsPlugin.EditSongForm', 'Comments'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.ThemeTab),
-            translate(u'SongsPlugin.EditSongForm',
-            u'Theme, Copyright Info && Comments'))
+            translate('SongsPlugin.EditSongForm',
+                'Theme, Copyright Info && Comments'))

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2010-06-09 21:15:37 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2010-06-18 20:02:30 +0000
@@ -30,7 +30,7 @@
 
 from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver, translate
 from openlp.plugins.songs.forms import EditVerseForm
-from openlp.plugins.songs.lib.models import Song
+from openlp.plugins.songs.lib.models import Song, Author, Topic, Book
 from editsongdialog import Ui_EditSongDialog
 
 log = logging.getLogger(__name__)
@@ -126,12 +126,8 @@
 
     def loadAuthors(self):
         authors = self.songmanager.get_authors()
-        authorsCompleter = QtGui.QCompleter(
-            [author.display_name for author in authors],
-            self.AuthorsSelectionComboItem)
-        authorsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
-        self.AuthorsSelectionComboItem.setCompleter(authorsCompleter)
         self.AuthorsSelectionComboItem.clear()
+        self.AuthorsSelectionComboItem.addItem(u'')
         for author in authors:
             row = self.AuthorsSelectionComboItem.count()
             self.AuthorsSelectionComboItem.addItem(author.display_name)
@@ -140,11 +136,8 @@
 
     def loadTopics(self):
         topics = self.songmanager.get_topics()
-        topicsCompleter = QtGui.QCompleter(
-            [topic.name for topic in topics], self.SongTopicCombo)
-        topicsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
-        self.SongTopicCombo.setCompleter(topicsCompleter)
         self.SongTopicCombo.clear()
+        self.SongTopicCombo.addItem(u'')
         for topic in topics:
             row = self.SongTopicCombo.count()
             self.SongTopicCombo.addItem(topic.name)
@@ -152,25 +145,16 @@
 
     def loadBooks(self):
         books = self.songmanager.get_books()
-        booksCompleter = QtGui.QCompleter(
-            [book.name for book in books], self.SongbookCombo)
-        booksCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
-        self.SongbookCombo.setCompleter(booksCompleter)
         self.SongbookCombo.clear()
-        self.SongbookCombo.addItem(u' ')
+        self.SongbookCombo.addItem(u'')
         for book in books:
             row = self.SongbookCombo.count()
             self.SongbookCombo.addItem(book.name)
             self.SongbookCombo.setItemData(row, QtCore.QVariant(book.id))
 
     def loadThemes(self, theme_list):
-        themesCompleter = QtGui.QCompleter(
-            [theme for theme in theme_list],
-            self.ThemeSelectionComboItem)
-        themesCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
-        self.ThemeSelectionComboItem.setCompleter(themesCompleter)
         self.ThemeSelectionComboItem.clear()
-        self.ThemeSelectionComboItem.addItem(u' ')
+        self.ThemeSelectionComboItem.addItem(u'')
         for theme in theme_list:
             self.ThemeSelectionComboItem.addItem(theme)
 
@@ -244,6 +228,9 @@
         self.VerseListWidget.clear()
         self.VerseListWidget.setRowCount(0)
         self.VerseListWidget.setColumnWidth(0, self.width)
+        # This is just because occasionally the lyrics come back as a "buffer"
+        if isinstance(self.song.lyrics, buffer):
+            self.song.lyrics = unicode(self.song.lyrics)
         if self.song.lyrics.startswith(u'<?xml version='):
             songXML = SongXMLParser(self.song.lyrics)
             verseList = songXML.get_verses()
@@ -299,13 +286,40 @@
 
     def onAuthorAddButtonClicked(self):
         item = int(self.AuthorsSelectionComboItem.currentIndex())
-        if item > -1:
+        text = unicode(self.AuthorsSelectionComboItem.currentText())
+        if item == 0 and text:
+            if QtGui.QMessageBox.question(self,
+                translate('SongsPlugin.EditSongForm', 'Add Author'),
+                translate('SongsPlugin.EditSongForm', 'This author does not '
+                    'exist, do you want to add them?'),
+                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
+                QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
+                author = Author.populate(display_name=text)
+                self.songmanager.save_author(author)
+                self.song.authors.append(author)
+                author_item = QtGui.QListWidgetItem(unicode(author.display_name))
+                author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
+                self.AuthorsListView.addItem(author_item)
+                self.loadAuthors()
+                self.AuthorsSelectionComboItem.setCurrentIndex(0)
+            else:
+                return
+        elif item > 0:
             item_id = (self.AuthorsSelectionComboItem.itemData(item)).toInt()[0]
             author = self.songmanager.get_author(item_id)
             self.song.authors.append(author)
             author_item = QtGui.QListWidgetItem(unicode(author.display_name))
             author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
             self.AuthorsListView.addItem(author_item)
+            self.AuthorsSelectionComboItem.setCurrentIndex(0)
+        else:
+            QtGui.QMessageBox.warning(self,
+                translate('SongsPlugin.EditSongForm', 'No Author Selected'),
+                translate('SongsPlugin.EditSongForm', 'You have not selected '
+                    'a valid author. Either select an author from the list, '
+                    'or type in a new author and click the "Add Author to '
+                    'Song" button to add the new author.'),
+                QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
 
     def onAuthorsListViewPressed(self):
         if self.AuthorsListView.count() > 1:
@@ -322,13 +336,40 @@
 
     def onTopicAddButtonClicked(self):
         item = int(self.SongTopicCombo.currentIndex())
-        if item > -1:
+        text = unicode(self.SongTopicCombo.currentText())
+        if item == 0 and text:
+            if QtGui.QMessageBox.question(self,
+                translate('SongsPlugin.EditSongForm', 'Add Topic'),
+                translate('SongsPlugin.EditSongForm', 'This topic does not '
+                    'exist, do you want to add it?'),
+                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
+                QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
+                topic = Topic.populate(name=text)
+                self.songmanager.save_topic(topic)
+                self.song.topics.append(topic)
+                topic_item = QtGui.QListWidgetItem(unicode(topic.name))
+                topic_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
+                self.TopicsListView.addItem(topic_item)
+                self.loadTopics()
+                self.SongTopicCombo.setCurrentIndex(0)
+            else:
+                return
+        elif item > 0:
             item_id = (self.SongTopicCombo.itemData(item)).toInt()[0]
             topic = self.songmanager.get_topic(item_id)
             self.song.topics.append(topic)
             topic_item = QtGui.QListWidgetItem(unicode(topic.name))
             topic_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
             self.TopicsListView.addItem(topic_item)
+            self.SongTopicCombo.setCurrentIndex(0)
+        else:
+            QtGui.QMessageBox.warning(self,
+                translate('SongsPlugin.EditSongForm', 'No Topic Selected'),
+                translate('SongsPlugin.EditSongForm', 'You have not selected '
+                    'a valid topic. Either select a topic from the list, or '
+                    'type in a new topic and click the "Add Topic to Song" '
+                    'button to add the new topic.'),
+                QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
 
     def onTopicListViewPressed(self):
         self.TopicRemoveButton.setEnabled(True)
@@ -343,12 +384,27 @@
         self.TopicsListView.takeItem(row)
 
     def onSongBookComboChanged(self, item):
-        if item == 0:
-            self.song.song_book_id = 0
-        else:
+        item = int(self.SongbookCombo.currentIndex())
+        text = unicode(self.SongbookCombo.currentText())
+        if item == 0 and text:
+            if QtGui.QMessageBox.question(self,
+                translate('SongsPlugin.EditSongForm', 'Add Book'),
+                translate('SongsPlugin.EditSongForm', 'This song book does '
+                    'not exist, do you want to add it?'),
+                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
+                QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
+                book = Book.populate(name=text)
+                self.songmanager.save_book(book)
+                self.song.book = book
+                self.loadBooks()
+            else:
+                return
+        elif item > 1:
             item = int(self.SongbookCombo.currentIndex())
             self.song.song_book_id = \
                 (self.SongbookCombo.itemData(item)).toInt()[0]
+        else:
+            self.song.song_book_id = 0
 
     def onThemeComboChanged(self, item):
         if item == 0:
@@ -484,7 +540,7 @@
                 else:
                     self.SongTabWidget.setCurrentIndex(0)
                     self.VerseOrderEdit.setFocus()
-                    return False, translate(u'SongsPlugin.EditSongForm', 
+                    return False, translate(u'SongsPlugin.EditSongForm',
                         u'Invalid verse entry, values must be I,B,T,P,E,O,V,C '
                         u'followed by a number')
         return True, u''

=== modified file 'openlp/plugins/songs/forms/songmaintenancedialog.py'
--- openlp/plugins/songs/forms/songmaintenancedialog.py	2010-06-13 18:28:59 +0000
+++ openlp/plugins/songs/forms/songmaintenancedialog.py	2010-06-18 20:02:30 +0000
@@ -211,28 +211,28 @@
 
     def retranslateUi(self, SongMaintenanceDialog):
         SongMaintenanceDialog.setWindowTitle(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Song Maintenance'))
+            translate('SongsPlugin.SongMaintenanceForm', 'Song Maintenance'))
         self.TypeListWidget.item(0).setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Authors'))
+            translate('SongsPlugin.SongMaintenanceForm', 'Authors'))
         self.TypeListWidget.item(1).setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Topics'))
+            translate('SongsPlugin.SongMaintenanceForm', 'Topics'))
         self.TypeListWidget.item(2).setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Books/Hymnals'))
+            translate('SongsPlugin.SongMaintenanceForm', 'Books/Hymnals'))
         self.AuthorAddButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Add'))
         self.AuthorEditButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Edit'))
         self.AuthorDeleteButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Delete'))
         self.TopicAddButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Add'))
         self.TopicEditButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Edit'))
         self.TopicDeleteButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Delete'))
         self.BookAddButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Add'))
         self.BookEditButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Edit'))
         self.BookDeleteButton.setText(
-            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))
+            translate('SongsPlugin.SongMaintenanceForm', '&Delete'))

=== removed file 'openlpcnv.pyw'
--- openlpcnv.pyw	2010-04-28 03:16:49 +0000
+++ openlpcnv.pyw	1970-01-01 00:00:00 +0000
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2010 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael      #
-# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin      #
-# Thompson, Jon Tibble, Carsten Tinggaard                                     #
-# --------------------------------------------------------------------------- #
-# 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                          #
-###############################################################################
-
-import os
-import logging
-import time
-import subprocess
-import codecs
-
-if os.name == u'nt':
-    import win32api
-    import win32con
-    from win32com.client import Dispatch
-
-from openlp.core.utils import AppLocation
-from openlp.migration.display import *
-from openlp.migration.migratefiles import *
-from openlp.migration.migratebibles import *
-from openlp.migration.migratesongs import *
-
-###############################################################################
-# For Windows, requires SQLite ODBC Driver to be installed
-# (uses sqlite.exe and sqlite3.exe)
-#     http://www.ch-werner.de/sqliteodbc/
-###############################################################################
-
-logging.basicConfig(level=logging.DEBUG,
-                format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
-                datefmt=u'%m-%d %H:%M',
-                filename=u'openlp-migration.log',
-                filemode=u'w')
-
-class Migration(object):
-    """
-    A class to take care of the migration process.
-    """
-    def __init__(self):
-        """
-        Initialise the process.
-        """
-        self.display = Display()
-        self.stime = time.strftime(u'%Y-%m-%d-%H%M%S', time.localtime())
-        self.display.output(u'OpenLp v1.9.0 Migration Utility Started')
-
-    def process(self):
-        """
-        Perform the conversion.
-        """
-        #MigrateFiles(self.display).process()
-        MigrateSongs(self.display).process()
-        MigrateBibles(self.display).process()
-
-    def move_log_file(self):
-        """
-        Move the log file to a new location.
-        """
-        fname = u'openlp-migration.log'
-        c = os.path.splitext(fname)
-        b = (c[0]+'-'+ unicode(self.stime) + c[1])
-        self.display.output(u'Logfile ' + b + u' generated')
-        self.display.output(u'Migration Utility Finished ')
-        os.rename(fname, b)
-
-    def convert_file(self, inname, outname):
-        """
-        Convert a file from another encoding into UTF-8.
-
-        ``inname``
-            The name of the file to be opened and converted.
-
-        ``outname``
-            The output file name.
-        """
-        infile = codecs.open(inname, u'r', encoding=u'CP1252')
-        writefile = codecs.open(outname, u'w', encoding=u'utf-8')
-        for line in infile:
-            writefile.write(line)
-        infile.close()
-        writefile.close()
-
-    def convert_sqlite2_to_3(self, olddb, newdb):
-        print u'Converting sqlite2 ' + olddb + ' to sqlite3 ' + newdb
-        if os.name == u'nt':
-            # we can't make this a raw unicode string as the \U within it
-            # causes much confusion
-            hKey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,
-                u'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SQLite ODBC Driver')
-            value, type = win32api.RegQueryValueEx (hKey, u'UninstallString')
-            sqlitepath, temp = os.path.split(value)
-            sqliteexe = os.path.join(sqlitepath, u'sqlite.exe')
-        else:
-            sqliteexe = u'sqlite'
-        cmd = u'%s "%s" .dump' % (sqliteexe, olddb)
-        if os.name == u'nt':
-            subprocess.call(cmd, stdout=open(u'sqlite.dmp', u'w'))
-        else:
-            subprocess.call(cmd, stdout=open(u'sqlite.dmp', u'w'), shell=True)
-        self.convert_file(u'sqlite.dmp', u'sqlite3.dmp')
-        if os.name == u'nt':
-            sqlite3exe = os.path.join(sqlitepath, u'sqlite3.exe')
-        else:
-            sqlite3exe = u'sqlite3'
-        if os.path.isfile(newdb):
-            saveddb = newdb + self.stime
-            os.rename(newdb, saveddb)
-        cmd = '%s "%s"' % (sqlite3exe, newdb)
-        if os.name == u'nt':
-            subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r'))
-        else:
-            subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r'), shell=True)
-        os.remove(u'sqlite.dmp')
-        os.remove(u'sqlite3.dmp')
-
-if __name__ == u'__main__':
-    mig = Migration()
-    newsongpath = AppLocation.get_section_data_path(u'songs')
-    newbiblepath = AppLocation.get_section_data_path(u'bibles')
-    if os.name == u'nt':
-        if not os.path.isdir(newsongpath):
-            os.makedirs(newsongpath)
-        if not os.path.isdir(newbiblepath):
-            os.makedirs(newbiblepath)
-        ALL_USERS_APPLICATION_DATA = 35
-        shell = Dispatch(u'Shell.Application')
-        folder = shell.Namespace(ALL_USERS_APPLICATION_DATA)
-        folderitem = folder.Self
-        oldsongdb = os.path.join(folderitem.path, u'openlp.org', u'Data', u'songs.olp')
-        oldbiblepath = os.path.join(folderitem.path, u'openlp.org', u'Data', u'Bibles')
-    else:
-        oldsongdb = os.path.join(newsongpath, u'songs.olp')
-    newsongdb = os.path.join(newsongpath, u'songs.sqlite')
-    mig.convert_sqlite2_to_3(oldsongdb, newsongdb)
-    files = os.listdir(oldbiblepath)
-    for file in files:
-        f = os.path.splitext(os.path.basename(file))[0]
-        if f != 'kjv':   #kjv bible has an autoincrement key not supported in sqlite3
-            mig.convert_sqlite2_to_3(os.path.join(oldbiblepath, file),
-                os.path.join(newbiblepath, f + u'.sqlite'))
-    mig.process()
-    #mig.move_log_file()


Follow ups