forked from openlp/openlp
Some cleanup and comments
This commit is contained in:
parent
7be9613bf0
commit
232ff2b73f
@ -110,6 +110,15 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
log.debug('No encoding set.')
|
log.debug('No encoding set.')
|
||||||
return
|
return
|
||||||
self.ews_file = open(self.import_source, 'rb')
|
self.ews_file = open(self.import_source, 'rb')
|
||||||
|
# EWS header, version '1.6'/' 3'/' 5':
|
||||||
|
# Offset Field Data type Length Details
|
||||||
|
# --------------------------------------------------------------------------------------------------
|
||||||
|
# 0 Filetype string 38 Specifies the file type and version.
|
||||||
|
# "EasyWorship Schedule File Version 1.6" or
|
||||||
|
# "EasyWorship Schedule File Version 3" or
|
||||||
|
# "EasyWorship Schedule File Version 5"
|
||||||
|
# 40/48/56 Entry count int32le 4 Number of items in the schedule
|
||||||
|
# 44/52/60 Entry length int16le 2 Length of schedule entries: 0x0718 = 1816
|
||||||
# Get file version
|
# Get file version
|
||||||
type, = struct.unpack('<38s', self.ews_file.read(38))
|
type, = struct.unpack('<38s', self.ews_file.read(38))
|
||||||
version = type.decode()[-3:]
|
version = type.decode()[-3:]
|
||||||
@ -130,22 +139,39 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
self.import_wizard.progress_bar.setMaximum(entry_count)
|
self.import_wizard.progress_bar.setMaximum(entry_count)
|
||||||
# Loop over songs
|
# Loop over songs
|
||||||
for i in range(entry_count):
|
for i in range(entry_count):
|
||||||
# Load entry metadata
|
# Load EWS entry metadata:
|
||||||
|
# Offset Field Data type Length Details
|
||||||
|
# ------------------------------------------------------------------------------------------------
|
||||||
|
# 0 Title cstring 50
|
||||||
|
# 307 Author cstring 50
|
||||||
|
# 358 Copyright cstring 100
|
||||||
|
# 459 Administrator cstring 50
|
||||||
|
# 800 Content pointer int32le 4 Position of the content for this entry.
|
||||||
|
# 820 Content type int32le 4 0x01 = Song, 0x02 = Scripture, 0x03 = Presentation,
|
||||||
|
# 0x04 = Video, 0x05 = Live video, 0x07 = Image,
|
||||||
|
# 0x08 = Audio, 0x09 = Web
|
||||||
|
# 1410 Song number cstring 10
|
||||||
self.set_defaults()
|
self.set_defaults()
|
||||||
self.title = self.get_string(file_pos, 50)
|
self.title = self.get_string(file_pos + 0, 50)
|
||||||
resource = self.get_string(file_pos + 51, 255)
|
|
||||||
authors = self.get_string(file_pos + 307, 50)
|
authors = self.get_string(file_pos + 307, 50)
|
||||||
copyright = self.get_string(file_pos + 358, 100)
|
copyright = self.get_string(file_pos + 358, 100)
|
||||||
admin = self.get_string(file_pos + 459, 50)
|
admin = self.get_string(file_pos + 459, 50)
|
||||||
cont_ptr = self.get_i32(file_pos + 800)
|
cont_ptr = self.get_i32(file_pos + 800)
|
||||||
cont_type = self.get_i32(file_pos + 820)
|
cont_type = self.get_i32(file_pos + 820)
|
||||||
notes = self.get_string(file_pos + 1155, 160)
|
|
||||||
self.ccli_number = self.get_string(file_pos + 1410, 10)
|
self.ccli_number = self.get_string(file_pos + 1410, 10)
|
||||||
# Only handle content type 1 (songs)
|
# Only handle content type 1 (songs)
|
||||||
if cont_type != 1:
|
if cont_type != 1:
|
||||||
file_pos += entry_length
|
file_pos += entry_length
|
||||||
continue
|
continue
|
||||||
# Load song content
|
# Load song content
|
||||||
|
# Offset Field Data type Length Details
|
||||||
|
# ------------------------------------------------------------------------------------------------
|
||||||
|
# 0 Length int32le 4 Length (L) of the content, including the compressed content
|
||||||
|
# and the following fields (14 bytes total).
|
||||||
|
# 4 Content string L-14 Content compressed with deflate.
|
||||||
|
# Checksum int32be 4 Alder-32 checksum.
|
||||||
|
# (unknown) 4 0x51 0x4b 0x03 0x04
|
||||||
|
# Content length int32le 4 Length of content after decompression
|
||||||
content_length = self.get_i32(cont_ptr)
|
content_length = self.get_i32(cont_ptr)
|
||||||
deflated_content = self.get_bytes(cont_ptr + 4, content_length - 10)
|
deflated_content = self.get_bytes(cont_ptr + 4, content_length - 10)
|
||||||
deflated_length = self.get_i32(cont_ptr + 4 + content_length - 6)
|
deflated_length = self.get_i32(cont_ptr + 4 + content_length - 6)
|
||||||
@ -293,6 +319,10 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
def set_song_import_object(self, authors, words):
|
def set_song_import_object(self, authors, words):
|
||||||
"""
|
"""
|
||||||
Set the SongImport object members.
|
Set the SongImport object members.
|
||||||
|
|
||||||
|
:param authors: String with authons
|
||||||
|
:param words: Bytes with rtf-encoding
|
||||||
|
:return:
|
||||||
"""
|
"""
|
||||||
if authors:
|
if authors:
|
||||||
# Split up the authors
|
# Split up the authors
|
||||||
@ -429,6 +459,10 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
def get_bytes(self, pos, length):
|
def get_bytes(self, pos, length):
|
||||||
"""
|
"""
|
||||||
Get bytes from ews_file
|
Get bytes from ews_file
|
||||||
|
|
||||||
|
:param pos: Position to read from
|
||||||
|
:param length: Bytes to read
|
||||||
|
:return: Bytes read
|
||||||
"""
|
"""
|
||||||
self.ews_file.seek(pos)
|
self.ews_file.seek(pos)
|
||||||
return self.ews_file.read(length)
|
return self.ews_file.read(length)
|
||||||
@ -436,6 +470,10 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
def get_string(self, pos, length):
|
def get_string(self, pos, length):
|
||||||
"""
|
"""
|
||||||
Get string from ews_file
|
Get string from ews_file
|
||||||
|
|
||||||
|
:param pos: Position to read from
|
||||||
|
:param length: Characters to read
|
||||||
|
:return: String read
|
||||||
"""
|
"""
|
||||||
bytes = self.get_bytes(pos, length)
|
bytes = self.get_bytes(pos, length)
|
||||||
mask = '<' + str(length) + 's'
|
mask = '<' + str(length) + 's'
|
||||||
@ -445,6 +483,9 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
def get_i16(self, pos):
|
def get_i16(self, pos):
|
||||||
"""
|
"""
|
||||||
Get short int from ews_file
|
Get short int from ews_file
|
||||||
|
|
||||||
|
:param pos: Position to read from
|
||||||
|
:return: Short integer read
|
||||||
"""
|
"""
|
||||||
|
|
||||||
bytes = self.get_bytes(pos, 2)
|
bytes = self.get_bytes(pos, 2)
|
||||||
@ -455,6 +496,9 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
def get_i32(self, pos):
|
def get_i32(self, pos):
|
||||||
"""
|
"""
|
||||||
Get long int from ews_file
|
Get long int from ews_file
|
||||||
|
|
||||||
|
:param pos: Position to read from
|
||||||
|
:return: Long integer read
|
||||||
"""
|
"""
|
||||||
bytes = self.get_bytes(pos, 4)
|
bytes = self.get_bytes(pos, 4)
|
||||||
mask = '<i'
|
mask = '<i'
|
||||||
|
@ -456,4 +456,3 @@ class TestEasyWorshipSongImport(TestCase):
|
|||||||
for verse_text, verse_tag in EWS_SONG_TEST_DATA['verses']:
|
for verse_text, verse_tag in EWS_SONG_TEST_DATA['verses']:
|
||||||
mocked_add_verse.assert_any_call(verse_text, verse_tag)
|
mocked_add_verse.assert_any_call(verse_text, verse_tag)
|
||||||
mocked_finish.assert_called_with()
|
mocked_finish.assert_called_with()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user