Finish OOS work with Images

Correct errors with existing oos 
Correct bugs in Bible HTTP code for unicode conversions
This commit is contained in:
Tim Bentley 2009-06-20 20:11:17 +01:00
parent c0797693d5
commit 03904d7502
6 changed files with 80 additions and 51 deletions

View File

@ -18,6 +18,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import logging import logging
import os
import time import time
from openlp.core.lib import buildIcon from openlp.core.lib import buildIcon
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
@ -79,12 +80,12 @@ class ServiceItem():
self.frames = self.service_frames self.frames = self.service_frames
self.service_frames = [] self.service_frames = []
elif self.service_item_type == u'image': elif self.service_item_type == u'image':
print "image" #print "image"
print self.service_frames #print self.service_frames
for slide in self.service_frames: for slide in self.service_frames:
slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
self.frames = self.service_frames self.frames = self.service_frames
self.service_frames = [] #self.service_frames = []
else: else:
log.error(u'Invalid value renderer :%s' % self.service_item_type) log.error(u'Invalid value renderer :%s' % self.service_item_type)
@ -112,14 +113,21 @@ class ServiceItem():
oos_data = [] oos_data = []
if self.service_item_type == u'text': if self.service_item_type == u'text':
for slide in self.service_frames: for slide in self.service_frames:
oos_data.append(slide[u'raw_slide']) oos_data.append(slide)
return {u'header': oos_header, u'data': self.service_frames} elif self.service_item_type == u'image':
#print "sf", self.service_frames
for slide in self.service_frames:
#print "s", slide
oos_data.append(slide[u'title'])
#print "od", oos_data
return {u'header': oos_header, u'data': oos_data}
def set_from_oos(self, serviceitem): def set_from_oos(self, serviceitem, path=None):
""" """
This method takes some oos list (passed from the ServiceManager) This method takes some oos list (passed from the ServiceManager)
and extracts the data actually required and extracts the data actually required
""" """
#print "sfs", serviceitem
header = serviceitem[u'serviceitem'][u'header'] header = serviceitem[u'serviceitem'][u'header']
self.title = header[u'title'] self.title = header[u'title']
self.service_item_type = header[u'type'] self.service_item_type = header[u'type']
@ -127,4 +135,12 @@ class ServiceItem():
self.theme = header[u'theme'] self.theme = header[u'theme']
self.addIcon(header[u'icon']) self.addIcon(header[u'icon'])
self.raw_footer = header[u'footer'] self.raw_footer = header[u'footer']
self.service_frames = serviceitem[u'serviceitem'][u'data'] if self.service_item_type == u'text':
for slide in serviceitem[u'serviceitem'][u'data']:
self.service_frames.append(slide)
elif self.service_item_type == u'image':
for text_image in serviceitem[u'serviceitem'][u'data']:
filename = os.path.join(path, text_image)
#print "fn", filename
real_image = QtGui.QImage(unicode(filename))
self.add_from_image(path, text_image, real_image)

View File

@ -21,11 +21,13 @@ import os
import logging import logging
import cPickle import cPickle
import zipfile import zipfile
import shutil
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \ from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \
RenderManager, EventType, EventManager, translate, buildIcon, \ RenderManager, EventType, EventManager, translate, buildIcon, \
contextMenuAction, contextMenuSeparator contextMenuAction, contextMenuSeparator
from openlp.core.utils import ConfigHelper
class ServiceManager(QtGui.QWidget): class ServiceManager(QtGui.QWidget):
""" """
@ -111,7 +113,8 @@ class ServiceManager(QtGui.QWidget):
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.ServiceManagerList,
QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
# Last little bits of setting up # Last little bits of setting up
self.config = PluginConfig(u'Main') self.config = PluginConfig(u'ServiceManager')
self.servicePath = self.config.get_data_path()
self.service_theme = self.config.get_config(u'theme service theme', u'') self.service_theme = self.config.get_config(u'theme service theme', u'')
def collapsed(self, item): def collapsed(self, item):
@ -217,16 +220,16 @@ class ServiceManager(QtGui.QWidget):
self.config.set_last_dir(filename) self.config.set_last_dir(filename)
service = [] service = []
servicefile= filename + u'.ood' servicefile= filename + u'.ood'
zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')
for item in self.serviceItems: for item in self.serviceItems:
service.append({u'serviceitem':item[u'data'].get_oos_repr()}) service.append({u'serviceitem':item[u'data'].get_oos_repr()})
if item[u'data'].service_item_type == u'image': if item[u'data'].service_item_type == u'image':
print item[u'data'].service_item_path
for frame in item[u'data'].frames: for frame in item[u'data'].frames:
print frame[u'title'] path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title'])
zip.write(path_from)
file = open(servicefile, u'wb') file = open(servicefile, u'wb')
cPickle.dump(service, file) cPickle.dump(service, file)
file.close() file.close()
zip = zipfile.ZipFile(unicode(filename)+u'.oos', 'w')
zip.write(servicefile) zip.write(servicefile)
zip.close() zip.close()
try: try:
@ -234,7 +237,6 @@ class ServiceManager(QtGui.QWidget):
except: except:
pass #if not present do not worry pass #if not present do not worry
def onLoadService(self): def onLoadService(self):
""" """
Load an existing service from disk Load an existing service from disk
@ -248,25 +250,28 @@ class ServiceManager(QtGui.QWidget):
filexml = None filexml = None
themename = None themename = None
for file in zip.namelist(): for file in zip.namelist():
pickle_data = zip.read(file) names = file.split(os.path.sep)
path = file.split(u'.') file_to = os.path.join(self.servicePath, names[len(names) - 1])
p_file = unicode(u'/'+path[0]+u'.ood') file_data = zip.read(file)
file_handle = open(p_file, u'wb') f = open(file_to, u'w')
file_handle.write(pickle_data) f.write(file_data)
file_handle.close() f.close()
file = open(p_file, u'r') if file_to.endswith(u'ood'):
items = cPickle.load(file) p_file = file_to
file.close() f = open(p_file, u'r')
self.onNewService() items = cPickle.load(f)
for item in items: f.close()
serviceitem = ServiceItem() self.onNewService()
serviceitem.RenderManager = self.parent.RenderManager for item in items:
serviceitem.set_from_oos(item) #print item
self.addServiceItem(serviceitem) serviceitem = ServiceItem()
try: serviceitem.RenderManager = self.parent.RenderManager
os.remove(p_file) serviceitem.set_from_oos(item, self.servicePath )
except: self.addServiceItem(serviceitem)
pass #if not present do not worry try:
os.remove(p_file)
except:
pass #if not present do not worry
def onThemeComboBoxSelected(self, currentIndex): def onThemeComboBoxSelected(self, currentIndex):
""" """

