Merge lp:~suutari-olli/openlp/add-bible-license-field into lp:openlp
- add-bible-license-field
- Merge into trunk
Status: | Superseded | ||||||||
---|---|---|---|---|---|---|---|---|---|
Proposed branch: | lp:~suutari-olli/openlp/add-bible-license-field | ||||||||
Merge into: | lp:openlp | ||||||||
Diff against target: |
400 lines (+125/-23) 9 files modified
openlp/core/common/uistrings.py (+10/-7) openlp/plugins/bibles/forms/bibleimportform.py (+17/-2) openlp/plugins/bibles/forms/editbibledialog.py (+7/-0) openlp/plugins/bibles/forms/editbibleform.py (+23/-4) openlp/plugins/bibles/lib/manager.py (+5/-5) openlp/plugins/songs/lib/mediaitem.py (+7/-2) openlp/plugins/songs/lib/songstab.py (+13/-1) openlp/plugins/songs/songsplugin.py (+1/-0) tests/functional/openlp_plugins/songs/test_mediaitem.py (+42/-2) |
||||||||
To merge this branch: | bzr merge lp:~suutari-olli/openlp/add-bible-license-field | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Needs Fixing | ||
Tim Bentley | Pending | ||
Review via email: mp+312426@code.launchpad.net |
This proposal supersedes a proposal from 2016-09-18.
This proposal has been superseded by a proposal from 2016-12-18.
Commit message
Description of the change
In this branch:
- Added "Full License" field for Bibles (1623631)
- Added a setting for controlling visibility of "Written by:" (1557579)
- Added placeholder texts for Bible metadata fields
- Re-organized uistrings to alphabetical order
lp:~suutari-olli/openlp/add-bible-license-field (revision 2711)
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
[[1;32mSUCCESS
Tim Bentley (trb143) wrote : Posted in a previous version of this proposal | # |
Azaziah (suutari-olli) wrote : Posted in a previous version of this proposal | # |
Thanks for the comments, I've replied to them.
Azaziah (suutari-olli) wrote : Posted in a previous version of this proposal | # |
> Needs a test just a minor fix is not enough
> Some inline comments.
I've replied to the comments,
will work on a test later.
Raoul Snyman (raoul-snyman) wrote : | # |
A few small fixes and then you should be good to go.
Azaziah (suutari-olli) wrote : | # |
Thanks for the review, I've fixed them.
Unmerged revisions
Preview Diff
1 | === modified file 'openlp/core/common/uistrings.py' | |||
2 | --- openlp/core/common/uistrings.py 2016-11-12 10:00:36 +0000 | |||
3 | +++ openlp/core/common/uistrings.py 2016-12-18 06:07:36 +0000 | |||
4 | @@ -59,6 +59,13 @@ | |||
5 | 59 | self.Automatic = translate('OpenLP.Ui', 'Automatic') | 59 | self.Automatic = translate('OpenLP.Ui', 'Automatic') |
6 | 60 | self.BackgroundColor = translate('OpenLP.Ui', 'Background Color') | 60 | self.BackgroundColor = translate('OpenLP.Ui', 'Background Color') |
7 | 61 | self.BackgroundColorColon = translate('OpenLP.Ui', 'Background color:') | 61 | self.BackgroundColorColon = translate('OpenLP.Ui', 'Background color:') |
8 | 62 | self.BibleShortSearchTitle = translate('OpenLP.Ui', 'Search is Empty or too Short') | ||
9 | 63 | self.BibleShortSearch = translate('OpenLP.Ui', '<strong>The search you have entered is empty or shorter ' | ||
10 | 64 | 'than 3 characters long.</strong><br><br>Please try again with ' | ||
11 | 65 | 'a longer search.') | ||
12 | 66 | self.BibleNoBiblesTitle = translate('OpenLP.Ui', 'No Bibles Available') | ||
13 | 67 | self.BibleNoBibles = translate('OpenLP.Ui', '<strong>There are no Bibles currently installed.</strong><br><br>' | ||
14 | 68 | 'Please use the Import Wizard to install one or more Bibles.') | ||
15 | 62 | self.Bottom = translate('OpenLP.Ui', 'Bottom') | 69 | self.Bottom = translate('OpenLP.Ui', 'Bottom') |
16 | 63 | self.Browse = translate('OpenLP.Ui', 'Browse...') | 70 | self.Browse = translate('OpenLP.Ui', 'Browse...') |
17 | 64 | self.Cancel = translate('OpenLP.Ui', 'Cancel') | 71 | self.Cancel = translate('OpenLP.Ui', 'Cancel') |
18 | @@ -118,6 +125,8 @@ | |||
19 | 118 | self.OLPV2x = "{name} {version}".format(name=self.OLP, version="2.4") | 125 | self.OLPV2x = "{name} {version}".format(name=self.OLP, version="2.4") |
20 | 119 | self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?') | 126 | self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?') |
21 | 120 | self.OpenService = translate('OpenLP.Ui', 'Open service.') | 127 | self.OpenService = translate('OpenLP.Ui', 'Open service.') |
22 | 128 | self.OptionalShowInFooter = translate('OpenLP.Ui', 'Optional, this will be displayed in footer.') | ||
23 | 129 | self.OptionalHideInFooter = translate('OpenLP.Ui', 'Optional, this won\'t be displayed in footer.') | ||
24 | 121 | self.PlaySlidesInLoop = translate('OpenLP.Ui', 'Play Slides in Loop') | 130 | self.PlaySlidesInLoop = translate('OpenLP.Ui', 'Play Slides in Loop') |
25 | 122 | self.PlaySlidesToEnd = translate('OpenLP.Ui', 'Play Slides to End') | 131 | self.PlaySlidesToEnd = translate('OpenLP.Ui', 'Play Slides to End') |
26 | 123 | self.Preview = translate('OpenLP.Ui', 'Preview') | 132 | self.Preview = translate('OpenLP.Ui', 'Preview') |
27 | @@ -131,6 +140,7 @@ | |||
28 | 131 | 'player is disabled.') | 140 | 'player is disabled.') |
29 | 132 | self.ResetBG = translate('OpenLP.Ui', 'Reset Background') | 141 | self.ResetBG = translate('OpenLP.Ui', 'Reset Background') |
30 | 133 | self.ResetLiveBG = translate('OpenLP.Ui', 'Reset live background.') | 142 | self.ResetLiveBG = translate('OpenLP.Ui', 'Reset live background.') |
31 | 143 | self.RequiredShowInFooter = translate('OpenLP.Ui', 'Required, this will be displayed in footer.') | ||
32 | 134 | self.Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') | 144 | self.Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') |
33 | 135 | self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') | 145 | self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') |
34 | 136 | self.Search = translate('OpenLP.Ui', 'Search') | 146 | self.Search = translate('OpenLP.Ui', 'Search') |
35 | @@ -159,13 +169,6 @@ | |||
36 | 159 | self.View = translate('OpenLP.Ui', 'View') | 169 | self.View = translate('OpenLP.Ui', 'View') |
37 | 160 | self.ViewMode = translate('OpenLP.Ui', 'View Mode') | 170 | self.ViewMode = translate('OpenLP.Ui', 'View Mode') |
38 | 161 | self.Video = translate('OpenLP.Ui', 'Video') | 171 | self.Video = translate('OpenLP.Ui', 'Video') |
39 | 162 | self.BibleShortSearchTitle = translate('OpenLP.Ui', 'Search is Empty or too Short') | ||
40 | 163 | self.BibleShortSearch = translate('OpenLP.Ui', '<strong>The search you have entered is empty or shorter ' | ||
41 | 164 | 'than 3 characters long.</strong><br><br>Please try again with ' | ||
42 | 165 | 'a longer search.') | ||
43 | 166 | self.BibleNoBiblesTitle = translate('OpenLP.Ui', 'No Bibles Available') | ||
44 | 167 | self.BibleNoBibles = translate('OpenLP.Ui', '<strong>There are no Bibles currently installed.</strong><br><br>' | ||
45 | 168 | 'Please use the Import Wizard to install one or more Bibles.') | ||
46 | 169 | book_chapter = translate('OpenLP.Ui', 'Book Chapter') | 172 | book_chapter = translate('OpenLP.Ui', 'Book Chapter') |
47 | 170 | chapter = translate('OpenLP.Ui', 'Chapter') | 173 | chapter = translate('OpenLP.Ui', 'Chapter') |
48 | 171 | verse = translate('OpenLP.Ui', 'Verse') | 174 | verse = translate('OpenLP.Ui', 'Verse') |
49 | 172 | 175 | ||
50 | === modified file 'openlp/plugins/bibles/forms/bibleimportform.py' | |||
51 | --- openlp/plugins/bibles/forms/bibleimportform.py 2016-11-25 14:21:27 +0000 | |||
52 | +++ openlp/plugins/bibles/forms/bibleimportform.py 2016-12-18 06:07:36 +0000 | |||
53 | @@ -408,6 +408,12 @@ | |||
54 | 408 | self.permissions_edit = QtWidgets.QLineEdit(self.license_details_page) | 408 | self.permissions_edit = QtWidgets.QLineEdit(self.license_details_page) |
55 | 409 | self.permissions_edit.setObjectName('PermissionsEdit') | 409 | self.permissions_edit.setObjectName('PermissionsEdit') |
56 | 410 | self.license_details_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.permissions_edit) | 410 | self.license_details_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.permissions_edit) |
57 | 411 | self.full_license_label = QtWidgets.QLabel(self.license_details_page) | ||
58 | 412 | self.full_license_label.setObjectName('FullLicenseLabel') | ||
59 | 413 | self.license_details_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.full_license_label) | ||
60 | 414 | self.full_license_edit = QtWidgets.QPlainTextEdit(self.license_details_page) | ||
61 | 415 | self.full_license_edit.setObjectName('FullLicenseEdit') | ||
62 | 416 | self.license_details_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.full_license_edit) | ||
63 | 411 | self.addPage(self.license_details_page) | 417 | self.addPage(self.license_details_page) |
64 | 412 | 418 | ||
65 | 413 | def retranslateUi(self): | 419 | def retranslateUi(self): |
66 | @@ -480,6 +486,7 @@ | |||
67 | 480 | self.version_name_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Version name:')) | 486 | self.version_name_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Version name:')) |
68 | 481 | self.copyright_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Copyright:')) | 487 | self.copyright_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Copyright:')) |
69 | 482 | self.permissions_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Permissions:')) | 488 | self.permissions_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Permissions:')) |
70 | 489 | self.full_license_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Full license:')) | ||
71 | 483 | self.progress_page.setTitle(WizardStrings.Importing) | 490 | self.progress_page.setTitle(WizardStrings.Importing) |
72 | 484 | self.progress_page.setSubTitle(translate('BiblesPlugin.ImportWizardForm', | 491 | self.progress_page.setSubTitle(translate('BiblesPlugin.ImportWizardForm', |
73 | 485 | 'Please wait while your Bible is imported.')) | 492 | 'Please wait while your Bible is imported.')) |
74 | @@ -504,6 +511,7 @@ | |||
75 | 504 | elif self.currentPage() == self.select_page: | 511 | elif self.currentPage() == self.select_page: |
76 | 505 | self.version_name_edit.clear() | 512 | self.version_name_edit.clear() |
77 | 506 | self.permissions_edit.clear() | 513 | self.permissions_edit.clear() |
78 | 514 | self.full_license_edit.clear() | ||
79 | 507 | self.copyright_edit.clear() | 515 | self.copyright_edit.clear() |
80 | 508 | if self.field('source_format') == BibleFormat.OSIS: | 516 | if self.field('source_format') == BibleFormat.OSIS: |
81 | 509 | if not self.field('osis_location'): | 517 | if not self.field('osis_location'): |
82 | @@ -763,6 +771,7 @@ | |||
83 | 763 | self.license_details_page.registerField('license_version', self.version_name_edit) | 771 | self.license_details_page.registerField('license_version', self.version_name_edit) |
84 | 764 | self.license_details_page.registerField('license_copyright', self.copyright_edit) | 772 | self.license_details_page.registerField('license_copyright', self.copyright_edit) |
85 | 765 | self.license_details_page.registerField('license_permissions', self.permissions_edit) | 773 | self.license_details_page.registerField('license_permissions', self.permissions_edit) |
86 | 774 | self.license_details_page.registerField("license_full_license", self.full_license_edit, 'plainText') | ||
87 | 766 | 775 | ||
88 | 767 | def set_defaults(self): | 776 | def set_defaults(self): |
89 | 768 | """ | 777 | """ |
90 | @@ -787,8 +796,13 @@ | |||
91 | 787 | self.setField('proxy_username', settings.value('proxy username')) | 796 | self.setField('proxy_username', settings.value('proxy username')) |
92 | 788 | self.setField('proxy_password', settings.value('proxy password')) | 797 | self.setField('proxy_password', settings.value('proxy password')) |
93 | 789 | self.setField('license_version', self.version_name_edit.text()) | 798 | self.setField('license_version', self.version_name_edit.text()) |
94 | 799 | self.version_name_edit.setPlaceholderText(UiStrings().RequiredShowInFooter) | ||
95 | 790 | self.setField('license_copyright', self.copyright_edit.text()) | 800 | self.setField('license_copyright', self.copyright_edit.text()) |
96 | 801 | self.copyright_edit.setPlaceholderText(UiStrings().RequiredShowInFooter) | ||
97 | 791 | self.setField('license_permissions', self.permissions_edit.text()) | 802 | self.setField('license_permissions', self.permissions_edit.text()) |
98 | 803 | self.permissions_edit.setPlaceholderText(UiStrings().OptionalShowInFooter) | ||
99 | 804 | self.setField('license_full_license', self.full_license_edit.toPlainText()) | ||
100 | 805 | self.full_license_edit.setPlaceholderText(UiStrings().OptionalHideInFooter) | ||
101 | 792 | self.on_web_source_combo_box_index_changed(WebDownload.Crosswalk) | 806 | self.on_web_source_combo_box_index_changed(WebDownload.Crosswalk) |
102 | 793 | settings.endGroup() | 807 | settings.endGroup() |
103 | 794 | 808 | ||
104 | @@ -812,6 +826,7 @@ | |||
105 | 812 | license_version = self.field('license_version') | 826 | license_version = self.field('license_version') |
106 | 813 | license_copyright = self.field('license_copyright') | 827 | license_copyright = self.field('license_copyright') |
107 | 814 | license_permissions = self.field('license_permissions') | 828 | license_permissions = self.field('license_permissions') |
108 | 829 | license_full_license = self.field('license_full_license') | ||
109 | 815 | importer = None | 830 | importer = None |
110 | 816 | if bible_type == BibleFormat.OSIS: | 831 | if bible_type == BibleFormat.OSIS: |
111 | 817 | # Import an OSIS bible. | 832 | # Import an OSIS bible. |
112 | @@ -861,10 +876,10 @@ | |||
113 | 861 | sword_path=self.field('sword_zip_path'), | 876 | sword_path=self.field('sword_zip_path'), |
114 | 862 | sword_key=self.sword_zipbible_combo_box.itemData( | 877 | sword_key=self.sword_zipbible_combo_box.itemData( |
115 | 863 | self.sword_zipbible_combo_box.currentIndex())) | 878 | self.sword_zipbible_combo_box.currentIndex())) |
116 | 864 | |||
117 | 865 | try: | 879 | try: |
118 | 866 | if importer.do_import(license_version) and not importer.stop_import_flag: | 880 | if importer.do_import(license_version) and not importer.stop_import_flag: |
120 | 867 | self.manager.save_meta_data(license_version, license_version, license_copyright, license_permissions) | 881 | self.manager.save_meta_data(license_version, license_version, |
121 | 882 | license_copyright, license_permissions, license_full_license) | ||
122 | 868 | self.manager.reload_bibles() | 883 | self.manager.reload_bibles() |
123 | 869 | if bible_type == BibleFormat.WebDownload: | 884 | if bible_type == BibleFormat.WebDownload: |
124 | 870 | self.progress_label.setText( | 885 | self.progress_label.setText( |
125 | 871 | 886 | ||
126 | === modified file 'openlp/plugins/bibles/forms/editbibledialog.py' | |||
127 | --- openlp/plugins/bibles/forms/editbibledialog.py 2016-10-27 17:45:50 +0000 | |||
128 | +++ openlp/plugins/bibles/forms/editbibledialog.py 2016-12-18 06:07:36 +0000 | |||
129 | @@ -68,6 +68,12 @@ | |||
130 | 68 | self.permissions_edit.setObjectName('permissions_edit') | 68 | self.permissions_edit.setObjectName('permissions_edit') |
131 | 69 | self.permissions_label.setBuddy(self.permissions_edit) | 69 | self.permissions_label.setBuddy(self.permissions_edit) |
132 | 70 | self.license_details_layout.addRow(self.permissions_label, self.permissions_edit) | 70 | self.license_details_layout.addRow(self.permissions_label, self.permissions_edit) |
133 | 71 | self.full_license_label = QtWidgets.QLabel(self.license_details_group_box) | ||
134 | 72 | self.full_license_label.setObjectName('full_license_label') | ||
135 | 73 | self.full_license_edit = QtWidgets.QPlainTextEdit(self.license_details_group_box) | ||
136 | 74 | self.full_license_edit.setObjectName('full_license_edit') | ||
137 | 75 | self.full_license_label.setBuddy(self.full_license_edit) | ||
138 | 76 | self.license_details_layout.addRow(self.full_license_label, self.full_license_edit) | ||
139 | 71 | self.meta_tab_layout.addWidget(self.license_details_group_box) | 77 | self.meta_tab_layout.addWidget(self.license_details_group_box) |
140 | 72 | self.language_selection_group_box = QtWidgets.QGroupBox(self.meta_tab) | 78 | self.language_selection_group_box = QtWidgets.QGroupBox(self.meta_tab) |
141 | 73 | self.language_selection_group_box.setObjectName('language_selection_group_box') | 79 | self.language_selection_group_box.setObjectName('language_selection_group_box') |
142 | @@ -132,6 +138,7 @@ | |||
143 | 132 | self.version_name_label.setText(translate('BiblesPlugin.EditBibleForm', 'Version name:')) | 138 | self.version_name_label.setText(translate('BiblesPlugin.EditBibleForm', 'Version name:')) |
144 | 133 | self.copyright_label.setText(translate('BiblesPlugin.EditBibleForm', 'Copyright:')) | 139 | self.copyright_label.setText(translate('BiblesPlugin.EditBibleForm', 'Copyright:')) |
145 | 134 | self.permissions_label.setText(translate('BiblesPlugin.EditBibleForm', 'Permissions:')) | 140 | self.permissions_label.setText(translate('BiblesPlugin.EditBibleForm', 'Permissions:')) |
146 | 141 | self.full_license_label.setText(translate('BiblesPlugin.EditBibleForm', 'Full license:')) | ||
147 | 135 | self.language_selection_group_box.setTitle(translate('BiblesPlugin.EditBibleForm', 'Default Bible Language')) | 142 | self.language_selection_group_box.setTitle(translate('BiblesPlugin.EditBibleForm', 'Default Bible Language')) |
148 | 136 | self.language_selection_label.setText( | 143 | self.language_selection_label.setText( |
149 | 137 | translate('BiblesPlugin.EditBibleForm', 'Book name language in search field, search results and ' | 144 | translate('BiblesPlugin.EditBibleForm', 'Book name language in search field, search results and ' |
150 | 138 | 145 | ||
151 | === modified file 'openlp/plugins/bibles/forms/editbibleform.py' | |||
152 | --- openlp/plugins/bibles/forms/editbibleform.py 2016-05-21 08:31:24 +0000 | |||
153 | +++ openlp/plugins/bibles/forms/editbibleform.py 2016-12-18 06:07:36 +0000 | |||
154 | @@ -61,10 +61,28 @@ | |||
155 | 61 | """ | 61 | """ |
156 | 62 | log.debug('Load Bible') | 62 | log.debug('Load Bible') |
157 | 63 | self.bible = bible | 63 | self.bible = bible |
158 | 64 | self.version_name_edit.setText(self.manager.get_meta_data(self.bible, 'name').value) | ||
159 | 65 | self.copyright_edit.setText(self.manager.get_meta_data(self.bible, 'copyright').value) | ||
160 | 66 | self.permissions_edit.setText(self.manager.get_meta_data(self.bible, 'permissions').value) | ||
161 | 67 | book_name_language = self.manager.get_meta_data(self.bible, 'book_name_language') | 64 | book_name_language = self.manager.get_meta_data(self.bible, 'book_name_language') |
162 | 65 | """ | ||
163 | 66 | Try loading the metadata, if the field does not exist in the metadata, continue executing the code, | ||
164 | 67 | missing fields will be created on "self.accept" (save). | ||
165 | 68 | """ | ||
166 | 69 | meta = self.manager.get_meta_data(self.bible, 'name') | ||
167 | 70 | copyright = self.manager.get_meta_data(self.bible, 'copyright') | ||
168 | 71 | permission = self.manager.get_meta_data(self.bible, 'permissions') | ||
169 | 72 | full_license = self.manager.get_meta_data(self.bible, 'full_license') | ||
170 | 73 | if meta: | ||
171 | 74 | self.version_name_edit.setText(meta.value) | ||
172 | 75 | if copyright: | ||
173 | 76 | self.copyright_edit.setText(copyright.value) | ||
174 | 77 | if permission: | ||
175 | 78 | self.permissions_edit.setText(permission.value) | ||
176 | 79 | if full_license: | ||
177 | 80 | self.full_license_edit.setPlainText(full_license.value) | ||
178 | 81 | # Set placeholder texts for the fields. | ||
179 | 82 | self.version_name_edit.setPlaceholderText(UiStrings().RequiredShowInFooter) | ||
180 | 83 | self.copyright_edit.setPlaceholderText(UiStrings().RequiredShowInFooter) | ||
181 | 84 | self.permissions_edit.setPlaceholderText(UiStrings().OptionalShowInFooter) | ||
182 | 85 | self.full_license_edit.setPlaceholderText(UiStrings().OptionalHideInFooter) | ||
183 | 68 | if book_name_language and book_name_language.value != 'None': | 86 | if book_name_language and book_name_language.value != 'None': |
184 | 69 | self.language_selection_combo_box.setCurrentIndex(int(book_name_language.value) + 1) | 87 | self.language_selection_combo_box.setCurrentIndex(int(book_name_language.value) + 1) |
185 | 70 | self.books = {} | 88 | self.books = {} |
186 | @@ -107,6 +125,7 @@ | |||
187 | 107 | version = self.version_name_edit.text() | 125 | version = self.version_name_edit.text() |
188 | 108 | copyright = self.copyright_edit.text() | 126 | copyright = self.copyright_edit.text() |
189 | 109 | permissions = self.permissions_edit.text() | 127 | permissions = self.permissions_edit.text() |
190 | 128 | full_license = self.full_license_edit.toPlainText() | ||
191 | 110 | book_name_language = self.language_selection_combo_box.currentIndex() - 1 | 129 | book_name_language = self.language_selection_combo_box.currentIndex() - 1 |
192 | 111 | if book_name_language == -1: | 130 | if book_name_language == -1: |
193 | 112 | book_name_language = None | 131 | book_name_language = None |
194 | @@ -121,7 +140,7 @@ | |||
195 | 121 | if not self.validate_book(custom_names[abbr], abbr): | 140 | if not self.validate_book(custom_names[abbr], abbr): |
196 | 122 | return | 141 | return |
197 | 123 | self.application.set_busy_cursor() | 142 | self.application.set_busy_cursor() |
199 | 124 | self.manager.save_meta_data(self.bible, version, copyright, permissions, book_name_language) | 143 | self.manager.save_meta_data(self.bible, version, copyright, permissions, full_license, book_name_language) |
200 | 125 | if not self.web_bible: | 144 | if not self.web_bible: |
201 | 126 | for abbr, book in self.books.items(): | 145 | for abbr, book in self.books.items(): |
202 | 127 | if book: | 146 | if book: |
203 | 128 | 147 | ||
204 | === modified file 'openlp/plugins/bibles/lib/manager.py' | |||
205 | --- openlp/plugins/bibles/lib/manager.py 2016-11-24 21:48:51 +0000 | |||
206 | +++ openlp/plugins/bibles/lib/manager.py 2016-12-18 06:07:36 +0000 | |||
207 | @@ -380,17 +380,17 @@ | |||
208 | 380 | else: | 380 | else: |
209 | 381 | return None | 381 | return None |
210 | 382 | 382 | ||
212 | 383 | def save_meta_data(self, bible, version, copyright, permissions, book_name_language=None): | 383 | def save_meta_data(self, bible, version, copyright, permissions, full_license, book_name_language=None): |
213 | 384 | """ | 384 | """ |
214 | 385 | Saves the bibles meta data. | 385 | Saves the bibles meta data. |
215 | 386 | """ | 386 | """ |
220 | 387 | log.debug('save_meta data {bible}, {version}, {copyright}, {perms}'.format(bible=bible, | 387 | log.debug('save_meta data {bible}, {version}, {copyright},' |
221 | 388 | version=version, | 388 | ' {perms}, {full_license}'.format(bible=bible, version=version, copyright=copyright, |
222 | 389 | copyright=copyright, | 389 | perms=permissions, full_license=full_license)) |
219 | 390 | perms=permissions)) | ||
223 | 391 | self.db_cache[bible].save_meta('name', version) | 390 | self.db_cache[bible].save_meta('name', version) |
224 | 392 | self.db_cache[bible].save_meta('copyright', copyright) | 391 | self.db_cache[bible].save_meta('copyright', copyright) |
225 | 393 | self.db_cache[bible].save_meta('permissions', permissions) | 392 | self.db_cache[bible].save_meta('permissions', permissions) |
226 | 393 | self.db_cache[bible].save_meta('full_license', full_license) | ||
227 | 394 | self.db_cache[bible].save_meta('book_name_language', book_name_language) | 394 | self.db_cache[bible].save_meta('book_name_language', book_name_language) |
228 | 395 | 395 | ||
229 | 396 | def get_meta_data(self, bible, key): | 396 | def get_meta_data(self, bible, key): |
230 | 397 | 397 | ||
231 | === modified file 'openlp/plugins/songs/lib/mediaitem.py' | |||
232 | --- openlp/plugins/songs/lib/mediaitem.py 2016-11-15 22:44:11 +0000 | |||
233 | +++ openlp/plugins/songs/lib/mediaitem.py 2016-12-18 06:07:36 +0000 | |||
234 | @@ -126,6 +126,7 @@ | |||
235 | 126 | self.update_service_on_edit = Settings().value(self.settings_section + '/update service on edit') | 126 | self.update_service_on_edit = Settings().value(self.settings_section + '/update service on edit') |
236 | 127 | self.add_song_from_service = Settings().value(self.settings_section + '/add song from service') | 127 | self.add_song_from_service = Settings().value(self.settings_section + '/add song from service') |
237 | 128 | self.display_songbook = Settings().value(self.settings_section + '/display songbook') | 128 | self.display_songbook = Settings().value(self.settings_section + '/display songbook') |
238 | 129 | self.display_written_by_text = Settings().value(self.settings_section + '/display written by') | ||
239 | 129 | self.display_copyright_symbol = Settings().value(self.settings_section + '/display copyright symbol') | 130 | self.display_copyright_symbol = Settings().value(self.settings_section + '/display copyright symbol') |
240 | 130 | 131 | ||
241 | 131 | def retranslateUi(self): | 132 | def retranslateUi(self): |
242 | @@ -640,8 +641,12 @@ | |||
243 | 640 | item.raw_footer = [] | 641 | item.raw_footer = [] |
244 | 641 | item.raw_footer.append(song.title) | 642 | item.raw_footer.append(song.title) |
245 | 642 | if authors_none: | 643 | if authors_none: |
248 | 643 | item.raw_footer.append("{text}: {authors}".format(text=translate('OpenLP.Ui', 'Written by'), | 644 | # If the setting for showing "Written by:" is enabled, show it before unspecified authors. |
249 | 644 | authors=create_separated_list(authors_none))) | 645 | if Settings().value('songs/display written by'): |
250 | 646 | item.raw_footer.append("{text}: {authors}".format(text=translate('OpenLP.Ui', 'Written by'), | ||
251 | 647 | authors=create_separated_list(authors_none))) | ||
252 | 648 | else: | ||
253 | 649 | item.raw_footer.append("{authors}".format(authors=create_separated_list(authors_none))) | ||
254 | 645 | if authors_words_music: | 650 | if authors_words_music: |
255 | 646 | item.raw_footer.append("{text}: {authors}".format(text=AuthorType.Types[AuthorType.WordsAndMusic], | 651 | item.raw_footer.append("{text}: {authors}".format(text=AuthorType.Types[AuthorType.WordsAndMusic], |
256 | 647 | authors=create_separated_list(authors_words_music))) | 652 | authors=create_separated_list(authors_words_music))) |
257 | 648 | 653 | ||
258 | === modified file 'openlp/plugins/songs/lib/songstab.py' | |||
259 | --- openlp/plugins/songs/lib/songstab.py 2016-07-24 20:20:25 +0000 | |||
260 | +++ openlp/plugins/songs/lib/songstab.py 2016-12-18 06:07:36 +0000 | |||
261 | @@ -53,6 +53,9 @@ | |||
262 | 53 | self.display_songbook_check_box = QtWidgets.QCheckBox(self.mode_group_box) | 53 | self.display_songbook_check_box = QtWidgets.QCheckBox(self.mode_group_box) |
263 | 54 | self.display_songbook_check_box.setObjectName('songbook_check_box') | 54 | self.display_songbook_check_box.setObjectName('songbook_check_box') |
264 | 55 | self.mode_layout.addWidget(self.display_songbook_check_box) | 55 | self.mode_layout.addWidget(self.display_songbook_check_box) |
265 | 56 | self.display_written_by_check_box = QtWidgets.QCheckBox(self.mode_group_box) | ||
266 | 57 | self.display_written_by_check_box.setObjectName('written_by_check_box') | ||
267 | 58 | self.mode_layout.addWidget(self.display_written_by_check_box) | ||
268 | 56 | self.display_copyright_check_box = QtWidgets.QCheckBox(self.mode_group_box) | 59 | self.display_copyright_check_box = QtWidgets.QCheckBox(self.mode_group_box) |
269 | 57 | self.display_copyright_check_box.setObjectName('copyright_check_box') | 60 | self.display_copyright_check_box.setObjectName('copyright_check_box') |
270 | 58 | self.mode_layout.addWidget(self.display_copyright_check_box) | 61 | self.mode_layout.addWidget(self.display_copyright_check_box) |
271 | @@ -63,16 +66,19 @@ | |||
272 | 63 | self.update_on_edit_check_box.stateChanged.connect(self.on_update_on_edit_check_box_changed) | 66 | self.update_on_edit_check_box.stateChanged.connect(self.on_update_on_edit_check_box_changed) |
273 | 64 | self.add_from_service_check_box.stateChanged.connect(self.on_add_from_service_check_box_changed) | 67 | self.add_from_service_check_box.stateChanged.connect(self.on_add_from_service_check_box_changed) |
274 | 65 | self.display_songbook_check_box.stateChanged.connect(self.on_songbook_check_box_changed) | 68 | self.display_songbook_check_box.stateChanged.connect(self.on_songbook_check_box_changed) |
275 | 69 | self.display_written_by_check_box.stateChanged.connect(self.on_written_by_check_box_changed) | ||
276 | 66 | self.display_copyright_check_box.stateChanged.connect(self.on_copyright_check_box_changed) | 70 | self.display_copyright_check_box.stateChanged.connect(self.on_copyright_check_box_changed) |
277 | 67 | 71 | ||
278 | 68 | def retranslateUi(self): | 72 | def retranslateUi(self): |
280 | 69 | self.mode_group_box.setTitle(translate('SongsPlugin.SongsTab', 'Songs Mode')) | 73 | self.mode_group_box.setTitle(translate('SongsPlugin.SongsTab', 'Song related settings')) |
281 | 70 | self.tool_bar_active_check_box.setText(translate('SongsPlugin.SongsTab', | 74 | self.tool_bar_active_check_box.setText(translate('SongsPlugin.SongsTab', |
282 | 71 | 'Enable "Go to verse" button in Live panel')) | 75 | 'Enable "Go to verse" button in Live panel')) |
283 | 72 | self.update_on_edit_check_box.setText(translate('SongsPlugin.SongsTab', 'Update service from song edit')) | 76 | self.update_on_edit_check_box.setText(translate('SongsPlugin.SongsTab', 'Update service from song edit')) |
284 | 73 | self.add_from_service_check_box.setText(translate('SongsPlugin.SongsTab', | 77 | self.add_from_service_check_box.setText(translate('SongsPlugin.SongsTab', |
285 | 74 | 'Import missing songs from Service files')) | 78 | 'Import missing songs from Service files')) |
286 | 75 | self.display_songbook_check_box.setText(translate('SongsPlugin.SongsTab', 'Display songbook in footer')) | 79 | self.display_songbook_check_box.setText(translate('SongsPlugin.SongsTab', 'Display songbook in footer')) |
287 | 80 | self.display_written_by_check_box.setText(translate( | ||
288 | 81 | 'SongsPlugin.SongsTab', 'Show "Written by:" in footer for unspecified authors')) | ||
289 | 76 | self.display_copyright_check_box.setText(translate('SongsPlugin.SongsTab', | 82 | self.display_copyright_check_box.setText(translate('SongsPlugin.SongsTab', |
290 | 77 | 'Display "{symbol}" symbol before copyright ' | 83 | 'Display "{symbol}" symbol before copyright ' |
291 | 78 | 'info').format(symbol=SongStrings.CopyrightSymbol)) | 84 | 'info').format(symbol=SongStrings.CopyrightSymbol)) |
292 | @@ -92,6 +98,9 @@ | |||
293 | 92 | def on_songbook_check_box_changed(self, check_state): | 98 | def on_songbook_check_box_changed(self, check_state): |
294 | 93 | self.display_songbook = (check_state == QtCore.Qt.Checked) | 99 | self.display_songbook = (check_state == QtCore.Qt.Checked) |
295 | 94 | 100 | ||
296 | 101 | def on_written_by_check_box_changed(self, check_state): | ||
297 | 102 | self.display_written_by = (check_state == QtCore.Qt.Checked) | ||
298 | 103 | |||
299 | 95 | def on_copyright_check_box_changed(self, check_state): | 104 | def on_copyright_check_box_changed(self, check_state): |
300 | 96 | self.display_copyright_symbol = (check_state == QtCore.Qt.Checked) | 105 | self.display_copyright_symbol = (check_state == QtCore.Qt.Checked) |
301 | 97 | 106 | ||
302 | @@ -102,11 +111,13 @@ | |||
303 | 102 | self.update_edit = settings.value('update service on edit') | 111 | self.update_edit = settings.value('update service on edit') |
304 | 103 | self.update_load = settings.value('add song from service') | 112 | self.update_load = settings.value('add song from service') |
305 | 104 | self.display_songbook = settings.value('display songbook') | 113 | self.display_songbook = settings.value('display songbook') |
306 | 114 | self.display_written_by = settings.value('display written by') | ||
307 | 105 | self.display_copyright_symbol = settings.value('display copyright symbol') | 115 | self.display_copyright_symbol = settings.value('display copyright symbol') |
308 | 106 | self.tool_bar_active_check_box.setChecked(self.tool_bar) | 116 | self.tool_bar_active_check_box.setChecked(self.tool_bar) |
309 | 107 | self.update_on_edit_check_box.setChecked(self.update_edit) | 117 | self.update_on_edit_check_box.setChecked(self.update_edit) |
310 | 108 | self.add_from_service_check_box.setChecked(self.update_load) | 118 | self.add_from_service_check_box.setChecked(self.update_load) |
311 | 109 | self.display_songbook_check_box.setChecked(self.display_songbook) | 119 | self.display_songbook_check_box.setChecked(self.display_songbook) |
312 | 120 | self.display_written_by_check_box.setChecked(self.display_written_by) | ||
313 | 110 | self.display_copyright_check_box.setChecked(self.display_copyright_symbol) | 121 | self.display_copyright_check_box.setChecked(self.display_copyright_symbol) |
314 | 111 | settings.endGroup() | 122 | settings.endGroup() |
315 | 112 | 123 | ||
316 | @@ -117,6 +128,7 @@ | |||
317 | 117 | settings.setValue('update service on edit', self.update_edit) | 128 | settings.setValue('update service on edit', self.update_edit) |
318 | 118 | settings.setValue('add song from service', self.update_load) | 129 | settings.setValue('add song from service', self.update_load) |
319 | 119 | settings.setValue('display songbook', self.display_songbook) | 130 | settings.setValue('display songbook', self.display_songbook) |
320 | 131 | settings.setValue('display written by', self.display_written_by) | ||
321 | 120 | settings.setValue('display copyright symbol', self.display_copyright_symbol) | 132 | settings.setValue('display copyright symbol', self.display_copyright_symbol) |
322 | 121 | settings.endGroup() | 133 | settings.endGroup() |
323 | 122 | if self.tab_visited: | 134 | if self.tab_visited: |
324 | 123 | 135 | ||
325 | === modified file 'openlp/plugins/songs/songsplugin.py' | |||
326 | --- openlp/plugins/songs/songsplugin.py 2016-09-19 18:51:48 +0000 | |||
327 | +++ openlp/plugins/songs/songsplugin.py 2016-12-18 06:07:36 +0000 | |||
328 | @@ -60,6 +60,7 @@ | |||
329 | 60 | 'songs/add song from service': True, | 60 | 'songs/add song from service': True, |
330 | 61 | 'songs/display songbar': True, | 61 | 'songs/display songbar': True, |
331 | 62 | 'songs/display songbook': False, | 62 | 'songs/display songbook': False, |
332 | 63 | 'songs/display written by': True, | ||
333 | 63 | 'songs/display copyright symbol': False, | 64 | 'songs/display copyright symbol': False, |
334 | 64 | 'songs/last directory import': '', | 65 | 'songs/last directory import': '', |
335 | 65 | 'songs/last directory export': '', | 66 | 'songs/last directory export': '', |
336 | 66 | 67 | ||
337 | === modified file 'tests/functional/openlp_plugins/songs/test_mediaitem.py' | |||
338 | --- tests/functional/openlp_plugins/songs/test_mediaitem.py 2016-05-31 21:40:13 +0000 | |||
339 | +++ tests/functional/openlp_plugins/songs/test_mediaitem.py 2016-12-18 06:07:36 +0000 | |||
340 | @@ -295,11 +295,18 @@ | |||
341 | 295 | mock_qlist_widget.setData.assert_called_once_with(MockedUserRole, mock_song.id) | 295 | mock_qlist_widget.setData.assert_called_once_with(MockedUserRole, mock_song.id) |
342 | 296 | self.media_item.list_view.addItem.assert_called_once_with(mock_qlist_widget) | 296 | self.media_item.list_view.addItem.assert_called_once_with(mock_qlist_widget) |
343 | 297 | 297 | ||
345 | 298 | def test_build_song_footer_one_author(self): | 298 | @patch(u'openlp.plugins.songs.lib.mediaitem.Settings') |
346 | 299 | def test_build_song_footer_one_author_show_written_by(self, MockedSettings): | ||
347 | 299 | """ | 300 | """ |
348 | 300 | Test build songs footer with basic song and one author | 301 | Test build songs footer with basic song and one author |
349 | 301 | """ | 302 | """ |
351 | 302 | # GIVEN: A Song and a Service Item | 303 | # GIVEN: A Song and a Service Item, mocked settings: True for 'songs/display written by' |
352 | 304 | # and False for 'core/ccli number' (ccli will cause traceback if true) | ||
353 | 305 | |||
354 | 306 | mocked_settings = MagicMock() | ||
355 | 307 | mocked_settings.value.side_effect = [True, False] | ||
356 | 308 | MockedSettings.return_value = mocked_settings | ||
357 | 309 | |||
358 | 303 | mock_song = MagicMock() | 310 | mock_song = MagicMock() |
359 | 304 | mock_song.title = 'My Song' | 311 | mock_song.title = 'My Song' |
360 | 305 | mock_song.authors_songs = [] | 312 | mock_song.authors_songs = [] |
361 | @@ -320,6 +327,39 @@ | |||
362 | 320 | self.assertEqual(author_list, ['my author'], | 327 | self.assertEqual(author_list, ['my author'], |
363 | 321 | 'The author list should be returned correctly with one author') | 328 | 'The author list should be returned correctly with one author') |
364 | 322 | 329 | ||
365 | 330 | @patch(u'openlp.plugins.songs.lib.mediaitem.Settings') | ||
366 | 331 | def test_build_song_footer_one_author_hide_written_by(self, MockedSettings): | ||
367 | 332 | """ | ||
368 | 333 | Test build songs footer with basic song and one author | ||
369 | 334 | """ | ||
370 | 335 | # GIVEN: A Song and a Service Item, mocked settings: False for 'songs/display written by' | ||
371 | 336 | # and False for 'core/ccli number' (ccli will cause traceback if true) | ||
372 | 337 | |||
373 | 338 | mocked_settings = MagicMock() | ||
374 | 339 | mocked_settings.value.side_effect = [False, False] | ||
375 | 340 | MockedSettings.return_value = mocked_settings | ||
376 | 341 | |||
377 | 342 | mock_song = MagicMock() | ||
378 | 343 | mock_song.title = 'My Song' | ||
379 | 344 | mock_song.authors_songs = [] | ||
380 | 345 | mock_author = MagicMock() | ||
381 | 346 | mock_author.display_name = 'my author' | ||
382 | 347 | mock_author_song = MagicMock() | ||
383 | 348 | mock_author_song.author = mock_author | ||
384 | 349 | mock_song.authors_songs.append(mock_author_song) | ||
385 | 350 | mock_song.copyright = 'My copyright' | ||
386 | 351 | service_item = ServiceItem(None) | ||
387 | 352 | |||
388 | 353 | # WHEN: I generate the Footer with default settings | ||
389 | 354 | author_list = self.media_item.generate_footer(service_item, mock_song) | ||
390 | 355 | |||
391 | 356 | # THEN: I get the following Array returned | ||
392 | 357 | self.assertEqual(service_item.raw_footer, ['My Song', 'my author', 'My copyright'], | ||
393 | 358 | 'The array should be returned correctly with a song, one author and copyright,' | ||
394 | 359 | 'text Written by should not be part of the text.') | ||
395 | 360 | self.assertEqual(author_list, ['my author'], | ||
396 | 361 | 'The author list should be returned correctly with one author') | ||
397 | 362 | |||
398 | 323 | def test_build_song_footer_two_authors(self): | 363 | def test_build_song_footer_two_authors(self): |
399 | 324 | """ | 364 | """ |
400 | 325 | Test build songs footer with basic song and two authors | 365 | Test build songs footer with basic song and two authors |
Needs a test just a minor fix is not enough
Some inline comments.