Compare commits

...

98 commits

Author SHA1 Message Date
MoojMidge
3c94c57076
Merge pull request #1353 from MoojMidge/v7.4
v7.4.0+beta.1
2025-12-15 10:40:55 +11:00
MoojMidge
00e8c20add Version bump v7.4.0+beta.1 2025-12-15 10:37:22 +11:00
MoojMidge
20b570a68a Add setting to choose what sources are used for My Subscriptions
- Can choose from one or more of the following
  - Subscriptions
  - Saved playlists
  - Bookmarked channels
  - Bookmarked playlists
2025-12-15 10:17:29 +11:00
MoojMidge
00cc0cc658 Fix fallback method for retrieving string list setting when setting has no value 2025-12-15 10:02:23 +11:00
MoojMidge
a264be91a2 Move youtube.helper.channel_filter_split method to kodion.utils.convert_format
- Also move youtube.helper.custom_filter_split used by channel_filter_split method
2025-12-14 23:03:52 +11:00
MoojMidge
2575abf722 Allow calling yt_video.process to rate a video with a predefined new rating rather than prompting for user input 2025-12-14 22:39:54 +11:00
MoojMidge
9368016acc Re-organise post play settings
- Grouped under "Watched" rather than "Mark as watched"
- Standardise labels for auto actions
- Move to advanced settings
2025-12-14 22:39:45 +11:00
MoojMidge
e86acc13a1 Optimise logging of objects that need to be redacted
- Handle redaction as part of logging using custom string conversions
- Avoid duplicating/copying objects for logging and then again for redaction
- Only copy objects once if logging is enabled
- Remove duplicated code
2025-12-13 23:19:18 +11:00
MoojMidge
6293c8e4b5 Update workaround for Python strptime bug
- Fixed in Python v3.14 and backported to v3.12 and v3.13
- Fix broke old workaround
2025-12-11 06:36:14 +11:00
MoojMidge
5b224e1424 Fix not updating authorised client request result used for playback tracking #1343 2025-12-11 05:58:35 +11:00
MoojMidge
b03275ad19
Merge pull request #1350 from MoojMidge/v7.3
v7.3.0.1
2025-12-09 17:49:43 +11:00
MoojMidge
f36acad119 Misc tidy ups 2025-12-07 09:12:44 +11:00
MoojMidge
d933bd1e0c Don't process results in resource_manager methods if no items are available 2025-12-07 09:11:02 +11:00
MoojMidge
a6da15c2c5 Add aspect ratio info to video ListItem #1348 2025-12-06 21:43:32 +11:00
MoojMidge
54a0604952 Set default MPEG-DASH timescale to 1000 2025-12-06 11:56:38 +11:00
MoojMidge
a4dfa572c8 Update thread counts after max thread counter semaphore is acquired
- Prevent possible issue where counter may inaccurately reflect number of threads used
2025-12-06 11:56:38 +11:00
MoojMidge
d019d048f0 Enable using saved playlists in My Subscriptions 2025-12-06 11:56:38 +11:00
MoojMidge
c03d25b537 Enable streaming for My Subscriptions feed requests 2025-12-06 11:56:37 +11:00
MoojMidge
45f11a58a6 Disable request cache if response is streamed 2025-12-06 11:56:37 +11:00
MoojMidge
6b3f7fd4bd Version bump v7.3.0.1 2025-12-06 11:55:43 +11:00
MoojMidge
d5b89c510a Delay gc collection rather than disabling 2025-12-06 11:55:21 +11:00
MoojMidge
c819b5a9eb Workaround crash caused by non-thread safe behaviour of sqlite connection when used as context manager #1346 2025-12-06 11:54:51 +11:00
MoojMidge
bf0445f5bd
Merge pull request #1326 from weblate/weblate-kodi-add-ons-video-plugin-video-youtube
Translations update from Kodi Weblate
2025-11-21 10:06:20 +11:00
Hosted Weblate
eff3946485 Translated using Weblate (Italian (it_it))
Currently translated at 100.0% (388 of 388 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Swedish (sv_se))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 92.0% (357 of 388 strings)

Deleted translation using Weblate (English (United Kingdom))

Translated using Weblate (Russian (ru_ru))

Currently translated at 89.4% (347 of 388 strings)

Translated using Weblate (Italian (it_it))

Currently translated at 100.0% (388 of 388 strings)

Translated using Weblate (Russian (ru_ru))

Currently translated at 52.5% (204 of 388 strings)

Translated using Weblate (German (de_de))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Ukrainian (uk_ua))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Polish (pl_pl))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Irish)

Currently translated at 0.2% (1 of 388 strings)

Added translation using Weblate (Hebrew)

Added translation using Weblate (Irish)

Added translation using Weblate (English (United Kingdom))

Added translation using Weblate (Filipino)

Added translation using Weblate (Irish (ga_ie))

Added translation using Weblate (Occidental (ie_GA))

Added translation using Weblate (Occitan (France) (oc_fr))

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
Co-authored-by: wabisabi926 <liwenliang926@163.com>
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/de_de/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/es_es/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ga/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/it_it/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/pl_pl/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ru_ru/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/sv_se/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/uk_ua/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/zh_Hans/
Translation: Kodi add-ons: video/plugin.video.youtube
2025-11-19 19:01:56 +00:00
MoojMidge
1a249438cb
Merge pull request #1340 from MoojMidge/master
v7.3.0
2025-11-20 06:01:52 +11:00
MoojMidge
cdbcf5b517 Version bump v7.3.0 2025-11-20 05:48:44 +11:00
MoojMidge
14d446a8e4 Revert change to busy polling interval #1339 2025-11-19 07:37:29 +11:00
MoojMidge
f5f616ce5d
Merge pull request #1335 from MoojMidge/v7.3
v7.3.0+beta.10
2025-11-16 10:52:46 +11:00
MoojMidge
b746b36d89 Version bump v7.3.0+beta.10 2025-11-16 10:50:54 +11:00
MoojMidge
36f1cc6048 Misc optimisations
- Avoid using dir()
- Remove custom url quote methods that are no longer faster than urllib.parse methods in newer Python versions
- Reduce polling intervals when checking if Kodi is busy
- Use custom requests.Session class to avoid creation of unused default https adapter and ssl context
2025-11-16 10:50:30 +11:00
MoojMidge
ef99864c19 Change output and sorting of profiling stats 2025-11-16 08:47:30 +11:00
MoojMidge
bbc2411130 Prune invalid entries from DB when closing connection #1331 2025-11-16 08:47:29 +11:00
MoojMidge
a8fa1606cb Fix regressions with SQLite db operations #1331 2025-11-16 08:47:29 +11:00
MoojMidge
ed3f53c60b
Merge pull request #1329 from MoojMidge/v7.3
v7.3.0+beta.9
2025-11-10 11:43:08 +11:00
MoojMidge
0db45cb923 Version bump v7.3.0+beta.9 2025-11-10 11:33:46 +11:00
MoojMidge
13a4907262 All specifying additional run builtin functions when creating plugin uri 2025-11-10 11:33:45 +11:00
MoojMidge
a9f0436deb Improve robustness of fetching recommended and related videos 2025-11-10 11:33:45 +11:00
MoojMidge
b585725a04 Misc tidy ups 2025-11-10 11:33:45 +11:00
MoojMidge
86008ba189 Improve workarounds for SQLite concurrency issues
- Data cache, function cache, and requests cache now all use a temporary memory store
- Memory store is handled as part of the base Storage class
- No external locking used, only retry if internal SQLite locks cannot be obtained
- DB writes are deferred until no more write operations are queued for immediate processing
- All write operations explicitly create a new transaction
- Disable cached statements
2025-11-09 22:31:59 +11:00
MoojMidge
7472956964 Remove redundant timestamp parameter in Storage._set
- Previously used by PlaybackHistory.set_item
- Since replaced by dedicated Storage._update method and associated wrappers
2025-11-09 10:29:49 +11:00
MoojMidge
eee33347f3 Fix potentially trying to create a cursor on a closed db conection object 2025-11-09 10:29:48 +11:00
MoojMidge
a710a77576 Remove possibly invalid access token if an authentication error occurs
- Allows user to sign-in again and refresh missing access tokens without having to sign-out first
2025-11-09 10:29:48 +11:00
MoojMidge
419c37ddd1 Fix possible exception when plugin items that resolve to a removed Youtube item are added to a listing 2025-11-09 10:29:47 +11:00
MoojMidge
154c4db740 Disable label masks being used in Kodi 18 #1327 2025-11-09 10:29:47 +11:00
MoojMidge
04ba84da63 Improve parsing of live MPD url 2025-11-01 21:52:54 +11:00
MoojMidge
be8237a5e1 Improve handling of changes to preferred subtitle format settings 2025-11-01 21:52:54 +11:00
MoojMidge
3d2f20eb4a Don't force track type for subtitle requests
- Parameter does not appear to used any longer
2025-11-01 21:52:54 +11:00
MoojMidge
a7e2b3f8ca Player client maintenance 2025-11-01 21:52:53 +11:00
MoojMidge
417e054b84 Better organise and use standard labels for http server address and port settings 2025-10-28 06:52:07 +11:00
MoojMidge
1e4d61fac2 Improve settings value formatting 2025-10-28 06:52:07 +11:00
MoojMidge
37b898a0c4 Try to make http server IP address selection even more obvious when running Setup Wizard #1320 2025-10-28 06:52:07 +11:00
MoojMidge
36e2809028 Improve logging of errors caused by localised strings that have been incorrectly translated 2025-10-28 06:52:07 +11:00
MoojMidge
0bea79e9f4 Python 2 compatibility workaround for lack of timeout when trying to acquire an RLock 2025-10-28 06:51:07 +11:00
MoojMidge
ddc7b4900b More expansive handling of inconsistent urllib3 exception re-raising
- May be overly broad but the urllib3 behaviour is odd...
- Follow up to e509a864dc
2025-10-28 06:24:31 +11:00
MoojMidge
d5e9dfa56f
Merge pull request #1324 from MoojMidge/v7.3
v7.3.0+beta.8
2025-10-26 19:14:48 +11:00
MoojMidge
2c701f800c Version bump v7.3.0+beta.8 2025-10-26 19:10:52 +11:00
MoojMidge
3a4244a074 Merge remote-tracking branch 'anxdpanic/master' into v7.3 2025-10-26 19:10:52 +11:00
Weblate (bot)
c9f16ebed3
Translations update from Kodi Weblate (#1321)
* Translated using Weblate (Russian (ru_ru))

Currently translated at 89.4% (347 of 388 strings)

Translated using Weblate (Italian (it_it))

Currently translated at 100.0% (388 of 388 strings)

Translated using Weblate (Russian (ru_ru))

Currently translated at 52.5% (204 of 388 strings)

Translated using Weblate (German (de_de))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Ukrainian (uk_ua))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Polish (pl_pl))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Irish)

Currently translated at 0.2% (1 of 388 strings)

Added translation using Weblate (Hebrew)

Added translation using Weblate (Irish)

Added translation using Weblate (English (United Kingdom))

Added translation using Weblate (Filipino)

Added translation using Weblate (Irish (ga_ie))

Added translation using Weblate (Occidental (ie_GA))

Added translation using Weblate (Occitan (France) (oc_fr))

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/de_de/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/es_es/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ga/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/it_it/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/pl_pl/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ru_ru/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/uk_ua/
Translation: Kodi add-ons: video/plugin.video.youtube

* Deleted translation using Weblate (English (United Kingdom))

* Deleted translation using Weblate (Filipino)

* Deleted translation using Weblate (Irish (ga_ie))

* Deleted translation using Weblate (Occidental (ie_ga))

* Deleted translation using Weblate (Occitan (France) (oc_fr))

* Deleted translation using Weblate (Kannada (India) (kn_in))

* Deleted translation using Weblate (Ossetian (os_os))

