← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~googol-hush/openlp/trivial into lp:openlp

 

googol has proposed merging lp:~googol-hush/openlp/trivial into lp:openlp.

Requested reviews:
  Raoul Snyman (raoul-snyman): error in logic
  Jon Tibble (meths)


- changed error messages
- name standardisation (now: song book or song books)
- Added message box providing the possibility to merge to books/authors/topics
-- 
https://code.launchpad.net/~googol-hush/openlp/trivial/+merge/30248
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2010-07-12 21:11:00 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2010-07-19 10:13:43 +0000
@@ -40,7 +40,7 @@
         self.weight = -9
         self.icon_path = u':/plugins/plugin_bibles.png'
         self.icon = build_icon(self.icon_path)
-        #Register the bible Manager
+        # Register the bible Manager.
         self.status = PluginStatus.Active
         self.manager = None
 
@@ -62,7 +62,7 @@
         return BiblesTab(self.name)
 
     def getMediaManagerItem(self):
-        # Create the BibleManagerItem object
+        # Create the BibleManagerItem object.
         return BibleMediaItem(self, self.icon, self.name)
 
     def addImportMenuItem(self, import_menu):
@@ -71,7 +71,7 @@
         import_menu.addAction(self.ImportBibleItem)
         self.ImportBibleItem.setText(
             translate('BiblePlugin', '&Bible'))
-        # Signals and slots
+        # signals and slots
         QtCore.QObject.connect(self.ImportBibleItem,
             QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick)
         self.ImportBibleItem.setVisible(False)

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2010-07-08 13:50:06 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2010-07-19 10:13:43 +0000
@@ -129,8 +129,7 @@
         self.QuickClearLabel.setObjectName(u'QuickSearchLabel')
         self.QuickLayout.addWidget(self.QuickClearLabel, 4, 0, 1, 1)
         self.ClearQuickSearchComboBox = QtGui.QComboBox(self.QuickTab)
-        self.ClearQuickSearchComboBox.setObjectName(
-            u'ClearQuickSearchComboBox')
+        self.ClearQuickSearchComboBox.setObjectName(u'ClearQuickSearchComboBox')
         self.QuickLayout.addWidget(self.ClearQuickSearchComboBox, 4, 1, 1, 2)
         self.QuickSearchButtonLayout = QtGui.QHBoxLayout()
         self.QuickSearchButtonLayout.setMargin(0)
@@ -168,8 +167,7 @@
         self.AdvancedVersionComboBox.setObjectName(u'AdvancedVersionComboBox')
         self.AdvancedLayout.addWidget(self.AdvancedVersionComboBox, 0, 1, 1, 2)
         self.AdvancedSecondBibleLabel = QtGui.QLabel(self.AdvancedTab)
-        self.AdvancedSecondBibleLabel.setObjectName(
-            u'AdvancedSecondBibleLabel')
+        self.AdvancedSecondBibleLabel.setObjectName(u'AdvancedSecondBibleLabel')
         self.AdvancedLayout.addWidget(self.AdvancedSecondBibleLabel, 1, 0, 1, 1)
         self.AdvancedSecondBibleComboBox = QtGui.QComboBox(self.AdvancedTab)
         self.AdvancedSecondBibleComboBox.setSizeAdjustPolicy(
@@ -223,8 +221,7 @@
             u'AdvancedSearchButtonLayout')
         self.AdvancedSearchButtonSpacer = QtGui.QSpacerItem(40, 20,
             QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.AdvancedSearchButtonLayout.addItem(
-            self.AdvancedSearchButtonSpacer)
+        self.AdvancedSearchButtonLayout.addItem(self.AdvancedSearchButtonSpacer)
         self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab)
         self.AdvancedSearchButton.setObjectName(u'AdvancedSearchButton')
         self.AdvancedSearchButtonLayout.addWidget(self.AdvancedSearchButton)
@@ -618,8 +615,7 @@
         else:
             self.AdvancedSearchButton.setEnabled(True)
             self.AdvancedMessage.setText(u'')
-            self.adjustComboBox(1, self.chapters_from,
-                self.AdvancedFromChapter)
+            self.adjustComboBox(1, self.chapters_from, self.AdvancedFromChapter)
             self.adjustComboBox(1, self.chapters_from, self.AdvancedToChapter)
             self.adjustComboBox(1, self.verses, self.AdvancedFromVerse)
             self.adjustComboBox(1, self.verses, self.AdvancedToVerse)

