openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #02441
[Merge] lp:~googol-hush/openlp/trivial into lp:openlp
googol has proposed merging lp:~googol-hush/openlp/trivial into lp:openlp.
Requested reviews:
Tim Bentley (trb143)
Added redundancy control for Books, Authors and Topics. Now, you cannot add a Book, Author or Topic which is already in the list. Furthermore you cannot submit an edited Book, Author or Topic which is already in the list (e. g. editing the Topic "Penetcost" to "Pentecost" will not work when a topic "Pentecost" already exists).
--
https://code.launchpad.net/~googol-hush/openlp/trivial/+merge/29699
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py 2010-06-28 13:38:29 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py 2010-07-12 13:26:45 +0000
@@ -24,6 +24,7 @@
###############################################################################
from PyQt4 import QtGui, QtCore
+from sqlalchemy.sql import and_
from openlp.core.lib import translate
from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm
@@ -97,6 +98,9 @@
QtGui.QMessageBox.critical(self, dlg_title, sel_text)
def resetAuthors(self):
+ """
+ Reloads the Authors list.
+ """
self.AuthorsListWidget.clear()
authors = self.songmanager.get_all_objects(Author, Author.display_name)
for author in authors:
@@ -109,6 +113,9 @@
self.AuthorsListWidget.addItem(author_name)
def resetTopics(self):
+ """
+ Reloads the Topics list.
+ """
self.TopicsListWidget.clear()
topics = self.songmanager.get_all_objects(Topic, Topic.name)
for topic in topics:
@@ -117,13 +124,88 @@
self.TopicsListWidget.addItem(topic_name)
def resetBooks(self):
+ """
+ Reloads the Books list.
+ """
self.BooksListWidget.clear()
books = self.songmanager.get_all_objects(Book, Book.name)
for book in books:
- book_name = QtGui.QListWidgetItem(book.name)
+ book_name = QtGui.QListWidgetItem(u'%s (%s)' % (book.name,
+ book.publisher))
book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id))
self.BooksListWidget.addItem(book_name)
+ def checkAuthor(self, new_author, edit=False):
+ """
+ Returns False when the given Author is already in the list elsewise
+ 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
+ )
+ )
+ 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
+ # cause an error message later on).
+ if edit:
+ if authors[0].id == new_author.id:
+ return True
+ else:
+ return False
+ else:
+ return False
+ else:
+ return True
+
+ def checkTopic(self, new_topic, edit=False):
+ """
+ Returns False when the given Topic is already in the list elsewise True.
+ """
+ topics = self.songmanager.get_all_objects_filtered(Topic,
+ Topic.name == new_topic.name
+ )
+ if len(topics) > 0:
+ # If we edit an existing Topic, we need to make sure that we do
+ # not return False when nothing has changed (because this would
+ # cause an error message later on).
+ if edit:
+ if topics[0].id == new_topic.id:
+ return True
+ else:
+ return False
+ else:
+ return False
+ else:
+ return True
+
+ def checkBook(self, new_book, edit=False):
+ """
+ Returns False when the given Book is already in the list elsewise True.
+ """
+ books = self.songmanager.get_all_objects_filtered(Book,
+ 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
+ # not return False when nothing has changed (because this would
+ # cause an error message later on).
+ if edit:
+ if books[0].id == new_book.id:
+ return True
+ else:
+ return False
+ else:
+ return False
+ else:
+ return True
+
def onAuthorAddButtonClick(self):
self.authorform.setAutoDisplayName(True)
if self.authorform.exec_():
@@ -131,86 +213,93 @@
first_name=unicode(self.authorform.FirstNameEdit.text()),
last_name=unicode(self.authorform.LastNameEdit.text()),
display_name=unicode(self.authorform.DisplayEdit.text()))
- if self.songmanager.save_object(author):
- self.resetAuthors()
+ if self.checkAuthor(author):
+ if self.songmanager.save_object(author):
+ self.resetAuthors()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t add your author.'))
+ 'Could not add your author.'))
def onTopicAddButtonClick(self):
if self.topicform.exec_():
topic = Topic.populate(name=unicode(self.topicform.NameEdit.text()))
- if self.songmanager.save_object(topic):
- self.resetTopics()
+ if self.checkTopic(topic):
+ if self.songmanager.save_object(topic):
+ self.resetTopics()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t add your topic.'))
+ 'Could not add your topic.'))
def onBookAddButtonClick(self):
if self.bookform.exec_():
book = Book.populate(
name=unicode(self.bookform.NameEdit.text()),
publisher=unicode(self.bookform.PublisherEdit.text()))
- if self.songmanager.save_object(book):
- self.resetBooks()
+ if self.checkBook(book):
+ if self.songmanager.save_object(book):
+ self.resetBooks()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t add your book.'))
+ 'Could not add your book.'))
def onAuthorEditButtonClick(self):
author_id = self._getCurrentItemId(self.AuthorsListWidget)
if author_id != -1:
author = self.songmanager.get_object(Author, author_id)
- # Just make sure none of the fields is None
- if author.first_name is None:
- author.first_name = u''
- if author.last_name is None:
- author.last_name = u''
- if author.display_name is None:
- author.display_name = u''
self.authorform.setAutoDisplayName(False)
self.authorform.FirstNameEdit.setText(author.first_name)
self.authorform.LastNameEdit.setText(author.last_name)
self.authorform.DisplayEdit.setText(author.display_name)
+ # Save the author's first and last name as well as the display name
+ # for the case that they have to be restored.
+ temp_first_name = author.first_name
+ temp_last_name = author.last_name
+ temp_display_name = author.display_name
if self.authorform.exec_(False):
author.first_name = unicode(
self.authorform.FirstNameEdit.text())
author.last_name = unicode(self.authorform.LastNameEdit.text())
author.display_name = unicode(
self.authorform.DisplayEdit.text())
- if self.songmanager.save_object(author):
- self.resetAuthors()
+ if self.checkAuthor(author, True):
+ if self.songmanager.save_object(author):
+ self.resetAuthors()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ # We restore the author's old first and last name as well as
+ # his display name.
+ author.first_name = temp_first_name
+ author.last_name = temp_last_name
+ author.display_name = temp_display_name
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t save your author.'))
+ 'Could not save your author.'))
def onTopicEditButtonClick(self):
topic_id = self._getCurrentItemId(self.TopicsListWidget)
if topic_id != -1:
topic = self.songmanager.get_object(Topic, topic_id)
self.topicform.NameEdit.setText(topic.name)
+ # Save the topic's name for the case that he has to be restored.
+ temp_name = topic.name
if self.topicform.exec_(False):
topic.name = unicode(self.topicform.NameEdit.text())
- if self.songmanager.save_object(topic):
- self.resetTopics()
+ if self.checkTopic(topic, True):
+ if self.songmanager.save_object(topic):
+ self.resetTopics()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ # We restore the topics's old name.
+ topic.name = temp_name
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t save your topic.'))
+ 'Could not save your topic.'))
def onBookEditButtonClick(self):
book_id = self._getCurrentItemId(self.BooksListWidget)
@@ -218,17 +307,24 @@
book = self.songmanager.get_object(Book, book_id)
self.bookform.NameEdit.setText(book.name)
self.bookform.PublisherEdit.setText(book.publisher)
+ # Save the book's name and publisher for the case that they have to
+ # be restored.
+ temp_name = book.name
+ temp_publisher = book.publisher
if self.bookform.exec_(False):
book.name = unicode(self.bookform.NameEdit.text())
book.publisher = unicode(self.bookform.PublisherEdit.text())
- if self.songmanager.save_object(book):
- self.resetBooks()
+ if self.checkBook(book, True):
+ if self.songmanager.save_object(book):
+ self.resetBooks()
else:
- QtGui.QMessageBox.critical(
- self, translate('SongsPlugin.SongMaintenanceForm',
- 'Error'),
+ # We restore the book's old name and publisher.
+ book.name = temp_name
+ book.publisher = temp_publisher
+ QtGui.QMessageBox.critical(self,
+ translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm',
- 'Couldn\'t save your book.'))
+ 'Could not save your book.'))
def onAuthorDeleteButtonClick(self):
"""
@@ -236,13 +332,12 @@
"""
self._deleteItem(Author, self.AuthorsListWidget, self.resetAuthors,
translate('SongsPlugin.SongMaintenanceForm', 'Delete Author'),
- translate('SongsPlugin.SongMaintenanceForm',
+ translate('SongsPlugin.SongMaintenanceForm',
'Are you sure you want to delete the selected author?'),
translate('SongsPlugin.SongMaintenanceForm',
- 'This author can\'t be deleted, they are currently '
+ 'This author cannot be deleted, they are currently '
'assigned to at least one song.'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'No author selected!'))
+ translate('SongsPlugin.SongMaintenanceForm', 'No author selected!'))
def onTopicDeleteButtonClick(self):
"""
@@ -250,13 +345,12 @@
"""
self._deleteItem(Topic, self.TopicsListWidget, self.resetTopics,
translate('SongsPlugin.SongMaintenanceForm', 'Delete Topic'),
- translate('SongsPlugin.SongMaintenanceForm',
+ translate('SongsPlugin.SongMaintenanceForm',
'Are you sure you want to delete the selected topic?'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'This topic can\'t be deleted, it is currently '
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'This topic cannot be deleted, it is currently '
'assigned to at least one song.'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'No topic selected!'))
+ translate('SongsPlugin.SongMaintenanceForm', 'No topic selected!'))
def onBookDeleteButtonClick(self):
"""
@@ -266,7 +360,7 @@
translate('SongsPlugin.SongMaintenanceForm', 'Delete Book'),
translate('SongsPlugin.SongMaintenanceForm',
'Are you sure you want to delete the selected book?'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'This book can\'t be deleted, it is currently '
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'This book cannot be deleted, it is currently '
'assigned to at least one song.'),
- translate('SongsPlugin.SongMaintenanceForm', u'No book selected!'))
+ translate('SongsPlugin.SongMaintenanceForm', 'No book selected!'))
Follow ups