---------

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
2025-10-26 19:07:11 +11:00
MoojMidge
8924a95cce Fix regression in handling audio only setting after d154325c5b 2025-10-26 14:04:09 +11:00
MoojMidge
23282aa51d Fix comments not using correct sort methods
- Allow any content sub-type to set sort methods regardless of main type
2025-10-26 14:04:08 +11:00
MoojMidge
a989752ad8 Fix incorrectly using playlist cache entries that have been invalidated by playlist modification 2025-10-26 14:04:08 +11:00
MoojMidge
6881f9a521 Fix some context menu actions failing for video item bookmarks 2025-10-26 14:04:07 +11:00
MoojMidge
03e2d91347 Misc tidy ups 2025-10-26 14:04:07 +11:00
MoojMidge
59d2ebee35 Improve offline access to cached data 2025-10-26 14:04:06 +11:00
MoojMidge
04e8488380 Ensure listings and items added by the addon have correct sort order 2025-10-26 14:04:06 +11:00
MoojMidge
43a25f3299 Further changes to detection of linked and forced plugin actions 2025-10-25 13:53:23 +11:00
MoojMidge
030be1f985 Allow forcing stack trace output per logging method call 2025-10-25 13:53:22 +11:00
MoojMidge
ddfa1983af Updates to SQLite database lock handling
- Workarounds for cpython/#118172
- Skip db operations if lock cannot be acquired
- Dont try to acquire lock on read
- Dont reuse cursor
- Only trim database size if required
- Ensure request cache size limits are used
2025-10-25 13:53:22 +11:00
MoojMidge
1c1b3ce7db Fix resetting client region when playing media with subtitles enabled 2025-10-23 12:19:33 +11:00
Weblate (bot)
2a6b26da8a
Translations update from Kodi Weblate (#1319)
* Translated using Weblate (Russian (ru_ru))

Currently translated at 89.4% (347 of 388 strings)

Translated using Weblate (Italian (it_it))

Currently translated at 100.0% (388 of 388 strings)

Translated using Weblate (Russian (ru_ru))

Currently translated at 52.5% (204 of 388 strings)

Translated using Weblate (German (de_de))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Ukrainian (uk_ua))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Polish (pl_pl))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Irish)

Currently translated at 0.2% (1 of 388 strings)

Added translation using Weblate (Hebrew)

Added translation using Weblate (Irish)

Added translation using Weblate (English (United Kingdom))

Added translation using Weblate (Filipino)

Added translation using Weblate (Irish (ga_ie))

Added translation using Weblate (Occidental (ie_GA))

Added translation using Weblate (Occitan (France) (oc_fr))

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/de_de/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/es_es/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ga/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/it_it/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/pl_pl/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ru_ru/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/uk_ua/
Translation: Kodi add-ons: video/plugin.video.youtube

* Deleted translation using Weblate (English (United Kingdom))

* Deleted translation using Weblate (Hebrew)

* Deleted translation using Weblate (Irish)

---------

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
2025-10-22 18:51:17 +11:00
MoojMidge
e86297d3b2
Merge pull request #1316 from MoojMidge/master
v7.3.0+beta.7
2025-10-19 15:05:05 +11:00
MoojMidge
884f76ddf0 Merge remote-tracking branch 'anxdpanic/master' into v7.3 2025-10-19 14:41:43 +11:00
MoojMidge
796afd5fa5 Version bump v7.3.0+beta.7 2025-10-19 14:41:42 +11:00
MoojMidge
1f40e325de Only add playable items to playlist when adding related items 2025-10-19 14:41:42 +11:00
MoojMidge
ae62d0d582 Fix using invalid default end limit with Playlist.GetItems JSONRPC method 2025-10-19 14:41:42 +11:00
MoojMidge
f9e9fe8efa Fix conversion of SRT subtitles to WebVTT #1256 2025-10-19 14:41:41 +11:00
MoojMidge
208812af99 Allow changing addon language when offline 2025-10-19 14:41:41 +11:00
MoojMidge
baa9ca2006 Ignore player request failures that may incorrectly indicate a need to sign-in #1312 2025-10-19 14:41:41 +11:00
MoojMidge
67df415e1b Refactor player request failure reasons as class variable 2025-10-19 14:41:40 +11:00
MoojMidge
6c17087be2 Add refresh to context menu of playlists 2025-10-19 14:41:40 +11:00
MoojMidge
50c1a351ac Improve detection of linked and forced plugin actions 2025-10-19 14:41:39 +11:00
MoojMidge
6f825c902c Include playlist_id listitem property for items from virtual playlists 2025-10-19 14:41:39 +11:00
MoojMidge
753e5ac9aa Refactor to move more UI related methods into XbmcContextUI 2025-10-19 14:41:39 +11:00
MoojMidge
b8d8928ea8 Workaround playback failure of progressive streams 2025-10-19 14:41:38 +11:00
MoojMidge
d154325c5b Misc tidy ups 2025-10-19 14:41:38 +11:00
MoojMidge
5f38dc3931 Allow watch urls from music.youtube.com to be directly handled by the addon 2025-10-18 19:13:44 +11:00
MoojMidge
01e4322791 Allow urls from www.youtubekids.com to be directly handled by the addon 2025-10-12 20:00:50 +11:00
MoojMidge
92a7c81698 Fix re-sorting live search lists 2025-10-12 20:00:49 +11:00
MoojMidge
220648dea1 Disable use of custom thumbnail urls #1245 2025-10-12 20:00:49 +11:00
MoojMidge
75e73c93d7 Fix typo in name of KodiLogger.warning_trace() method 2025-10-12 20:00:49 +11:00
MoojMidge
d07945b742 Allow restoring current container position 2025-10-12 20:00:48 +11:00
Weblate (bot)
725a0ca552
Translations update from Kodi Weblate (#1304)
* Translated using Weblate (Russian (ru_ru))

Currently translated at 89.4% (347 of 388 strings)

Translated using Weblate (Italian (it_it))

Currently translated at 100.0% (388 of 388 strings)

Translated using Weblate (Russian (ru_ru))

Currently translated at 52.5% (204 of 388 strings)

Translated using Weblate (German (de_de))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Ukrainian (uk_ua))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Polish (pl_pl))

Currently translated at 94.3% (366 of 388 strings)

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Irish)

Currently translated at 0.2% (1 of 388 strings)

Added translation using Weblate (Hebrew)

Added translation using Weblate (Irish)

Added translation using Weblate (English (United Kingdom))

Added translation using Weblate (Filipino)

Added translation using Weblate (Irish (ga_ie))

Added translation using Weblate (Occidental (ie_GA))

Added translation using Weblate (Occitan (France) (oc_fr))

Translated using Weblate (Spanish (Spain) (es_es))

