From a45dfd2d1b436c7bcaf1a435628badf745d8e37c Mon Sep 17 00:00:00 2001 From: Tomas Groth Date: Fri, 4 Oct 2013 21:06:31 +0200 Subject: [PATCH] Made branch work with python3. --- openlp/plugins/presentations/lib/mediaitem.py | 8 +- .../presentations/lib/pdfcontroller.py | 151 +++++++++--------- .../presentations/lib/presentationtab.py | 39 ++--- .../presentations/presentationplugin.py | 2 +- 4 files changed, 100 insertions(+), 100 deletions(-) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 1f7f863bf..f1d4106b7 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -250,7 +250,7 @@ class PresentationMediaItem(MediaManagerItem): if not self.display_type_combo_box.currentText(): return False - if context == ServiceItemContext.Live and (file_type == u'pdf' or file_type == u'xps'): + if context == ServiceItemContext.Live and (file_type == 'pdf' or file_type == 'xps'): service_item.add_capability(ItemCapabilities.CanMaintain) service_item.add_capability(ItemCapabilities.CanPreview) service_item.add_capability(ItemCapabilities.CanLoop) @@ -270,15 +270,15 @@ class PresentationMediaItem(MediaManagerItem): controller = self.controllers[processor] service_item.processor = None doc = controller.add_document(filename) - if doc.get_thumbnail_path(1, True) is None or not os.path.isfile(os.path.join(doc.get_temp_folder(), u'mainslide001.png')): + if doc.get_thumbnail_path(1, True) is None or not os.path.isfile(os.path.join(doc.get_temp_folder(), 'mainslide001.png')): doc.load_presentation() i = 1 - imagefile = u'mainslide%03d.png' % i + imagefile = 'mainslide%03d.png' % i img = os.path.join(doc.get_temp_folder(), imagefile) while os.path.isfile(img): service_item.add_from_image(img, name) i += 1 - imagefile = u'mainslide%03d.png' % i + imagefile = 'mainslide%03d.png' % i img = os.path.join(doc.get_temp_folder(), imagefile) doc.close_presentation() return True diff --git a/openlp/plugins/presentations/lib/pdfcontroller.py b/openlp/plugins/presentations/lib/pdfcontroller.py index d2ba47bef..d907fa84b 100644 --- a/openlp/plugins/presentations/lib/pdfcontroller.py +++ b/openlp/plugins/presentations/lib/pdfcontroller.py @@ -32,110 +32,115 @@ import logging from tempfile import NamedTemporaryFile import re from subprocess import check_output, CalledProcessError, STDOUT -from PyQt4 import QtCore, QtGui +#from PyQt4 import QtCore, QtGui from openlp.core.utils import AppLocation from openlp.core.lib import ScreenList, Settings -from presentationcontroller import PresentationController, PresentationDocument +from .presentationcontroller import PresentationController, PresentationDocument log = logging.getLogger(__name__) -def check_binary(program_path): - """ - Function that checks whether a binary is either ghostscript or mudraw or neither. - """ - program_type = None - runlog = u'' - try: - runlog = check_output([program_path, u'--help'], stderr=STDOUT) - except CalledProcessError as e: - runlog = e.output - except Exception: - runlog = u'' - - # Analyse the output to see it the program is mudraw, ghostscript or neither - for line in runlog.splitlines(): - found_mudraw = re.search(u'usage: mudraw.*', line) - if found_mudraw: - program_type = u'mudraw' - break - found_gs = re.search(u'GPL Ghostscript.*', line) - if found_gs: - program_type = u'gs' - break - return program_type class PdfController(PresentationController): """ Class to control PDF presentations """ - log.info(u'PdfController loaded') + log.info('PdfController loaded') def __init__(self, plugin): """ Initialise the class """ - log.debug(u'Initialising') + log.debug('Initialising') self.process = None - PresentationController.__init__(self, plugin, u'Pdf', PdfDocument) - self.supports = [u'pdf'] - self.mudrawbin = u'' - self.gsbin = u'' - if self.check_installed() and self.mudrawbin != u'': - self.also_supports = [u'xps'] + PresentationController.__init__(self, plugin, 'Pdf', PdfDocument) + self.supports = ['pdf'] + self.mudrawbin = '' + self.gsbin = '' + if self.check_installed() and self.mudrawbin != '': + self.also_supports = ['xps'] + + def check_binary(program_path): + """ + Function that checks whether a binary is either ghostscript or mudraw or neither. + """ + + program_type = None + runlog = '' + try: + runlog = check_output([program_path, '--help'], stderr=STDOUT) + except CalledProcessError as e: + runlog = e.output + except Exception: + runlog = '' + + # Analyse the output to see it the program is mudraw, ghostscript or neither + for line in runlog.splitlines(): + found_mudraw = re.search('usage: mudraw.*', line) + if found_mudraw: + program_type = 'mudraw' + break + found_gs = re.search('GPL Ghostscript.*', line) + if found_gs: + program_type = 'gs' + break + log.info('in check_binary, found: ' + program_type) + return program_type + + def check_available(self): """ PdfController is able to run on this machine. """ - log.debug(u'check_available Pdf') + log.debug('check_available Pdf') return self.check_installed() def check_installed(self): """ Check the viewer is installed. """ - log.debug(u'check_installed Pdf') + log.debug('check_installed Pdf') # Use the user defined program if given - if (Settings().value(u'presentations/enable_given_pdf_program')): - given_pdf_program = Settings().value(u'presentations/given_pdf_program') - type = check_binary(given_pdf_program) - if type == u'gs': + if (Settings().value('presentations/enable_given_pdf_program')): + given_pdf_program = Settings().value('presentations/given_pdf_program') + type = self.check_binary(given_pdf_program) + if type == 'gs': self.gsbin = given_pdf_program return True - elif type == u'mudraw': + elif type == 'mudraw': self.mudrawbin = given_pdf_program return True # Fallback to autodetection application_path = AppLocation.get_directory(AppLocation.AppDir) - if os.name != u'nt': + if os.name != 'nt': # First try to find mupdf try: - self.mudrawbin = check_output([u'which', u'mudraw']).rstrip('\n') + self.mudrawbin = check_output(['which', 'mudraw']).decode(encoding='UTF-8').rstrip('\n') except CalledProcessError: - self.mudrawbin = u'' + self.mudrawbin = '' # if mupdf isn't installed, fallback to ghostscript - if self.mudrawbin == u'': + if self.mudrawbin == '': try: - self.gsbin = check_output([u'which', u'gs']).rstrip('\n') + self.gsbin = check_output(['which', 'gs']).rstrip('\n') except CalledProcessError: - self.gsbin = u'' + self.gsbin = '' # Last option: check if mudraw is placed in OpenLP base folder - if self.mudrawbin == u'' and self.gsbin == u'': + if self.mudrawbin == '' and self.gsbin == '': application_path = AppLocation.get_directory(AppLocation.AppDir) - if os.path.isfile(application_path + u'/../mudraw'): - self.mudrawbin = application_path + u'/../mudraw' + if os.path.isfile(application_path + '/../mudraw'): + self.mudrawbin = application_path + '/../mudraw' else: # for windows we only accept mudraw.exe in the base folder application_path = AppLocation.get_directory(AppLocation.AppDir) - if os.path.isfile(application_path + u'/../mudraw.exe'): - self.mudrawbin = application_path + u'/../mudraw.exe' + if os.path.isfile(application_path + '/../mudraw.exe'): + self.mudrawbin = application_path + '/../mudraw.exe' - if self.mudrawbin == u'' and self.gsbin == u'': + if self.mudrawbin == '' and self.gsbin == '': return False else: return True @@ -144,7 +149,7 @@ class PdfController(PresentationController): """ Called at system exit to clean up any running presentations """ - log.debug(u'Kill pdfviewer') + log.debug('Kill pdfviewer') while self.docs: self.docs[0].close_presentation() @@ -157,7 +162,7 @@ class PdfDocument(PresentationDocument): """ Constructor, store information about the file and initialise. """ - log.debug(u'Init Presentation Pdf') + log.debug('Init Presentation Pdf') PresentationDocument.__init__(self, controller, presentation) self.presentation = None self.blanked = False @@ -172,7 +177,7 @@ class PdfDocument(PresentationDocument): to get the ratio bewteen the screen size and the PDF to scale """ # Use a postscript script to get size of the pdf. It is assumed that all pages have same size - postscript = u'%!PS \n\ + postscript = '%!PS \n\ () = \n\ File dup (r) file runpdfbegin \n\ 1 pdfgetpage dup \n\ @@ -191,9 +196,9 @@ quit \n\ # Run the script on the pdf to get the size runlog = [] try: - runlog = check_output([self.controller.gsbin, u'-dNOPAUSE', u'-dNODISPLAY', u'-dBATCH', u'-sFile=' + self.filepath, tmpfile.name]) + runlog = check_output([self.controller.gsbin, '-dNOPAUSE', '-dNODISPLAY', '-dBATCH', '-sFile=' + self.filepath, tmpfile.name]) except CalledProcessError as e: - log.debug(u' '.join(e.cmd)) + log.debug(' '.join(e.cmd)) log.debug(e.output) os.unlink(tmpfile.name) @@ -202,8 +207,8 @@ quit \n\ height = 0 for line in runlog.splitlines(): try: - width = re.search(u'.*Size: x: (\d+\.?\d*), y: \d+.*', line).group(1) - height = re.search(u'.*Size: x: \d+\.?\d*, y: (\d+\.?\d*).*', line).group(1) + width = re.search('.*Size: x: (\d+\.?\d*), y: \d+.*', line).group(1) + height = re.search('.*Size: x: \d+\.?\d*, y: (\d+\.?\d*).*', line).group(1) break; except AttributeError: pass @@ -225,10 +230,10 @@ quit \n\ """ Called when a presentation is added to the SlideController. It generates images from the PDF. """ - log.debug(u'load_presentation pdf') + log.debug('load_presentation pdf') # Check if the images has already been created, and if yes load them - if os.path.isfile(os.path.join(self.get_temp_folder(), u'mainslide001.png')): + if os.path.isfile(os.path.join(self.get_temp_folder(), 'mainslide001.png')): created_files = sorted(os.listdir(self.get_temp_folder())) for fn in created_files: if os.path.isfile(os.path.join(self.get_temp_folder(), fn)): @@ -236,17 +241,17 @@ quit \n\ self.num_pages = len(self.image_files) return True - size = ScreenList().current[u'size'] + size = ScreenList().current['size'] # Generate images from PDF that will fit the frame. - runlog = u'' + runlog = '' try: if not os.path.isdir(self.get_temp_folder()): os.makedirs(self.get_temp_folder()) - if self.controller.mudrawbin != u'': - runlog = check_output([self.controller.mudrawbin, u'-w', str(size.right()), u'-h', str(size.bottom()), u'-o', os.path.join(self.get_temp_folder(), u'mainslide%03d.png'), self.filepath]) - elif self.controller.gsbin != u'': + if self.controller.mudrawbin != '': + runlog = check_output([self.controller.mudrawbin, '-w', str(size.right()), '-h', str(size.bottom()), '-o', os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.filepath]) + elif self.controller.gsbin != '': resolution = self.gs_get_resolution(size) - runlog = check_output([self.controller.gsbin, u'-dSAFER', u'-dNOPAUSE', u'-dBATCH', u'-sDEVICE=png16m', u'-r' + str(resolution), u'-dTextAlphaBits=4', u'-dGraphicsAlphaBits=4', u'-sOutputFile=' + os.path.join(self.get_temp_folder(), u'mainslide%03d.png'), self.filepath]) + runlog = check_output([self.controller.gsbin, '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=png16m', '-r' + str(resolution), '-dTextAlphaBits=4', '-dGraphicsAlphaBits=4', '-sOutputFile=' + os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.filepath]) created_files = sorted(os.listdir(self.get_temp_folder())) for fn in created_files: if os.path.isfile(os.path.join(self.get_temp_folder(), fn)): @@ -265,10 +270,10 @@ quit \n\ """ Generates thumbnails """ - log.debug(u'create_thumbnails pdf') + log.debug('create_thumbnails pdf') if self.check_thumbnails(): return - log.debug(u'create_thumbnails proceeding') + log.debug('create_thumbnails proceeding') # use builtin function to create thumbnails from generated images index = 1 @@ -281,14 +286,14 @@ quit \n\ Close presentation and clean up objects. Triggered by new object being added to SlideController or OpenLP being shut down. """ - log.debug(u'close_presentation pdf') + log.debug('close_presentation pdf') self.controller.remove_doc(self) def is_loaded(self): """ Returns true if a presentation is loaded. """ - log.debug(u'is_loaded pdf') + log.debug('is_loaded pdf') if self.num_pages < 0: return False return True @@ -297,6 +302,6 @@ quit \n\ """ Returns true if a presentation is currently active. """ - log.debug(u'is_active pdf') + log.debug('is_active pdf') return self.is_loaded() and not self.hidden diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index e3cc46ae1..9ed2eb56e 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -31,7 +31,9 @@ from PyQt4 import QtGui from openlp.core.lib import Settings, SettingsTab, UiStrings, translate, build_icon from openlp.core.lib.ui import critical_error_message_box -from pdfcontroller import check_binary +from .pdfcontroller import PdfController +#from openlp.plugins.presentations.lib.pdfcontroller import PdfController +#from pdfcontroller import check_binary class PresentationTab(SettingsTab): """ @@ -75,22 +77,22 @@ class PresentationTab(SettingsTab): # Pdf options self.pdf_group_box = QtGui.QGroupBox(self.left_column) - self.pdf_group_box.setObjectName(u'pdf_group_box') + self.pdf_group_box.setObjectName('pdf_group_box') self.pdf_layout = QtGui.QFormLayout(self.pdf_group_box) - self.pdf_layout.setObjectName(u'pdf_layout') + self.pdf_layout.setObjectName('pdf_layout') self.pdf_program_check_box = QtGui.QCheckBox(self.pdf_group_box) - self.pdf_program_check_box.setObjectName(u'pdf_program_check_box') + self.pdf_program_check_box.setObjectName('pdf_program_check_box') self.pdf_layout.addWidget(self.pdf_program_check_box) self.pdf_program_path_layout = QtGui.QHBoxLayout() - self.pdf_program_path_layout.setObjectName(u'pdf_program_path_layout') + self.pdf_program_path_layout.setObjectName('pdf_program_path_layout') self.pdf_program_path = QtGui.QLineEdit(self.pdf_group_box) - self.pdf_program_path.setObjectName(u'pdf_program_path') + self.pdf_program_path.setObjectName('pdf_program_path') self.pdf_program_path.setReadOnly(True) self.pdf_program_path.setPalette(self.get_grey_text_palette(True)) self.pdf_program_path_layout.addWidget(self.pdf_program_path) self.pdf_program_browse_button = QtGui.QToolButton(self.pdf_group_box) - self.pdf_program_browse_button.setObjectName(u'pdf_program_browse_button') - self.pdf_program_browse_button.setIcon(build_icon(u':/general/general_open.png')) + self.pdf_program_browse_button.setObjectName('pdf_program_browse_button') + self.pdf_program_browse_button.setIcon(build_icon(':/general/general_open.png')) self.pdf_program_browse_button.setEnabled(False) self.pdf_program_path_layout.addWidget(self.pdf_program_browse_button) self.pdf_layout.addRow(self.pdf_program_path_layout) @@ -173,26 +175,19 @@ class PresentationTab(SettingsTab): pdf_program = self.pdf_program_path.text() enable_given_pdf_program = self.pdf_program_check_box.checkState() # If the given program is blank disable using the program - if pdf_program == u'': + if pdf_program == '': enable_given_pdf_program = 0 - if pdf_program != Settings().value(self.settings_section + u'/given_pdf_program'): - Settings().setValue(self.settings_section + u'/given_pdf_program', pdf_program) + if pdf_program != Settings().value(self.settings_section + '/given_pdf_program'): + Settings().setValue(self.settings_section + '/given_pdf_program', pdf_program) changed = True - if enable_given_pdf_program != Settings().value(self.settings_section + u'/enable_given_pdf_program'): - Settings().setValue(self.settings_section + u'/enable_given_pdf_program', enable_given_pdf_program) + if enable_given_pdf_program != Settings().value(self.settings_section + '/enable_given_pdf_program'): + Settings().setValue(self.settings_section + '/enable_given_pdf_program', enable_given_pdf_program) changed = True if changed: -<<<<<<< TREE - self.settings_form.register_post_process(u'mediaitem_suffix_reset') - self.settings_form.register_post_process(u'mediaitem_presentation_rebuild') - self.settings_form.register_post_process(u'mediaitem_suffixes') - -======= self.settings_form.register_post_process('mediaitem_suffix_reset') self.settings_form.register_post_process('mediaitem_presentation_rebuild') self.settings_form.register_post_process('mediaitem_suffixes') ->>>>>>> MERGE-SOURCE def tab_visible(self): """ @@ -210,8 +205,8 @@ class PresentationTab(SettingsTab): After selecting/typing in a program it is validated that it is a actually ghostscript or mudraw """ type = None - if self.pdf_program_path.text() != u'': - type = check_binary(self.pdf_program_path.text()) + if self.pdf_program_path.text() != '': + type = PdfController.check_binary(self.pdf_program_path.text()) if not type: critical_error_message_box(UiStrings().Error, translate('PresentationPlugin.PresentationTab', 'The program is not ghostscript or mudraw which is required.')) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 824eef2ba..a599cea4e 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -46,7 +46,7 @@ log = logging.getLogger(__name__) __default_settings__ = { 'presentations/override app': QtCore.Qt.Unchecked, 'presentations/enable_given_pdf_program': QtCore.Qt.Unchecked, - 'presentations/given_pdf_program': u'', + 'presentations/given_pdf_program': '', 'presentations/Impress': QtCore.Qt.Checked, 'presentations/Powerpoint': QtCore.Qt.Checked, 'presentations/Powerpoint Viewer': QtCore.Qt.Checked,