=== modified file 'openlp/plugins/songs/forms/authorsform.py'
--- openlp/plugins/songs/forms/authorsform.py	2010-06-22 14:34:03 +0000
+++ openlp/plugins/songs/forms/authorsform.py	2010-07-19 10:13:43 +0000
@@ -97,7 +97,7 @@
             if QtGui.QMessageBox.critical(
                     self, translate('SongsPlugin.AuthorsForm', 'Error'),
                     translate('SongsPlugin.AuthorsForm',
-                        'You haven\'t set a display name for the '
+                        'You have not set a display name for the '
                         'author, would you like me to combine the first and '
                         'last names for you?'),
                     QtGui.QMessageBox.StandardButtons(

=== modified file 'openlp/plugins/songs/forms/editsongdialog.py'
--- openlp/plugins/songs/forms/editsongdialog.py	2010-07-16 12:31:47 +0000
+++ openlp/plugins/songs/forms/editsongdialog.py	2010-07-19 10:13:43 +0000
@@ -430,7 +430,7 @@
         self.AuthorRemoveButton.setText(
             translate('SongsPlugin.EditSongForm', '&Remove'))
         self.MaintenanceButton.setText(translate('SongsPlugin.EditSongForm',
-            '&Manage Authors, Topics, Books'))
+            '&Manage Authors, Topics, Song Books'))
         self.TopicGroupBox.setTitle(
             translate('SongsPlugin.EditSongForm', 'Topic'))
         self.TopicAddButton.setText(
@@ -441,7 +441,7 @@
             translate('SongsPlugin.EditSongForm', 'Song Book'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.AuthorsTab),
-            translate('SongsPlugin.EditSongForm', 'Authors, Topics && Book'))
+            translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book'))
         self.ThemeGroupBox.setTitle(
             translate('SongsPlugin.EditSongForm', 'Theme'))
         self.ThemeAddButton.setText(

=== modified file 'openlp/plugins/songs/forms/songbookdialog.py'
--- openlp/plugins/songs/forms/songbookdialog.py	2010-06-22 14:34:03 +0000
+++ openlp/plugins/songs/forms/songbookdialog.py	2010-07-19 10:13:43 +0000
@@ -68,7 +68,7 @@
 
     def retranslateUi(self, SongBookDialog):
         SongBookDialog.setWindowTitle(
-            translate('SongsPlugin.SongBookForm', 'Edit Book'))
+            translate('SongsPlugin.SongBookForm', 'Song Book Maintenance'))
         self.NameLabel.setText(translate('SongsPlugin.SongBookForm', '&Name:'))
         self.PublisherLabel.setText(
             translate('SongsPlugin.SongBookForm', '&Publisher:'))

=== modified file 'openlp/plugins/songs/forms/songmaintenancedialog.py'
--- openlp/plugins/songs/forms/songmaintenancedialog.py	2010-06-18 19:55:45 +0000
+++ openlp/plugins/songs/forms/songmaintenancedialog.py	2010-07-19 10:13:43 +0000
@@ -217,7 +217,7 @@
         self.TypeListWidget.item(1).setText(
             translate('SongsPlugin.SongMaintenanceForm', 'Topics'))
         self.TypeListWidget.item(2).setText(
-            translate('SongsPlugin.SongMaintenanceForm', 'Books/Hymnals'))
+            translate('SongsPlugin.SongMaintenanceForm', 'Song Books'))
         self.AuthorAddButton.setText(
             translate('SongsPlugin.SongMaintenanceForm', '&Add'))
         self.AuthorEditButton.setText(

=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py	2010-07-16 18:53:49 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py	2010-07-19 10:13:43 +0000
@@ -26,9 +26,9 @@
 from PyQt4 import QtGui, QtCore
 from sqlalchemy.sql import and_
 
-from openlp.core.lib import translate
+from openlp.core.lib import Receiver, translate
 from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm
-from openlp.plugins.songs.lib.db import Author, Book, Topic
+from openlp.plugins.songs.lib.db import Author, Book, Topic, Song
 from songmaintenancedialog import Ui_SongMaintenanceDialog
 
 class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
@@ -140,13 +140,10 @@
         Returns False if the given Author is already in the list otherwise
         True.
         """
-        authors = self.songmanager.get_all_objects_filtered(Author, 
-            and_(
-                Author.first_name == new_author.first_name, 
-                Author.last_name == new_author.last_name, 
-                Author.display_name == new_author.display_name
-                )
-            )
+        authors = self.songmanager.get_all_objects_filtered(Author,
+            and_(Author.first_name == new_author.first_name,
+                Author.last_name == new_author.last_name,
+                Author.display_name == new_author.display_name))
         if len(authors) > 0:
             # If we edit an existing Author, we need to make sure that we do
             # not return False when nothing has changed (because this would
@@ -186,7 +183,7 @@
         Returns False if the given Book is already in the list otherwise True.
         """
         books = self.songmanager.get_all_objects_filtered(Book,
-            and_(Book.name == new_book.name, 
+            and_(Book.name == new_book.name,
                 Book.publisher == new_book.publisher))
         if len(books) > 0:
             # If we edit an existing Book, we need to make sure that we do
@@ -212,11 +209,16 @@
             if self.checkAuthor(author):
                 if self.songmanager.save_object(author):
                     self.resetAuthors()
+                else:
+                    QtGui.QMessageBox.critical(self,
+                        translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                        translate('SongsPlugin.SongMaintenanceForm',
+                        'Could not add your author.'))
             else:
                 QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
                     translate('SongsPlugin.SongMaintenanceForm',
-                    'Could not add your author.'))
+                    'This author already exists.'))
 
     def onTopicAddButtonClick(self):
         if self.topicform.exec_():
