Skip to content

Commit

Permalink
Merge pull request #1026 from MoojMidge/master
Browse files Browse the repository at this point in the history
v7.2.0+beta.1
  • Loading branch information
MoojMidge authored Dec 14, 2024
2 parents 0ea2754 + 4fce263 commit 93a70cc
Show file tree
Hide file tree
Showing 48 changed files with 2,412 additions and 1,219 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/make-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ jobs:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
body: ${{ steps.changelog.outputs.body }}
draft: false
draft: true
prerelease: ${{ steps.release.outputs.pre-release }}

- name: Upload Zip
Expand Down
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.youtube" name="YouTube" version="7.1.1.6" provider-name="anxdpanic, bromix, MoojMidge">
<addon id="plugin.video.youtube" name="YouTube" version="7.2.0+beta.1" provider-name="anxdpanic, bromix, MoojMidge">
<requires>
<import addon="xbmc.python" version="3.0.0"/>
<import addon="script.module.requests" version="2.27.1"/>
Expand Down
99 changes: 99 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,102 @@
## v7.2.0+beta.1
### Fixed
- Fix processing of "q" and "channelId" search query params
- Fix using incorrect client headers with cURL when ISA is not used
- Fix incorrect use of str.lstrip
- Ensure language and region are passed to StreamInfo instances #989
- Fix not updating cache for empty feeds in My Subscriptions
- Make parsing and serialising of list type parameters a reversible operation
- Fix logic used to filter out various type of streams
- Was previously checking any inclusion filters
- Now any exclusion filter that matches will filter stream out
- Fix plugin URI redirect from search
- Fix incorrect path handling during migration of old sqlite databases in Setup Wizard
- Fix errors with progress dialogs in Kodi 18 #1000
- Fix remote watch history not updating #1008
- Fix error when all subtitles are requested
- Fix Python2 syntax error #1000
- Fix interaction between certain plugin URI query parameters when used in STRM files
- Fix playing clips in a playlist #1007
- Fix not identifying own playlists in personal channel
- Fix API requests when not signed in #1013
- Fix potential leak of sensitive data via HTTPServer logging #1016
- Fix adding/removing subscriptions to/from filter list
- Fix playback not working when no API key is provided #1018
- Fix using provided keys for requests that can't use them #1018
- Fix window redirect on video playback failure #1018

### Changed
- Re-enable player request clients that require specific OAuth tokens
- Re-enable OAuth authorisation for YouTube TV
- Update itags for 30fps HLS VP9.2 streams
- Update player client details and selections
- Add some ultra low quality itags
- Optimise wakeup to ensure http server is only started when required
- Improve check for Kodi subtitle language
- Improve handling of audio language selection #989
- Replace preferred language subtitle option with preferred language + fallback + no ASR option #992
- Allow for caching of subscriptions API requests in My Subscriptions
- Only use OAuth tokens if necessary #994 #996
- Set default live stream type to MPEG-DASH for Kodi 21+ #1004
- Skip asking or re-ordering playlists if there is only 1 item in the list
- Prevent caching in incognito mode
- Improve caching and updating of playlist details #1024
- Improve listen address config in Setup Wizard #1016
- Also make 127.0.0.1 the default listen address
- Fallback to 0.0.0.0 if no other local address works

