Merge lp:~trb143/openlp/bitsandbobs into lp:openlp

Proposed by Tim Bentley
Status: Superseded
Proposed branch: lp:~trb143/openlp/bitsandbobs
Merge into: lp:openlp
Diff against target: 562 lines
7 files modified
openlp/core/lib/mediamanageritem.py (+30/-21)
openlp/core/utils/__init__.py (+3/-1)
openlp/plugins/bibles/lib/bibleDBimpl.py (+8/-2)
openlp/plugins/bibles/lib/common.py (+2/-1)
openlp/plugins/bibles/lib/manager.py (+40/-20)
openlp/plugins/bibles/lib/mediaitem.py (+36/-22)
openlp/plugins/bibles/resources/httpbooks.csv (+66/-66)
To merge this branch: bzr merge lp:~trb143/openlp/bitsandbobs
Reviewer Review Type Date Requested Status
OpenLP Core Pending
Review via email: mp+13359@code.launchpad.net

This proposal has been superseded by a proposal from 2009-10-14.

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Added Web bibles to Advanced tab.
Fixed error handing in bibles for incomplete loaded bibles
Add Error handling to version_check code

lp:~trb143/openlp/bitsandbobs updated
598. By Jonathan Corwin

TLC for the asv

599. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/versionfix

600. By Tim Bentley

Add Web Bibles to Advanced Tab and other nice features

601. By Jonathan Corwin

Presentation changes

602. By Tim Bentley

Update config files for deployment

603. By Tim Bentley

Changes to settings and SlideController handling

604. By Jon Tibble

Python 2.5 fixes

605. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/uifixes

606. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/uifixes

607. By Jonathan Corwin

Merged in lp:~j-corwin/openlp/present

608. By Raoul Snyman

Merged lp:~raoul-snyman/openlp/uifixes

609. By Tim Bentley

Theme Image and Presentation fixes

610. By Jon Tibble

General fixes

611. By Tim Bentley

General Tab Changes

612. By Tim Bentley

SlideControler UI fixes

613. By Tim Bentley

SlideControler UI fixes - take 2

614. By Tim Bentley