View File

@ -40,7 +40,7 @@ class ThemeData(QtCore.QAbstractListModel):
Root contains a list of ThemeItems Root contains a list of ThemeItems
""" """
global log global log
log=logging.getLogger(u'ThemeData') log = logging.getLogger(u'ThemeData')
def __init__(self): def __init__(self):
QtCore.QAbstractListModel.__init__(self) QtCore.QAbstractListModel.__init__(self)
@ -335,7 +335,7 @@ class ThemeManager(QtGui.QWidget):
outfile = open(theme_file, u'w') outfile = open(theme_file, u'w')
outfile.write(theme_xml) outfile.write(theme_xml)
outfile.close() outfile.close()
if image_from is not None and image_from != image_to: if image_from is not None and image_from is not image_to:
shutil.copyfile(image_from, image_to) shutil.copyfile(image_from, image_to)
self.generateAndSaveImage(self.path, name, theme_xml) self.generateAndSaveImage(self.path, name, theme_xml)
self.themeData.clearItems() self.themeData.clearItems()

View File

@ -44,7 +44,7 @@ class BGExtract(BibleCommon):
log.debug( u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter) log.debug( u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)
urlstring = u'http://www.biblegateway.com/passage/?book_id='+unicode(bookid)+u'&chapter'+unicode(chapter)+u'&version='+unicode(version) urlstring = u'http://www.biblegateway.com/passage/?book_id='+unicode(bookid)+u'&chapter'+unicode(chapter)+u'&version='+unicode(version)
xml_string = self._get_web_text(urlstring, self.proxyurl) xml_string = self._get_web_text(urlstring, self.proxyurl)
print xml_string #print xml_string
VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>' VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>'
verse = 1 verse = 1
i= xml_string.find(u'result-text-style-normal') i= xml_string.find(u'result-text-style-normal')
@ -97,7 +97,7 @@ class CWExtract(BibleCommon):
""" """
log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter) log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)
bookname = bookname.replace(u' ', '') bookname = bookname.replace(u' ', '')
urlstring = "http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word="+bookname+"+"+unicode(chapter)+"&version="+version urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word='+bookname+u'+'+unicode(chapter)+u'&version='+version
xml_string = self._get_web_text(urlstring, self.proxyurl) xml_string = self._get_web_text(urlstring, self.proxyurl)
#log.debug(u'Return data %s', xml_string) #log.debug(u'Return data %s', xml_string)
## Strip Book Title from Heading to return it to system ## Strip Book Title from Heading to return it to system
@ -115,27 +115,33 @@ class CWExtract(BibleCommon):
## Strip Verse Data from Page and build an array ## Strip Verse Data from Page and build an array
## ##
#log.debug(u'bible data %s', xml_string)
i= xml_string.find(u'NavCurrentChapter') i= xml_string.find(u'NavCurrentChapter')
xml_string = xml_string[i:len(xml_string)] xml_string = xml_string[i:len(xml_string)]
i= xml_string.find(u'<TABLE') i= xml_string.find(u'<TABLE')
xml_string = xml_string[i:len(xml_string)] xml_string = xml_string[i:len(xml_string)]
i= xml_string.find(u'<B>') i= xml_string.find(u'<B>')
xml_string = xml_string[i + 3 :len(xml_string)] #remove the <B> at the front #remove the <B> at the front
i= xml_string.find(u'<B>') # Remove the heading for the book xml_string = xml_string[i + 3 :len(xml_string)]
xml_string = xml_string[i + 3 :len(xml_string)] #remove the <B> at the front # Remove the heading for the book
i= xml_string.find(u'<B>')
#remove the <B> at the front
xml_string = xml_string[i + 3 :len(xml_string)]
versePos = xml_string.find(u'<BLOCKQUOTE>') versePos = xml_string.find(u'<BLOCKQUOTE>')
#log.debug( versePos) #log.debug(u'verse pos %d', versePos)
bible = {} bible = {}
while versePos > 0: while versePos > 0:
verseText = '' # clear out string verseText = u''
versePos = xml_string.find(u'<B><I>', versePos) + 6 versePos = xml_string.find(u'<B><I>', versePos) + 6
i = xml_string.find(u'</I></B>', versePos) i = xml_string.find(u'</I></B>', versePos)
#log.debug( versePos, i) #log.debug( versePos, i)
verse= xml_string[versePos:i] # Got the Chapter verse= xml_string[versePos:i] # Got the Chapter
#verse = int(temp) #verse = int(temp)
#log.debug( 'Chapter = ' + unicode(temp)) #log.debug( 'Chapter = %s', verse)
versePos = i + 8 # move the starting position to negining of the text # move the starting position to begining of the text
i = xml_string.find(u'<B><I>', versePos) # fine the start of the next verse versePos = i + 8
# fined the start of the next verse
i = xml_string.find(u'<B><I>', versePos)
if i == -1: if i == -1:
i = xml_string.find(u'</BLOCKQUOTE>',versePos) i = xml_string.find(u'</BLOCKQUOTE>',versePos)
verseText = xml_string[versePos: i] verseText = xml_string[versePos: i]