### New
- Update display of comments to be match other listings
- Make comment details follow "Show video details in video lists" setting
- Allow various sorting options
- Truncate comment to 140 characters in listing, full comment available in info dialog
- Show user thumbnail in listing
- Show user with thumbnail in info dialog
- Show video/comment details in navigation breadcrumb bar
- Overhaul update of fanart and other channel info for listings
- Add additional channel info to all items in listings in one pass
- channel name thumbnail in info dialog
- channel name in context menu items
- channel fanart if enabled
- Reduce network requests
- Improve cache usage
- Reduce thread usage
- Add custom Shorts duration #984
- Allow use of HLS streams in external players
- Also allows for playing in Kodi without InputStream.Adaptive
- Add ability to create arbitrary filter criteria to My Subscriptions #984
- "{ATTR_1}{OPERATOR_1}{VALUE_1}[{ATTR_X}{OPERATOR_X}{VALUE_X}...]"
- where ATTR_X can be any valid item getter or property e.g.
- "duration", "title", "artists"/"artists_string", "plot", "date", etc. or
- ".live", ".upcoming", ".completed" etc. Note the "." prefix
- where OPERATOR_X can be
- ">", ">=" (default), "<", "<=", "=", "==", "!=" typically for a int/float/bool type VALUE or
- "contains", "startswith", "endswith", "search" for a string type VALUE
- where VALUE_X is the desired criteria value.
- String type values are wrapped in double quote marks eg. "example"
- "," must be encoded as "%2C" eg. "example,test" becomes "example%2Ctest"
- "}" must be encoded as "%7D" eg. "example}test" becomes "example%7Dtest"
- any number of criteria rules can be used together
- rules seperated by a comma are OR rules
- rules contained within a comma group are AND rules
- Add filler parameter to v3.response_to_items
- Allows listings to be recursively filled after post request filtering
- Also show progress dialog for all listings
- Add support for sequentially filling Recommendations listing
- Add support for sequentially filling Trending listing
- Add new advanced list filter setting
- Works in the same manner as the My Subscriptions filter, but for all listings
- Can also be set using the item_filter plugin URI query parameter
- Add option to prefer lower resolution streams for unselected codecs
- Populate My Subscription listings using feed details
- Store video details from player requests for local history #991
- Add separate Shorts sub-folder in Channel folders #988
- Implementation by @mhomak
- Allow adding/removing bookmarks to/from filter list
- Add direct playback of temporary playlists from YouTube or plugin urls in the form
- plugin://plugin.video.youtube/play?video_ids=xxxxxxxx,xxxxxxxx


## v7.1.1.6
### Fixed
- Fix http server not listening on any interface if listen IP is 0.0.0.0 #927
Expand Down
12 changes: 6 additions & 6 deletions resources/language/resource.language.en_gb/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -638,15 +638,15 @@ msgid "Autoplay suggested videos"
msgstr ""

msgctxt "#30583"
msgid ""
msgid "Filters can be channel names separated by a comma eg. 'The Best Channel,The 2nd Best Channel', and/or custom video filters in the form '{ATTR}{OP}{VALUE}' eg. '{duration}{>=}{180}{artists_string}{=}{\"The Best Channel\"},{duration}{<}{180}'"
msgstr ""

msgctxt "#30584"
msgid "My Subscriptions (Filtered)"
msgstr ""

msgctxt "#30585"
msgid "Filtered channel list (comma delimited)"
msgid "Enable Blacklist to exclude channel names in Filters from My Subscriptions, disable to include channel names"
msgstr ""

msgctxt "#30586"
Expand Down Expand Up @@ -1222,7 +1222,7 @@ msgid "Enable VP9 video"
msgstr ""

msgctxt "#30729"
msgid ""
msgid "Prefer lower resolution streams for unselected codecs"
msgstr ""

msgctxt "#30730"
Expand Down Expand Up @@ -1250,11 +1250,11 @@ msgid "Edited"
msgstr ""

msgctxt "#30736"
msgid "Shorts (1 minute or less)"
msgid "Shorts"
msgstr ""

msgctxt "#30737"
msgid ""
msgid "Shorts - Max duration"
msgstr ""

msgctxt "#30738"
Expand Down Expand Up @@ -1526,7 +1526,7 @@ msgid "Use YouTube website urls with external player"
msgstr ""

msgctxt "#30805"
msgid "Use adaptive streaming formats with external player"
msgid "Use MPEG-DASH with external player"
msgstr ""

msgctxt "#30806"
Expand Down
6 changes: 3 additions & 3 deletions resources/lib/youtube_plugin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@