@@ -224,25 +226,34 @@
             if self.checkTopic(topic):
                 if self.songmanager.save_object(topic):
                     self.resetTopics()
+                else:
+                    QtGui.QMessageBox.critical(self,
+                        translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                        translate('SongsPlugin.SongMaintenanceForm',
+                        'Could not add your topic.'))
             else:
                 QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
                     translate('SongsPlugin.SongMaintenanceForm',
-                    'Could not add your topic.'))
+                    'This topic already exists.'))
 
     def onBookAddButtonClick(self):
         if self.bookform.exec_():
-            book = Book.populate(
-                name=unicode(self.bookform.NameEdit.text()),
+            book = Book.populate(name=unicode(self.bookform.NameEdit.text()),
                 publisher=unicode(self.bookform.PublisherEdit.text()))
             if self.checkBook(book):
                 if self.songmanager.save_object(book):
                     self.resetBooks()
+                else:
+                    QtGui.QMessageBox.critical(self,
+                        translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                        translate('SongsPlugin.SongMaintenanceForm',
+                        'Could not add your book.'))
             else:
                 QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
                     translate('SongsPlugin.SongMaintenanceForm',
-                    'Could not add your book.'))
+                    'This book already exists.'))
 
     def onAuthorEditButtonClick(self):
         author_id = self._getCurrentItemId(self.AuthorsListWidget)
@@ -266,6 +277,24 @@
                 if self.checkAuthor(author, True):
                     if self.songmanager.save_object(author):
                         self.resetAuthors()
+                        Receiver.send_message(u'songs_load_list')
+                    else:
+                        QtGui.QMessageBox.critical(self,
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Error'),
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Could not save your changes.'))
+                elif QtGui.QMessageBox.critical(self,
+                    translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                    translate('SongsPlugin.SongMaintenanceForm', 'The author %s'
+                    ' already exists. Would you like to make songs with author '
+                    '%s use the existing author %s?' % (author.display_name,
+                    temp_display_name, author.display_name)),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | \
+                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    self.mergeAuthors(author)
+                    self.resetAuthors()
+                    Receiver.send_message(u'songs_load_list')
                 else:
                     # We restore the author's old first and last name as well as
                     # his display name.
@@ -275,7 +304,8 @@
                     QtGui.QMessageBox.critical(self,
                         translate('SongsPlugin.SongMaintenanceForm', 'Error'),
                         translate('SongsPlugin.SongMaintenanceForm',
-                        'Could not save your author.'))
+                        'Could not save your modified author, because he '
+                        'already exists.'))
 
     def onTopicEditButtonClick(self):
         topic_id = self._getCurrentItemId(self.TopicsListWidget)
@@ -289,13 +319,30 @@
                 if self.checkTopic(topic, True):
                     if self.songmanager.save_object(topic):
                         self.resetTopics()
+                    else:
+                        QtGui.QMessageBox.critical(self,
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Error'),
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Could not save your changes.'))
+                elif QtGui.QMessageBox.critical(self,
+                    translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                    translate('SongsPlugin.SongMaintenanceForm', 'The topic %s '
+                    'already exists. Would you like to make songs with topic %s'
+                    ' use the existing topic %s?' % (topic.name, temp_name,
+                    topic.name)),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | \
+                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    self.mergeTopics(topic)
+                    self.resetTopics()
                 else:
                     # We restore the topics's old name.
                     topic.name = temp_name
                     QtGui.QMessageBox.critical(self,
                         translate('SongsPlugin.SongMaintenanceForm', 'Error'),
                         translate('SongsPlugin.SongMaintenanceForm',
-                        'Could not save your topic.'))
+                        'Could not save your modified topic, because it '
+                        'already exists.'))
 
     def onBookEditButtonClick(self):
         book_id = self._getCurrentItemId(self.BooksListWidget)