Currently translated at 100.0% (388 of 388 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/de_de/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/es_es/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ga/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/it_it/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/pl_pl/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ru_ru/
Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/uk_ua/
Translation: Kodi add-ons: video/plugin.video.youtube

* Delete resources/language/resource.language.en_GB directory

---------

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alexey <signfinder@gmail.com>
Co-authored-by: Alfonso Cachero <alfonso.cachero@gmail.com>
Co-authored-by: Dmitry Petrov <dimakrm361@gmail.com>
Co-authored-by: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Marek Adamski <fevbew@wp.pl>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: Pavlo Marianov <acid@jack.kyiv.ua>
Co-authored-by: MoojMidge <56883549+MoojMidge@users.noreply.github.com>
2025-10-11 20:25:20 +11:00
MoojMidge
3b4b7a4ea0 Workaround addon service not starting prior to plugin invocation #1298 2025-10-11 17:15:46 +11:00
MoojMidge
fe2b0b8d74 Update tear down methods 2025-10-11 15:19:30 +11:00
MoojMidge
c88c017dfa Fix parsing of logged_in query parameter 2025-10-11 11:59:42 +11:00
MoojMidge
ede1903c62
Merge pull request #1306 from MoojMidge/v7.3
v7.3.0+beta.6
2025-10-06 12:00:08 +11:00
MoojMidge
56c3fa474c Version bump v7.3.0+beta.6 2025-10-06 11:56:59 +11:00
MoojMidge
85c7a5d892 Fix typo in YouTubePlayerClient error hook 2025-10-06 11:55:46 +11:00
140 changed files with 2700 additions and 14090 deletions

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.youtube" name="YouTube" version="7.3.0+beta.5" provider-name="anxdpanic, bromix, MoojMidge">
<addon id="plugin.video.youtube" name="YouTube" version="7.4.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"/>

View file

@ -1,3 +1,270 @@
## v7.4.0+beta.1
### Fixed
- Fix fallback method for retrieving string list setting when setting has no value
- Update workaround for Python strptime bug
- Fix not updating authorised client request result used for playback tracking #1343
- Don't process results in resource_manager methods if no items are available
- Set default MPEG-DASH timescale to 1000
- Disable request cache if response is streamed
### Changed
- Re-organise post play settings
- Enable streaming for My Subscriptions feed requests
### New
- Add setting to choose what sources are used for My Subscriptions
- Add aspect ratio info to video ListItem #1348
- Enable using saved playlists in My Subscriptions
## v7.3.0.1
### Fixed
- Workaround crash caused by non-thread safe behaviour of sqlite connection when used as context manager #1346
### Changed
- Delay gc collection rather than disabling
## v7.3.0
### Fixed
- Revert change to busy polling interval #1339
- Prune invalid entries from DB when closing connection #1331
- Fix regressions with SQLite db operations #1331
- Disable label masks being used in Kodi 18 #1327
- Python 2 compatibility workaround for lack of timeout when trying to acquire an RLock #1327
- More expansive handling of inconsistent urllib3 exception re-raising
- Fix regression in handling audio only setting after d154325c5b672dccc6a17413063cfdeb32256ffd
- Fix comments not using correct sort methods
- Fix incorrectly using playlist cache entries that have been invalidated by playlist modification
- Fix some context menu actions failing for video item bookmarks
- Ensure listings and items added by the addon have correct sort order
- Fix resetting client region when playing media with subtitles enabled
- Only add playable items to playlist when adding related items
- Fix using invalid default end limit with Playlist.GetItems JSONRPC method
- Fix conversion of SRT subtitles to WebVTT #1256
- Workaround playback failure of progressive streams
- Fix re-sorting live search lists
- Disable use of custom thumbnail urls #1245
- Workaround addon service not starting prior to plugin invocation #1298
- Fix unofficial version using localised sort order #1309
- Fix parsing of logged_in query parameter
- Fix typo in YouTubePlayerClient error hook
- Fix not resolving single playable items when using the uri2addon plugin endpoint #1300
- Correctly check whether access tokens are available to be used for player requests
- Fix not correctly resetting client instance
- Dont restore container position on forced refresh when playback ends
- Better handle urllib3 re-raising low level errors but sometimes not
- Ignore unused parameters in item constructors #1282
- Various misc fixes for focus and position loss on refresh
- Fix possible unnecessary listing refresh after playlist action
- Don't check items added to non music or video playlists
- Re-enable setting for displaying saved playlists #1023
- Fix exceptions with using non-existent request response as context manager #1279
- Use different default player client request which provides more captions in response #1250
- Exclude retrying player clients that do not support authentication if authentication is required #1273
- Only request authenticated player request once, if not otherwise required #1273
- Fix not updating breadcrumb after certain context menu actions
- Fix setting focus on items in listing when parent item is not shown #1012
- Reduce CPU usage of service runner loop when idle
- Simplify window history fallback for search inputs #1070 #1266
- Fix MPD quality selection #1268
- Fix stream feature for disabling HFR at max resolution #539
- Don't re-raise BrokenPipeError in RequestHandler.handle_one_request #1259
- Fix including details in label2 mask when video details in listings is disabled #1265
- Fix incorrect modification of custom thumbnails #1245
- Refresh stale cached entries if new player data is available #1259
- Disable use of captions from clients that are sometimes aggressively rate limited #1250
- Switch browse client for recommended videos #1254
- Ignore failing player requests that require signing in but won't accept OAuth2 authentication #1254
- Improve querying of GUI info to work with widgets and custom windows #1243
- Fix using locale specific abbreviations for weekday and month in If-Modified-Since header #1246
- Workaround various Kodi 18 and Python 2 issues #1246
- Fix inconsistencies between item IDs used as params that could result in exceptions
- Fix generated page token not working for first page in listing
- Don't replace non-standard JPEG thumbnails with WebP thumbnails #1245
- Fix not parsing infolabels used in plugin url path #1239 #1243
- Fix not parsing infolabels used as plugin url query params #1239
- Fix unnecessarily processing window properties #1238
- Workaround for distributions that patch Kodi to disable System.InternetState #1224
- Workaround issue with search not returning items if no search query is used
- Misc updates to try and prevent some GVS requests from failing #1222
- Fix not correctly updating channel details of subscriptions #1226
- Redact IP address in stream urls when not using InputStream.Adaptive
- Fix implementation of logging module debugging property
- Python 2 compatibility fix to automatically handle timezones when determining timestamps
- Fix not skipping invalid items in plugin list response
- Fix not showing Create bookmark item if bookmarks list is empty
- Python 2 compatibility fixes for pretty print logging and lack of datetime.datetime.timestamp
- Fix typo resulting in spatial audio streams not being correctly enabled/disabled
- Ensure DELETE API requests are properly authorised #1226
- Update XbmcContext.localize to handle string interpolation #1225
- Attempt to mitigate possible memory leaks associated with use of Python Requests
- Ensure plugin folders in channel listings are not processed as YouTube items
- Fix not refreshing cached data when not logged in #1224
- Fix potentially misidentifying vp9.2 video streams #1222
- Fix not fully redacting logged stream data
- Fix clip start and end time parsing
- Fix possible exception when fetching subtitles after http server fails to wakeup
- Improve concurrent JSON file IO operations #1218
- Change pruning of sqlite databases to avoid potential deadlocks #1161
- Avoid potential deadlock in v3._process_list_response #1161
- Improve listing pre and post fill methods #1161
- Fix repeating previous V1 browse/next requests when no continuation is available #1161
- Fix typo in allowable search parameters
- Ensure best available quality is used for thumbnails as fanart #1212
- Fix double forward slash in channel url in description
- Fix toggling watched status on non-forced refresh
- Ensure logged in status is properly (re)set when client is reset #1210
- Don't rely on dict insertion order for client groups #1185
- Ensure authenticated requests are used only when necessary #1210 #1196
- Workaround playlistNotFound error in Related Videos #1210 #1196
- Fix stream quality checks incorrectly identifying 480p streams as 360p
- Add workarounds for various Kodi/ISA subtitle incompatibilities and formatting issues #489 #1147
- Identify API requests requiring authentication
- Fix incorrect page number used when post filling listings
- Prevent unnecessary API requests when refreshing listing that uses channel filters
- Improve loading of malformed/partial access_manager.json #1173
### Changed
- Improve robustness of fetching recommended and related videos
- Improve workarounds for SQLite concurrency issues
- Remove possibly invalid access token if an authentication error occurs
- Better organise and use standard labels for http server address and port settings
- Try to make http server IP address selection even more obvious when running Setup Wizard #1320
- Improve logging of errors caused by localised strings that have been incorrectly translated
- Improve offline access to cached data
- Updates to SQLite database lock handling
- Ignore player request failures that may incorrectly indicate a need to sign-in #1312
- Include playlist_id listitem property for items from virtual playlists
- Don't list users own playlists in listing of saved playlists
- Allow sign-in when partially logged in without needing to sign-out
- Identify if user is only partially logged in
- Use persistent visitor data where possible except when incognito
- Allow additional query parameters to be inherited from parent listing #1282
- Improve process for initial player request if remote history not enabled #1273
- Disable unusable player clients #1273
- Disable multiple busy dialog crash workarounds in Kodi 22
- Include visitorData in subtitle request headers along with referer #1250
- Revert use of WEBP thumbnails #1245
- Improve notification of player request errors #1254 #1262
- Add notification if reCaptcha check is required
- Improve workarounds for failing authorised player requests #1254
- Allow plugin url query parameters to hide folders in search and channel playlist listing #1251
- Use WebP thumbnails instead of JPEG thumbnails
- Update Setup Wizard for the various new Stream Features that have been added
- Don't cache playback associated requests
- Bypass requests cache when a listing is refreshed
- Update order and wording of prompts used when adding custom bookmark
- Allow bookmarking channel of videos within Bookmarks list
- Return empty listing on failure to parse YouTube url
- Update known itag details
- Do not show notification when automatically removing played video from Watch Later list
- Add visitor ID to stream headers #1222
- Improve logging of adaptive streams from player requests #1222
- Identify and de-prioritise DRC audio streams
- Specifically use elapsed time for plugin profiling if available
- Use new BookmarkItem class for custom bookmarks to allow updating details like normal bookmarks
- Default to list as path command if not given when navigating to various internal listings
- Re-enable http server idle shutdown for all platforms
- Update default cache size to 50 MiB
- Enable caching of YouTube virtual lists #1220
- Improve fetching of cached playlist items #1220
- Allow for use of last known good value if JSON file read IPC timeout occurs #1220
- Limit JSON-RPC usage when interacting with Kodi playlist #1220
- Improve syncing local history with Kodi play count
- api_keys.json not backwards compatible with older addon versions
- Set default live stream type to adaptive HLS
- Allow saving of play count and last played date for live streams
- Disable script.trakt scrobbling when playing YouTube videos
- Allow failure of unauthorised player requests to be ignored #1211
- Try to prevent misuse of strm files #1208
- Update thumbnails size settings and selection logic #1204
- Only show folders in channel playlists listing on first page and if not hidden
- Improve cache performance and reliability
- Improve management of user data stored as JSON files
### New
- Add refresh to context menu of playlists
- Allow watch urls from music.youtube.com to be directly handled by the addon
- Allow urls from www.youtubekids.com to be directly handled by the addon
- Add support for listing members only content of channels
- Add selections to hide various folders from listings #1282
- Add support for additional OAuth2 client to allow playback of age restricted videos #1273
- Add dubbed audio preferences to stream features #1036 #1228 #1232
- Add support for directly adding YouTube URL as custom bookmark
- Add support for 3D/VR video and spatial audio in stream selections
- Add Setup Wizard steps to change custom Watch History and Watch Later playlists to internal YouTube lists #1210
- Add support for viewing YouTube history list (HL)
- Add support for podcasts in related videos #1161
- Add notification on successfully adding item to local Watch Later list #1210
- Add support for saving/removing playlists to/from YouTube library (Saved Playlists) #1023
- Add support for removing liked videos from YouTube Liked videos list
- Add support for auto removing videos from YouTube Watch Later list after playback #1210
- Add support for removing videos from YouTube Watch Later list #1210
- Add support for adding videos to YouTube Watch Later list #1210
- Initial support for viewing Saved Playlists #1023
- Initial support for viewing YouTube Watch Later list (WL) #1210
- Implement request cache
- Add ability to create custom bookmarks #1208
- Add subtitle type selection to stream features
- Add plugin execution timeout to forcibly terminate execution after set time limit #1161
- Improve addon logging using customised Python logging module
## v7.3.0+beta.10
### Fixed
- Prune invalid entries from DB when closing connection #1331
- Fix regressions with SQLite db operations #1331
## v7.3.0+beta.9
### Fixed
- Disable label masks being used in Kodi 18 #1327
- Python 2 compatibility workaround for lack of timeout when trying to acquire an RLock #1327
- More expansive handling of inconsistent urllib3 exception re-raising
### Changed
- Improve robustness of fetching recommended and related videos
- Improve workarounds for SQLite concurrency issues
- Remove possibly invalid access token if an authentication error occurs
- Better organise and use standard labels for http server address and port settings
- Try to make http server IP address selection even more obvious when running Setup Wizard #1320
- Improve logging of errors caused by localised strings that have been incorrectly translated
## v7.3.0+beta.8
### Fixed
- Fix regression in handling audio only setting after d154325c5b672dccc6a17413063cfdeb32256ffd
- Fix comments not using correct sort methods
- Fix incorrectly using playlist cache entries that have been invalidated by playlist modification
- Fix some context menu actions failing for video item bookmarks
- Ensure listings and items added by the addon have correct sort order
- Fix resetting client region when playing media with subtitles enabled
### Changed
- Improve offline access to cached data
- Updates to SQLite database lock handling
## v7.3.0+beta.7
### Fixed
- Only add playable items to playlist when adding related items
- Fix using invalid default end limit with Playlist.GetItems JSONRPC method
- Fix conversion of SRT subtitles to WebVTT #1256
- Workaround playback failure of progressive streams
- Fix re-sorting live search lists
- Disable use of custom thumbnail urls #1245
- Workaround addon service not starting prior to plugin invocation #1298
- Fix unofficial version using localised sort order #1309
- Fix parsing of logged_in query parameter
### Changed
- Ignore player request failures that may incorrectly indicate a need to sign-in #1312
- Include playlist_id listitem property for items from virtual playlists
### New
- Add refresh to context menu of playlists
- Allow watch urls from music.youtube.com to be directly handled by the addon
- Allow urls from www.youtubekids.com to be directly handled by the addon
## v7.3.0+beta.6
### Fixed
- Fix typo in YouTubePlayerClient error hook
## v7.3.0+beta.5
### Fixed
- Fix not resolving single playable items when using the uri2addon plugin endpoint #1300

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Obriši datoteku access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Slušajte putem IP-a"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podcast"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Slušajte putem IP-a"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "Možda će vam biti zatraženo da omogućite dvije aplikacije kako bi YouTube ispravno funkcionirao."

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Odstranit access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Poslech z IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Poslech z IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Slet access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Lyt på IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Lyt på IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-09-28 15:29+0000\n"
"Last-Translator: Kai Sommerfeld <ksooo@users.noreply.kodi.weblate.cloud>\n"
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "access_manager.json löschen"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Auf IP reagieren"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podcast"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Auf IP reagieren"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "Es kann zum Aktivieren on zwei Anwendungen aufgefordert werden, damit YouTube korrekt funktioniert."

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Διαγραφή access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Ακρόαση στην IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Ακρόαση στην IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -366,7 +366,7 @@ msgid "Related Videos"
msgstr ""
msgctxt "#30515"
msgid "Auto-Remove from Watch Later"
msgid "Auto-remove from Watch Later"
msgstr ""
msgctxt "#30516"
@ -430,11 +430,11 @@ msgid "I dislike this"
msgstr ""
msgctxt "#30531"
msgid ""
msgid "Bookmarked Channels"
msgstr ""
msgctxt "#30532"
msgid ""
msgid "Bookmarked Playlists"
msgstr ""
msgctxt "#30533"
@ -634,7 +634,7 @@ msgid "Are you sure you want to reset access manager?"
msgstr ""
msgctxt "#30582"
msgid "Autoplay suggested videos"
msgid "Auto-play suggested videos"
msgstr ""
msgctxt "#30583"
@ -878,7 +878,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-09-23 09:09+0000\n"
"Last-Translator: Alfonso Cachero <alfonso.cachero@gmail.com>\n"
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Eliminar access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "IP a la escucha"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podcast"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "IP a la escucha"
#~ msgctxt "#30113"
#~ msgid ""
#~ msgstr " "

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Eliminar access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Escuchando en IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Escuchando en IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Poista \"access_manager.json\" -tiedosto"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Kuunneltava IP-osoite"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Kuunneltava IP-osoite"
#~ msgctxt "#30808"
#~ msgid "Hide videos from listings"
#~ msgstr "Piilota videot listauksista"

File diff suppressed because it is too large Load diff

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Supprimer access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Écoute sur IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Écoute sur IP"
#~ msgctxt "#30020"
#~ msgid "Allow 3D"
#~ msgstr "Autoriser la 3D"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

File diff suppressed because it is too large Load diff

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Obriši access_manager.json datoteku"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Osluškuj IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Osluškuj IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Az access_manager.json törlése"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "IP cím figyelése"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "IP cím figyelése"
#~ msgctxt "#30020"
#~ msgid "Allow 3D"
#~ msgstr "3D engedélyezés"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Hapus access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Dengarkan di IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Dengarkan di IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

File diff suppressed because it is too large Load diff

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -6,9 +6,9 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-08-22 19:29+0000\n"
"PO-Revision-Date: 2025-11-15 23:52+0000\n"
"Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n"
"Language-Team: Italian <https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/it_it/>\n"
"Language: it_it\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.14.3\n"
msgctxt "Addon Summary"
msgid "Plugin for YouTube"
@ -238,7 +238,7 @@ msgstr "Disconnessione"
msgctxt "#30113"
msgid "Related to \"%s\""
msgstr ""
msgstr "Correlato a \"%s\""
msgctxt "#30114"
msgid "Confirm delete"
@ -258,7 +258,7 @@ msgstr "Rimuovere \"%s\"?"
msgctxt "#30118"
msgid "Links from \"%s\""
msgstr ""
msgstr "Link da \"%s\""
msgctxt "#30119"
msgid "Please wait..."
@ -490,7 +490,7 @@ msgstr "Completa tutte le richieste di accesso"
msgctxt "#30547"
msgid "You may be prompted to login and enable access to multiple applications so that this addon can function properly."
msgstr ""
msgstr "Potrebbe esserti richiesto di effettuare l'accesso e di abilitare l'accesso a più applicazioni affinché questo add-on possa funzionare correttamente."
msgctxt "#30548"
msgid ""
@ -650,19 +650,19 @@ msgstr "Blacklist"
msgctxt "#30587"
msgid "Hide \"Playlists\" folder"
msgstr ""
msgstr "Nascondi cartella \"Playlist\""
msgctxt "#30588"
msgid "Hide \"Search\" folder"
msgstr ""
msgstr "Nascondi cartella \"Ricerca\""
msgctxt "#30589"
msgid "Hide \"Shorts\" folder"
msgstr ""
msgstr "Nascondi cartella \"Video brevi\""
msgctxt "#30590"
msgid "Hide \"Live\" folder"
msgstr ""
msgstr "Nascondi cartella \"Live\""
msgctxt "#30591"
msgid "Thumbnail size"
@ -690,7 +690,7 @@ msgstr "Severo"
msgctxt "#30597"
msgid "Hide \"Members only\" folder"
msgstr ""
msgstr "Nascondi cartella \"Solo per i membri\""
msgctxt "#30598"
msgid "Large (4:3)"
@ -798,7 +798,7 @@ msgstr "Installa InputStream Helper"
msgctxt "#30624"
msgid "Members only"
msgstr ""
msgstr "Solo per i membri"
msgctxt "#30625"
msgid "InputStream Helper is already installed."
@ -873,8 +873,8 @@ msgid "Delete access_manager.json"
msgstr "Elimina access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Ascolta su IP"
msgid ""
msgstr " "
msgctxt "#30644"
msgid "Select listen IP"
@ -1534,7 +1534,7 @@ msgstr "Usa nome del canale come"
msgctxt "#30808"
msgid "Hide items from listings"
msgstr ""
msgstr "Nascondi elementi dagli elenchi"
msgctxt "#30809"
msgid "All upcoming videos"
@ -1584,6 +1584,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podcast"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Ascolta su IP"
#~ msgctxt "#30113"
#~ msgid ""
#~ msgstr " "

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

File diff suppressed because it is too large Load diff

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "access_manager.json 지움"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "참조 IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "팟캐스트"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "참조 IP"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "유튜브가 제대로 동작하려면 두 개 애플리케이션을 사용하라는 메시지가 표시될 수 있습니다."

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -873,8 +873,8 @@ msgid "Delete access_manager.json"
msgstr "Verwijder access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Luister op IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1584,6 +1584,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Luister op IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-09-23 09:09+0000\n"
"Last-Translator: Marek Adamski <fevbew@wp.pl>\n"
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Usuń access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Nasłuchuj na IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podcast"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Nasłuchuj na IP"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "Może zostać wyświetlony monit o włączenie dwóch aplikacji, aby YouTube działał prawidłowo."

View file

@ -871,7 +871,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -874,8 +874,8 @@ msgid "Delete access_manager.json"
msgstr "Deletar access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Ouça no IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1590,6 +1590,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Ouça no IP"
#~ msgctxt "#30808"
#~ msgid "Hide videos from listings"
#~ msgstr "Ocultar vídeos das listagens"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Apagar access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Escutar no IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Escutar no IP"
#~ msgctxt "#30020"
#~ msgid "Allow 3D"
#~ msgstr "Permitir 3D"

View file

@ -873,7 +873,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -5,10 +5,10 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-10-04 08:29+0000\n"
"Last-Translator: Alexey <signfinder@gmail.com>\n"
"PO-Revision-Date: 2025-10-11 06:29+0000\n"
"Last-Translator: Dmitry Petrov <dimakrm361@gmail.com>\n"
"Language-Team: Russian <https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/ru_ru/>\n"
"Language: ru_ru\n"
"MIME-Version: 1.0\n"
@ -265,11 +265,11 @@ msgstr "Пожалуйста, подождите..."
msgctxt "#30120"
msgid "Confirm clear"
msgstr ""
msgstr "Подтвердить отчиску"
msgctxt "#30121"
msgid "Clear %s?"
msgstr ""
msgstr "Очистить %s?"
# YouTube
# empty strings from id 30121 to 30199
@ -385,15 +385,15 @@ msgstr "Добавить в..."
msgctxt "#30521"
msgid "Delete requests cache database"
msgstr ""
msgstr "Удалить базу данных с кешом запросов"
msgctxt "#30522"
msgid "Clear requests cache"
msgstr ""
msgstr "Удалить кеш запросов"
msgctxt "#30523"
msgid "requests cache"
msgstr ""
msgstr "запросов в кеше"
msgctxt "#30524"
msgid "Select language"
@ -405,11 +405,11 @@ msgstr "Выберите регион"
msgctxt "#30526"
msgid "Setup Wizard"
msgstr ""
msgstr "Мастер настройки"
msgctxt "#30527"
msgid "Language and Region"
msgstr ""
msgstr "Язык и регион"
msgctxt "#30528"
msgid "Rate..."
@ -457,7 +457,7 @@ msgstr "Непонравившееся видео"
msgctxt "#30539"
msgid "Play recently added"
msgstr ""
msgstr "Воспроизвести недавно добавленное"
msgctxt "#30540"
msgid ""
@ -465,7 +465,7 @@ msgstr ""
msgctxt "#30541"
msgid "Show channel name and video details in description"
msgstr ""
msgstr "Отображать название канала и детали видео в описании"
msgctxt "#30542"
msgid "rtmpe streams are not supported"
@ -481,15 +481,15 @@ msgstr "Больше ссылок из описания"
msgctxt "#30545"
msgid "No videos found."
msgstr ""
msgstr "Видео не найдено."
msgctxt "#30546"
msgid "Please complete all login prompts"
msgstr ""
msgstr "Пожалуйста заполните все формы авторизации"
msgctxt "#30547"
msgid "You may be prompted to login and enable access to multiple applications so that this addon can function properly."
msgstr ""
msgstr "Вас могут запросить войти и дать доступ нескольким приложениям, так дополнение сможет функционировать корректно."
msgctxt "#30548"
msgid ""
@ -497,7 +497,7 @@ msgstr ""
msgctxt "#30549"
msgid "No streams found"
msgstr ""
msgstr "Трансляции не найдены"
msgctxt "#30550"
msgid ""
@ -549,15 +549,15 @@ msgstr ""
msgctxt "#30562"
msgid "View all"
msgstr ""
msgstr "Посмотреть всё"
msgctxt "#30563"
msgid "Plugin execution timeout"
msgstr ""
msgstr "Время выполнения плагина"
msgctxt "#30564"
msgid "For testing only - forcibly terminate plugin execution after set time limit. Set to 0 seconds (default) to disable."
msgstr ""
msgstr "Для целей тестирования - принудительно остановить выполнение плагина через заданное время. Установите на 0 секунд (по-умолчанию) для выключения."
msgctxt "#30565"
msgid ""
@ -577,11 +577,11 @@ msgstr "Удалить из списка Отложенного просмотр
msgctxt "#30569"
msgid "Are you sure you want to remove \"%s\" as your Watch Later list?"
msgstr ""
msgstr "Вы уверены что хотите убрать \"%s\" из списка \"Посмотреть позже\"?"
msgctxt "#30570"
msgid "Are you sure you want to replace your current Watch Later list with \"%s\"?"
msgstr ""
msgstr "Вы уверены что хотите заменить список \"Посмотреть позже\" с \"%s\"?"
msgctxt "#30571"
msgid "Set as History"
@ -609,7 +609,7 @@ msgstr "Ошибка"
msgctxt "#30577"
msgid "Smallest (4:3)"
msgstr ""
msgstr "Наименьшее (4:3)"
msgctxt "#30578"
msgid "Force SSL certificate verification"
@ -617,7 +617,7 @@ msgstr "Принудительная проверка SSL сертификато
msgctxt "#30579"
msgid "InputStream.Adaptive is activated in the YouTube settings, however the add-on has been disabled. Would you like to enable InputStream.Adaptive now?"
msgstr ""
msgstr "InputStream.Adaptive активирован в настройках YouTube, но дополнение выключено. Хотите включить InputStream.Adaptive сейчас?"
msgctxt "#30580"
msgid "Reset access manager"
@ -649,19 +649,19 @@ msgstr "Черный список"
msgctxt "#30587"
msgid "Hide \"Playlists\" folder"
msgstr ""
msgstr "Скрыть папку \"Плейлисты\""
msgctxt "#30588"
msgid "Hide \"Search\" folder"
msgstr ""
msgstr "Скрыть папку \"Поиск\""
msgctxt "#30589"
msgid "Hide \"Shorts\" folder"
msgstr ""
msgstr "Скрыть папку \"Shorts\""
msgctxt "#30590"
msgid "Hide \"Live\" folder"
msgstr ""
msgstr "Скрыть папку \"Прямой эфир\""
msgctxt "#30591"
msgid "Thumbnail size"
@ -669,11 +669,11 @@ msgstr "Размер иконок"
msgctxt "#30592"
msgid "Small (16:9)"
msgstr ""
msgstr "Маленький (16:9)"
msgctxt "#30593"
msgid "Medium (4:3)"
msgstr ""
msgstr "Средний (4:3)"
msgctxt "#30594"
msgid "Safe search"
@ -689,11 +689,11 @@ msgstr "Строгий"
msgctxt "#30597"
msgid "Hide \"Members only\" folder"
msgstr ""
msgstr "Скрыть папку \"Только для платных подписчиков\""
msgctxt "#30598"
msgid "Large (4:3)"
msgstr ""
msgstr "Большой (4:3)"
msgctxt "#30599"
msgid "Failed to enable personal API keys. Missing: %s"
@ -701,7 +701,7 @@ msgstr "Ошибка включения персонального API ключ
msgctxt "#30600"
msgid "Largest (16:9)"
msgstr ""
msgstr "Крупный (16:9)"
msgctxt "#30601"
msgid "%s with Original/%s fallback"
@ -753,31 +753,31 @@ msgstr "Повтор"
msgctxt "#30613"
msgid "Add to %s"
msgstr ""
msgstr "Добавить в %s"
msgctxt "#30614"
msgid "Remove from %s"
msgstr ""
msgstr "Убрать из %s"
msgctxt "#30615"
msgid "Added to %s"
msgstr ""
msgstr "Добавлено в %s"
msgctxt "#30616"
msgid "Removed from %s"
msgstr ""
msgstr "Убрано из %s"
msgctxt "#30617"
msgid "InputStream.Adaptive"
msgstr ""
msgstr "InputStream.Adaptive"
msgctxt "#30618"
msgid "Stream redirect"
msgstr ""
msgstr "Переадресация потока"
msgctxt "#30619"
msgid "Enable to reduce resource usage on less powerful devices, but could lead to IP bans. Use at own risk."
msgstr ""
msgstr "Включить для снижения потребления ресурсов в маломощных устройствах, но это может привести к блокировке по IP. Используйте на свой страх и риск."
msgctxt "#30620"
msgid "Port %s already in use. Cannot start http server."
@ -797,7 +797,7 @@ msgstr "Установить InputStream Helper"
msgctxt "#30624"
msgid "Members only"
msgstr ""
msgstr "Только для платных подписчиков"
msgctxt "#30625"
msgid "InputStream Helper is already installed."
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Удалить access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Слушать IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -893,15 +893,15 @@ msgstr "Завершенный прямой эфир"
msgctxt "#30648"
msgid "API Key is incorrect. Settings > API > API Key"
msgstr ""
msgstr "Неверный API ключ. Настройки > API > Ключ API (Key)"
msgctxt "#30649"
msgid "Client Id is incorrect. Settings > API > API Id"
msgstr ""
msgstr "Неверный идентификатор клиента. Настройки > API >Идентификатор клиента (API Id)"
msgctxt "#30650"
msgid "Client Secret is incorrect. Settings > API > API Secret"
msgstr ""
msgstr "Неверный секретный код клиента. Настройки > API > Секретный код клиента (API Secret)"
msgctxt "#30651"
msgid "Location"
@ -937,7 +937,7 @@ msgstr "Введите имя пользователя"
msgctxt "#30659"
msgid "User is now \"%s\""
msgstr ""
msgstr "Выбран пользователь \"%s\""
msgctxt "#30660"
msgid "Users"
@ -961,15 +961,15 @@ msgstr "Смена пользователя"
msgctxt "#30665"
msgid "Switch to \"%s\" now?"
msgstr ""
msgstr "Переключить на \"%s\" сейчас?"
msgctxt "#30666"
msgid "\"%s\" removed"
msgstr ""
msgstr "\"%s\" удален"
msgctxt "#30667"
msgid "Renamed \"%s\" to \"%s\""
msgstr ""
msgstr "\"%s\" переименован на \"%s\""
msgctxt "#30668"
msgid "Play count minimum percent"
@ -977,11 +977,11 @@ msgstr "Минимальный процент отметки просмотра"
msgctxt "#30669"
msgid "%s removed"
msgstr ""
msgstr "%s удален"
msgctxt "#30670"
msgid "Added %s"
msgstr ""
msgstr "Добавлен %s"
msgctxt "#30671"
msgid "Clear playback history"
@ -989,7 +989,7 @@ msgstr "Очистить историю просмотра"
msgctxt "#30672"
msgid "Delete playback history database"
msgstr ""
msgstr "Удалить историю просмотров"
msgctxt "#30673"
msgid "playback history"
@ -1001,7 +1001,7 @@ msgstr ""
msgctxt "#30675"
msgid "Use local playback history (watched, resume tracking)"
msgstr ""
msgstr "Использовать локальную историю просмотров (просмотренные, трекер времени)"
msgctxt "#30676"
msgid "Just now"
@ -1053,7 +1053,7 @@ msgstr "кеш данных"
msgctxt "#30688"
msgid "Use MPEG-DASH for videos"
msgstr ""
msgstr "Использовать MPEG-DASH для видео"
msgctxt "#30689"
msgid "Use for live streams"
@ -1061,7 +1061,7 @@ msgstr "Использовать для прямого эфира"
msgctxt "#30690"
msgid "InputStream.Adaptive >= 2.0.12 is required for adaptive live streams"
msgstr ""
msgstr "Требуется InputStream.Adaptive >= 2.0.12 для прямых трансляций"
msgctxt "#30691"
msgid "Airing now"
@ -1117,7 +1117,7 @@ msgstr ""
msgctxt "#30704"
msgid "Use YouTube website urls with default player"
msgstr ""
msgstr "Использовать ссылки YouTube с проигрывателем по-умолчанию"
msgctxt "#30705"
msgid "Download subtitles"
@ -1137,11 +1137,11 @@ msgstr "Воспроизвести аудио"
msgctxt "#30709"
msgid "WebVTT subtitles"
msgstr ""
msgstr "WebVTT субтитры"
msgctxt "#30710"
msgid "TTML subtitles"
msgstr ""
msgstr "TTML субтитры"
msgctxt "#30711"
msgid ""
@ -1153,11 +1153,11 @@ msgstr "Оценивать видео в плейлистах"
msgctxt "#30713"
msgid "Prefer dubbed audio over original audio"
msgstr ""
msgstr "Предпочитать дубляж аудио вместо оригинала"
msgctxt "#30714"
msgid "Prefer automatically translated dubbed audio over original audio"
msgstr ""
msgstr "Предпочитать автоматически переведенное аудио дубляж вместо оригинального аудио"
msgctxt "#30715"
msgid "Use YouTube internal list for Watch History?[CR][CR]Requires signing-in via the addon and activating history tracking on YouTube."
@ -1185,19 +1185,19 @@ msgstr "Отписан от канала"
msgctxt "#30721"
msgid "Enable Panoramic/180/360/VR video"
msgstr ""
msgstr "Включить Панорамные/180/360/VR видео"
msgctxt "#30722"
msgid "Enable HDR video"
msgstr ""
msgstr "Включить HDR видео"
msgctxt "#30723"
msgid "Proxy is required for MPEG-DASH VODs (see Advanced > HTTP Server)[CR]HDR and >1080p video requires InputStream.Adaptive >= 2.3.14"
msgstr ""
msgstr "Требуется прокси для MPEG-DASH VODs (смотрите HTTP сервер)[CR]HDR >1080p видео требуют nputStream.Adaptive >= 2.3.14"
msgctxt "#30724"
msgid "Enable high framerate video"
msgstr ""
msgstr "Включить видео с высокой частотой кадров"
msgctxt "#30725"
msgid "1440p (QHD)"
@ -1209,15 +1209,15 @@ msgstr "Загрузки"
msgctxt "#30727"
msgid "Enable H.264 video"
msgstr ""
msgstr "Включить H.264 видео"
msgctxt "#30728"
msgid "Enable VP9 video"
msgstr ""
msgstr "Включить VP9 видео"
msgctxt "#30729"
msgid "Prefer lower resolution streams for unselected codecs"
msgstr ""
msgstr "Предпочитать потоки в низком разрешении для не выбранных кодеков"
msgctxt "#30730"
msgid "Play (Ask for quality)"
@ -1245,43 +1245,43 @@ msgstr "Изменен"
msgctxt "#30736"
msgid "Shorts"
msgstr ""
msgstr "Shorts"
msgctxt "#30737"
msgid "Shorts - Max duration"
msgstr ""
msgstr "Shorts - Максимальная длительность"
msgctxt "#30738"
msgid "Enable spatial audio"
msgstr ""
msgstr "Включить пространственный звук"
msgctxt "#30739"
msgid "Subscribers"
msgstr ""
msgstr "Подписчики"
msgctxt "#30740"
msgid "HLS"
msgstr ""
msgstr "HLS"
msgctxt "#30741"
msgid "Multi-stream HLS"
msgstr ""
msgstr "Многопоточный HLS"
msgctxt "#30742"
msgid "Adaptive HLS"
msgstr ""
msgstr "Адаптивный HLS"
msgctxt "#30743"
msgid "MPEG-DASH"
msgstr ""
msgstr "MPEG-DASH"
msgctxt "#30744"
msgid "Original"
msgstr ""
msgstr "Оригинал"
msgctxt "#30745"
msgid "Dubbed"
msgstr ""
msgstr "Дубляж"
msgctxt "#30746"
msgid "Descriptive"
@ -1293,79 +1293,79 @@ msgstr ""
msgctxt "#30748"
msgid "Stream features"
msgstr ""
msgstr "Функции потоков"
msgctxt "#30749"
msgid "Enable AV1 video"
msgstr ""
msgstr "Включить AV1 видео"
msgctxt "#30750"
msgid "Enable Vorbis audio"
msgstr ""
msgstr "Включить Vorbis аудио"
msgctxt "#30751"
msgid "Enable Opus audio"
msgstr ""
msgstr "Включить Opus аудио"
msgctxt "#30752"
msgid "Enable AAC audio"
msgstr ""
msgstr "Включить AAC аудио"
msgctxt "#30753"
msgid "Enable surround sound audio"
msgstr ""
msgstr "Включить пространственное аудио"
msgctxt "#30754"
msgid "Enable AC-3 audio"
msgstr ""
msgstr "Включить AC-3 аудио"
msgctxt "#30755"
msgid "Enable EAC-3 audio"
msgstr ""
msgstr "Включить EAC-3 аудио"
msgctxt "#30756"
msgid "Enable DTS audio"
msgstr ""
msgstr "Включить DTS аудио"
msgctxt "#30757"
msgid "Remove similar/duplicate streams"
msgstr ""
msgstr "Убирать похожие/дублирующие потоки"
msgctxt "#30758"
msgid "Stream selection"
msgstr ""
msgstr "Выбор потока"
msgctxt "#30759"
msgid "Quality selection"
msgstr ""
msgstr "Выбор качества"
msgctxt "#30760"
msgid "Automatic + Quality selection"
msgstr ""
msgstr "Автоматически + Выбор качества"
msgctxt "#30761"
msgid "Update playback history on Youtube"
msgstr ""
msgstr "Обновить историю просмотра в Youtube"
msgctxt "#30762"
msgid "Multi-language"
msgstr ""
msgstr "Многоязычный"
msgctxt "#30763"
msgid "Multi-audio"
msgstr ""
msgstr "Мульти-аудио"
msgctxt "#30764"
msgid "Requests connect timeout"
msgstr ""
msgstr "Таймаут запросов"
msgctxt "#30765"
msgid "Requests read timeout"
msgstr ""
msgstr "Таймаут на чтение запросов"
msgctxt "#30766"
msgid "Premieres"
msgstr ""
msgstr "Премьеры"
msgctxt "#30767"
msgid "Views"
@ -1373,67 +1373,67 @@ msgstr "Просмотры"
msgctxt "#30768"
msgid "Disable high framerate video at maximum video quality"
msgstr ""
msgstr "Выключить высокую частоту на максимальном качестве видео"
msgctxt "#30769"
msgid "Clear Watch Later list"
msgstr ""
msgstr "Очистить список \"Посмотреть позже\""
msgctxt "#30770"
msgid "Are you sure you want to clear your Watch Later list?"
msgstr ""
msgstr "Вы уверены что хотите очистить ваш список Посмотреть позже\"?"
msgctxt "#30771"
msgid "Disable fractional framerate hinting"
msgstr ""
msgstr "Выключить метку дробной частоты кадров"
msgctxt "#30772"
msgid "Disable all framerate hinting"
msgstr ""
msgstr "Включить все метки частоты кадров"
msgctxt "#30773"
msgid "Show video details in video lists"
msgstr ""
msgstr "Отображать детали видео в списках видео"
msgctxt "#30774"
msgid "All available"
msgstr ""
msgstr "Все доступные"
msgctxt "#30775"
msgid "%s (translation)"
msgstr ""
msgstr "%s (перевод)"
msgctxt "#30776"
msgid "Ask + Automatic + Quality selection"
msgstr ""
msgstr "Спрашивать + Автоматически + Выбор качества"
msgctxt "#30777"
msgid "Views for %s (%s)"
msgstr ""
msgstr "Просмотры для %s (%s)"
msgctxt "#30778"
msgid "Import old playback history?"
msgstr ""
msgstr "Импортировать старую историю просмотра?"
msgctxt "#30779"
msgid "Import old search history?"
msgstr ""
msgstr "Импортировать старую историю поиска?"
msgctxt "#30780"
msgid "Clear local watch later list"
msgstr ""
msgstr "Очистить локальный список \"Посмотреть позже\""
msgctxt "#30781"
msgid "Delete watch later database"
msgstr ""
msgstr "Удалить базу данных \"Посмотреть позже\""
msgctxt "#30782"
msgid "local watch later list"
msgstr ""
msgstr "локальный список \"Посмотреть позже\""
msgctxt "#30783"
msgid "settings to recommended values"
msgstr ""
msgstr "настройки к рекомендованным значениям"
msgctxt "#30784"
msgid "listings to show minimal details"
@ -1441,147 +1441,151 @@ msgstr ""
msgctxt "#30785"
msgid "performance settings"
msgstr ""
msgstr "настройки производительности"
msgctxt "#30786"
msgid "Choose device capabilities"
msgstr ""
msgstr "Выберите возможности устройства"
msgctxt "#30787"
msgid "720p, H.264 only | Limited or older devices"
msgstr ""
msgstr "720p, только H.264| Ограниченные или старые устройства"
msgctxt "#30788"
msgid "1080p/30 fps | Raspberry Pi 3, or similar"
msgstr ""
msgstr "1080p/30 fps | Raspberry Pi 3, или подобные"
msgctxt "#30789"
msgid "4K/30 fps or 1080p/60 fps, HDR if compatible | Raspberry Pi 5, or similar"
msgstr ""
msgstr "4K/30 fps or 1080p/60 fps, HDR если совместимо | Raspberry Pi 5, или подобные"
msgctxt "#30790"
msgid "4K/60 fps, HDR if compatible | Fire TV Cube Gen 2, Shield TV, Fire TV Stick 4K Gen 1, or similar"
msgstr ""
msgstr "4K/60 fps, HDR если совместимо | Fire TV Cube Gen 2, Shield TV, Fire TV Stick 4K Gen 1, или подобные"
msgctxt "#30791"
msgid "4K/60 fps, HDR, using AV1 | Fire TV Cube Gen 3, Fire TV Stick 4K Max, Vero V, or similar"
msgstr ""
msgstr "4K/60 fps, HDR, с кодеком AV1 | Fire TV Cube Gen 3, Fire TV Stick 4K Max, Vero V, или подобные"
msgctxt "#30792"
msgid "8K/60 fps, HDR, using AV1 | Modern device or PC with full capabilities"
msgstr ""
msgstr "8K/60 fps, HDR, с кодеком AV1 | Современные устройства или ПК с полными возможностями"
msgctxt "#30793"
msgid "Views count display colour"
msgstr ""
msgstr "Цвет счётчика просмотров"
msgctxt "#30794"
msgid "Subscriber/Likes count display colour"
msgstr ""
msgstr "Цвет счётчика подписчиков или лайков"
msgctxt "#30795"
msgid "Videos/Comments count display colour"
msgstr ""
msgstr "Цвет счётчика комментариев или просмотров"
msgctxt "#30796"
msgid "1080p/60 fps | Raspberry Pi 4, or similar"
msgstr ""
msgstr "1080p/60 fps | Raspberry Pi 4, или подобные"
msgctxt "#30797"
msgid "1080p/30 fps or 720p/30 fps, H.264 only | Raspberry Pi 1/2, or similar"
msgstr ""
msgstr "1080p/30 fps or 720p/30 fps, только H.264| Raspberry Pi 1/2, или подобные"
msgctxt "#30798"
msgid "Clear bookmarks list"
msgstr ""
msgstr "Очистить список закладок"
msgctxt "#30799"
msgid "Delete bookmarks database"
msgstr ""
msgstr "Удалить базу данных закладок"
msgctxt "#30800"
msgid "bookmarks list"
msgstr ""
msgstr "список закладок"
msgctxt "#30801"
msgid "Clear Bookmarks list"
msgstr ""
msgstr "Очистить список закладок"
msgctxt "#30802"
msgid "Are you sure you want to clear your Bookmarks list?"
msgstr ""
msgstr "Вы уверены что хотите очистить список ваших закладок?"
msgctxt "#30803"
msgid "Bookmark %s"
msgstr ""
msgstr "Добавить в закладки"
msgctxt "#30804"
msgid "Use YouTube website urls with external player"
msgstr ""
msgstr "Использовать ссылки YouTube c внешним проигрывателем"
msgctxt "#30805"
msgid "Use MPEG-DASH with external player"
msgstr ""
msgstr "Использовать MPEG-DASH с внешним проигрывателем"
msgctxt "#30806"
msgid "Jump to page..."
msgstr ""
msgstr "Перепрыгнуть на страницу..."
msgctxt "#30807"
msgid "Use channel name as"
msgstr ""
msgstr "Использовать имя канала как"
msgctxt "#30808"
msgid "Hide items from listings"
msgstr ""
msgstr "Убрать элементы из списка"
msgctxt "#30809"
msgid "All upcoming videos"
msgstr ""
msgstr "Все предстоящие видео"
msgctxt "#30810"
msgid "All previously streamed (completed) videos"
msgstr ""
msgstr "Все предыдущие записи трансляций"
msgctxt "#30811"
msgid "Filter Live folders"
msgstr ""
msgstr "Фильтровать папки трансляций"
msgctxt "#30812"
msgid "Clear subscription feed history"
msgstr ""
msgstr "Очистить историю ленты подписок"
msgctxt "#30813"
msgid "Delete subscription feed history database"
msgstr ""
msgstr "Очистить базу данных ленты подписок"
msgctxt "#30814"
msgid "feed history"
msgstr ""
msgstr "лента подписок"
msgctxt "#30815"
msgid "Go back..."
msgstr ""
msgstr "Вернуться назад..."
msgctxt "#30816"
msgid "List is empty.[CR][CR]Refresh from context menu or try again later."
msgstr ""
msgstr "Список пуст.[CR][CR]Обновите из контекстного меню или попробуйте снова."
msgctxt "#30817"
msgid "Refresh settings.xml"
msgstr ""
msgstr "Обновить settings.xml"
msgctxt "#30818"
msgid "Are you sure you want to refresh settings.xml?"
msgstr ""
msgstr "Вы уверены что хотите обновить settings.xml?"
msgctxt "#30819"
msgid "Play from start"
msgstr ""
msgstr "Начать с начала"
msgctxt "#30820"
msgid "Podcast"
msgstr ""
msgstr "Подкаст"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Слушать IP"
# empty strings 30019
#~ msgctxt "#30020"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Odstrániť access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Počúvať na IP adrese"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Počúvať na IP adrese"
#~ msgctxt "#30808"
#~ msgid "Hide videos from listings"
#~ msgstr "Skrývať filmy v zoznamoch"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-08-30 13:29+0000\n"
"PO-Revision-Date: 2025-11-10 00:43+0000\n"
"Last-Translator: Daniel Nylander <daniel@danielnylander.se>\n"
"Language-Team: Swedish <https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/sv_se/>\n"
"Language: sv_se\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.14.3\n"
msgctxt "Addon Summary"
msgid "Plugin for YouTube"
@ -237,7 +237,7 @@ msgstr "Logga ut"
msgctxt "#30113"
msgid "Related to \"%s\""
msgstr ""
msgstr "Relaterad till \"%s\""
msgctxt "#30114"
msgid "Confirm delete"
@ -257,7 +257,7 @@ msgstr "Ta bort \"%s\"?"
msgctxt "#30118"
msgid "Links from \"%s\""
msgstr ""
msgstr "Länkar från \"%s\""
msgctxt "#30119"
msgid "Please wait..."
@ -489,7 +489,7 @@ msgstr "Fyll i alla inloggningsförfrågningar"
msgctxt "#30547"
msgid "You may be prompted to login and enable access to multiple applications so that this addon can function properly."
msgstr ""
msgstr "Du kan bli ombedd att logga in och aktivera åtkomst till flera applikationer så att detta tillägg kan fungera korrekt."
msgctxt "#30548"
msgid ""
@ -649,19 +649,19 @@ msgstr "Svartlista"
msgctxt "#30587"
msgid "Hide \"Playlists\" folder"
msgstr ""
msgstr "Dölj mappen \"Spellistor\""
msgctxt "#30588"
msgid "Hide \"Search\" folder"
msgstr ""
msgstr "Dölj mappen \"Sök\""
msgctxt "#30589"
msgid "Hide \"Shorts\" folder"
msgstr ""
msgstr "Dölj mappen \"Shorts\""
msgctxt "#30590"
msgid "Hide \"Live\" folder"
msgstr ""
msgstr "Dölj mappen \"Live\""
msgctxt "#30591"
msgid "Thumbnail size"
@ -689,7 +689,7 @@ msgstr "Strikt"
msgctxt "#30597"
msgid "Hide \"Members only\" folder"
msgstr ""
msgstr "Dölj mappen \"Endast medlemmar\""
msgctxt "#30598"
msgid "Large (4:3)"
@ -797,7 +797,7 @@ msgstr "Installera InputStream-hjälpprogram"
msgctxt "#30624"
msgid "Members only"
msgstr ""
msgstr "Endast medlemmar"
msgctxt "#30625"
msgid "InputStream Helper is already installed."
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Ta bort access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Lyssna på IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1533,7 +1533,7 @@ msgstr "Använd kanalnamn som"
msgctxt "#30808"
msgid "Hide items from listings"
msgstr ""
msgstr "Dölj objekt från listning"
msgctxt "#30809"
msgid "All upcoming videos"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Podradio"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Lyssna på IP"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "Du kan bli ombedd att aktivera två program så att YouTube fungerar korrekt."

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "access_manager.json dosyasını sil"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "IP Üzerinden Dinle"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "IP Üzerinden Dinle"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-09-23 09:09+0000\n"
"Last-Translator: Pavlo Marianov <acid@jack.kyiv.ua>\n"
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "Видалити access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Слухати на IP-адресі"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "Подкаст"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Слухати на IP-адресі"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "Вам може бути запропоновано увімкнути два застосунки для нормальної роботи YouTube."

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
msgstr ""
msgctxt "#30643"
msgid "Listen on IP"
msgid ""
msgstr ""
msgctxt "#30644"

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: XBMC-Addons\n"
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
"POT-Creation-Date: 2015-09-21 11:01+0000\n"
"PO-Revision-Date: 2025-08-22 19:29+0000\n"
"PO-Revision-Date: 2025-11-10 00:43+0000\n"
"Last-Translator: wabisabi926 <liwenliang926@163.com>\n"
"Language-Team: Chinese (Simplified Han script) <https://kodi.weblate.cloud/projects/kodi-add-ons-video/plugin-video-youtube/zh_Hans/>\n"
"Language: zh_cn\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.14.3\n"
msgctxt "Addon Summary"
msgid "Plugin for YouTube"
@ -38,7 +38,7 @@ msgstr "此插件未被谷歌认可"
# Kodion Settings
msgctxt "#30000"
msgid ""
msgstr ""
msgstr "Msgctxt“插件摘要”msgid“插件YouTube”msgstr“msgctxt”插件说明“msgid”YouTube是世界上最大的视频共享网站之一。“Msgstr“”Kodion设置"
msgctxt "#30001"
msgid ""
@ -489,7 +489,7 @@ msgstr "请完成所有登录提示"
msgctxt "#30547"
msgid "You may be prompted to login and enable access to multiple applications so that this addon can function properly."
msgstr ""
msgstr "系统可能会提示您登录并启用对多个应用程序的访问,以便此插件可以正常运行。"
msgctxt "#30548"
msgid ""
@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "删除 access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "侦听在 IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1533,7 +1533,7 @@ msgstr "使用频道名称作为"
msgctxt "#30808"
msgid "Hide items from listings"
msgstr ""
msgstr "隐藏列表中的项目"
msgctxt "#30809"
msgid "All upcoming videos"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr "播客"
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "侦听在 IP"
#~ msgctxt "#30547"
#~ msgid "You may be prompted to enable two applications so that YouTube is functioning properly."
#~ msgstr "系统可能会提示您启用两个应用程序,以便 YouTube 正常运行。"

View file

@ -872,8 +872,8 @@ msgid "Delete access_manager.json"
msgstr "刪除 access_manager.json"
msgctxt "#30643"
msgid "Listen on IP"
msgstr "Listen IP"
msgid ""
msgstr ""
msgctxt "#30644"
msgid "Select listen IP"
@ -1583,6 +1583,10 @@ msgctxt "#30820"
msgid "Podcast"
msgstr ""
#~ msgctxt "#30643"
#~ msgid "Listen on IP"
#~ msgstr "Listen IP"
# empty strings 30019
#~ msgctxt "#30020"
#~ msgid "Allow 3D"

View file

@ -375,7 +375,7 @@ class AbstractProvider(object):
self.log.warning('Multiple busy dialogs active'
' - Rerouting workaround')
return UriItem('command://{0}'.format(action))
context.sleep(1)
context.sleep(0.1)
else:
context.execute(
action,

View file

@ -15,8 +15,6 @@ __all__ = (
'available_cpu_count',
'byte_string_type',
'datetime_infolabel',
'default_quote',
'default_quote_plus',
'entity_escape',
'generate_hash',
'parse_qs',
@ -120,70 +118,6 @@ try:
for ordinal in range(128, 256)
})
def default_quote(string,
safe='',
encoding=None,
errors=None,
_encoding='utf-8',
_errors='strict',
_reserved=reserved,
_non_ascii=non_ascii,
_encode=str.encode,
_is_ascii=str.isascii,
_replace=str.replace,
_old='\\x',
_new='%',
_slice=slice(2, -1),
_str=str,
_translate=str.translate):
_string = _translate(string, _reserved)
if _is_ascii(_string):
return _string
_string = _str(_encode(_string, _encoding, _errors))[_slice]
if _string == string:
if _is_ascii(_string):
return _string
return _translate(_string, _non_ascii)
if _is_ascii(_string):
return _replace(_string, _old, _new)
return _translate(_replace(_string, _old, _new), _non_ascii)
def default_quote_plus(string,
safe='',
encoding=None,
errors=None,
_encoding='utf-8',
_errors='strict',
_reserved=reserved_plus,
_non_ascii=non_ascii,
_encode=str.encode,
_is_ascii=str.isascii,
_replace=str.replace,
_old='\\x',
_new='%',
_slice=slice(2, -1),
_str=str,
_translate=str.translate):
if (not safe and encoding is None and errors is None
and isinstance(string, str)):
_string = _translate(string, _reserved)
if _is_ascii(_string):
return _string
_string = _str(_encode(_string, _encoding, _errors))[_slice]
if _string == string:
if _is_ascii(_string):
return _string
return _translate(_string, _non_ascii)
if _is_ascii(_string):
return _replace(_string, _old, _new)
return _translate(_replace(_string, _old, _new), _non_ascii)
return quote_plus(string, safe, encoding, errors)
urlencode.__defaults__ = (False, '', None, None, default_quote_plus)
# Compatibility shims for Kodi v18 and Python v2.7
except ImportError:
import cPickle as pickle
@ -220,16 +154,10 @@ except ImportError:
return _quote(to_str(data), *args, **kwargs)
default_quote = quote
def quote_plus(data, *args, **kwargs):
return _quote_plus(to_str(data), *args, **kwargs)
default_quote_plus = quote_plus
def unquote(data):
return _unquote(to_str(data))

View file

@ -53,9 +53,18 @@ VALUE_TO_STR = {
1: 'true',
}
YOUTUBE_HOSTNAMES = frozenset((
'youtube.com',
'www.youtube.com',
'm.youtube.com',
'www.youtubekids.com',
'music.youtube.com',
))
# Flags
ABORT_FLAG = 'abort_requested'
BUSY_FLAG = 'busy'
SERVICE_RUNNING_FLAG = 'service_monitor_running'
WAIT_END_FLAG = 'builtin_completed'
TRAKT_PAUSE_FLAG = 'script.trakt.paused'
@ -216,10 +225,12 @@ __all__ = (
# Const values
'BOOL_FROM_STR',
'VALUE_TO_STR',
'YOUTUBE_HOSTNAMES',
# Flags
'ABORT_FLAG',
'BUSY_FLAG',
'SERVICE_RUNNING_FLAG',
'TRAKT_PAUSE_FLAG',
'WAIT_END_FLAG',

View file

@ -32,9 +32,10 @@ HIDE_VIDEOS = 'youtube.view.hide_videos' # (list[str])
SHORTS_DURATION = 'youtube.view.shorts.duration' # (int)
FILTER_LIST = 'youtube.view.filter.list' # (str)
SUBSCRIPTIONS_FILTER_ENABLED = 'youtube.folder.my_subscriptions_filtered.show' # (bool)
SUBSCRIPTIONS_FILTER_BLACKLIST = 'youtube.filter.my_subscriptions_filtered.blacklist' # (bool)
SUBSCRIPTIONS_FILTER_LIST = 'youtube.filter.my_subscriptions_filtered.list' # (str)
MY_SUBSCRIPTIONS_FILTER_ENABLED = 'youtube.folder.my_subscriptions_filtered.show' # (bool)
MY_SUBSCRIPTIONS_FILTER_BLACKLIST = 'youtube.filter.my_subscriptions_filtered.blacklist' # (bool)
MY_SUBSCRIPTIONS_FILTER_LIST = 'youtube.filter.my_subscriptions_filtered.list' # (str)
MY_SUBSCRIPTIONS_SOURCES = 'youtube.folder.my_subscriptions.sources' # (list[str])
SAFE_SEARCH = 'kodion.safe.search' # (int)
AGE_GATE = 'kodion.age.gate' # (bool)

View file

@ -14,8 +14,8 @@ import os
from .. import logging
from ..compatibility import (
default_quote,
parse_qsl,
quote,
string_type,
to_str,
unquote,
@ -177,6 +177,7 @@ class AbstractContext(object):
'visitor',
))
_STRING_BOOL_PARAMS = frozenset((
'logged_in',
'reload_path',
))
_STRING_INT_PARAMS = frozenset((
@ -209,7 +210,7 @@ class AbstractContext(object):
self.parse_params(params)
self._uri = None
self._path = path
self._path = None
self._path_parts = []
self.set_path(path, force=True)
@ -386,7 +387,7 @@ class AbstractContext(object):
params = urlencode([
(
('%' + param,
','.join([default_quote(item) for item in value]))
','.join([quote(item) for item in value]))
if len(value) > 1 else
(param, value[0])
)
@ -398,7 +399,14 @@ class AbstractContext(object):
command = 'command://' if command else ''
if run:
return ''.join((command, 'RunPlugin(', uri, ')'))
return ''.join((command,
'RunAddon('
if run == 'addon' else
'RunScript('
if run == 'script' else
'RunPlugin(',
uri,
')'))
if play is not None:
return ''.join((
command,
@ -474,7 +482,7 @@ class AbstractContext(object):
return ('/', parts) if include_parts else '/'
if kwargs.get('is_uri'):
path = default_quote(path)
path = quote(path)
return (path, parts) if include_parts else path
def get_path(self):
@ -536,7 +544,12 @@ class AbstractContext(object):
value = unquote(value)
try:
if param in self._BOOL_PARAMS:
parsed_value = BOOL_FROM_STR.get(str(value), False)
parsed_value = BOOL_FROM_STR.get(
str(value),
bool(value)
if param in self._STRING_BOOL_PARAMS else
False
)
elif param in self._INT_PARAMS:
parsed_value = int(
(BOOL_FROM_STR.get(str(value), value) or 0)
@ -678,7 +691,7 @@ class AbstractContext(object):
def tear_down(self):
pass
def ipc_exec(self, target, timeout=None, payload=None):
def ipc_exec(self, target, timeout=None, payload=None, raise_exc=False):
raise NotImplementedError()
@staticmethod

View file

@ -10,9 +10,9 @@
from __future__ import absolute_import, division, unicode_literals
import atexit
import json
import sys
from atexit import register as atexit_register
from timeit import default_timer
from weakref import proxy
@ -28,12 +28,14 @@ from ...compatibility import (
from ...constants import (
ABORT_FLAG,
ADDON_ID,
BUSY_FLAG,
CHANNEL_ID,
CONTENT,
FOLDER_NAME,
PLAYLIST_ID,
PLAY_FORCE_AUDIO,
SERVICE_IPC,
SERVICE_RUNNING_FLAG,
SORT,
URI,
VIDEO_ID,
@ -201,6 +203,7 @@ class XbmcContext(AbstractContext):
'httpd.connect.wait': 13028,
'httpd.connect.failed': 1001,
'inputstreamhelper.is_installed': 30625,
'internet.connection.required': 21451,
'isa.enable.check': 30579,
'key.requirement': 30731,
'liked.video': 30716,
@ -458,7 +461,7 @@ class XbmcContext(AbstractContext):
self._ui = None
self._playlist = None
atexit.register(self.tear_down)
atexit_register(self.tear_down)
def init(self):
num_args = len(sys.argv)
@ -681,8 +684,9 @@ class XbmcContext(AbstractContext):
return result % _args
except TypeError:
self.log.exception(('Localization error',
'text_id: {text_id!r}',
'args: {original_args!r}'),
'String: {result!r} ({text_id!r})',
'args: {original_args!r}'),
result=result,
text_id=text_id,
original_args=args)
return result
@ -708,31 +712,30 @@ class XbmcContext(AbstractContext):
xbmcplugin.setPluginCategory(self._plugin_handle, category_label)
detailed_labels = self.get_settings().show_detailed_labels()
if content_type == CONTENT.VIDEO_CONTENT:
if sub_type == CONTENT.HISTORY:
self.add_sort_method(
SORT.HISTORY_CONTENT_DETAILED
if detailed_labels else
SORT.HISTORY_CONTENT_SIMPLE
)
elif sub_type == CONTENT.COMMENTS:
self.add_sort_method(
SORT.COMMENTS_CONTENT_DETAILED
if detailed_labels else
SORT.COMMENTS_CONTENT_SIMPLE
)
elif sub_type == CONTENT.PLAYLIST:
self.add_sort_method(
SORT.PLAYLIST_CONTENT_DETAILED
if detailed_labels else
SORT.PLAYLIST_CONTENT_SIMPLE
)
else:
self.add_sort_method(
SORT.VIDEO_CONTENT_DETAILED
if detailed_labels else
SORT.VIDEO_CONTENT_SIMPLE
)
if sub_type == CONTENT.HISTORY:
self.add_sort_method(
SORT.HISTORY_CONTENT_DETAILED
if detailed_labels else
SORT.HISTORY_CONTENT_SIMPLE
)
elif sub_type == CONTENT.COMMENTS:
self.add_sort_method(
SORT.COMMENTS_CONTENT_DETAILED
if detailed_labels else
SORT.COMMENTS_CONTENT_SIMPLE
)
elif sub_type == CONTENT.PLAYLIST:
self.add_sort_method(
SORT.PLAYLIST_CONTENT_DETAILED
if detailed_labels else
SORT.PLAYLIST_CONTENT_SIMPLE
)
elif content_type == CONTENT.VIDEO_CONTENT:
self.add_sort_method(
SORT.VIDEO_CONTENT_DETAILED
if detailed_labels else
SORT.VIDEO_CONTENT_SIMPLE
)
else:
self.add_sort_method(
SORT.LIST_CONTENT_DETAILED
@ -741,13 +744,19 @@ class XbmcContext(AbstractContext):
)
if current_system_version.compatible(19):
def add_sort_method(self, sort_methods):
def add_sort_method(self,
sort_methods,
_add_sort_method=xbmcplugin.addSortMethod):
handle = self._plugin_handle
for sort_method in sort_methods:
xbmcplugin.addSortMethod(self._plugin_handle, *sort_method)
_add_sort_method(handle, *sort_method)
else:
def add_sort_method(self, sort_methods):
def add_sort_method(self,
sort_methods,
_add_sort_method=xbmcplugin.addSortMethod):
handle = self._plugin_handle
for sort_method in sort_methods:
xbmcplugin.addSortMethod(self._plugin_handle, *sort_method[:2])
_add_sort_method(handle, *sort_method[:3:2])
def clone(self, new_path=None, new_params=None):
if not new_path:
@ -962,6 +971,8 @@ class XbmcContext(AbstractContext):
attrs = (
'_ui',
'_playlist',
'_api_store',
'_access_manager',
)
for attr in attrs:
try:
@ -970,7 +981,15 @@ class XbmcContext(AbstractContext):
except AttributeError:
pass
def ipc_exec(self, target, timeout=None, payload=None):
def ipc_exec(self, target, timeout=None, payload=None, raise_exc=False):
if not XbmcContextUI.get_property(SERVICE_RUNNING_FLAG, as_bool=True):
msg = 'Service IPC - Monitor has not started'
XbmcContextUI.set_property(SERVICE_RUNNING_FLAG, BUSY_FLAG)
if raise_exc:
raise RuntimeError(msg)
self.log.warning_trace(msg)
return None
data = {'target': target, 'response_required': bool(timeout)}
if payload:
data.update(payload)

View file

@ -18,7 +18,7 @@ from cProfile import Profile
from functools import wraps
from inspect import getargvalues
from os.path import normpath
from pstats import Stats
import pstats
from traceback import extract_stack, format_list
from weakref import ref
@ -99,7 +99,6 @@ class Profiler(object):
'_print_callees',
'_profiler',
'_reuse',
'_sort_by',
'_timer',
)
@ -121,14 +120,12 @@ class Profiler(object):
num_lines=20,
print_callees=False,
reuse=False,
sort_by=('cumulative', 'time'),
timer=None):
self._enabled = enabled
self._num_lines = num_lines
self._print_callees = print_callees
self._profiler = None
self._reuse = reuse
self._sort_by = sort_by
self._timer = timer
if enabled and not lazy:
@ -205,8 +202,7 @@ class Profiler(object):
flush=True,
num_lines=20,
print_callees=False,
reuse=False,
sort_by=('cumulative', 'time')):
reuse=False):
if not (self._enabled and self._profiler):
return None
@ -218,10 +214,14 @@ class Profiler(object):
self._profiler,
stream=output_stream
)
stats.strip_dirs().sort_stats(*sort_by)
stats.strip_dirs()
if print_callees:
stats.sort_stats('cumulative')
stats.print_callees(num_lines)
else:
stats.sort_stats('cumpercall')
stats.print_stats(num_lines)
stats.sort_stats('totalpercall')
stats.print_stats(num_lines)
output = output_stream.getvalue()
# Occurs when no stats were able to be generated from profiler
@ -242,7 +242,6 @@ class Profiler(object):
num_lines=self._num_lines,
print_callees=self._print_callees,
reuse=self._reuse,
sort_by=self._sort_by,
),
stacklevel=3)
@ -250,6 +249,82 @@ class Profiler(object):
self.__class__._instances.discard(self)
class Stats(pstats.Stats):
"""
Custom Stats class that adds functionality to sort by
- Cumulative time per call ("cumpercall")
- Total time per call ("totalpercall")
Code by alexnvdias from https://bugs.python.org/issue18795
"""
sort_arg_dict_default = {
"calls" : (((1,-1), ), "call count"),
"ncalls" : (((1,-1), ), "call count"),
"cumtime" : (((4,-1), ), "cumulative time"),
"cumulative" : (((4,-1), ), "cumulative time"),
"filename" : (((6, 1), ), "file name"),
"line" : (((7, 1), ), "line number"),
"module" : (((6, 1), ), "file name"),
"name" : (((8, 1), ), "function name"),
"nfl" : (((8, 1),(6, 1),(7, 1),), "name/file/line"),
"pcalls" : (((0,-1), ), "primitive call count"),
"stdname" : (((9, 1), ), "standard name"),
"time" : (((2,-1), ), "internal time"),
"tottime" : (((2,-1), ), "internal time"),
"cumpercall" : (((5,-1), ), "cumulative time per call"),
"totalpercall": (((3,-1), ), "total time per call"),
}
def sort_stats(self, *field):
if not field:
self.fcn_list = 0
return self
if len(field) == 1 and isinstance(field[0], int):
# Be compatible with old profiler
field = [{-1: "stdname",
0: "calls",
1: "time",
2: "cumulative"}[field[0]]]
elif len(field) >= 2:
for arg in field[1:]:
if type(arg) != type(field[0]):
raise TypeError("Can't have mixed argument type")
sort_arg_defs = self.get_sort_arg_defs()
sort_tuple = ()
self.sort_type = ""
connector = ""
for word in field:
if isinstance(word, pstats.SortKey):
word = word.value
sort_tuple = sort_tuple + sort_arg_defs[word][0]
self.sort_type += connector + sort_arg_defs[word][1]
connector = ", "
stats_list = []
for func, (cc, nc, tt, ct, callers) in self.stats.items():
if nc == 0:
npc = 0
else:
npc = float(tt) / nc
if cc == 0:
cpc = 0
else:
cpc = float(ct) / cc
stats_list.append((cc, nc, tt, npc, ct, cpc) + func +
(pstats.func_std_string(func), func))
stats_list.sort(key=pstats.cmp_to_key(pstats.TupleComp(sort_tuple).compare))
self.fcn_list = fcn_list = []
for tuple in stats_list:
fcn_list.append(tuple[-1])
return self
class ExecTimeout(object):
log = logging.getLogger('__name__')
src_file = None

View file

@ -28,7 +28,7 @@ class BaseItem(object):
_version = 3
_playable = False
def __init__(self, name, uri, image=None, fanart=None, **kwargs):
def __init__(self, name, uri, image=None, fanart=None, **_kwargs):
super(BaseItem, self).__init__()
self._name = None
self.set_name(name)
@ -348,12 +348,15 @@ class _Encoder(json.JSONEncoder):
def encode(self, obj, nested=False):
if isinstance(obj, (date, datetime)):
class_name = obj.__class__.__name__
if 'fromisoformat' in dir(obj):
obj = {
'__class__': class_name,
'__isoformat__': obj.isoformat(),
}
else:
try:
if obj.fromisoformat:
obj = {
'__class__': class_name,
'__isoformat__': obj.isoformat(),
}
else:
raise AttributeError
except AttributeError:
if class_name == 'datetime':
if obj.tzinfo:
format_string = '%Y-%m-%dT%H:%M:%S%z'

View file

@ -459,6 +459,9 @@ class VideoItem(MediaItem):
)
self._directors = None
self._imdb_id = None
self._video_aspect = None
self._video_height = None
self._video_width = None
def add_directors(self, director):
if director:
@ -481,3 +484,44 @@ class VideoItem(MediaItem):
def get_imdb_id(self):
return self._imdb_id
def set_stream_details_from_player(self, player):
height = player.get('embedHeight')
width = player.get('embedWidth')
if not height or not width:
return
height = int(height)
width = int(width)
aspect_ratio = round(width / height, 2)
self._video_aspect = aspect_ratio
self._video_height = height
self._video_width = width
def get_stream_details(self):
if self._video_aspect is None:
return None
return {
'aspect': self._video_aspect,
'height': self._video_height,
'width': self._video_width,
}
def set_aspect_ratio(self, aspect_ratio):
self._video_aspect = round(aspect_ratio, 2)
def get_aspect_ratio(self):
return self._video_aspect
def set_video_width(self, width):
self._video_width = int(width)
def get_video_width(self):
return self._video_width
def set_video_height(self, height):
self._video_height = int(height)
def get_video_height(self):
return self._video_height