key_sets = {
'youtube-tv': {
'api_key': '',
'client_id': '',
'client_secret': '',
'api_key': 'QUl6YVN5QzZmdlpTSkhBN1Z6NWo4akNpS1J0N3RVSU9xakUyTjNn',
'client_id': 'ODYxNTU2NzA4NDU0LWQ2ZGxtM2xoMDVpZGQ4bnBlazE4azZiZThiYTNvYzY4',
'client_secret': 'U2JvVmhvRzlzMHJOYWZpeENTR0dLWEFU',
},
'provided': {
'0': {
Expand Down
35 changes: 21 additions & 14 deletions resources/lib/youtube_plugin/kodion/abstract_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@

from __future__ import absolute_import, division, unicode_literals

import re
from re import (
UNICODE as re_UNICODE,
compile as re_compile,
)

from .constants import (
CHECK_SETTINGS,
Expand All @@ -34,6 +37,7 @@
class AbstractProvider(object):
RESULT_CACHE_TO_DISC = 'cache_to_disc' # (bool)
RESULT_FALLBACK = 'fallback' # (bool)
RESULT_FORCE_PLAY = 'force_play' # (bool)
RESULT_FORCE_RESOLVE = 'force_resolve' # (bool)
RESULT_UPDATE_LISTING = 'update_listing' # (bool)

Expand Down Expand Up @@ -110,7 +114,7 @@ def wrapper(command):
if not callable(func):
return None

cls._dict_path[re.compile(re_path, re.UNICODE)] = func
cls._dict_path[re_compile(re_path, re_UNICODE)] = func
return command

if command:
Expand All @@ -132,7 +136,7 @@ def run_wizard(self, context):

try:
if wizard_steps and ui.on_yes_no_input(
localize('setup_wizard'),
' - '.join((localize('youtube'), localize('setup_wizard'))),
(localize('setup_wizard.prompt')
% localize('setup_wizard.prompt.settings'))
):
Expand Down Expand Up @@ -169,7 +173,8 @@ def navigate(self, context):
result = handler(provider=self, context=context, re_match=re_match)
if isinstance(result, tuple):
result, new_options = result
options.update(new_options)
if new_options:
options.update(new_options)

if context.get_param('refresh'):
options[self.RESULT_CACHE_TO_DISC] = True
Expand Down Expand Up @@ -353,7 +358,7 @@ def on_search(provider, context, re_match):
localize('content.remove'),
localize('content.remove.check') % query,
):
return False
return False, None

search_history.del_item(query)
ui.refresh_container()
Expand All @@ -363,7 +368,7 @@ def on_search(provider, context, re_match):
time_ms=2500,
audible=False,
)
return True
return True, None

if command == 'rename':
query = to_unicode(params.get('q', ''))
Expand All @@ -374,14 +379,14 @@ def on_search(provider, context, re_match):
search_history.del_item(query)
search_history.add_item(new_query)
ui.refresh_container()
return True
return True, None

if command == 'clear':
if not ui.on_yes_no_input(
localize('search.clear'),
localize('content.clear.check') % localize('search.history')
):
return False
return False, None

search_history.clear()
ui.refresh_container()
Expand All @@ -391,7 +396,7 @@ def on_search(provider, context, re_match):
time_ms=2500,
audible=False,
)
return True
return True, None

if command.startswith('input'):
query = None
Expand All @@ -415,13 +420,15 @@ def on_search(provider, context, re_match):
query = input_query

if not query:
return False
return False, None

context.set_path(PATHS.SEARCH, 'query')
return (
provider.on_search_run(context=context, query=query),
{provider.RESULT_CACHE_TO_DISC: command != 'input_prompt'},
)
result, options = provider.on_search_run(context, query=query)
if not options:
options = {
provider.RESULT_CACHE_TO_DISC: command != 'input_prompt',
}
return result, options

context.set_content(CONTENT.LIST_CONTENT,
category_label=localize('search'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

ITEMS_PER_PAGE = 'kodion.content.max_per_page' # (int)
HIDE_VIDEOS = 'youtube.view.hide_videos' # (list[str])
SHORTS_DURATION = 'youtube.view.shorts.duration' # (int)
FILTER_LIST = 'youtube.view.filter.list' # (str)

SAFE_SEARCH = 'kodion.safe.search' # (int)
AGE_GATE = 'kodion.age.gate' # (bool)
Expand All @@ -45,7 +47,7 @@
SUPPORT_ALTERNATIVE_PLAYER = 'kodion.support.alternative_player' # (bool)
DEFAULT_PLAYER_WEB_URLS = 'kodion.default_player.web_urls' # (bool)
ALTERNATIVE_PLAYER_WEB_URLS = 'kodion.alternative_player.web_urls' # (bool)
ALTERNATIVE_PLAYER_ADAPTIVE = 'kodion.alternative_player.adaptive' # (bool)
ALTERNATIVE_PLAYER_MPD = 'kodion.alternative_player.mpd' # (bool)

USE_ISA = 'kodion.video.quality.isa' # (bool)
LIVE_STREAMS = 'kodion.live_stream.selection' # (int)
Expand Down
Loading

0 comments on commit 93a70cc

Please sign in to comment.