@@ -313,18 +360,90 @@
                 if self.checkBook(book, True):
                     if self.songmanager.save_object(book):
                         self.resetBooks()
+                    else:
+                        QtGui.QMessageBox.critical(self,
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Error'),
+                            translate('SongsPlugin.SongMaintenanceForm',
+                            'Could not save your changes.'))
+                elif QtGui.QMessageBox.critical(self,
+                    translate('SongsPlugin.SongMaintenanceForm', 'Error'),
+                    translate('SongsPlugin.SongMaintenanceForm', 'The book %s '
+                    'already exists. Would you like to make songs with book %s '
+                    'use the existing book %s?' % (book.name, temp_name,
+                    book.name)),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | \
+                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    self.mergeBooks(book)
+                    self.resetBooks()
                 else:
-                    # We restore the book's old name and publisher.
+                    # We restore the book's old name and publisher, because
+                    # the user did not want to merge the two topics.
                     book.name = temp_name
                     book.publisher = temp_publisher
-                    QtGui.QMessageBox.critical(self,
-                        translate('SongsPlugin.SongMaintenanceForm', 'Error'),
-                        translate('SongsPlugin.SongMaintenanceForm',
-                        'Could not save your book.'))
+
+    def mergeAuthors(self, existing_author):
+        '''
+        Merges two authors into one author.
+        
+        ``existing_author``
+            The author which will be deleted afterwards.
+        '''
+        new_author = self.songmanager.get_object_filtered(Author,
+            and_(Author.first_name == existing_author.first_name,
+                Author.last_name == existing_author.last_name, 
+                Author.display_name == existing_author.display_name))
+        songs = self.songmanager.get_all_objects(Song)
+        for song in songs:
+            if existing_author in song.authors:
+                # We check if the song has already the new_author as author.
+                # If that is not the case we add it.
+                if new_author not in song.authors:
+                    song.authors.append(new_author)
+                song.authors.remove(existing_author)
+                self.songmanager.save_object(song)
+        self.songmanager.delete_object(Author, existing_author.id)
+
+    def mergeTopics(self, existing_topic):
+        '''
+        Merges two topics into one topic.
+        
+        ``existing_topic``
+            The topic which will be deleted afterwards.
+        '''
+        new_topic = self.songmanager.get_object_filtered(Topic,
+            Topic.name == existing_topic.name)
+        songs = self.songmanager.get_all_objects(Song)
+        for song in songs:
+            if existing_topic in song.topics:
+                # We check if the song has already the new_topic as topic.
+                # If that is not the case we add it.
+                if new_topic not in song.topics:
+                    song.topics.append(new_topic)
+                song.topics.remove(existing_topic)
+                self.songmanager.save_object(song)
+        self.songmanager.delete_object(Topic, existing_topic.id)
+
+    def mergeBooks(self, existing_book):
+        '''
+        Merges two books into one book.
+        
+        ``existing_book``
+            The book which will be deleted afterwards.
+        '''
+        new_book = self.songmanager.get_object_filtered(Book,
+            and_(Book.name == existing_book.name,
+                Book.publisher == existing_book.publisher))
+        songs = self.songmanager.get_all_objects_filtered(Song,
+            Song.song_book_id == existing_book.id)
+        for song in songs:
+            song.song_book_id = new_book.id
+            self.songmanager.save_object(song)
+        self.songmanager.delete_object(Book, existing_book.id)
 
     def onAuthorDeleteButtonClick(self):
         """
-        Delete the author if the author is not attached to any songs
+        Delete the author if the author is not attached to any songs.
         """
         self._deleteItem(Author, self.AuthorsListWidget, self.resetAuthors,
             translate('SongsPlugin.SongMaintenanceForm', 'Delete Author'),
@@ -337,7 +456,7 @@
 
     def onTopicDeleteButtonClick(self):
         """
-        Delete the Book is the Book is not attached to any songs
+        Delete the Book is the Book is not attached to any songs.
         """
         self._deleteItem(Topic, self.TopicsListWidget, self.resetTopics,
             translate('SongsPlugin.SongMaintenanceForm', 'Delete Topic'),
@@ -350,7 +469,7 @@
 
     def onBookDeleteButtonClick(self):
         """
-        Delete the Book is the Book is not attached to any songs
+        Delete the Book is the Book is not attached to any songs.
         """
         self._deleteItem(Book, self.BooksListWidget, self.resetBooks,
             translate('SongsPlugin.SongMaintenanceForm', 'Delete Book'),


Follow ups