forked from openlp/openlp
Finish OOS work with Images
Correct errors with existing oos Correct bugs in Bible HTTP code for unicode conversions
This commit is contained in:
parent
c0797693d5
commit
03904d7502
@ -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)
|
||||||
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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()
|
||||||
|
@ -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]
|
||||||
|
@ -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'"", u''')
|
text= text.replace(u'"', "'")
|
||||||
text= text.replace(u''", u''')
|
text= text.replace(u''', "'")
|
||||||
|
|
||||||
i = text.find(u'<')
|
i = text.find(u'<')
|
||||||
while i > -1 :
|
while i > -1 :
|
||||||
|
@ -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, \
|
||||||
|
Loading…
Reference in New Issue
Block a user