SlideControler UI fixes - take 3

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/mediamanageritem.py'
2--- openlp/core/lib/mediamanageritem.py 2009-10-10 18:36:58 +0000
3+++ openlp/core/lib/mediamanageritem.py 2009-10-14 18:31:13 +0000
4@@ -206,63 +206,72 @@
5 if self.hasFileIcon:
6 self.addToolbarButton(
7 translate(
8- self.TranslationContext, u'Load ' + self.PluginTextShort),
9+ self.TranslationContext, u'Load %s' % self.PluginTextShort),
10 translate(
11 self.TranslationContext,
12- u'Load a new ' + self.PluginTextShort),
13- u':' + self.IconPath + u'_load.png', self.onFileClick,
14- self.PluginTextShort + u'FileItem')
15+ u'Load a new %s' % self.PluginTextShort),
16+ u':%s_load.png' % self.IconPath,
17+ self.onFileClick,
18+ u'%sFileItem' %self.PluginTextShort)
19 ## New Button ##
20 if self.hasNewIcon:
21 self.addToolbarButton(
22 translate(
23- self.TranslationContext, u'New ' + self.PluginTextShort),
24+ self.TranslationContext, u'New %s' % self.PluginTextShort),
25 translate(
26 self.TranslationContext,
27- u'Add a new ' + self.PluginTextShort),
28- u':' + self.IconPath + u'_new.png', self.onNewClick,
29- self.PluginTextShort + u'NewItem')
30+ u'Add a new %s' % self.PluginTextShort),
31+ u':%s_new.png' % self.IconPath,
32+ self.onNewClick,
33+ u'%sNewItem' % self.PluginTextShort)
34 ## Edit Button ##
35 if self.hasEditIcon:
36 self.addToolbarButton(
37 translate(
38- self.TranslationContext, u'Edit ' + self.PluginTextShort),
39+ self.TranslationContext, u'Edit %s' % self.PluginTextShort),
40 translate(
41 self.TranslationContext,
42- u'Edit the selected ' + self.PluginTextShort),
43- u':' + self.IconPath + u'_edit.png', self.onEditClick,
44- self.PluginTextShort + u'EditItem')
45+ u'Edit the selected %s' % self.PluginTextShort),
46+ u':%s_edit.png' % self.IconPath,
47+ self.onEditClick,
48+ u'%sEditItem' % self.PluginTextShort)
49 ## Delete Button ##
50 if self.hasDeleteIcon:
51 self.addToolbarButton(
52 translate(
53- self.TranslationContext, u'Delete ' + self.PluginTextShort),
54+ self.TranslationContext, u'Delete %s' % self.PluginTextShort),
55 translate(self.TranslationContext, u'Delete the selected item'),
56- u':' + self.IconPath + u'_delete.png', self.onDeleteClick,
57- self.PluginTextShort + u'DeleteItem')
58+ u':%s_delete.png' % self.IconPath,
59+ self.onDeleteClick,
60+ u'%sDeleteItem' % self.PluginTextShort)
61 ## Separator Line ##
62 self.addToolbarSeparator()
63 ## Preview ##
64 self.addToolbarButton(
65 translate(
66- self.TranslationContext, u'Preview ' + self.PluginTextShort),
67+ self.TranslationContext, u'Preview %s' % self.PluginTextShort),
68 translate(self.TranslationContext, u'Preview the selected item'),
69- u':/system/system_preview.png', self.onPreviewClick, u'PreviewItem')
70+ u':/system/system_preview.png',
71+ self.onPreviewClick,
72+ u'PreviewItem')
73 ## Live Button ##
74 self.addToolbarButton(
75 translate(self.TranslationContext, u'Go Live'),
76 translate(self.TranslationContext, u'Send the selected item live'),
77- u':/system/system_live.png', self.onLiveClick, u'LiveItem')
78+ u':/system/system_live.png',
79+ self.onLiveClick,
80+ u'LiveItem')
81 ## Add to service Button ##
82 self.addToolbarButton(
83 translate(
84 self.TranslationContext,
85- u'Add ' + self.PluginTextShort + u' To Service'),
86+ u'Add %s to Service' % self.PluginTextShort),
87 translate(
88 self.TranslationContext,
89 u'Add the selected item(s) to the service'),
90- u':/system/system_add.png', self.onAddClick,
91- self.PluginTextShort + u'AddItem')
92+ u':/system/system_add.png',
93+ self.onAddClick,
94+ u'%sAddServiceItem' % self.PluginTextShort)
95
96 def addListViewToToolBar(self):
97 #Add the List widget
98
99=== modified file 'openlp/core/utils/__init__.py'
100--- openlp/core/utils/__init__.py 2009-10-14 17:52:50 +0000
101+++ openlp/core/utils/__init__.py 2009-10-14 18:31:13 +0000
102@@ -28,6 +28,8 @@
103 from registry import Registry
104 from confighelper import ConfigHelper
105
106+log = logging.getLogger(__name__)
107+
108 __all__ = ['Registry', 'ConfigHelper']
109
110 log = logging.getLogger(__name__)
111@@ -40,7 +42,7 @@
112 if lastTest != thisTest:
113 version_string = u''
114 req = urllib2.Request(u'http://www.openlp.org/files/version.txt')
115- req.add_header(u'User-Agent', u'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
116+ req.add_header(u'User-Agent', u'OpenLP%s' % current_version)
117 try:
118 handle = urllib2.urlopen(req, None, 1)
119 html = handle.read()
120
121=== modified file 'openlp/plugins/bibles/lib/bibleDBimpl.py'
122--- openlp/plugins/bibles/lib/bibleDBimpl.py 2009-09-25 23:06:54 +0000
123+++ openlp/plugins/bibles/lib/bibleDBimpl.py 2009-10-14 18:31:13 +0000
124@@ -127,13 +127,19 @@
125 verse = self.session.query(Verse).join(Book).filter(
126 Book.name == bookname).filter(
127 Verse.chapter == chapter).order_by(Verse.verse.desc()).first()
128- return verse.verse
129+ if verse == None:
130+ return 0
131+ else:
132+ return verse.verse
133
134 def get_max_bible_book_chapter(self, bookname):
135 log.debug(u'get_max_bible_book_chapter %s', bookname)
136 verse = self.session.query(Verse).join(Book).filter(
137 Book.name == bookname).order_by(Verse.chapter.desc()).first()
138- return verse.chapter
139+ if verse == None:
140+ return 0
141+ else:
142+ return verse.chapter
143
144 def get_bible_book(self, bookname):
145 log.debug(u'get_bible_book %s', bookname)
146
147=== modified file 'openlp/plugins/bibles/lib/common.py'
148--- openlp/plugins/bibles/lib/common.py 2009-09-28 20:45:04 +0000
149+++ openlp/plugins/bibles/lib/common.py 2009-10-14 18:31:13 +0000
150@@ -104,7 +104,8 @@
151 urllib2.install_opener(opener)
152 xml_string = u''
153 req = urllib2.Request(urlstring)
154- req.add_header(u'User-Agent', u'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
155+ #Make us look like an IE Browser on XP to stop blocking by web site
156+ req.add_header(u'User-Agent', u'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')
157 try:
158 handle = urllib2.urlopen(req)
159 html = handle.read()
160
161=== modified file 'openlp/plugins/bibles/lib/manager.py'
162--- openlp/plugins/bibles/lib/manager.py 2009-09-27 12:56:14 +0000
163+++ openlp/plugins/bibles/lib/manager.py 2009-10-14 18:31:13 +0000
164@@ -25,6 +25,8 @@
165 import logging
166 import os
167
168+from openlp.core.lib import translate
169+
170 from bibleOSISimpl import BibleOSISImpl
171 from bibleCSVimpl import BibleCSVImpl
172 from bibleDBimpl import BibleDBImpl
173@@ -55,6 +57,7 @@
174 """
175 self.config = config
176 log.debug(u'Bible Initialising')
177+ self.web = translate(u'BibleManager', u'Web')
178 # dict of bible database objects
179 self.bible_db_cache = None
180 # dict of bible http readers
181@@ -83,6 +86,8 @@
182 self.bible_http_cache = {}
183 # books of the bible with testaments
184 self.book_testaments = {}
185+ # books of the bible with chapter count
186+ self.book_chapters = []
187 # books of the bible with abbreviation
188 self.book_abbreviations = {}
189 self.web_bibles_present = False
190@@ -126,6 +131,7 @@
191 p = line.split(u',')
192 self.book_abbreviations[p[0]] = p[1].replace(u'\n', '')
193 self.book_testaments[p[0]] = p[2].replace(u'\n', '')
194+ self.book_chapters.append({u'book':p[0], u'total':p[3].replace(u'\n', '')})
195 log.debug(u'Bible Initialised')
196
197 def process_dialog(self, dialogobject):
198@@ -247,33 +253,34 @@
199 ``BibleMode.Full`` this method returns all the Bibles for the
200 Advanced Search, and when the mode is ``BibleMode.Partial``
201 this method returns all the bibles for the Quick Search.
202-
203-c
204 """
205 log.debug(u'get_bibles')
206 bible_list = []
207 for bible_name, bible_object in self.bible_db_cache.iteritems():
208- if mode == BibleMode.Full:
209- bible_list.append(bible_name)
210- else:
211- if self.bible_http_cache[bible_name] is None:
212- # we do not have an http bible
213- bible_list.append(bible_name)
214+ if self.bible_http_cache[bible_name] is not None:
215+ bible_name = u'%s (%s)' % (bible_name, self.web)
216+ bible_list.append(bible_name)
217 return bible_list
218
219- def get_bible_books(self,bible):
220- """
221- Returns a list of the books of the bible from the database
222- """
223- log.debug(u'get_bible_books %s', bible)
224- return self.bible_db_cache[bible].get_bible_books()
225-
226- def get_book_chapter_count(self, bible, book):
227+ def is_bible_web(self, bible):
228+ pos_end = bible.find(u' (%s)' % self.web)
229+ if pos_end != -1:
230+ return True, bible[:pos_end]
231+ return False, bible
232+
233+ def get_bible_books(self):
234+ """
235+ Returns a list of the books of the bible
236+ """
237+ log.debug(u'get_bible_books')
238+ return self.book_chapters
239+
240+ def get_book_chapter_count(self, book):
241 """
242 Returns the number of Chapters for a given book
243 """
244- log.debug(u'get_book_chapter_count %s, %s', bible, book)
245- return self.bible_db_cache[bible].get_max_bible_book_chapter(book)
246+ log.debug(u'get_book_chapter_count %s', book)
247+ return self.book_chapters[book]
248
249 def get_book_verse_count(self, bible, book, chapter):
250 """
251@@ -281,8 +288,18 @@
252 book and chapterMaxBibleBookVerses
253 """
254 log.debug(u'get_book_verse_count %s,%s,%s', bible, book, chapter)
255- return self.bible_db_cache[bible].get_max_bible_book_verses(
256- book, chapter)
257+ web, bible = self.is_bible_web(bible)
258+ if web:
259+ count = self.bible_db_cache[bible].get_max_bible_book_verses(
260+ book, chapter)
261+ if count == 0:
262+ text = self.get_verse_text(bible, book, chapter, chapter, 1, 1)
263+ count = self.bible_db_cache[bible].get_max_bible_book_verses(
264+ book, chapter)
265+ return count
266+ else:
267+ return self.bible_db_cache[bible].get_max_bible_book_verses(
268+ book, chapter)
269
270 def get_verse_from_text(self, bible, versetext):
271 """
272@@ -290,6 +307,7 @@
273 book and chapterMaxBibleBookVerses
274 """
275 log.debug(u'get_verses_from_text %s,%s', bible, versetext)
276+ web, bible = self.is_bible_web(bible)
277 return self.bible_db_cache[bible].get_verses_from_text(versetext)
278
279 def save_meta_data(self, bible, version, copyright, permissions):
280@@ -307,6 +325,7 @@
281 Returns the meta data for a given key
282 """
283 log.debug(u'get_meta %s,%s', bible, key)
284+ web, bible = self.is_bible_web(bible)
285 return self.bible_db_cache[bible].get_meta(key)
286
287 def get_verse_text(self, bible, bookname, schapter, echapter, sverse,
288@@ -327,6 +346,7 @@
289 bible, bookname, schapter, echapter, sverse, everse)
290 # check to see if book/chapter exists fow HTTP bibles and load cache
291 # if necessary
292+ web, bible = self.is_bible_web(bible)
293 if self.bible_http_cache[bible] is not None:
294 book = self.bible_db_cache[bible].get_bible_book(bookname)
295 if book is None:
296
297=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
298--- openlp/plugins/bibles/lib/mediaitem.py 2009-10-10 04:56:25 +0000
299+++ openlp/plugins/bibles/lib/mediaitem.py 2009-10-14 18:31:13 +0000
300@@ -54,7 +54,8 @@
301 self.ServiceItemIconName = u':/media/bible_image.png'
302 self.servicePath = None
303 MediaManagerItem.__init__(self, parent, icon, title)
304- self.search_results = {} # place to store the search results
305+ # place to store the search results
306+ self.search_results = {}
307 QtCore.QObject.connect(Receiver().get_receiver(),
308 QtCore.SIGNAL(u'openlpreloadbibles'), self.reloadBibles)
309
310@@ -180,6 +181,9 @@
311 self.AdvancedSecondBibleComboBox = QtGui.QComboBox(self.AdvancedTab)
312 self.AdvancedSecondBibleComboBox.setObjectName(u'SecondBible')
313 self.AdvancedVerticalLayout.addWidget(self.AdvancedSecondBibleComboBox)
314+ self.AdvancedMessage = QtGui.QLabel(self.QuickTab)
315+ self.AdvancedMessage.setObjectName(u'AdvancedMessage')
316+ self.AdvancedVerticalLayout.addWidget(self.AdvancedMessage)
317 self.SearchTabWidget.addTab(self.AdvancedTab, u'Advanced')
318 # Add the search tab widget to the page layout
319 self.PageLayout.addWidget(self.SearchTabWidget)
320@@ -242,6 +246,7 @@
321
322 def setQuickMessage(self, text):
323 self.QuickMessage.setText(translate(u'BibleMediaItem', unicode(text)))
324+ self.AdvancedMessage.setText(translate(u'BibleMediaItem', unicode(text)))
325 Receiver().send_message(u'process_events')
326 #minor delay to get the events processed
327 time.sleep(0.1)
328@@ -276,9 +281,11 @@
329 unicode(self.AdvancedVersionComboBox.currentText()))
330
331 def onAdvancedBookComboBox(self):
332+ item = int(self.AdvancedBookComboBox.currentIndex())
333 self.initialiseChapterVerse(
334 unicode(self.AdvancedVersionComboBox.currentText()),
335- unicode(self.AdvancedBookComboBox.currentText()))
336+ unicode(self.AdvancedBookComboBox.currentText()),
337+ self.AdvancedBookComboBox.itemData(item).toInt()[0])
338
339 def onNewClick(self):
340 self.bibleimportform = BibleImportForm(
341@@ -291,14 +298,14 @@
342 self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)
343
344 def onAdvancedToChapter(self):
345- text1 = self.AdvancedFromChapter.currentText()
346- text2 = self.AdvancedToChapter.currentText()
347+ text1 = unicode(self.AdvancedFromChapter.currentText())
348+ text2 = unicode(self.AdvancedToChapter.currentText())
349 if text1 != text2:
350 bible = unicode(self.AdvancedVersionComboBox.currentText())
351 book = unicode(self.AdvancedBookComboBox.currentText())
352 # get the verse count for new chapter
353 verses = self.parent.biblemanager.get_book_verse_count(
354- bible, book, int(text2))[0]
355+ bible, book, int(text2))
356 self.adjustComboBox(1, verses, self.AdvancedToVerse)
357
358 def onAdvancedSearchButton(self):
359@@ -318,11 +325,10 @@
360 def onAdvancedFromChapter(self):
361 bible = unicode(self.AdvancedVersionComboBox.currentText())
362 book = unicode(self.AdvancedBookComboBox.currentText())
363- cf = self.AdvancedFromChapter.currentText()
364+ cf = int(self.AdvancedFromChapter.currentText())
365 self.adjustComboBox(cf, self.chapters_from, self.AdvancedToChapter)
366 # get the verse count for new chapter
367- vse = self.parent.biblemanager.get_book_verse_count(bible, book,
368- int(cf))[0]
369+ vse = self.parent.biblemanager.get_book_verse_count(bible, book, cf)
370 self.adjustComboBox(1, vse, self.AdvancedFromVerse)
371 self.adjustComboBox(1, vse, self.AdvancedToVerse)
372
373@@ -432,30 +438,38 @@
374
375 def initialiseBible(self, bible):
376 log.debug(u'initialiseBible %s', bible)
377- books = self.parent.biblemanager.get_bible_books(unicode(bible))
378+ book_data = self.parent.biblemanager.get_bible_books()
379 self.AdvancedBookComboBox.clear()
380 first = True
381- for book in books:
382- self.AdvancedBookComboBox.addItem(book.name)
383+ for book in book_data:
384+ row = self.AdvancedBookComboBox.count()
385+ self.AdvancedBookComboBox.addItem(book[u'book'])
386+ self.AdvancedBookComboBox.setItemData(row, QtCore.QVariant(book[u'total']))
387 if first:
388 first = False
389- self.initialiseChapterVerse(bible, book.name)
390+ self.initialiseChapterVerse(bible, book[u'book'], book[u'total'])
391
392- def initialiseChapterVerse(self, bible, book):
393+ def initialiseChapterVerse(self, bible, book, chapters):
394 log.debug(u'initialiseChapterVerse %s, %s', bible, book)
395- self.chapters_from = self.parent.biblemanager.get_book_chapter_count(
396- bible, book)
397+ self.chapters_from = chapters
398 self.verses = self.parent.biblemanager.get_book_verse_count(bible,
399 book, 1)
400- self.adjustComboBox(1, self.chapters_from, self.AdvancedFromChapter)
401- self.adjustComboBox(1, self.chapters_from, self.AdvancedToChapter)
402- self.adjustComboBox(1, self.verses, self.AdvancedFromVerse)
403- self.adjustComboBox(1, self.verses, self.AdvancedToVerse)
404+ if self.verses == 0:
405+ self.AdvancedSearchButton.setEnabled(False)
406+ self.AdvancedMessage.setText(
407+ translate(u'BibleMediaItem', u'Bible not fully loaded'))
408+ else:
409+ self.AdvancedSearchButton.setEnabled(True)
410+ self.AdvancedMessage.setText(u'')
411+ self.adjustComboBox(1, self.chapters_from, self.AdvancedFromChapter)
412+ self.adjustComboBox(1, self.chapters_from, self.AdvancedToChapter)
413+ self.adjustComboBox(1, self.verses, self.AdvancedFromVerse)
414+ self.adjustComboBox(1, self.verses, self.AdvancedToVerse)
415
416- def adjustComboBox(self, frm, to, combo):
417- log.debug(u'adjustComboBox %s, %s, %s', combo, frm, to)
418+ def adjustComboBox(self, range_from, range_to, combo):
419+ log.debug(u'adjustComboBox %s, %s, %s', combo, range_from, range_to)
420 combo.clear()
421- for i in range(int(frm), int(to) + 1):
422+ for i in range(int(range_from), int(range_to) + 1):
423 combo.addItem(unicode(i))
424
425 def displayResults(self, bible):
426
427=== modified file 'openlp/plugins/bibles/resources/httpbooks.csv'
428--- openlp/plugins/bibles/resources/httpbooks.csv 2009-02-15 19:11:27 +0000
429+++ openlp/plugins/bibles/resources/httpbooks.csv 2009-10-14 18:31:13 +0000
430@@ -1,66 +1,66 @@
431-Genesis,ge,1
432-Exodus,ex,1
433-Leviticus,le,1
434-Numbers,nu,1
435-Deuteronomy,de,1
436-Joshua,jos,1
437-Judges,jud,1
438-Ruth,ru,1
439-1 Samual,1sa,1
440-2 Samual,2sa,1
441-1 Kings,1ki,1
442-2 Kings,2ki,1
443-1 Chronicles,1ch,1
444-2 Chronicles,2ch,1
445-Ezra,ezr,1
446-Nehemiah,ne,1
447-Esther,es,1
448-Job,job,1
449-Psalms,ps,1
450-Proverbs,pr,1
451-Ecclesiastes,ec,1
452-Song of Songs,so,1
453-Isaiah,isa,1
454-Jeremiah,jer,1
455-Lamentations,la,1
456-Ezekiel,exe,1
457-Daniel,da,1
458-Hosea,ho,1
459-Joel,joe,1
460-Amos,am,1
461-Obad,ob,1
462-Jonah,Jonah,1
463-Micah,mic,1
464-Naham,na,1
465-Habakkuk,hab,1
466-Zephaniah,zep,1
467-Haggai,hag,1
468-Zechariah,zec,1
469-Malachi,mal,1
470-Matthew,mt,2
471-Mark,mk,2
472-Luke,lu,2
473-John,joh,2
474-Acts,ac,2
475-Romans,ro,2
476-1 Corinthans,1co,2
477-2 Corinthans,2co,2
478-Galatians,ga,2
479-Ephesians,eph,2
480-Philippians,php,2
481-Colossians,col,2
482-1 Thessalonians,1th,2
483-2 Thessalonians,2th,2
484-1 Timothy,1ti,2
485-2 Timothy,2ti,2
486-Titus,tit,2
487-Philemon,phm,2
488-Hebrews,heb,2
489-James,jas,2
490-1 Peter,1pe,2
491-2 Peter,2pe,2
492-1 John,1jo,2
493-2 John,2jo,2
494-3 John,3jo,2
495-Jude,jude,2
496-Revelation,re,2
497+Genesis,Gen,1,50
498+Exodus,Exod,1,40
499+Leviticus,Lev,1,27
500+Numbers,Num,1,36
501+Deuteronomy,Deut,1,34
502+Joshua,Josh,1,24
503+Judges,Judg,1,21
504+Ruth,Ruth,1,4
505+1 Samual,1Sam,1,31
506+2 Samual,2Sam,1,24
507+1 Kings,1Kgs,1,22
508+2 Kings,2Kgs,1,25
509+1 Chronicles,1Chr,1,29
510+2 Chronicles,2Chr,1,36
511+Ezra,Esra,1,10
512+Nehemiah,Neh,1,13
513+Esther,Esth,1,10
514+Job,Job,1,42
515+Psalms,Ps,1,150
516+Proverbs,Prov,1,31
517+Ecclesiastes,Eccl,1,12
518+Song of Songs,Song,1,8
519+Isaiah,Isa,1,66
520+Jeremiah,Jer,1,5
521+Lamentations,Lam,1,5
522+Ezekiel,Ezek,1,48
523+Daniel,Dan,1,12
524+Hosea,Hos,1,14
525+Joel,Joel,1,3
526+Amos,Amos,1,9
527+Obad,Obad,1,1
528+Jonah,Jonah,1,4
529+Micah,Mic,1,7
530+Naham,Nah,1,3
531+Habakkuk,Hab,1,3
532+Zephaniah,Zeph,1,3
533+Haggai,Hag,1,2
534+Zechariah,Zech,1,3
535+Malachi,Mal,1,4
536+Matthew,Matt,2,28
537+Mark,Mark,2,16
538+Luke,Luke,2,24
539+John,John,2,21
540+Acts,Acts,2,28
541+Romans,Rom,2,16
542+1 Corinthans,1Cor,2,16
543+2 Corinthans,2Cor,2,13
544+Galatians,Gal,2,6
545+Ephesians,Eph,2,6
546+Philippians,Phil,2,4
547+Colossians,Col,2,4
548+1 Thessalonians,1Thess,2,5
549+2 Thessalonians,2Thess,2,3
550+1 Timothy,1Tim,2,6
551+2 Timothy,2Tim,2,4
552+Titus,Titus,2,3
553+Philemon,Phlm,2,1
554+Hebrews,Heb,2,13
555+James,Jas,2,5
556+1 Peter,1Pet,2,5
557+2 Peter,2Pet,2,3
558+1 John,1John,2,5
559+2 John,2John,2,1
560+3 John,3John,2,1
561+Jude,Jude,2,1
562+Revelation,Rev,2,22