~tomasgroth/openlp/presentation-load-speedup

« back to all changes in this revision

Viewing changes to openlp/core/lib/serviceitem.py

  • Committer: Tomas Groth
  • Date: 2019-09-15 09:05:21 UTC
  • mfrom: (2815.1.87 openlp)
  • Revision ID: tomasgroth@yahoo.dk-20190915090521-pzze809hy4xv3rlk
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
from openlp.core.common.i18n import translate
41
41
from openlp.core.common.mixins import RegistryProperties
42
42
from openlp.core.common.settings import Settings
43
 
from openlp.core.display.render import remove_tags, render_tags
 
43
from openlp.core.display.render import remove_tags, render_tags, render_chords_for_printing
44
44
from openlp.core.lib import ItemCapabilities
45
45
from openlp.core.ui.icons import UiIcons
46
46
 
75
75
            self.name = plugin.name
76
76
        self._rendered_slides = None
77
77
        self._display_slides = None
 
78
        self._print_slides = None
78
79
        self.title = ''
79
80
        self.slides = []
80
81
        self.processor = None
188
189
                self._rendered_slides.append(rendered_slide)
189
190
                display_slide = {
190
191
                    'title': raw_slide['title'],
191
 
                    'text': remove_tags(page),
 
192
                    'text': remove_tags(page, can_remove_chords=True),
192
193
                    'verse': verse_tag,
193
194
                }
194
195
                self._display_slides.append(display_slide)
212
213
            self._create_slides()
213
214
        return self._display_slides
214
215
 
 
216
    @property
 
217
    def print_slides(self):
 
218
        """
 
219
        Render the frames for printing and return them
 
220
 
 
221
        :param can_render_chords: bool Whether or not to render the chords
 
222
        """
 
223
        if not self._print_slides:
 
224
            self._print_slides = []
 
225
            previous_pages = {}
 
226
            index = 0
 
227
            for raw_slide in self.slides:
 
228
                verse_tag = raw_slide['verse']
 
229
                if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide:
 
230
                    pages = previous_pages[verse_tag][1]
 
231
                else:
 
232
                    pages = self.renderer.format_slide(raw_slide['text'], self)
 
233
                    previous_pages[verse_tag] = (raw_slide, pages)
 
234
                for page in pages:
 
235
                    slide = {
 
236
                        'title': raw_slide['title'],
 
237
                        'text': render_chords_for_printing(remove_tags(page), '\n'),
 
238
                        'verse': index,
 
239
                        'footer': self.raw_footer,
 
240
                    }
 
241
                    self._print_slides.append(slide)
 
242
        return self._print_slides
 
243
 
215
244
    def add_from_image(self, path, title, background=None, thumbnail=None, file_hash=None):
216
245
        """
217
246
        Add an image slide to the service item.
341
370
                                     'display_title': slide['display_title'], 'notes': slide['notes']})
342
371
        return {'header': service_header, 'data': service_data}
343
372
 
 
373
    def render_text_items(self):
 
374
        """
 
375
        This method forces the display to be regenerated
 
376
        """
 
377
        self._display_slides = []
 
378
        self._rendered_slides = []
 
379
 
344
380
    def set_from_service(self, service_item, path=None, version=2):
345
381
        """
346
382
        This method takes a service item from a saved service file (passed from the ServiceManager) and extracts the
551
587
        :param row: The service item slide to be returned
552
588
        """
553
589
        if self.service_item_type == ServiceItemType.Text:
554
 
            # return self.display_frames[row]['html'].split('\n')[0]
555
590
            return self.rendered_slides[row]['text']
556
591
        elif self.service_item_type == ServiceItemType.Image:
557
592
            return self.slides[row]['path']