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

Proposed by Andreas Preikschat
Status: Merged
Approved by: Raoul Snyman
Approved revision: 1579
Merged at revision: 2120
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
Raoul Snyman Approve
Tim Bentley Approve
Review via email: mp+137446@code.launchpad.net

This proposal supersedes a proposal from 2012-10-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.
Revision history for this message
Tim Bentley (trb143) :
review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

nice!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2012-12-01 07:57:54 +0000
+++ openlp/core/lib/serviceitem.py 2012-12-02 20:43:30 +0000
@@ -181,8 +181,19 @@
181 self.themedata, self.main, self.footer = self.renderer.pre_render()181 self.themedata, self.main, self.footer = self.renderer.pre_render()
182 if self.service_item_type == ServiceItemType.Text:182 if self.service_item_type == ServiceItemType.Text:
183 log.debug(u'Formatting slides: %s' % self.title)183 log.debug(u'Formatting slides: %s' % self.title)
184 # Save rendered pages to this dict. In the case that a slide is used
185 # twice we can use the pages saved to the dict instead of rendering
186 # them again.
187 previous_pages = {}
184 for slide in self._raw_frames:188 for slide in self._raw_frames:
185 pages = self.renderer.format_slide(slide[u'raw_slide'], self)189 verse_tag = slide[u'verseTag']
190 if verse_tag in previous_pages and \
191 previous_pages[verse_tag][0] == slide[u'raw_slide']:
192 pages = previous_pages[verse_tag][1]
193 else:
194 pages = \
195 self.renderer.format_slide(slide[u'raw_slide'], self)
196 previous_pages[verse_tag] = (slide[u'raw_slide'], pages)
186 for page in pages:197 for page in pages:
187 page = page.replace(u'<br>', u'{br}')198 page = page.replace(u'<br>', u'{br}')
188 html = expand_tags(cgi.escape(page.rstrip()))199 html = expand_tags(cgi.escape(page.rstrip()))
@@ -190,7 +201,7 @@
190 u'title': clean_tags(page),201 u'title': clean_tags(page),
191 u'text': clean_tags(page.rstrip()),202 u'text': clean_tags(page.rstrip()),
192 u'html': html.replace(u'&amp;nbsp;', u'&nbsp;'),203 u'html': html.replace(u'&amp;nbsp;', u'&nbsp;'),
193 u'verseTag': slide[u'verseTag']204 u'verseTag': verse_tag
194 })205 })
195 elif self.service_item_type == ServiceItemType.Image or \206 elif self.service_item_type == ServiceItemType.Image or \
196 self.service_item_type == ServiceItemType.Command:207 self.service_item_type == ServiceItemType.Command: