From e4377e986543caa69b8dbf723c85b2b101f5e4d2 Mon Sep 17 00:00:00 2001 From: Tomas Groth Date: Sat, 4 Jan 2020 21:31:04 +0000 Subject: [PATCH] Use the _implementedInterfaces property on windows to signal the implementation of XSlideShowListener. --- openlp/.version | 2 +- openlp/plugins/bibles/lib/importers/http.py | 21 ++++++++++++------- .../presentations/lib/impresscontroller.py | 21 +++++++------------ 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/openlp/.version b/openlp/.version index 0b1153b27..f3ac133c5 100644 --- a/openlp/.version +++ b/openlp/.version @@ -1 +1 @@ -2.5.dev2899 \ No newline at end of file +2.9.0 \ No newline at end of file diff --git a/openlp/plugins/bibles/lib/importers/http.py b/openlp/plugins/bibles/lib/importers/http.py index 5fdf1ecac..70b9415fd 100644 --- a/openlp/plugins/bibles/lib/importers/http.py +++ b/openlp/plugins/bibles/lib/importers/http.py @@ -417,7 +417,7 @@ class BSExtract(RegistryProperties): def get_bible_chapter(self, version, book_name, chapter): """ - Access and decode bibles via Bibleserver AMP website + Access and decode bibles via Bibleserver website :param version: The version of the bible like NIV for New International Version :param book_name: Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung @@ -428,23 +428,30 @@ class BSExtract(RegistryProperties): chapter=chapter)) url_version = urllib.parse.quote(version.encode("utf-8")) url_book_name = urllib.parse.quote(book_name.encode("utf-8")) - chapter_url = 'https://bibleserver.com/amp/{version}/{name}{chapter:d}'.format(version=url_version, - name=url_book_name, - chapter=chapter) + chapter_url = 'https://bibleserver.com/{version}/{name}{chapter:d}'.format(version=url_version, + name=url_book_name, + chapter=chapter) soup = get_soup_for_bible_ref(chapter_url) if not soup: return None self.application.process_events() - content = soup.find_all('span', 'chapter-wrapper__verse') + content = soup.find('article', 'chapter') if not content: log.error('No verses found in the Bibleserver response.') send_error_message('parse') return None + # remove spans with footnotes + for span in soup.find_all('span', 'footnote-tooltip'): + span.decompose() + # remove noscript tags + for noscript in soup.find_all('noscript'): + noscript.decompose() + content = soup.find_all('span', 'verse') verses = {} for verse in content: self.application.process_events() - versenumber = int(verse.find('span', 'chapter-wrapper__verse__number').get_text()) - verses[versenumber] = verse.find('span', 'chapter-wrapper__verse__content').get_text() + versenumber = int(verse.find('span', 'verse-number__group').get_text().strip()) + verses[versenumber] = verse.find('span', 'verse-content--hover').get_text().strip() return SearchResults(book_name, chapter, verses) def get_books_from_http(self, version): diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index ad13b2a17..e6ddeb00b 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -41,26 +41,20 @@ from openlp.core.display.screens import ScreenList from openlp.plugins.presentations.lib.presentationcontroller import PresentationController, PresentationDocument, \ TextType -# Load the XSlideShowListener class so we can inherit from it +# Declare the XSlideShowListener class so we can inherit from it below, won't really use in on windows. if is_win(): from win32com.client import Dispatch import pywintypes uno_available = False - try: - service_manager = Dispatch('com.sun.star.ServiceManager') - service_manager._FlagAsMethod('Bridge_GetStruct') - XSlideShowListenerObj = service_manager.Bridge_GetStruct('com.sun.star.presentation.XSlideShowListener') - class SlideShowListenerImport(XSlideShowListenerObj.__class__): - pass - except (AttributeError, pywintypes.com_error): - class SlideShowListenerImport(object): - pass + class SlideShowListenerImport: + pass # Declare an empty exception to match the exception imported from UNO class ErrorCodeIOException(Exception): pass else: + # Load the XSlideShowListener class so we can inherit from it below try: import uno import unohelper @@ -75,7 +69,7 @@ else: except ImportError: uno_available = False - class SlideShowListenerImport(object): + class SlideShowListenerImport: pass log = logging.getLogger(__name__) @@ -445,8 +439,9 @@ class ImpressDocument(PresentationDocument): sleep_count += 1 self.control = self.presentation.getController() window.setVisible(False) - listener = SlideShowListener(self) - self.control.getSlideShow().addSlideShowListener(listener) + if not is_win(): + listener = SlideShowListener(self) + self.control.getSlideShow().addSlideShowListener(listener) else: self.control.activate() self.goto_slide(1)