mirror of
https://github.com/anxdpanic/plugin.video.youtube.git
synced 2025-12-15 15:10:34 -08:00
Compare commits
98 commits
v7.3.0+bet
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c94c57076 | ||
|
|
00e8c20add | ||
|
|
20b570a68a | ||
|
|
00cc0cc658 | ||
|
|
a264be91a2 | ||
|
|
2575abf722 | ||
|
|
9368016acc | ||
|
|
e86acc13a1 | ||
|
|
6293c8e4b5 | ||
|
|
5b224e1424 | ||
|
|
b03275ad19 | ||
|
|
f36acad119 | ||
|
|
d933bd1e0c | ||
|
|
a6da15c2c5 | ||
|
|
54a0604952 | ||
|
|
a4dfa572c8 | ||
|
|
d019d048f0 | ||
|
|
c03d25b537 | ||
|
|
45f11a58a6 | ||
|
|
6b3f7fd4bd | ||
|
|
d5b89c510a | ||
|
|
c819b5a9eb | ||
|
|
bf0445f5bd | ||
|
|
eff3946485 | ||
|
|
1a249438cb | ||
|
|
cdbcf5b517 | ||
|
|
14d446a8e4 | ||
|
|
f5f616ce5d | ||
|
|
b746b36d89 | ||
|
|
36f1cc6048 | ||
|
|
ef99864c19 | ||
|
|
bbc2411130 | ||
|
|
a8fa1606cb | ||
|
|
ed3f53c60b | ||
|
|
0db45cb923 | ||
|
|
13a4907262 | ||
|
|
a9f0436deb | ||
|
|
b585725a04 | ||
|
|
86008ba189 | ||
|
|
7472956964 | ||
|
|
eee33347f3 | ||
|
|
a710a77576 | ||
|
|
419c37ddd1 | ||
|
|
154c4db740 | ||
|
|
04ba84da63 | ||
|
|
be8237a5e1 | ||
|
|
3d2f20eb4a | ||
|
|
a7e2b3f8ca | ||
|
|
417e054b84 | ||
|
|
1e4d61fac2 | ||
|
|
37b898a0c4 | ||
|
|
36e2809028 | ||
|
|
0bea79e9f4 | ||
|
|
ddc7b4900b | ||
|
|
d5e9dfa56f | ||
|
|
2c701f800c | ||
|
|
3a4244a074 | ||
|
|
c9f16ebed3 | ||
|
|
8924a95cce | ||
|
|
23282aa51d | ||
|
|
a989752ad8 | ||
|
|
6881f9a521 | ||
|
|
03e2d91347 | ||
|
|
59d2ebee35 | ||
|
|
04e8488380 | ||
|
|
43a25f3299 | ||
|
|
030be1f985 | ||
|
|
ddfa1983af | ||
|
|
1c1b3ce7db | ||
|
|
2a6b26da8a | ||
|
|
e86297d3b2 | ||
|
|
884f76ddf0 | ||
|
|
796afd5fa5 | ||
|
|
1f40e325de | ||
|
|
ae62d0d582 | ||
|
|
f9e9fe8efa | ||
|
|
208812af99 | ||
|
|
baa9ca2006 | ||
|
|
67df415e1b | ||
|
|
6c17087be2 | ||
|
|
50c1a351ac | ||
|
|
6f825c902c | ||
|
|
753e5ac9aa | ||
|
|
b8d8928ea8 | ||
|
|
d154325c5b | ||
|
|
5f38dc3931 | ||
|
|
01e4322791 | ||
|
|
92a7c81698 | ||
|
|
220648dea1 | ||
|
|
75e73c93d7 | ||
|
|
d07945b742 | ||
|
|
725a0ca552 | ||
|
|
3b4b7a4ea0 | ||
|
|
fe2b0b8d74 | ||
|
|
c88c017dfa | ||
|
|
ede1903c62 | ||
|
|
56c3fa474c | ||
|
|
85c7a5d892 |
140 changed files with 2700 additions and 14090 deletions
|
|
@ -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"/>
|
||||
|
|
|
|||
267
changelog.txt
267
changelog.txt
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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 " "
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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 " "
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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 "유튜브가 제대로 동작하려면 두 개 애플리케이션을 사용하라는 메시지가 표시될 수 있습니다."
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -871,7 +871,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -873,7 +873,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ msgid "Delete access_manager.json"
|
|||
msgstr ""
|
||||
|
||||
msgctxt "#30643"
|
||||
msgid "Listen on IP"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30644"
|
||||
|
|
|
|||
|
|
@ -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 正常运行。"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ class NextPageItem(DirectoryItem):
|
|||
image=image,
|
||||
fanart=fanart,
|
||||
category_label='__inherit__',
|
||||
special_sort='bottom',
|
||||
)
|
||||
|
||||
self.next_page = page
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue