Skip to content

Commit

Permalink
Merge 3b67b30 into 07883b0
Browse files Browse the repository at this point in the history
  • Loading branch information
newt-sc committed Dec 29, 2023
2 parents 07883b0 + 3b67b30 commit 682f60f
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 14 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
* [v3.7.0](https://github.com/newt-sc/a4kSubtitles/releases/tag/service.subtitles.a4ksubtitles%2Fservice.subtitles.a4ksubtitles-3.7.0):
* New option to auto select and enable embedded subtitles (was previously always enabled)
* New option to prefer forced subtitles on auto selection (was previously always enabled)
* New option to prefer SDH subtitles on auto selection

* [v3.6.0](https://github.com/newt-sc/a4kSubtitles/releases/tag/service.subtitles.a4ksubtitles%2Fservice.subtitles.a4ksubtitles-3.6.0):
* Use group of title matches in the results ordering

Expand Down
37 changes: 32 additions & 5 deletions a4kSubtitles/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,42 @@ def start(api):
preferredlang = core.kodi.get_kodi_setting('locale.subtitlelanguage')

try:
preferredlang_code = core.kodi.xbmc.convertLanguage(preferredlang, core.kodi.xbmc.ISO_639_2)
sub_lang_codes = [core.kodi.xbmc.convertLanguage(s, core.kodi.xbmc.ISO_639_2) for s in core.kodi.xbmc.Player().getAvailableSubtitleStreams()]
core.kodi.xbmc.Player().setSubtitleStream(sub_lang_codes.index(preferredlang_code))
has_subtitles = True
except: pass
def update_sub_stream():
if not core.kodi.get_bool_setting('general', 'auto_select'):
return

prefer_sdh = core.kodi.get_bool_setting('general', 'prefer_sdh')
prefer_forced = core.kodi.get_bool_setting('general', 'prefer_forced')

preferredlang_code = core.kodi.xbmc.convertLanguage(preferredlang, core.kodi.xbmc.ISO_639_2)
sub_langs = [core.kodi.xbmc.convertLanguage(s, core.kodi.xbmc.ISO_639_2) for s in core.kodi.xbmc.Player().getAvailableSubtitleStreams()]

preferedlang_sub_indexes = [i for i, s in enumerate(sub_langs) if preferredlang_code == s]
if len(preferedlang_sub_indexes) == 0:
return

select_index = -1
if prefer_sdh:
select_index = preferedlang_sub_indexes[-1]
if select_index == -1 and not prefer_forced and len(preferedlang_sub_indexes) > 1:
select_index = preferedlang_sub_indexes[1]
if select_index == -1:
select_index = preferedlang_sub_indexes[0]

core.kodi.xbmc.Player().setSubtitleStream(select_index)
return True

has_subtitles = update_sub_stream()
except:
pass

if has_subtitles:
continue

has_imdb = core.kodi.xbmc.getInfoLabel('VideoPlayer.IMDBNumber')
if not has_imdb:
continue

if not core.kodi.get_bool_setting('general', 'auto_download'):
core.kodi.xbmc.executebuiltin('ActivateWindow(SubtitleSearch)')
continue
Expand Down
7 changes: 6 additions & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="service.subtitles.a4ksubtitles"
name="a4kSubtitles"
version="3.6.0"
version="3.7.0"
provider-name="Unknown">
<requires>
<import addon="script.module.requests"/>
Expand All @@ -27,6 +27,11 @@ Supports: OpenSubtitles, BSPlayer, Podnadpisi.NET, Subscene, Addic7ed
<screenshot>screenshot-03.png</screenshot>
</assets>
<news>
[v3.7.0]:
* New option to auto select and enable embedded subtitles (was previously always enabled)
* New option to prefer forced subtitles on auto selection (was previously always enabled)
* New option to prefer SDH subtitles on auto selection

[v3.6.0]:
* Use group of title matches in the results ordering

Expand Down
7 changes: 6 additions & 1 deletion packages/addons.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<addons>
<addon id="service.subtitles.a4ksubtitles"
name="a4kSubtitles"
version="3.6.0"
version="3.7.0"
provider-name="Unknown">
<requires>
<import addon="script.module.requests"/>
Expand All @@ -30,6 +30,11 @@ Supports: OpenSubtitles, BSPlayer, Podnadpisi.NET, Subscene, Addic7ed
<screenshot>screenshot-03.png</screenshot>
</assets>
<news>
[v3.7.0]:
* New option to auto select and enable embedded subtitles (was previously always enabled)
* New option to prefer forced subtitles on auto selection (was previously always enabled)
* New option to prefer SDH subtitles on auto selection

[v3.6.0]:
* Use group of title matches in the results ordering

Expand Down
2 changes: 1 addition & 1 deletion packages/addons.xml.crc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6d127b81863cca124ba08fd35ae2aafd71b5d560
25b94931b2e25bbb63e44043bd0fab01bc6ed215
14 changes: 13 additions & 1 deletion resources/language/resource.language.en_gb/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,19 @@ msgid "Auto download first subtitle silently"
msgstr ""

msgctxt "#33105"
msgid "Auto detect subs encoding"
msgid "Auto detect subtitle encoding"
msgstr ""

msgctxt "#33106"
msgid "Auto select embedded subtitle"
msgstr ""

msgctxt "#33107"
msgid "Prefer SDH (embedded only)"
msgstr ""

msgctxt "#33108"
msgid "Prefer forced (embedded only)"
msgstr ""

# Services
Expand Down
13 changes: 8 additions & 5 deletions resources/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@
<settings>
<!-- General -->
<category label="33001">
<setting id="general.timeout" label="33101" type="slider" default="15" option="int" range="5,20"/>
<setting id="general.results_limit" label="33102" type="slider" default="20" option="int" range="10,100"/>
<setting id="general.auto_search" label="33103" type="bool" default="false"/>
<setting id="general.auto_download" label="33104" type="bool" default="false" enable="eq(-1,true)"/>
<setting id="general.use_chardet" label="33105" type="bool" default="true" />
<setting id="general.timeout" label="33101" type="slider" default="15" option="int" range="5,20"/>
<setting id="general.results_limit" label="33102" type="slider" default="20" option="int" range="10,100"/>
<setting id="general.auto_search" label="33103" type="bool" default="false" />
<setting id="general.auto_download" label="33104" type="bool" default="false" enable="eq(-1,true)" />
<setting id="general.use_chardet" label="33105" type="bool" default="true" />
<setting id="general.auto_select" label="33106" type="bool" default="true" />
<setting id="general.prefer_sdh" label="33107" type="bool" default="false" enable="eq(-1,true)" />
<setting id="general.prefer_forced" label="33108" type="bool" default="true" enable="eq(-1,false)+eq(-2,true)" />
</category>
<!-- Services -->
<category label="33002">
Expand Down
23 changes: 23 additions & 0 deletions tests/test_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ def restore():
api.core.kodi.xbmc.getCondVisibility = default
return restore

def __mock_get_info_label(api, mock_data):
default = api.core.kodi.xbmc.getInfoLabel
api.core.kodi.xbmc.getInfoLabel = lambda v: mock_data.get(v, False)
def restore():
api.core.kodi.xbmc.getInfoLabel = default
return restore

def __mock_api_search(api):
default = api.search
api.search = lambda p: [{}]
Expand Down Expand Up @@ -91,13 +98,17 @@ def test_service_when_video_does_not_have_subtitles():
'VideoPlayer.HasSubtitles': False,
'VideoPlayer.SubtitlesEnabled': False,
})
restore_get_info_label = __mock_get_info_label(a4ksubtitles_api, {
'VideoPlayer.IMDBNumber': 'tt1234567',
})

executebuiltin_spy = utils.spy_fn(a4ksubtitles_api.core.kodi.xbmc, 'executebuiltin')

service.start(a4ksubtitles_api)

restore()
restore_get_cond_visibility()
restore_get_info_label()
executebuiltin_spy.restore()

assert executebuiltin_spy.call_count == 1
Expand All @@ -114,13 +125,17 @@ def test_service_when_video_has_disabled_subtitles():
'VideoPlayer.HasSubtitles': True,
'VideoPlayer.SubtitlesEnabled': False,
})
restore_get_info_label = __mock_get_info_label(a4ksubtitles_api, {
'VideoPlayer.IMDBNumber': 'tt1234567',
})

executebuiltin_spy = utils.spy_fn(a4ksubtitles_api.core.kodi.xbmc, 'executebuiltin')

service.start(a4ksubtitles_api)

restore()
restore_get_cond_visibility()
restore_get_info_label()
executebuiltin_spy.restore()

assert executebuiltin_spy.call_count == 1
Expand All @@ -137,13 +152,17 @@ def test_service_when_does_not_have_video_duration():
'VideoPlayer.HasSubtitles': False,
'VideoPlayer.SubtitlesEnabled': False,
})
restore_get_info_label = __mock_get_info_label(a4ksubtitles_api, {
'VideoPlayer.IMDBNumber': 'tt1234567',
})

executebuiltin_spy = utils.spy_fn(a4ksubtitles_api.core.kodi.xbmc, 'executebuiltin')

service.start(a4ksubtitles_api)

restore()
restore_get_cond_visibility()
restore_get_info_label()
executebuiltin_spy.restore()

assert executebuiltin_spy.call_count == 0
Expand All @@ -161,6 +180,9 @@ def test_service_auto_download():
'VideoPlayer.HasSubtitles': False,
'VideoPlayer.SubtitlesEnabled': False,
})
restore_get_info_label = __mock_get_info_label(a4ksubtitles_api, {
'VideoPlayer.IMDBNumber': 'tt1234567',
})
restore_api_search = __mock_api_search(a4ksubtitles_api)
expected_download_result = 'test_download_result'
restore_api_download = __mock_api_download(a4ksubtitles_api, expected_download_result)
Expand All @@ -172,6 +194,7 @@ def test_service_auto_download():

restore()
restore_get_cond_visibility()
restore_get_info_label()
restore_api_search()
restore_api_download()
executebuiltin_spy.restore()
Expand Down

0 comments on commit 682f60f

Please sign in to comment.