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
"""
import logging
import os
import time
from openlp.core.lib import buildIcon
from PyQt4 import QtCore, QtGui
@ -79,12 +80,12 @@ class ServiceItem():
self.frames = self.service_frames
self.service_frames = []
elif self.service_item_type == u'image':
print "image"
print self.service_frames
#print "image"
#print self.service_frames
for slide in self.service_frames:
slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
self.frames = self.service_frames
self.service_frames = []
#self.service_frames = []
else:
log.error(u'Invalid value renderer :%s' % self.service_item_type)
@ -112,14 +113,21 @@ class ServiceItem():
oos_data = []
if self.service_item_type == u'text':
for slide in self.service_frames:
oos_data.append(slide[u'raw_slide'])
return {u'header': oos_header, u'data': self.service_frames}
oos_data.append(slide)
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)
and extracts the data actually required
"""
#print "sfs", serviceitem
header = serviceitem[u'serviceitem'][u'header']
self.title = header[u'title']
self.service_item_type = header[u'type']
@ -127,4 +135,12 @@ class ServiceItem():
self.theme = header[u'theme']
self.addIcon(header[u'icon'])
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 cPickle
import zipfile
import shutil
from PyQt4 import QtCore, QtGui
from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \
RenderManager, EventType, EventManager, translate, buildIcon, \
contextMenuAction, contextMenuSeparator
from openlp.core.utils import ConfigHelper
class ServiceManager(QtGui.QWidget):
"""
@ -111,7 +113,8 @@ class ServiceManager(QtGui.QWidget):
QtCore.QObject.connect(self.ServiceManagerList,
QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
# 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'')
def collapsed(self, item):
@ -217,16 +220,16 @@ class ServiceManager(QtGui.QWidget):
self.config.set_last_dir(filename)
service = []
servicefile= filename + u'.ood'
zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')
for item in self.serviceItems:
service.append({u'serviceitem':item[u'data'].get_oos_repr()})
if item[u'data'].service_item_type == u'image':
print item[u'data'].service_item_path
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')
cPickle.dump(service, file)
file.close()
zip = zipfile.ZipFile(unicode(filename)+u'.oos', 'w')
zip.write(servicefile)
zip.close()
try:
@ -234,7 +237,6 @@ class ServiceManager(QtGui.QWidget):
except:
pass #if not present do not worry
def onLoadService(self):
"""
Load an existing service from disk
@ -248,25 +250,28 @@ class ServiceManager(QtGui.QWidget):
filexml = None
themename = None
for file in zip.namelist():
pickle_data = zip.read(file)
path = file.split(u'.')
p_file = unicode(u'/'+path[0]+u'.ood')
file_handle = open(p_file, u'wb')
file_handle.write(pickle_data)
file_handle.close()
file = open(p_file, u'r')
items = cPickle.load(file)
file.close()
self.onNewService()
for item in items:
serviceitem = ServiceItem()
serviceitem.RenderManager = self.parent.RenderManager
serviceitem.set_from_oos(item)
self.addServiceItem(serviceitem)
try:
os.remove(p_file)
except:
pass #if not present do not worry
names = file.split(os.path.sep)
file_to = os.path.join(self.servicePath, names[len(names) - 1])
file_data = zip.read(file)
f = open(file_to, u'w')
f.write(file_data)
f.close()
if file_to.endswith(u'ood'):
p_file = file_to
f = open(p_file, u'r')
items = cPickle.load(f)
f.close()
self.onNewService()
for item in items:
#print item
serviceitem = ServiceItem()
serviceitem.RenderManager = self.parent.RenderManager
serviceitem.set_from_oos(item, self.servicePath )
self.addServiceItem(serviceitem)
try:
os.remove(p_file)
except:
pass #if not present do not worry
def onThemeComboBoxSelected(self, currentIndex):
"""

View File

@ -40,7 +40,7 @@ class ThemeData(QtCore.QAbstractListModel):
Root contains a list of ThemeItems
"""
global log
log=logging.getLogger(u'ThemeData')
log = logging.getLogger(u'ThemeData')
def __init__(self):
QtCore.QAbstractListModel.__init__(self)
@ -335,7 +335,7 @@ class ThemeManager(QtGui.QWidget):
outfile = open(theme_file, u'w')
outfile.write(theme_xml)
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)
self.generateAndSaveImage(self.path, name, theme_xml)
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)
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)
print xml_string
#print xml_string
VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>'
verse = 1
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)
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)
#log.debug(u'Return data %s', xml_string)
## 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
##
#log.debug(u'bible data %s', xml_string)
i= xml_string.find(u'NavCurrentChapter')
xml_string = xml_string[i:len(xml_string)]
i= xml_string.find(u'<TABLE')
xml_string = xml_string[i:len(xml_string)]
i= xml_string.find(u'<B>')
xml_string = xml_string[i + 3 :len(xml_string)] #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)] #remove the <B> at the front
#remove the <B> at the front
xml_string = xml_string[i + 3 :len(xml_string)]
# 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>')
#log.debug( versePos)
#log.debug(u'verse pos %d', versePos)
bible = {}
while versePos > 0:
verseText = '' # clear out string
verseText = u''
versePos = xml_string.find(u'<B><I>', versePos) + 6
i = xml_string.find(u'</I></B>', versePos)
#log.debug( versePos, i)
verse= xml_string[versePos:i] # Got the Chapter
#verse = int(temp)
#log.debug( 'Chapter = ' + unicode(temp))
versePos = i + 8 # move the starting position to negining of the text
i = xml_string.find(u'<B><I>', versePos) # fine the start of the next verse
#log.debug( 'Chapter = %s', verse)
# move the starting position to begining of the text
versePos = i + 8
# fined the start of the next verse
i = xml_string.find(u'<B><I>', versePos)
if i == -1:
i = xml_string.find(u'</BLOCKQUOTE>',versePos)
verseText = xml_string[versePos: i]

View File

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

View File

@ -239,17 +239,19 @@ class BibleManager():
text = []
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:
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:
log.debug(u'get_verse_text : new book')
for chapter in range(schapter, echapter+1):
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.
## By reusing the returned book name we get a correct book.
## For example it is possible to request ac and get Acts back.
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:
## Then create book, chapter and text
book = self.bible_db_cache[bible].create_book(bookname, \