forked from openlp/openlp
Set theme and service file content to UTF-8
Replaced replaced all non-ASCII chars in the sources (exept of comments) Fixed theme background images bug
This commit is contained in:
parent
8733ceac70
commit
940c6fd44f
@ -44,8 +44,8 @@ class AboutForm(QtGui.QDialog, Ui_AboutDialog):
|
|||||||
about_text = about_text.replace(u'<version>',
|
about_text = about_text.replace(u'<version>',
|
||||||
self.applicationVersion[u'version'])
|
self.applicationVersion[u'version'])
|
||||||
if self.applicationVersion[u'build']:
|
if self.applicationVersion[u'build']:
|
||||||
build_text = u' %s %s' % (translate(u'AboutForm', u'build'),
|
build_text = unicode(translate(u'AboutForm', u' build %s')) % \
|
||||||
self.applicationVersion[u'build'])
|
self.applicationVersion[u'build']
|
||||||
else:
|
else:
|
||||||
build_text = u''
|
build_text = u''
|
||||||
about_text = about_text.replace(u'<revision>', build_text)
|
about_text = about_text.replace(u'<revision>', build_text)
|
||||||
|
@ -155,7 +155,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
self.theme.background_direction)
|
self.theme.background_direction)
|
||||||
else:
|
else:
|
||||||
filename = \
|
filename = \
|
||||||
os.path.split(unicode(self.theme.background_filename))[0]
|
os.path.split(unicode(self.theme.background_filename))[1]
|
||||||
new_theme.add_background_image(filename)
|
new_theme.add_background_image(filename)
|
||||||
save_to = os.path.join(self.path, theme_name, filename)
|
save_to = os.path.join(self.path, theme_name, filename)
|
||||||
save_from = self.theme.background_filename
|
save_from = self.theme.background_filename
|
||||||
|
@ -452,8 +452,8 @@ class Ui_MainWindow(object):
|
|||||||
translate(u'MainWindow', u'Choose System language, if available'))
|
translate(u'MainWindow', u'Choose System language, if available'))
|
||||||
for item in self.LanguageGroup.actions():
|
for item in self.LanguageGroup.actions():
|
||||||
item.setText(item.objectName())
|
item.setText(item.objectName())
|
||||||
item.setStatusTip(translate(u'MainWindow',
|
item.setStatusTip(unicode(translate(u'MainWindow',
|
||||||
u'Set the interface language to %1').arg(item.objectName()))
|
u'Set the interface language to %s')) % item.objectName())
|
||||||
self.ToolsAddToolItem.setText(translate(u'MainWindow', u'Add &Tool...'))
|
self.ToolsAddToolItem.setText(translate(u'MainWindow', u'Add &Tool...'))
|
||||||
self.ToolsAddToolItem.setStatusTip(
|
self.ToolsAddToolItem.setStatusTip(
|
||||||
translate(u'MainWindow',
|
translate(u'MainWindow',
|
||||||
|
@ -597,11 +597,11 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
path_from = unicode(os.path.join(
|
path_from = unicode(os.path.join(
|
||||||
frame[u'path'],
|
frame[u'path'],
|
||||||
frame[u'title']))
|
frame[u'title']))
|
||||||
zip.write(path_from)
|
zip.write(path_from.encode(u'utf-8'))
|
||||||
file = open(servicefile, u'wb')
|
file = open(servicefile, u'wb')
|
||||||
cPickle.dump(service, file)
|
cPickle.dump(service, file)
|
||||||
file.close()
|
file.close()
|
||||||
zip.write(servicefile)
|
zip.write(servicefile.encode(u'utf-8'))
|
||||||
except IOError:
|
except IOError:
|
||||||
log.exception(u'Failed to save service to disk')
|
log.exception(u'Failed to save service to disk')
|
||||||
finally:
|
finally:
|
||||||
@ -667,7 +667,18 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
try:
|
try:
|
||||||
zip = zipfile.ZipFile(unicode(filename))
|
zip = zipfile.ZipFile(unicode(filename))
|
||||||
for file in zip.namelist():
|
for file in zip.namelist():
|
||||||
osfile = unicode(QtCore.QDir.toNativeSeparators(file))
|
try:
|
||||||
|
ucsfile = file.decode(u'utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
QtGui.QMessageBox.critical(
|
||||||
|
self, translate(u'ServiceManager', u'Error'),
|
||||||
|
translate(u'ServiceManager',
|
||||||
|
u'File is not a valid service.\n'
|
||||||
|
u'The content encoding is not UTF-8.'))
|
||||||
|
log.exception(u'Filename "%s" is no valid UTF-8' % \
|
||||||
|
file.decode(u'utf-8', u'replace'))
|
||||||
|
continue
|
||||||
|
osfile = unicode(QtCore.QDir.toNativeSeparators(ucsfile))
|
||||||
names = osfile.split(os.path.sep)
|
names = osfile.split(os.path.sep)
|
||||||
file_path = os.path.join(self.servicePath,
|
file_path = os.path.join(self.servicePath,
|
||||||
names[len(names) - 1])
|
names[len(names) - 1])
|
||||||
@ -677,21 +688,28 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
file_to.close()
|
file_to.close()
|
||||||
if file_path.endswith(u'osd'):
|
if file_path.endswith(u'osd'):
|
||||||
p_file = file_path
|
p_file = file_path
|
||||||
file_to = open(p_file, u'r')
|
if 'p_file' in locals():
|
||||||
items = cPickle.load(file_to)
|
file_to = open(p_file, u'r')
|
||||||
file_to.close()
|
items = cPickle.load(file_to)
|
||||||
self.onNewService()
|
file_to.close()
|
||||||
for item in items:
|
self.onNewService()
|
||||||
serviceitem = ServiceItem()
|
for item in items:
|
||||||
serviceitem.RenderManager = self.parent.RenderManager
|
serviceitem = ServiceItem()
|
||||||
serviceitem.set_from_service(item, self.servicePath)
|
serviceitem.RenderManager = self.parent.RenderManager
|
||||||
self.validateItem(serviceitem)
|
serviceitem.set_from_service(item, self.servicePath)
|
||||||
self.addServiceItem(serviceitem)
|
self.validateItem(serviceitem)
|
||||||
try:
|
self.addServiceItem(serviceitem)
|
||||||
if os.path.isfile(p_file):
|
try:
|
||||||
os.remove(p_file)
|
if os.path.isfile(p_file):
|
||||||
except (IOError, OSError):
|
os.remove(p_file)
|
||||||
log.exception(u'Failed to remove osd file')
|
except (IOError, OSError):
|
||||||
|
log.exception(u'Failed to remove osd file')
|
||||||
|
else:
|
||||||
|
QtGui.QMessageBox.critical(
|
||||||
|
self, translate(u'ServiceManager', u'Error'),
|
||||||
|
translate(u'ServiceManager',
|
||||||
|
u'File is not a valid service.'))
|
||||||
|
log.exception(u'File contains no service data')
|
||||||
except IOError:
|
except IOError:
|
||||||
log.exception(u'Problem loading a service file')
|
log.exception(u'Problem loading a service file')
|
||||||
finally:
|
finally:
|
||||||
|
@ -562,8 +562,7 @@ class SlideController(QtGui.QWidget):
|
|||||||
if self.isLive and frame[u'verseTag'] is not None:
|
if self.isLive and frame[u'verseTag'] is not None:
|
||||||
if tag1 not in self.slideList:
|
if tag1 not in self.slideList:
|
||||||
self.slideList[tag1] = framenumber
|
self.slideList[tag1] = framenumber
|
||||||
self.SongMenu.menu().addAction(
|
self.SongMenu.menu().addAction(tag1,
|
||||||
translate(u'SlideController', u'%s'%tag1),
|
|
||||||
self.onSongBarHandler)
|
self.onSongBarHandler)
|
||||||
item.setText(frame[u'text'])
|
item.setText(frame[u'text'])
|
||||||
else:
|
else:
|
||||||
|
@ -131,8 +131,8 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
self.ThemeListWidget.item(count).setText(newName)
|
self.ThemeListWidget.item(count).setText(newName)
|
||||||
#Set the new name
|
#Set the new name
|
||||||
if themeName == newName:
|
if themeName == newName:
|
||||||
name = u'%s (%s)' % (newName,
|
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
||||||
translate(u'ThemeManager', u'default'))
|
newName
|
||||||
self.ThemeListWidget.item(count).setText(name)
|
self.ThemeListWidget.item(count).setText(name)
|
||||||
|
|
||||||
def changeGlobalFromScreen(self, index = -1):
|
def changeGlobalFromScreen(self, index = -1):
|
||||||
@ -149,8 +149,8 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
if count == selected_row:
|
if count == selected_row:
|
||||||
self.global_theme = unicode(
|
self.global_theme = unicode(
|
||||||
self.ThemeListWidget.item(count).text())
|
self.ThemeListWidget.item(count).text())
|
||||||
name = u'%s (%s)' % (self.global_theme,
|
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
||||||
translate(u'ThemeManager', u'default'))
|
self.global_theme
|
||||||
self.ThemeListWidget.item(count).setText(name)
|
self.ThemeListWidget.item(count).setText(name)
|
||||||
QtCore.QSettings().setValue(
|
QtCore.QSettings().setValue(
|
||||||
self.settingsSection + u'/global theme',
|
self.settingsSection + u'/global theme',
|
||||||
@ -246,8 +246,8 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
for files in os.walk(source)[2]:
|
for files in os.walk(source)[2]:
|
||||||
for name in files:
|
for name in files:
|
||||||
zip.write(
|
zip.write(
|
||||||
os.path.join(source, name),
|
os.path.join(source, name).encode(u'utf-8'),
|
||||||
os.path.join(theme, name))
|
os.path.join(theme, name).encode(u'utf-8'))
|
||||||
except (IOError, OSError):
|
except (IOError, OSError):
|
||||||
log.exception(u'Export Theme Failed')
|
log.exception(u'Export Theme Failed')
|
||||||
finally:
|
finally:
|
||||||
@ -284,8 +284,8 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
if os.path.exists(theme):
|
if os.path.exists(theme):
|
||||||
textName = os.path.splitext(name)[0]
|
textName = os.path.splitext(name)[0]
|
||||||
if textName == self.global_theme:
|
if textName == self.global_theme:
|
||||||
name = u'%s (%s)' % (textName,
|
name = unicode(translate(u'ThemeManager',
|
||||||
translate(u'ThemeManager', u'default'))
|
u'%s (default)')) % textName
|
||||||
else:
|
else:
|
||||||
name = textName
|
name = textName
|
||||||
thumb = os.path.join(self.thumbPath, u'%s.png' % textName)
|
thumb = os.path.join(self.thumbPath, u'%s.png' % textName)
|
||||||
@ -338,7 +338,17 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
filexml = None
|
filexml = None
|
||||||
themename = None
|
themename = None
|
||||||
for file in zip.namelist():
|
for file in zip.namelist():
|
||||||
osfile = unicode(QtCore.QDir.toNativeSeparators(file))
|
try:
|
||||||
|
ucsfile = file.decode(u'utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
QtGui.QMessageBox.critical(
|
||||||
|
self, translate(u'ThemeManager', u'Error'),
|
||||||
|
translate(u'ThemeManager', u'File is not a valid '
|
||||||
|
u'theme.\nThe content encoding is not UTF-8.'))
|
||||||
|
log.exception(u'Filename "%s" is no valid UTF-8' % \
|
||||||
|
file.decode(u'utf-8', u'replace'))
|
||||||
|
continue
|
||||||
|
osfile = unicode(QtCore.QDir.toNativeSeparators(ucsfile))
|
||||||
theme_dir = None
|
theme_dir = None
|
||||||
if osfile.endswith(os.path.sep):
|
if osfile.endswith(os.path.sep):
|
||||||
theme_dir = os.path.join(dir, osfile)
|
theme_dir = os.path.join(dir, osfile)
|
||||||
@ -356,7 +366,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
if not os.path.exists(theme_dir):
|
if not os.path.exists(theme_dir):
|
||||||
os.mkdir(os.path.join(dir, names[0]))
|
os.mkdir(os.path.join(dir, names[0]))
|
||||||
xml_data = zip.read(file)
|
xml_data = zip.read(file)
|
||||||
if os.path.splitext(file)[1].lower() in [u'.xml']:
|
if os.path.splitext(ucsfile)[1].lower() in [u'.xml']:
|
||||||
if self.checkVersion1(xml_data):
|
if self.checkVersion1(xml_data):
|
||||||
# upgrade theme xml
|
# upgrade theme xml
|
||||||
filexml = self.migrateVersion122(filename,
|
filexml = self.migrateVersion122(filename,
|
||||||
@ -368,7 +378,13 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
else:
|
else:
|
||||||
outfile = open(fullpath, u'wb')
|
outfile = open(fullpath, u'wb')
|
||||||
outfile.write(zip.read(file))
|
outfile.write(zip.read(file))
|
||||||
self.generateAndSaveImage(dir, themename, filexml)
|
if filexml:
|
||||||
|
self.generateAndSaveImage(dir, themename, filexml)
|
||||||
|
else:
|
||||||
|
QtGui.QMessageBox.critical(
|
||||||
|
self, translate(u'ThemeManager', u'Error'),
|
||||||
|
translate(u'ThemeManager', u'File is not a valid theme.'))
|
||||||
|
log.exception(u'Theme file dosen\'t contain XML data %s' % filename)
|
||||||
except IOError:
|
except IOError:
|
||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(
|
||||||
self, translate(u'ThemeManager', u'Error'),
|
self, translate(u'ThemeManager', u'Error'),
|
||||||
|
@ -504,7 +504,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
def onCopyrightInsertButtonTriggered(self):
|
def onCopyrightInsertButtonTriggered(self):
|
||||||
text = self.CopyrightEditItem.text()
|
text = self.CopyrightEditItem.text()
|
||||||
pos = self.CopyrightEditItem.cursorPosition()
|
pos = self.CopyrightEditItem.cursorPosition()
|
||||||
text = text[:pos] + u'©' + text[pos:]
|
text = text[:pos] + u'\xa9' + text[pos:]
|
||||||
self.CopyrightEditItem.setText(text)
|
self.CopyrightEditItem.setText(text)
|
||||||
self.CopyrightEditItem.setFocus()
|
self.CopyrightEditItem.setFocus()
|
||||||
self.CopyrightEditItem.setCursorPosition(pos + 1)
|
self.CopyrightEditItem.setCursorPosition(pos + 1)
|
||||||
|
@ -66,7 +66,7 @@ class SongImport(object):
|
|||||||
self.copyright_string = unicode(QtGui.QApplication.translate( \
|
self.copyright_string = unicode(QtGui.QApplication.translate( \
|
||||||
u'SongsPlugin.SongImport', u'copyright'))
|
u'SongsPlugin.SongImport', u'copyright'))
|
||||||
self.copyright_symbol = unicode(QtGui.QApplication.translate( \
|
self.copyright_symbol = unicode(QtGui.QApplication.translate( \
|
||||||
u'SongsPlugin.SongImport', u'©'))
|
u'SongsPlugin.SongImport', u'\xa9'))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def process_songs_text(manager, text):
|
def process_songs_text(manager, text):
|
||||||
|
Loading…
Reference in New Issue
Block a user