View File

@ -53,12 +53,12 @@ class BibleCommon:
http_support = urllib2.HTTPHandler() http_support = urllib2.HTTPHandler()
opener= urllib2.build_opener(proxy_support, http_support) opener= urllib2.build_opener(proxy_support, http_support)
urllib2.install_opener(opener) urllib2.install_opener(opener)
xml_string = "" xml_string = u''
req = urllib2.Request(urlstring) req = urllib2.Request(urlstring)
req.add_header(u'User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') req.add_header(u'User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
try: try:
handle = urllib2.urlopen(req) handle = urllib2.urlopen(req)
xml_string = handle.read() xml_string = unicode(handle.read())
except IOError, e: except IOError, e:
if hasattr(e, u'reason'): if hasattr(e, u'reason'):
log.error(u'Reason : ') log.error(u'Reason : ')
@ -97,9 +97,9 @@ class BibleCommon:
text= text.replace(u'</P>', u'') text= text.replace(u'</P>', u'')
text= text.replace(u'<BR>', u'') text= text.replace(u'<BR>', u'')
text= text.replace(u'<BR />', u'') text= text.replace(u'<BR />', u'')
text= text.replace(chr(189), u'1/2') #text= text.replace(chr(189), u'1/2');print "l"
text= text.replace(u'&quot;", u''') text= text.replace(u'&quot;', "'")
text= text.replace(u'&apos;", u''') text= text.replace(u'&apos;', "'")
i = text.find(u'<') i = text.find(u'<')
while i > -1 : while i > -1 :

View File

@ -239,17 +239,19 @@ class BibleManager():
text = [] text = []
log.debug(u'get_verse_text %s,%s,%s,%s,%s,%s', bible, bookname, schapter, echapter, sverse, everse) log.debug(u'get_verse_text %s,%s,%s,%s,%s,%s', bible, bookname, schapter, echapter, sverse, everse)
if not self.bible_http_cache [bible] == None: if not self.bible_http_cache [bible] == None:
book= self.bible_db_cache[bible].get_bible_book(bookname) # check to see if book/chapter exists # check to see if book/chapter exists
book= self.bible_db_cache[bible].get_bible_book(bookname)
if book == None: if book == None:
log.debug(u'get_verse_text : new book') log.debug(u'get_verse_text : new book')
for chapter in range(schapter, echapter+1): for chapter in range(schapter, echapter+1):
search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter) search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter)
if search_results.has_verselist() : if search_results.has_verse_list() :
## We have found a book of the bible lets check to see if it was there. ## We have found a book of the bible lets check to see if it was there.
## By reusing the returned book name we get a correct book. ## By reusing the returned book name we get a correct book.
## For example it is possible to request ac and get Acts back. ## For example it is possible to request ac and get Acts back.
bookname = search_results.get_book() bookname = search_results.get_book()
book= self.bible_db_cache[bible].get_bible_book(bookname) # check to see if book/chapter exists # check to see if book/chapter exists
book= self.bible_db_cache[bible].get_bible_book(bookname)
if book == None: if book == None:
## Then create book, chapter and text ## Then create book, chapter and text
book = self.bible_db_cache[bible].create_book(bookname, \ book = self.bible_db_cache[bible].create_book(bookname, \