View file

@ -139,14 +139,26 @@ def media_play_using(context, video_id=VIDEO_ID_INFOLABEL):
)
def refresh_listing(context):
def refresh_listing(context, path=None, params=None):
if path is None:
path = (PATHS.ROUTE, context.get_path(),)
elif isinstance(path, tuple):
path = (PATHS.ROUTE,) + path
else:
path = (PATHS.ROUTE, path,)
if params is None:
params = context.get_params()
return (
context.localize('refresh'),
context_menu_uri(
context,
(PATHS.ROUTE, context.get_path(),),
dict(context.get_params(),
refresh=context.refresh_requested(force=True, on=True)),
path,
dict(params,
refresh=context.refresh_requested(
force=True,
on=True,
params=params,
)),
),
)
@ -829,7 +841,7 @@ def search_sort_by(context, params, order):
),
context_menu_uri(
context,
(PATHS.ROUTE, PATHS.SEARCH, 'query',),
(PATHS.ROUTE, context.get_path(),),
params=dict(params,
order=order,
page=1,

View file

@ -71,6 +71,7 @@ class NextPageItem(DirectoryItem):
image=image,
fanart=fanart,
category_label='__inherit__',
special_sort='bottom',
)
self.next_page = page

View file

@ -95,7 +95,7 @@ class NewSearchItem(DirectoryItem):
channel_id='',
addon_id='',
location=False,
**_kwargs):
**kwargs):
if not name:
name = context.get_ui().bold(
title or context.localize('search.new')
@ -120,7 +120,8 @@ class NewSearchItem(DirectoryItem):
params=params,
),
image=image,
fanart=fanart)
fanart=fanart,
**kwargs)
if context.is_plugin_path(context.get_uri(), ((PATHS.SEARCH, 'list'),)):
context_menu = [

View file

@ -42,9 +42,9 @@ from ...utils.system_version import current_system_version
def set_info(list_item, item, properties, set_play_count=True, resume=True):
stream_details = {}
if not current_system_version.compatible(20):
info_labels = {}
info_type = None
if isinstance(item, MediaItem):
if isinstance(item, VideoItem):
@ -58,6 +58,10 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
if value is not None:
info_labels['season'] = value
value = item.get_aspect_ratio()
if value is not None:
stream_details['aspect'] = value
elif isinstance(item, AudioItem):
info_type = 'music'
@ -117,7 +121,7 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
if duration > 0:
properties['TotalTime'] = str(duration)
if info_type == 'video':
list_item.addStreamInfo(info_type, {'duration': duration})
stream_details['duration'] = duration
info_labels['duration'] = duration
elif isinstance(item, DirectoryItem):
@ -177,8 +181,11 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
if properties:
list_item.setProperties(properties)
if info_labels and info_type:
list_item.setInfo(info_type, info_labels)
if info_type:
if info_labels:
list_item.setInfo(info_type, info_labels)
if stream_details:
list_item.addStreamInfo(info_type, stream_details)
return
if isinstance(item, MediaItem):
@ -229,6 +236,15 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
# if value is not None:
# info_tag.setIMDBNumber(value)
# video width x height is not accurate, use aspect ratio only
# value = item.get_stream_details()
# if value is not None:
# stream_details = value
value = item.get_aspect_ratio()
if value is not None:
stream_details['aspect'] = value
elif isinstance(item, AudioItem):
info_tag = list_item.getMusicInfoTag()
info_type = 'music'
@ -316,9 +332,7 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
else:
info_tag.setResumePoint(resume_time)
if duration > 0:
info_tag.addVideoStream(xbmc.VideoStreamDetail(
duration=duration,
))
stream_details['duration'] = duration
elif info_type == 'music':
# These properties are deprecated but there is no other way to set
# these details for a ListItem with a MusicInfoTag
@ -409,6 +423,9 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True):
if properties:
list_item.setProperties(properties)
if stream_details:
info_tag.addVideoStream(xbmc.VideoStreamDetail(**stream_details))
def playback_item(context, media_item, show_fanart=None, **_kwargs):
uri = media_item.get_uri()
@ -562,32 +579,39 @@ def directory_listitem(context, directory_item, show_fanart=None, **_kwargs):
if directory_item.next_page:
props['specialSort'] = 'bottom'
else:
special_sort = directory_item.get_special_sort()
if special_sort is None:
_special_sort = directory_item.get_special_sort()
if _special_sort is None:
special_sort = 'top'
elif special_sort is False:
elif _special_sort is False:
special_sort = None
else:
special_sort = _special_sort
prop_value = directory_item.subscription_id
if prop_value:
special_sort = None
special_sort = _special_sort
props[SUBSCRIPTION_ID] = prop_value
prop_value = directory_item.channel_id
if prop_value:
special_sort = None
special_sort = _special_sort
props[CHANNEL_ID] = prop_value
prop_value = directory_item.playlist_id
if prop_value:
special_sort = None
special_sort = _special_sort
props[PLAYLIST_ID] = prop_value
prop_value = directory_item.bookmark_id
if prop_value:
special_sort = None
special_sort = _special_sort
props[BOOKMARK_ID] = prop_value
prop_value = is_action and getattr(directory_item, VIDEO_ID, None)
if prop_value:
special_sort = _special_sort
props[VIDEO_ID] = prop_value
if special_sort:
props['specialSort'] = special_sort

View file

@ -36,7 +36,12 @@ class AccessManager(JSONStore):
}
def __init__(self, context):
self._user = None
self._last_origin = None
super(AccessManager, self).__init__('access_manager.json', context)
def init(self):
super(AccessManager, self).init()
access_manager_data = self._data['access_manager']
self._user = access_manager_data.get('current_user', 0)
self._last_origin = access_manager_data.get('last_origin', ADDON_ID)
@ -204,7 +209,8 @@ class AccessManager(JSONStore):
Returns users
:return: users
"""
return self._data['access_manager'].get('users', {})
data = self._data if self._loaded else self.get_data()
return data['access_manager'].get('users', {})
def add_user(self, username='', user=None):
"""
@ -546,7 +552,8 @@ class AccessManager(JSONStore):
Returns developers
:return: dict, developers
"""
return self._data['access_manager'].get('developers', {})
data = self._data if self._loaded else self.get_data()
return data['access_manager'].get('developers', {})
def add_new_developer(self, addon_id):
"""

Some files were not shown because too many files have changed in this diff Show more