Merge lp:~googol-deactivatedaccount/openlp/render into lp:openlp

Proposed by Andreas Preikschat
Status: Superseded
Proposed branch: lp:~googol-deactivatedaccount/openlp/render
Merge into: lp:openlp
Diff against target: 33 lines (+13/-2)
1 file modified
openlp/core/lib/serviceitem.py (+13/-2)
To merge this branch: bzr merge lp:~googol-deactivatedaccount/openlp/render
Reviewer Review Type Date Requested Status
OpenLP Core Pending
Review via email: mp+127552@code.launchpad.net

This proposal has been superseded by a proposal from 2012-12-02.

Description of the change

- when a verse appears more than once do not render the verse again, instead use the already rendered one to improve performance

Thanks to gushie who had the idea. Hahahaha, I bet he does not remember.

To post a comment you must log in.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/serviceitem.py'
2--- openlp/core/lib/serviceitem.py 2012-07-02 18:45:03 +0000
3+++ openlp/core/lib/serviceitem.py 2012-10-02 17:38:21 +0000
4@@ -180,8 +180,19 @@
5 self.themedata, self.main, self.footer = self.renderer.pre_render()
6 if self.service_item_type == ServiceItemType.Text:
7 log.debug(u'Formatting slides: %s' % self.title)
8+ # Save rendered pages to this dict. In the case that a slide is used
9+ # twice we can use the pages saved to the dict instead of rendering
10+ # them again.
11+ previous_pages = {}
12 for slide in self._raw_frames:
13- pages = self.renderer.format_slide(slide[u'raw_slide'], self)
14+ verse_tag = slide[u'verseTag']
15+ if verse_tag in previous_pages and \
16+ previous_pages[verse_tag][0] == slide[u'raw_slide']:
17+ pages = previous_pages[verse_tag][1]
18+ else:
19+ pages = \
20+ self.renderer.format_slide(slide[u'raw_slide'], self)
21+ previous_pages[verse_tag] = (slide[u'raw_slide'], pages)
22 for page in pages:
23 page = page.replace(u'<br>', u'{br}')
24 html = expand_tags(cgi.escape(page.rstrip()))
25@@ -189,7 +200,7 @@
26 u'title': clean_tags(page),
27 u'text': clean_tags(page.rstrip()),
28 u'html': html.replace(u'&amp;nbsp;', u'&nbsp;'),
29- u'verseTag': slide[u'verseTag']
30+ u'verseTag': verse_tag
31 })
32 elif self.service_item_type == ServiceItemType.Image or \
33 self.service_item_type == ServiceItemType.Command: