Projects
home:sagiben
kodi-next
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 67
View file
_service:download_files:master.tar.gz/addons/metadata.demo.movies/demo.py
Changed
@@ -46,71 +46,53 @@ url=urllib.unquote_plus(params["url"]) if url == '/path/to/movie': liz=xbmcgui.ListItem('Demo movie 1', offscreen=True) - liz.setProperty('video.original_title', 'Demo måvie 1') - liz.setProperty('video.sort_title', '2') - liz.setProperty('video.ratings', '1') - liz.setProperty('video.rating1.value', '5') - liz.setProperty('video.rating1.votes', '100') - liz.setProperty('video.user_rating', '5') - liz.setProperty('video.top250', '3') - liz.setProperty('video.unique_id', '123') - liz.setProperty('video.imdb_id', '456') - liz.setProperty('video.plot_outline', 'Outline yo') - liz.setProperty('video.plot', 'Plot yo') - liz.setProperty('video.tag_line', 'Tag yo') - liz.setProperty('video.duration_minutes', '110') - liz.setProperty('video.mpaa', 'T') - liz.setProperty('video.trailer', '/home/akva/Videos/porn/bukkake.mkv') - liz.setProperty('video.thumbs', '2') - liz.setProperty('video.thumb1.url', 'DefaultBackFanart.png') - liz.setProperty('video.thumb1.aspect', 'poster') - liz.setProperty('video.thumb2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.thumb2.aspect', 'banner') - liz.setProperty('video.genre','Action / Comedy') - liz.setProperty('video.country', 'Norway / Sweden / China') - liz.setProperty('video.writing_credits', 'None / Want / To Admit It') - liz.setProperty('video.director', 'spiff / spiff2') - liz.setProperty('video.tvshow_links' ,'Demo show 1') - liz.setProperty('video.actors', '2') - liz.setProperty('video.actor1.name', 'spiff') - liz.setProperty('video.actor1.role', 'himself') - liz.setProperty('video.actor1.sort_order', '2') - liz.setProperty('video.actor1.thumb', '/home/akva/Pictures/fish.jpg') - liz.setProperty('video.actor1.thumb_aspect', 'banner') - liz.setProperty('video.actor2.name', 'monkey') - liz.setProperty('video.actor2.role', 'orange') - liz.setProperty('video.actor2.sort_order', '1') - liz.setProperty('video.actor1.thumb_aspect', 'poster') - liz.setProperty('video.actor2.thumb', '/home/akva/Pictures/coffee.jpg') - liz.setProperty('video.set_name', 'Spiffy creations') - liz.setProperty('video.set_overview', 'Horrors created by spiff') - liz.setProperty('video.tags', 'Very / Bad') - liz.setProperty('video.studio', 'Studio1 / Studio2') - liz.setProperty('video.fanarts', '2') - liz.setProperty('video.fanart1.url', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.preview', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.dim', '720') - liz.setProperty('video.fanart2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.preview', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.dim', '1080') - liz.setProperty('video.date_added', '2016-01-01') + liz.setInfo('video', + {'title': 'Demo movie 1', + 'originaltitle': 'Demo måvie 1', + 'sorttitle': '2', + 'userrating': 5, + 'top250': 3, + 'plotoutline': 'Outline yo', + 'plot': 'Plot yo', + 'tagline': 'Tag yo', + 'duration': 110, + 'mpaa': 'T', + 'trailer': '/home/akva//porn/bukkake.mkv', + 'genre': ['Action', 'Comedy'], + 'country': ['Norway', 'Sweden', 'China'], + 'credits': ['None', 'Want', 'To Admit It'], + 'director': ['spiff', 'spiff2'], + 'set': 'Spiffy creations', + 'setoverview': 'Horrors created by spiff', + 'studio': ['Studio1', 'Studio2'], + 'dateadded': '2016-01-01', + 'premiered': '2015-01-01', + 'showlink': ['Demo show 1'] + }) + #todo: missing actor thumb aspect + liz.setRating("imdb", 9, 100000, True ) + liz.setRating("themoviedb", 8.9, 1000) + liz.setUniqueIDs({ 'imdb': 'tt8938399', 'tmdb' : '9837493' }, 'imdb') + liz.setCast([{'name': 'spiff', 'role': 'himself', 'thumbnail': '/home/akva/Pictures/fish.jpg', 'order': 2}, + {'name': 'monkey', 'role': 'orange', 'thumbnail': '/home/akva/Pictures/coffee.jpg', 'order': 1}]) + liz.addAvailableArtwork('DefaultBackFanart.png', 'banner') + liz.addAvailableArtwork('/home/akva/Pictures/hawaii-shirt.png', 'poster') + liz.setAvailableFanart([{'image': 'DefaultBackFanart.png', 'preview': 'DefaultBackFanart.png'}, + {'image': '/home/akva/Pictures/hawaii-shirt.png', 'preview': '/home/akva/Pictures/hawaii-shirt.png'}]) xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, listitem=liz) elif action == 'getartwork': url=urllib.unquote_plus(params["id"]) if url == '456': liz=xbmcgui.ListItem('Demo movie 1', offscreen=True) - liz.setProperty('video.thumbs', '2') - liz.setProperty('video.thumb1.url', 'DefaultBackFanart.png') - liz.setProperty('video.thumb1.aspect', 'poster') - liz.setProperty('video.thumb2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.thumb2.aspect', 'banner') - liz.setProperty('video.fanarts', '2') - liz.setProperty('video.fanart1.url', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.preview', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.dim', '720') - liz.setProperty('video.fanart2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.preview', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.dim', '1080') + liz.addAvailableArtwork('DefaultBackFanart.png', 'banner') + liz.addAvailableArtwork('/home/akva/Pictures/hawaii-shirt.png', 'poster') + liz.setAvailableFanart([{'image': 'DefaultBackFanart.png', 'preview': 'DefaultBackFanart.png'}, + {'image': '/home/akva/Pictures/hawaii-shirt.png', 'preview': '/home/akva/Pictures/hawaii-shirt.png'}]) xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, listitem=liz) +elif action == 'nfourl': + nfo=urllib.unquote_plus(params["nfo"]) + print 'Find url from nfo file' + liz=xbmcgui.ListItem('Demo movie 1', offscreen=True) + xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url="/path/to/movie1", listitem=liz, isFolder=True) xbmcplugin.endOfDirectory(int(sys.argv[1]))
View file
_service:download_files:master.tar.gz/addons/metadata.demo.tv/demo.py
Changed
@@ -46,156 +46,146 @@ url=urllib.unquote_plus(params["url"]) if url == '/path/to/show': liz=xbmcgui.ListItem('Demo show 1', offscreen=True) - liz.setProperty('video.original_title', 'Demo shåvv 1') - liz.setProperty('video.sort_title', '2') - liz.setProperty('video.ratings', '1') - liz.setProperty('video.rating1.value', '5') - liz.setProperty('video.rating1.votes', '100') - liz.setProperty('video.user_rating', '5') - liz.setProperty('video.unique_id', '123') - liz.setProperty('video.plot_outline', 'Outline yo') - liz.setProperty('video.plot', 'Plot yo') - liz.setProperty('video.tag_line', 'Tag yo') - liz.setProperty('video.duration_minutes', '110') - liz.setProperty('video.mpaa', 'T') - liz.setProperty('video.premiere_year', '2007') - liz.setProperty('video.status', 'Cancelled') - liz.setProperty('video.first_aired', '2007-01-01') - liz.setProperty('video.trailer', '/home/akva/Videos/porn/bukkake.mkv') - liz.setProperty('video.thumbs', '2') - liz.setProperty('video.thumb1.url', 'DefaultBackFanart.png') - liz.setProperty('video.thumb1.aspect', '1.78') - liz.setProperty('video.thumb2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.thumb2.aspect', '2.35') - liz.setProperty('video.genre','Action / Comedy') - liz.setProperty('video.country', 'Norway / Sweden / China') - liz.setProperty('video.writing_credits', 'None / Want / To Admit It') - liz.setProperty('video.director', 'spiff / spiff2') - liz.setProperty('video.seasons', '2') - liz.setProperty('video.season1.name', 'Horrible') - liz.setProperty('video.season2.name', 'Crap') - liz.setProperty('video.actors', '2') - liz.setProperty('video.actor1.name', 'spiff') - liz.setProperty('video.actor1.role', 'himself') - liz.setProperty('video.actor1.sort_order', '2') - liz.setProperty('video.actor1.thumb', '/home/akva/Pictures/fish.jpg') - liz.setProperty('video.actor1.thumb_aspect', '1.33') - liz.setProperty('video.actor2.name', 'monkey') - liz.setProperty('video.actor2.role', 'orange') - liz.setProperty('video.actor2.sort_order', '1') - liz.setProperty('video.actor1.thumb_aspect', '1.78') - liz.setProperty('video.actor2.thumb', '/home/akva/Pictures/coffee.jpg') - liz.setProperty('video.tag', 'Porn / Umomz') - liz.setProperty('video.studio', 'Studio1 / Studio2') - liz.setProperty('video.episode_guide_url', '/path/to/show/guide') - liz.setProperty('video.fanarts', '2') - liz.setProperty('video.fanart1.url', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.preview', 'DefaultBackFanart.png') - liz.setProperty('video.fanart1.dim', '720') - liz.setProperty('video.fanart2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.preview', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.fanart2.dim', '1080') - liz.setProperty('video.date_added', '2016-01-01') + liz.setInfo('video', + {'title': 'Demo show 1', + 'originaltitle': 'Demo shåvv 1', + 'sorttitle': '2', + 'userrating': 5, + 'plotoutline': 'Outline yo', + 'plot': 'Plot yo', + 'tagline': 'Tag yo', + 'duration': 110, + 'mpaa': 'T', + 'trailer': '/home/akva//porn/bukkake.mkv', + 'genre': ['Action', 'Comedy'], + 'country': ['Norway', 'Sweden', 'China'], + 'credits': ['None', 'Want', 'To Admit It'], + 'director': ['spiff', 'spiff2'], + 'studio': ['Studio1', 'Studio2'], + 'dateadded': '2016-01-01', + 'premiered': '2015-01-01', + 'aired': '2007-01-01', + 'status': 'Cancelled', + 'episodeguide': '/path/to/show/guide', + 'tag': ['Porn', 'Umomz'] + }) + liz.setRating("imdb", 9, 100000, True ) + liz.setRating("tvdb", 8.9, 1000) + liz.setUniqueIDs({ 'imdb': 'tt8938399', 'tvdb' : '9837493' }, 'tvdb') + liz.addSeason(1, 'Horrible') + liz.addSeason(2, 'Crap') + liz.setCast([{'name': 'spiff', 'role': 'himself', 'thumbnail': '/home/akva/Pictures/fish.jpg', 'order': 2}, + {'name': 'monkey', 'role': 'orange', 'thumbnail': '/home/akva/Pictures/coffee.jpg', 'order': 1}]) + liz.addAvailableArtwork('DefaultBackFanart.png', 'banner') + liz.addAvailableArtwork('/home/akva/Pictures/hawaii-shirt.png', 'poster') + liz.setAvailableFanart([{'image': 'DefaultBackFanart.png', 'preview': 'DefaultBackFanart.png'}, + {'image': '/home/akva/Pictures/hawaii-shirt.png', 'preview': '/home/akva/Pictures/hawaii-shirt.png'}]) xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, listitem=liz) elif action == 'getepisodelist': url=urllib.unquote_plus(params["url"]) print('in here yo ' + url) if url == '/path/to/show/guide': liz=xbmcgui.ListItem('Demo Episode 1x1', offscreen=True) - liz.setProperty('video.episode', '1') - liz.setProperty('video.season', '1') - liz.setProperty('video.aired', '2015-01-01') - liz.setProperty('video.id', '1') - liz.setProperty('video.url', '/path/to/episode1') + liz.setInfo('video', + {'title': 'Demo Episode 1', + 'season': 1, + 'episode': 1, + 'aired': '2015-01-01' + }) + liz.addAvailableArtwork('/path/to/episode1','banner') xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url="/path/to/episode1", listitem=liz, isFolder=False) liz=xbmcgui.ListItem('Demo Episode 2x2', offscreen=True) - liz.setProperty('video.episode', '2') + liz.setInfo('video', + {'title': 'Demo Episode 2', + 'season': 2, + 'episode': 2, + 'aired': '2014-01-01' + }) + liz.addAvailableArtwork('/path/to/episode2','banner') #liz.setProperty('video.sub_episode', '1') - liz.setProperty('video.season', '2') - liz.setProperty('video.aired', '2014-01-01') - liz.setProperty('video.id', '2') - liz.setProperty('video.url', '/path/to/episode2') xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url="/path/to/episode2", listitem=liz, isFolder=False) elif action == 'getepisodedetails': url=urllib.unquote_plus(params["url"]) if url == '/path/to/episode1': liz=xbmcgui.ListItem('Demo Episode 1', offscreen=True) - liz.setProperty('video.original_title', 'Demo æpisod 1x1') - liz.setProperty('video.sort_title', '2') - liz.setProperty('video.episode', '1') - liz.setProperty('video.season', '1') - liz.setProperty('video.ratings', '1') - liz.setProperty('video.rating1.value', '5') - liz.setProperty('video.rating1.votes', '100') - liz.setProperty('video.user_rating', '5') - liz.setProperty('video.unique_id', '123') - liz.setProperty('video.plot_outline', 'Outline yo') - liz.setProperty('video.plot', 'Plot yo') - liz.setProperty('video.tag_line', 'Tag yo') - liz.setProperty('video.duration_minutes', '110') - liz.setProperty('video.mpaa', 'T') - liz.setProperty('video.first_aired', '2007-01-01') - liz.setProperty('video.thumbs', '2') - liz.setProperty('video.thumb1.url', 'DefaultBackFanart.png') - liz.setProperty('video.thumb1.aspect', '1.78') - liz.setProperty('video.thumb2.url', '/home/akva/Pictures/hawaii-shirt.png') - liz.setProperty('video.thumb2.aspect', '2.35') - liz.setProperty('video.genre','Action / Comedy') - liz.setProperty('video.country', 'Norway / Sweden / China') - liz.setProperty('video.writing_credits', 'None / Want / To Admit It') - liz.setProperty('video.director', 'spiff / spiff2') - liz.setProperty('video.actors', '2') - liz.setProperty('video.actor1.name', 'spiff') - liz.setProperty('video.actor1.role', 'himself') - liz.setProperty('video.actor1.sort_order', '2') - liz.setProperty('video.actor1.thumb', '/home/akva/Pictures/fish.jpg') - liz.setProperty('video.actor1.thumb_aspect', 'poster') - liz.setProperty('video.actor2.name', 'monkey') - liz.setProperty('video.actor2.role', 'orange') - liz.setProperty('video.actor2.sort_order', '1') - liz.setProperty('video.actor1.thumb_aspect', '1.78') - liz.setProperty('video.actor2.thumb', '/home/akva/Pictures/coffee.jpg') - liz.setProperty('video.date_added', '2016-01-01') + liz.setInfo('video', + {'title': 'Demo Episode 1', + 'originaltitle': 'Demo æpisod 1x1', + 'sorttitle': '2', + 'episode': 1, + 'season': 1, + 'userrating': 5, + 'plotoutline': 'Outline yo', + 'plot': 'Plot yo', + 'tagline': 'Tag yo', + 'duration': 110, + 'mpaa': 'T', + 'trailer': '/home/akva//porn/bukkake.mkv', + 'genre': ['Action', 'Comedy'], + 'country': ['Norway', 'Sweden', 'China'], + 'credits': ['None', 'Want', 'To Admit It'], + 'director': ['spiff', 'spiff2'], + 'studio': ['Studio1', 'Studio2'], + 'dateadded': '2016-01-01', + 'premiered': '2015-01-01', + 'aired': '2007-01-01', + 'tag': ['Porn', 'Umomz'] + }) + liz.setRating("imdb", 9, 100000, True ) + liz.setRating("tvdb", 8.9, 1000) + liz.setUniqueIDs({ 'tvdb': '3894', 'imdb' : 'tt384940' }, 'tvdb') + liz.addSeason(1, 'Horrible') + liz.addSeason(2, 'Crap') + liz.setCast([{'name': 'spiff', 'role': 'himself', 'thumbnail': '/home/akva/Pictures/fish.jpg', 'order': 2}, + {'name': 'monkey', 'role': 'orange', 'thumbnail': '/home/akva/Pictures/coffee.jpg', 'order': 1}]) + liz.addAvailableArtwork('DefaultBackFanart.png', 'banner') + liz.addAvailableArtwork('/home/akva/Pictures/hawaii-shirt.png', 'poster') + liz.setAvailableFanart([{'image': 'DefaultBackFanart.png', 'preview': 'DefaultBackFanart.png'}, + {'image': '/home/akva/Pictures/hawaii-shirt.png', 'preview': '/home/akva/Pictures/hawaii-shirt.png'}]) xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, listitem=liz) elif url == '/path/to/episode2': liz=xbmcgui.ListItem('Demo Episode 2', offscreen=True) - liz.setProperty('video.original_title', 'Demo æpisod 2x2')
View file
_service:download_files:master.tar.gz/addons/resource.language.en_gb/resources/strings.po
Changed
@@ -7202,7 +7202,7 @@ msgid "No art" msgstr "" -#. Button to add a new type of art e.g. "thumb", "poster", "fanart" etc. +#. Button to add a new type of art e.g. "thumb", "poster", "fanart" etc. #: xbmc/music/MusicUtils.cpp #: xbmc/video/dialogs/GUIDialogVideoInfo.cpp msgctxt "#13516" @@ -7229,7 +7229,7 @@ msgid "Embedded fanart" msgstr "" -#. Heading for selection of a type of art e.g. "thumb", "poster", "fanart" etc. +#. Heading for selection of a type of art e.g. "thumb", "poster", "fanart" etc. #: xbmc/music/MusicUtils.cpp msgctxt "#13521" msgid "Choose art type"
View file
_service:download_files:master.tar.gz/addons/screensaver.xbmc.builtin.dim/addon.xml
Changed
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="screensaver.xbmc.builtin.dim" name="Dim" - version="1.0.39" + version="1.0.40" provider-name="Team Kodi"> <extension point="xbmc.ui.screensaver" library=""/> <extension point="xbmc.addon.metadata">
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/addon.xml
Changed
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<addon id="skin.estouchy" version="2.0.12" name="Estouchy" provider-name="Team Kodi"> +<addon id="skin.estouchy" version="2.0.13" name="Estouchy" provider-name="Team Kodi"> <requires> <import addon="xbmc.gui" version="5.13.0"/> </requires> @@ -50,6 +50,7 @@ <summary lang="szl">Skōra dlŏ maszin z tykowym ekranym</summary> <summary lang="th_TH">หน้าตาสำหรับอุปกรณ์สัมผัส</summary> <summary lang="tr_TR">Dokunmatik ekranlı aygıtlar için dış görünüm</summary> + <summary lang="uk_UA">Скін для сенсорних пристроїв</summary> <summary lang="zh_CN">针对触屏设备的皮肤</summary> <summary lang="zh_TW">為具有觸控螢幕的裝置所製作的佈景主題</summary> <description lang="af_ZA">Oortreksel ontwerp om op raakskerm toestelle soos tablette en slimfone te gebruik</description>
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.bg_bg/strings.po
Changed
@@ -42,7 +42,7 @@ msgctxt "#31009" msgid "Working..." -msgstr "Работи..." +msgstr "В процес на работа…" msgctxt "#31011" msgid "Recent" @@ -172,6 +172,14 @@ msgid "Change the skin · Set language and region · Change file listing options · Set up a screensaver" msgstr "Изберете облик · Задайте език и район · Променете настройките на списъците с файлове · Настройте скрийнсейвър" +msgctxt "#31405" +msgid "Configure & manage media sharing services · Configure & manage the weather service" +msgstr "Настройки на услугите за споделяне · Настройки на услугата за метеорологична прогноза" + +msgctxt "#31406" +msgid "Configure display · Configure audio · Configure internet access · Configure power saving· Configure logging" +msgstr "Настройка на екрана · Настройка на звука · Настройка на достъпа до Интернет · Настройка на пестенето на енергия · Настройка на журналите" + msgctxt "#31421" msgid "Select your Kodi user Profile[CR]to login and continue" msgstr "Изберете потребителски профил,[CR]за да продължите" @@ -230,4 +238,4 @@ msgctxt "#31904" msgid "Now Playing Title..." -msgstr "Сега се възпроизвежда..." +msgstr "Възпроизвеждане…"
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.cs_cz/strings.po
Changed
@@ -42,7 +42,7 @@ msgctxt "#31009" msgid "Working..." -msgstr "Zpracovávání..." +msgstr "Zpracovávání…" msgctxt "#31011" msgid "Recent" @@ -62,7 +62,7 @@ msgctxt "#31017" msgid "PVR info" -msgstr "Informace o PVR" +msgstr "Informace o nahrávače videa" msgctxt "#31018" msgid "Player process info" @@ -206,7 +206,7 @@ msgctxt "#31406" msgid "Configure display · Configure audio · Configure internet access · Configure power saving· Configure logging" -msgstr "Konfigurujte obrazovku · Konfigurujte zvuk · Konfigurujte přístup k internetu · Konfigurujte úsporu energie · Konfigurujte protokolování" +msgstr "Nastavit obrazovku · Nastavit zvuk · Nastavit přístup k Internetu · Nastavit úsporu energie · Nastavit protokolování" msgctxt "#31407" msgid "Manage your installed add-ons · Browse for and install add-ons from kodi.tv · Modify add-on settings" @@ -226,7 +226,7 @@ msgctxt "#31411" msgid "Configure your profiles · Set locking options · Enable login screen" -msgstr "Konfigurujte své profily · Nastavte možnosti uzamknutí · Povolte přihlašovací obrazovku" +msgstr "Nastavte si své profily · Nastavte možnosti uzamknutí · Povolte přihlašovací obrazovku" msgctxt "#31412" msgid "Display system information · Hardware statistics · Check storage availability · View network configuration" @@ -266,7 +266,7 @@ msgctxt "#31555" msgid "Configure TV settings · Change full screen info · Manage EPG data settings" -msgstr "Konfigurujte nastavení TV · Změňte informace na celé obrazovce · Spravujte data televizního programu" +msgstr "Nastavit televizi · Změnit informace na celé obrazovce · Správa nastavení data televizního programu" msgctxt "#31556" msgid "Live TV" @@ -318,7 +318,7 @@ msgctxt "#31902" msgid "The Kodi logo functions as a 'HOME' button. Whenever you touch it, you will be taken back to the home screen." -msgstr "Logo Kodi slouží jako tlačítko 'DOMŮ'. Kdykoliv se ho dotknete, přepnete se zpět na domovskou obrazovku." +msgstr "Logo Kodi slouží jako tlačítko „DOMŮ“. Kdykoliv se ho dotknete, přepnete se zpět na domovskou obrazovku." msgctxt "#31903" msgid "When you are playing audio or video, the item title will appear at the top of the screen. Touching it will take you to the fullscreen visualization or video window." @@ -326,4 +326,4 @@ msgctxt "#31904" msgid "Now Playing Title..." -msgstr "Nyní se přehrává..." +msgstr "Nyní se přehrává…"
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.da_dk/strings.po
Changed
@@ -60,6 +60,10 @@ msgid "PVR info" msgstr "PVR-information" +msgctxt "#31018" +msgid "Player process info" +msgstr "Procesinformation for afspilning" + msgctxt "#31020" msgid "Pixel format" msgstr "Pixelformat"
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.fr_fr/strings.po
Changed
@@ -78,7 +78,7 @@ msgctxt "#31021" msgid "System memory usage" -msgstr "Mémoire système utilisée" +msgstr "Mémoire système utilisée " msgctxt "#31024" msgid "Page"
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.id_id/strings.po
Changed
@@ -56,6 +56,10 @@ msgid "Albums" msgstr "Album" +msgctxt "#31018" +msgid "Player process info" +msgstr "Informasi proses player" + msgctxt "#31024" msgid "Page" msgstr "Halaman" @@ -148,6 +152,10 @@ msgid "Download Subtitles" msgstr "Unduh subtitle" +msgctxt "#31358" +msgid "Teletext" +msgstr "Teleteks" + msgctxt "#31390" msgid "Skin default" msgstr "Kulit Standar"
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.ru_ru/strings.po
Changed
@@ -200,6 +200,10 @@ msgid "Change the skin · Set language and region · Change file listing options · Set up a screensaver" msgstr "Изменение обложки · Настройка языка и региона · Изменение параметров списка файлов · Настройка заставки" +msgctxt "#31405" +msgid "Configure & manage media sharing services · Configure & manage the weather service" +msgstr "Настройка и управление службами общего доступа к мультимедиа · Настройка и управление службой погоды" + msgctxt "#31407" msgid "Manage your installed add-ons · Browse for and install add-ons from kodi.tv · Modify add-on settings" msgstr "Управление дополнениями · Поиск и установка дополнений с kodi.tv · Настройки дополнений" @@ -208,6 +212,14 @@ msgid "Select your Kodi user Profile[CR]to login and continue" msgstr "Выберите профиль пользователя Kodi,[CR]чтобы войти в систему" +msgctxt "#31548" +msgid "Home menu" +msgstr "Главное меню" + +msgctxt "#31549" +msgid "Home Add-ons" +msgstr "Домашние дополнения" + msgctxt "#31550" msgid "Backgrounds" msgstr "Варианты фона" @@ -216,6 +228,10 @@ msgid "Add-on Shortcut" msgstr "Ярлыки дополнений" +msgctxt "#31552" +msgid "SYNC" +msgstr "SYNC" + msgctxt "#31553" msgid "Use Custom Background" msgstr "Использовать собственный фон" @@ -267,3 +283,7 @@ msgctxt "#31900" msgid "First Run" msgstr "Первый запуск" + +msgctxt "#31904" +msgid "Now Playing Title..." +msgstr "Сейчас играет название..."
View file
_service:download_files:master.tar.gz/addons/skin.estouchy/language/resource.language.uk_ua/strings.po
Changed
@@ -88,6 +88,10 @@ msgid "Login" msgstr "Вхід" +msgctxt "#31039" +msgid "Updated:" +msgstr "Оновлено:" + msgctxt "#31044" msgid "FAST FORWARD" msgstr "ПЕРЕМОТКА ВПЕРЕД" @@ -156,6 +160,10 @@ msgid "Data provider" msgstr "Джерело даних" +msgctxt "#31309" +msgid "System Memory Used:" +msgstr "Використана системна пам'ять:" + msgctxt "#31320" msgid "Last Logged In" msgstr "Останній вхід" @@ -192,6 +200,10 @@ msgid "Select your Kodi user Profile[CR]to login and continue" msgstr "Виберіть профіль користувача Kodi,[CR]щоб увійти до системи" +msgctxt "#31548" +msgid "Home menu" +msgstr "Домашнє меню" + msgctxt "#31550" msgid "Backgrounds" msgstr "Варіанті тла" @@ -200,6 +212,10 @@ msgid "Add-on Shortcut" msgstr "Ярлики надбудов" +msgctxt "#31552" +msgid "SYNC" +msgstr "SYNC" + msgctxt "#31554" msgid "Background:" msgstr "Тло:" @@ -208,6 +224,10 @@ msgid "Live TV" msgstr "ТБ" +msgctxt "#31559" +msgid "Channel settings" +msgstr "Налаштування каналу" + msgctxt "#31560" msgid "Available groups" msgstr "Доступні групи" @@ -224,6 +244,14 @@ msgid "Delete Group" msgstr "Видалити групу" +msgctxt "#31564" +msgid "Show hidden" +msgstr "Показати приховані" + msgctxt "#31565" msgid "Show deleted" msgstr "Відображати видаленні" + +msgctxt "#31904" +msgid "Now Playing Title..." +msgstr "Зараз відтворюється ..."
View file
_service:download_files:master.tar.gz/addons/skin.estuary/addon.xml
Changed
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<addon id="skin.estuary" version="2.0.7" name="Estuary" provider-name="phil65, Ichabod Fletchman"> +<addon id="skin.estuary" version="2.0.8" name="Estuary" provider-name="phil65, Ichabod Fletchman"> <requires> <import addon="xbmc.gui" version="5.13.0"/> </requires> @@ -59,7 +59,7 @@ <summary lang="th_TH">สกิน Estuary โดย phil65 และ Piers (หน้าตาเริ่มต้นของKodi)</summary> <summary lang="tr_TR">Estuary dış görünümü. phil65 (Kodi'nin varsayılan dış görünümü)</summary> <summary lang="uk_UA">Обкладинка Estuary від phil65 і Piers. (стандартна обкладинка Kodi)</summary> - <summary lang="zh_CN">phil65 和 Piers 开发的 Estuary 皮肤(Kodi 的默认皮肤)</summary> + <summary lang="zh_CN">phil65 开发的 Estuary 皮肤(Kodi 的默认皮肤)。</summary> <summary lang="zh_TW">phil65與Piers 製作的Estuary佈景主題(Kodi的預設佈景主題)</summary> <description lang="af_ZA">Estuary is die bestek oortreksel vir Kodi 17.0 en op. Dit poog om maklik te wees vir eerste keer Kodi gebruikers om te verstaan en te gebruik.</description> <description lang="bg_BG">Estuary е стандартният облик на Kodi 17 и по-новите версии. Целта е да се улеснят хората които се сблъскват за първи път с Kodi.</description> @@ -142,7 +142,7 @@ <disclaimer lang="sk_SK">Estuary je predvolený vzhľad pre Kodi, jeho odstránenie môže spôsobiť problémy</disclaimer> <disclaimer lang="sr_RS">Estuary је подразумевана маска за Kodi, уклањање може изазвати проблеме</disclaimer> <disclaimer lang="sr_RS@latin">Estuary je podrazumevana maska za Kodi, uklanjanje može izazvati probleme</disclaimer> - <disclaimer lang="sv_SE">Estuary är standard skalet för Kodi, om du tar bort den kan det orsaka problem</disclaimer> + <disclaimer lang="sv_SE">Estuary är standardskalet för Kodi, om du tar bort den kan det orsaka problem</disclaimer> <disclaimer lang="szl">Estuary je wychodnōm skōrōm Kodi, jij uchrōniynie może sprŏwiać niyprzileżytości</disclaimer> <disclaimer lang="th_TH">Estuary เป็นหน้าตาเริ่มต้นสำหรับ Kodi, การลบมัน อาจทำให้เกิดปัญหา</disclaimer> <disclaimer lang="tr_TR">Estuary Kodi için varsayılan dış görünümdür, kaldırmak sorunlara yol açabilir</disclaimer>
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.af_za/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Druk [B]OK[/B] om te stop" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Wissel taal" - msgctxt "#31052" msgid "filtered" msgstr "gefilter"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.be_by/strings.po
Changed
@@ -36,6 +36,10 @@ msgid "Arial based" msgstr "Падобны на Arial" +msgctxt "#31067" +msgid "Event log" +msgstr "Журнал падзей" + msgctxt "#31069" msgid "Last Updated" msgstr "Апошняе абнаўленьне"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.bg_bg/strings.po
Changed
@@ -30,7 +30,7 @@ msgctxt "#31003" msgid "Cinema mode" -msgstr "Режим \"Кино\"" +msgstr "Режим „Кино“" msgctxt "#31004" msgid "Change mode" @@ -172,10 +172,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Натиснете клавиша [B]OK[/B] за спиране" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Превключи езика" - msgctxt "#31053" msgid "Arial based" msgstr "Основан на Arial" @@ -230,7 +226,7 @@ msgctxt "#31072" msgid "Power Options" -msgstr "Изключи..." +msgstr "Захранване" msgctxt "#31075" msgid "Movie sets" @@ -294,11 +290,11 @@ msgctxt "#31103" msgid "Enter text here..." -msgstr "Въведете текст тук..." +msgstr "Въведете текст тук…" msgctxt "#31104" msgid "Your library is currently empty. In order to populate it with your personal media, enter \"Files\" section, add a media source and configure it. After the source has been added and indexed you will be able to browse your library." -msgstr "Библиотеката е празна. За да добавите медийните си файлове влезте в раздела \"Файлове\", от където можете да настроите източниците с медийно съдържание. След като добавите източниците и те бъдат сканирани библиотеката ще бъде попълнена." +msgstr "Библиотеката е празна. За да добавите медийните си файлове влезте в раздела „Файлове“, от където можете да настроите източниците с медийно съдържание. След като добавите източниците и те бъдат сканирани, библиотеката ще бъде попълнена." msgctxt "#31106" msgid "Teletext" @@ -346,7 +342,7 @@ msgctxt "#31120" msgid "You did not set up a weather provider yet. In order to view weather information, choose a weather provider and set up your location." -msgstr "Метеорологичната прогноза не е налично защото няма настроена метеорологична услуга. За целта е необходимо да изберете доставчик на данни и да въведете местоположението си." +msgstr "Метеорологичната прогноза не е налична защото няма настроена метеорологична услуга. За целта е необходимо да изберете доставчик на данни и да въведете местоположението си." msgctxt "#31121" msgid "Set weather provider" @@ -386,7 +382,7 @@ msgctxt "#31136" msgid "Click here to see latest changes..." -msgstr "Последните промени..." +msgstr "Последни промени…" msgctxt "#31137" msgid "PVR info"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ca_es/strings.po
Changed
@@ -50,7 +50,7 @@ msgctxt "#31008" msgid "Enable category widgets" -msgstr "Habilita el giny de categories" +msgstr "Habilita els ginys de categoria" msgctxt "#31009" msgid "Download icons" @@ -196,10 +196,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Premeu [B]D'ACORD[/B] per aturar" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Commuta l'idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrat"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.cs_cz/strings.po
Changed
@@ -126,7 +126,7 @@ msgctxt "#31028" msgid "Show fanart" -msgstr "Zobrazit fanart" +msgstr "Zobrazit fanouškovské umění" msgctxt "#31029" msgid "Last logged in" @@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Stiskněte [B]OK[/B] pro zastavení" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Přepnout jazyk" - msgctxt "#31052" msgid "filtered" msgstr "filtrováno" @@ -342,7 +338,7 @@ msgctxt "#31103" msgid "Enter text here..." -msgstr "Sem zadejte text..." +msgstr "Sem zadejte text…" msgctxt "#31104" msgid "Your library is currently empty. In order to populate it with your personal media, enter \"Files\" section, add a media source and configure it. After the source has been added and indexed you will be able to browse your library." @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Zvolte balíček fanatrů vzhledu" +msgctxt "#31132" +msgid "Select Program" +msgstr "Vybrat program" + msgctxt "#31134" msgid "Remaining" msgstr "Zbývá" @@ -470,7 +470,7 @@ msgctxt "#31140" msgid "Pixel format" -msgstr "Formát pixelu" +msgstr "Formát obrazového bodu" msgctxt "#31141" msgid "Changes for version"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.da_dk/strings.po
Changed
@@ -320,6 +320,10 @@ msgid "Contributors" msgstr "Bidragsydere" +msgctxt "#31132" +msgid "Select Program" +msgstr "Vælg program" + msgctxt "#31134" msgid "Remaining" msgstr "Tilbage" @@ -328,6 +332,10 @@ msgid "PVR info" msgstr "PVR-information" +msgctxt "#31138" +msgid "Player process info" +msgstr "Procesinformation for afspilning" + msgctxt "#31140" msgid "Pixel format" msgstr "Pixelformat"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.de_de/strings.po
Changed
@@ -114,7 +114,7 @@ msgctxt "#31024" msgid "Choose rating to display for media items" -msgstr "Bewertung für Anzeige von Medien-Inhalte wählen" +msgstr "Bewertung, die für Medien-Inhalte angezeigt werden soll" msgctxt "#31025" msgid "No favourites found. You can add any item from media views to this list by using the context menu." @@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "[B]OK[/B] zum Stoppen drücken" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Sprache umstellen" - msgctxt "#31052" msgid "filtered" msgstr "gefiltert" @@ -274,7 +270,7 @@ msgctxt "#31079" msgid "Cast not available" -msgstr "Bestzung nicht verfügbar" +msgstr "Besetzung nicht verfügbar" msgctxt "#31080" msgid "Ends at" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Fanart-Sammlung für Skin wählen" +msgctxt "#31132" +msgid "Select Program" +msgstr "Programm auswählen" + msgctxt "#31134" msgid "Remaining" msgstr "Verbleibend"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.el_gr/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Πατήστε το [B]OK[/B] για να διακοπή" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Εναλλαγή γλώσσας" - msgctxt "#31052" msgid "filtered" msgstr "φιλτραρισμένο"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.en_nz/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Press [B]OK[/B] to stop" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Toggle language" - msgctxt "#31052" msgid "filtered" msgstr "filtered"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.en_us/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Press [B]OK[/B] to stop" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Toggle language" - msgctxt "#31052" msgid "filtered" msgstr "filtered" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Choose skin fanart pack" +msgctxt "#31132" +msgid "Select Program" +msgstr "Select Program" + msgctxt "#31134" msgid "Remaining" msgstr "Remaining"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.es_ar/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Presione [B]OK[/B] para detener" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Cambiar idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrado"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.es_es/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Pulse [B]OK[/B] para detener" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Cambiar idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrado" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Elegir pack de fanart de skin" +msgctxt "#31132" +msgid "Select Program" +msgstr "Elija Programa" + msgctxt "#31134" msgid "Remaining" msgstr "Restante"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.es_mx/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Presione [B]OK[/B] para parar" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Alternar idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrado"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.eu_es/strings.po
Changed
@@ -196,10 +196,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Sakatu [B]Ados[/B] gelditzeko" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Txandakatu hizkuntza" - msgctxt "#31052" msgid "filtered" msgstr "iragazita"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.fi_fi/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Pysäytä painamalla [B]OK[/B]" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Tekstitysraita" - msgctxt "#31052" msgid "filtered" msgstr "suodatetut" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Valitse ulkoasun taustakuvapaketti" +msgctxt "#31132" +msgid "Select Program" +msgstr "Valitse ohjelma" + msgctxt "#31134" msgid "Remaining" msgstr "Jäljellä"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.fr_ca/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Peser sur [B]OK[/B] pour arrêter" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Changer la langue" - msgctxt "#31052" msgid "filtered" msgstr "filtré" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Choisir le paquet de fanart de l’habillage" +msgctxt "#31132" +msgid "Select Program" +msgstr "Choisir un programme" + msgctxt "#31134" msgid "Remaining" msgstr "Restant"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.fr_fr/strings.po
Changed
@@ -134,7 +134,7 @@ msgctxt "#31030" msgid "System memory usage" -msgstr "Mémoire système utilisée" +msgstr "Mémoire système utilisée " msgctxt "#31031" msgid "Version info" @@ -198,11 +198,7 @@ msgctxt "#31050" msgid "Press [B]OK[/B] to stop" -msgstr "Appuyer sur [B]OK[/B] pour stopper" - -msgctxt "#31051" -msgid "Toggle language" -msgstr "Changer de langue" +msgstr "Appuyer sur [B]OK[/B] pour arrêter" msgctxt "#31052" msgid "filtered" @@ -214,7 +210,7 @@ msgctxt "#31054" msgid "Press [B]Left[/B] to rewind, or [B]Right[/B] to fast-forward" -msgstr "Appuyer sur [B]Gauche[/B] pour le retour rapide, ou [B]Droite[/B] pour l'avance rapide" +msgstr "Appui sur [B]Gauche[/B] pour retour rapide, ou [B]Droite[/B] pour avance rapide" msgctxt "#31056" msgid "Go to playlist" @@ -278,7 +274,7 @@ msgctxt "#31080" msgid "Ends at" -msgstr "Termine à" +msgstr "Fin à " msgctxt "#31082" msgid "Lyrics add-on" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Choisir le paquet de FanArts pour l'habillage" +msgctxt "#31132" +msgid "Select Program" +msgstr "Sélectionner un programme" + msgctxt "#31134" msgid "Remaining" msgstr "Restant" @@ -498,11 +498,11 @@ msgctxt "#31149" msgid "Select genre fanart pack" -msgstr "Sélectionner le type de paquet de FanArts" +msgstr "Sélectionner le paquet de FanArts de genres…" msgctxt "#31150" msgid "Repository" -msgstr "Dépôt" +msgstr "Dépôt " msgctxt "#31151" msgid "Unwatched music videos"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.gl_es/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Premer [B]Aceptar[/B] para deter" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Cambiar idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrado" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Seleccionar paquete fanart do tema" +msgctxt "#31132" +msgid "Select Program" +msgstr "Seleccionar programa" + msgctxt "#31134" msgid "Remaining" msgstr "Restante"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.he_il/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "לחץ על [B]אישור[/B] כדי לעצור" -msgctxt "#31051" -msgid "Toggle language" -msgstr "החלף שפה" - msgctxt "#31052" msgid "filtered" msgstr "מסונן" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "בחר חבילת פאנארט למעטפת" +msgctxt "#31132" +msgid "Select Program" +msgstr "בחר תוכנית" + msgctxt "#31134" msgid "Remaining" msgstr "נותר"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.hr_hr/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Pritisni [B]U redu[/B] za završetak" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Odaberi podnaslov" - msgctxt "#31052" msgid "filtered" msgstr "filtrirano" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Odaberi paket postera obožavatelja za presvlaku" +msgctxt "#31132" +msgid "Select Program" +msgstr "Odaberi program" + msgctxt "#31134" msgid "Remaining" msgstr "Preostalo"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.hu_hu/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Nyomjon [B]OK[/B]-ot a leállításhoz" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Nyelv váltása" - msgctxt "#31052" msgid "filtered" msgstr "szűrt" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Válassz felszín-illusztráció csomagot" +msgctxt "#31132" +msgid "Select Program" +msgstr "Műsor kiválasztása" + msgctxt "#31134" msgid "Remaining" msgstr "Hátralévő"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.id_id/strings.po
Changed
@@ -80,6 +80,14 @@ msgid "Arial based" msgstr "berbasis Arial" +msgctxt "#31066" +msgid "Music playlist" +msgstr "Daftar putar lagu" + +msgctxt "#31067" +msgid "Event log" +msgstr "Log event" + msgctxt "#31069" msgid "Last Updated" msgstr "Terakhir diperbarui" @@ -107,3 +115,11 @@ msgctxt "#31100" msgid "Shift" msgstr "Shift" + +msgctxt "#31106" +msgid "Teletext" +msgstr "Teleteks" + +msgctxt "#31138" +msgid "Player process info" +msgstr "Informasi proses player"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.is_is/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Ýttu á [B]OK[/B] til að stoppa" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Víxla tungumáli" - msgctxt "#31052" msgid "filtered" msgstr "síað" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Veldu pakka með aðdáendamyndum fyrir skinn" +msgctxt "#31132" +msgid "Select Program" +msgstr "Veldu forrit" + msgctxt "#31134" msgid "Remaining" msgstr "Eftir"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.it_it/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Premi [B]OK[/B] per fermare" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Scorri lingua" - msgctxt "#31052" msgid "filtered" msgstr "filtrati" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Scegli pacchetto fanart skin" +msgctxt "#31132" +msgid "Select Program" +msgstr "Seleziona programma" + msgctxt "#31134" msgid "Remaining" msgstr "Rimanenti"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ja_jp/strings.po
Changed
@@ -184,10 +184,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "[B]決定[/B]を押して停止" -msgctxt "#31051" -msgid "Toggle language" -msgstr "言語を切替" - msgctxt "#31052" msgid "filtered" msgstr "フィルタ済"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ko_kr/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "[B]OK[/B]: 중지" -msgctxt "#31051" -msgid "Toggle language" -msgstr "언어 전환" - msgctxt "#31052" msgid "filtered" msgstr "필터 설정됨"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.lt_lt/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Paspauskite [B]OK[/B] norėdami sustabdyti" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Perjungti kalbą" - msgctxt "#31052" msgid "filtered" msgstr "filtruota" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Pasirinkti teminės išvaizdos Fanart paketą" +msgctxt "#31132" +msgid "Select Program" +msgstr "Pasirinkite programą" + msgctxt "#31134" msgid "Remaining" msgstr "Liko"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.mk_mk/strings.po
Changed
@@ -168,10 +168,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Притисни [B]OK[/B] за стоп" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Промени јазик" - msgctxt "#31052" msgid "filtered" msgstr "филтрирани" @@ -300,6 +296,10 @@ msgid "Show icons" msgstr "Прикажувај икони" +msgctxt "#31132" +msgid "Select Program" +msgstr "Одбери програм" + msgctxt "#31134" msgid "Remaining" msgstr "Преостанува"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ms_my/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Teka [B]OK[/B] untuk henti" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Togol bahasa" - msgctxt "#31052" msgid "filtered" msgstr "ditapis" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Pilih pek kulit seni peminat" +msgctxt "#31132" +msgid "Select Program" +msgstr "Pilih Program" + msgctxt "#31134" msgid "Remaining" msgstr "Berbaki"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.nb_no/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Trykk [B]OK[/B] for å stoppe" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Endre språk" - msgctxt "#31052" msgid "filtered" msgstr "filtrert" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Velg brukerkunstbidragspakke for drakt" +msgctxt "#31132" +msgid "Select Program" +msgstr "Velg Program" + msgctxt "#31134" msgid "Remaining" msgstr "Gjenstår"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.nl_nl/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Druk [B]Ok[/B] om te stoppen" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Verander taal" - msgctxt "#31052" msgid "filtered" msgstr "gefilterd" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Kies skinfanartpakket" +msgctxt "#31132" +msgid "Select Program" +msgstr "Selecteer programma" + msgctxt "#31134" msgid "Remaining" msgstr "Resterend"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.pl_pl/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Naciśnij [B]OK[/B], aby zatrzymać" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Przełącz język" - msgctxt "#31052" msgid "filtered" msgstr "filtrowane" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Wybierz pakiet fototapet skóry" +msgctxt "#31132" +msgid "Select Program" +msgstr "Wybierz program" + msgctxt "#31134" msgid "Remaining" msgstr "Pozostało"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.pt_br/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Aperte [B]OK[/B] para parar" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Alterar língua" - msgctxt "#31052" msgid "filtered" msgstr "filtrado" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Escolha o pacota de fanart da skin" +msgctxt "#31132" +msgid "Select Program" +msgstr "Selecionar Programa" + msgctxt "#31134" msgid "Remaining" msgstr "Remanescente"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.pt_pt/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Carregue em [B]OK[/B] para parar" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Alternar idioma" - msgctxt "#31052" msgid "filtered" msgstr "filtrados"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ro_ro/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Apăsați [B]Bine[/B] pentru a opri" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Schimbă limba" - msgctxt "#31052" msgid "filtered" msgstr "filtrat" @@ -306,7 +302,7 @@ msgctxt "#31096" msgid "Local subtitle available" -msgstr "Este disponibil o subtitrare locală" +msgstr "Este disponibil un subtitlu local" msgctxt "#31097" msgid "Channel options" @@ -440,6 +436,10 @@ msgid "Choose skin fanart pack" msgstr "Alegeți pachetul de decoruri pentru temă" +msgctxt "#31132" +msgid "Select Program" +msgstr "Selectare program" + msgctxt "#31134" msgid "Remaining" msgstr "Rămas"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.ru_ru/strings.po
Changed
@@ -48,6 +48,10 @@ msgid "Unwatched movies" msgstr "Непросмотреные фильмы" +msgctxt "#31008" +msgid "Enable category widgets" +msgstr "Включить виджеты категорий" + msgctxt "#31009" msgid "Download icons" msgstr "Загрузить иконки" @@ -108,6 +112,10 @@ msgid "Viewtype" msgstr "Вид" +msgctxt "#31024" +msgid "Choose rating to display for media items" +msgstr "Выбрать рейтинг для показа мультимедийных элементов" + msgctxt "#31025" msgid "No favourites found. You can add any item from media views to this list by using the context menu." msgstr "Список избранного пуст. Вы можете добавить сюда любой медиаконтент с помощью контекстного меню." @@ -192,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Нажмите [B]OK[/B] для остановки" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Переключить язык" - msgctxt "#31052" msgid "filtered" msgstr "отфильтровано" @@ -440,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Выбрать набор фанарта обложки" +msgctxt "#31132" +msgid "Select Program" +msgstr "Выбрать программу" + msgctxt "#31134" msgid "Remaining" msgstr "Осталось" @@ -539,3 +547,11 @@ msgctxt "#31161" msgid "Numeric pad" msgstr "Цифровая клавиатура" + +msgctxt "#31162" +msgid "Play your personal games or download one of the many game add-ons from the official repository." +msgstr "Играйте в свои личные игры или загрузить одну из многочисленных надстроек из официального репозитория." + +msgctxt "#31163" +msgid "Show Fanart background" +msgstr "Показать фанатный фон"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.sk_sk/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Stlačte [B]OK[/B] pre zastavenie" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Prepnúť jazyk" - msgctxt "#31052" msgid "filtered" msgstr "filtrované" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Vyberte fanart balík pre vzhľad" +msgctxt "#31132" +msgid "Select Program" +msgstr "Vybrať program" + msgctxt "#31134" msgid "Remaining" msgstr "Zostáva"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.sr_rs/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Притисните [B]У Реду[/B] за заустављање" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Мењај језик" - msgctxt "#31052" msgid "filtered" msgstr "филтерисано"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.sr_rs@latin/strings.po
Changed
@@ -192,10 +192,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Pritisnite [B]U Redu[/B] za zaustavljanje" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Menjaj jezik" - msgctxt "#31052" msgid "filtered" msgstr "filterisano"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.sv_se/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Tryck på [B]OK[/B] för att stoppa" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Växla språk" - msgctxt "#31052" msgid "filtered" msgstr "filtrerad" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Välj skal-fanart paket" +msgctxt "#31132" +msgid "Select Program" +msgstr "Välj program" + msgctxt "#31134" msgid "Remaining" msgstr "Återstående"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.szl/strings.po
Changed
@@ -188,10 +188,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Naciś [B]OK[/B], coby zastawić" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Przeszaltruj gŏdka" - msgctxt "#31052" msgid "filtered" msgstr "filtrowane"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.th_th/strings.po
Changed
@@ -188,10 +188,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "กด [B]ตกลง[/B] เพื่อหยุด" -msgctxt "#31051" -msgid "Toggle language" -msgstr "สลับภาษา" - msgctxt "#31052" msgid "filtered" msgstr "ที่กรองแล้ว"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.tr_tr/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Durdurmak için [B]OK[/B] tuşuna basın" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Dili değiştir" - msgctxt "#31052" msgid "filtered" msgstr "filtrelendi" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Dış görünüm için fanart paketi seçin" +msgctxt "#31132" +msgid "Select Program" +msgstr "Programı Seçiniz" + msgctxt "#31134" msgid "Remaining" msgstr "Kalan"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.uk_ua/strings.po
Changed
@@ -48,6 +48,10 @@ msgid "Unwatched movies" msgstr "Непереглянуті фільми" +msgctxt "#31008" +msgid "Enable category widgets" +msgstr "Увімкнути віджети категорій" + msgctxt "#31009" msgid "Download icons" msgstr "Завантажити значки" @@ -108,10 +112,18 @@ msgid "Viewtype" msgstr "Вигляд" +msgctxt "#31024" +msgid "Choose rating to display for media items" +msgstr "Виберіть рейтинг для відображення медіа-елементів" + msgctxt "#31025" msgid "No favourites found. You can add any item from media views to this list by using the context menu." msgstr "Немає обраних. Ви можете додати до цього списку будь-який медіафайл за допомогою контекстного меню." +msgctxt "#31026" +msgid "Timeshift" +msgstr "Зрушення в часі" + msgctxt "#31028" msgid "Show fanart" msgstr "Показувати фанарт" @@ -188,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "Натисніть [B]OK[/B] для зупинки" -msgctxt "#31051" -msgid "Toggle language" -msgstr "Змінити мову" - msgctxt "#31052" msgid "filtered" msgstr "відібрано" @@ -436,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "Вибрати набір фанартів обкладинки" +msgctxt "#31132" +msgid "Select Program" +msgstr "Вибрати програму" + msgctxt "#31134" msgid "Remaining" msgstr "Залишилося" @@ -535,3 +547,7 @@ msgctxt "#31161" msgid "Numeric pad" msgstr "Цифрова клавіатура" + +msgctxt "#31162" +msgid "Play your personal games or download one of the many game add-ons from the official repository." +msgstr "Грайте в свої персональні ігри, або завантажте одні з багатьох ігрових додатків з офіційного сховища."
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.zh_cn/strings.po
Changed
@@ -50,7 +50,7 @@ msgctxt "#31008" msgid "Enable category widgets" -msgstr "启用类别小部件" +msgstr "启用功能区小部件" msgctxt "#31009" msgid "Download icons" @@ -114,7 +114,7 @@ msgctxt "#31024" msgid "Choose rating to display for media items" -msgstr "选择要显示媒体项目的评级" +msgstr "选择媒体项目要显示的评级" msgctxt "#31025" msgid "No favourites found. You can add any item from media views to this list by using the context menu." @@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "按 [B]确定[/B] 停止" -msgctxt "#31051" -msgid "Toggle language" -msgstr "切换语言" - msgctxt "#31052" msgid "filtered" msgstr "已筛选" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "选择皮肤同人画包" +msgctxt "#31132" +msgid "Select Program" +msgstr "选择程序" + msgctxt "#31134" msgid "Remaining" msgstr "剩余"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/language/resource.language.zh_tw/strings.po
Changed
@@ -200,10 +200,6 @@ msgid "Press [B]OK[/B] to stop" msgstr "按[B]OK[/B]停止" -msgctxt "#31051" -msgid "Toggle language" -msgstr "切換語系" - msgctxt "#31052" msgid "filtered" msgstr "經篩選過的" @@ -448,6 +444,10 @@ msgid "Choose skin fanart pack" msgstr "選擇佈景主題粉絲自製圖集" +msgctxt "#31132" +msgid "Select Program" +msgstr "選擇程式" + msgctxt "#31134" msgid "Remaining" msgstr "後結束"
View file
_service:download_files:master.tar.gz/addons/skin.estuary/xml/DialogSeekBar.xml
Changed
@@ -176,7 +176,7 @@ <align>center</align> <aligny>center</aligny> <font>font30</font> - <label>[B]$LOCALIZE[31026][/B] $INFO[PVR.timeshiftcur]</label> + <label>[B]$LOCALIZE[31026][/B] $INFO[PVR.TimeshiftCur] (-$INFO[PVR.TimeshiftOffset])</label> </control> <control type="progress"> <left>0</left> @@ -217,7 +217,7 @@ <info>Player.Progress</info> <texturebg border="3" colordiffuse="60FFFFFF">colors/white50.png</texturebg> <midtexture colordiffuse="button_focus">colors/white.png</midtexture> - <visible>!VideoPlayer.HasEpg</visible> + <visible>!VideoPlayer.HasEpg + !Player.ChannelPreviewActive</visible> </control> <control type="slider" id="401"> <left>5</left> @@ -227,7 +227,17 @@ <texturesliderbar colordiffuse="00FFFFFF">osd/progress/nub_bar.png</texturesliderbar> <textureslidernib colordiffuse="button_focus">osd/progress/nub_bar.png</textureslidernib> <textureslidernibfocus colordiffuse="button_focus">colors/white.png</textureslidernibfocus> - <visible>!VideoPlayer.HasEpg</visible> + <visible>Player.SeekEnabled + !VideoPlayer.HasEpg + !Player.ChannelPreviewActive</visible> + </control> + <control type="slider" id="402"> + <left>5</left> + <top>65</top> + <width>100%</width> + <height>25</height> + <texturesliderbar colordiffuse="00FFFFFF">osd/progress/nub_bar.png</texturesliderbar> + <textureslidernib colordiffuse="button_focus">osd/progress/nub_bar.png</textureslidernib> + <textureslidernibfocus colordiffuse="button_focus">colors/white.png</textureslidernibfocus> + <visible>Player.SeekEnabled + VideoPlayer.HasEpg + !Player.ChannelPreviewActive</visible> </control> </control> <control type="group">
View file
_service:download_files:master.tar.gz/addons/skin.estuary/xml/Variables.xml
Changed
@@ -199,6 +199,7 @@ </variable> <variable name="SeekTimeLabelVar"> <value condition="!String.IsEmpty(Player.SeekNumeric)">[B]$INFO[Player.SeekNumeric(hh:mm:ss)][/B]</value> + <value condition="Player.Seeking + VideoPlayer.HasEPG">$INFO[PVR.EpgEventSeekTime]$INFO[PVR.EpgEventDuration, / ]</value> <value condition="Player.Seeking">$INFO[Player.SeekTime]$INFO[Player.Duration, / ]</value> <value condition="VideoPlayer.HasEpg">$INFO[PVR.EpgEventElapsedTime]$INFO[PVR.EpgEventDuration, / ]</value> <value>$INFO[Player.Time]$INFO[Player.Duration, / ]</value>
View file
_service:download_files:master.tar.gz/version.txt
Changed
@@ -3,9 +3,9 @@ WEBSITE http://kodi.tv VERSION_MAJOR 18 VERSION_MINOR 0 -VERSION_TAG ALPHA1 -VERSION_CODE 17.99.701 -ADDON_API 17.9.701 +VERSION_TAG ALPHA2 +VERSION_CODE 17.99.702 +ADDON_API 17.9.702 APP_PACKAGE org.xbmc.kodi PACKAGE_IDENTITY XBMCFoundation.Kodi PACKAGE_PUBLISHER C62BD90A-CDD8-477F-96C3-B25992247B97
View file
_service:download_files:master.tar.gz/xbmc/Application.cpp
Changed
@@ -3875,7 +3875,7 @@ if (m_itemCurrentFile->IsSamePath(item.get())) { m_itemCurrentFile->UpdateInfo(*item); - g_infoManager.SetCurrentItem(*m_itemCurrentFile); + g_infoManager.UpdateInfo(*item); } } }
View file
_service:download_files:master.tar.gz/xbmc/FileItem.cpp
Changed
@@ -993,6 +993,9 @@ if (HasProperty("IsHTTPDirectory")) return false; + if (!m_strDynPath.empty()) + return URIUtils::IsInternetStream(m_strDynPath, bStrictCheck); + return URIUtils::IsInternetStream(m_strPath, bStrictCheck); }
View file
_service:download_files:master.tar.gz/xbmc/GUIInfoManager.cpp
Changed
@@ -126,22 +126,6 @@ using namespace PVR; using namespace INFO; -class CSetCurrentItemJob : public CJob -{ - CFileItemPtr m_itemCurrentFile; -public: - explicit CSetCurrentItemJob(const CFileItem& item) : m_itemCurrentFile(std::make_shared<CFileItem>(item)) { } - - ~CSetCurrentItemJob(void) override = default; - - bool DoWork(void) override - { - g_infoManager.SetCurrentItemJob(m_itemCurrentFile); - g_application.m_ServiceManager->GetAnnouncementManager().Announce(ANNOUNCEMENT::Info, "xbmc", "OnChanged"); - - return true; - } -}; bool InfoBoolComparator(const InfoPtr &right, const InfoPtr &left) { @@ -2027,10 +2011,15 @@ /// Returns the stereoscopic mode of the currently playing video (possible /// values: see \ref ListItem_StereoscopicMode "ListItem.StereoscopicMode") /// } +/// \table_row3{ <b>`VideoPlayer.StartTime`</b>, +/// \anchor VideoPlayer_StartTime +/// _string_, +/// Start date and time of the currently playing epg event or recording (PVR). +/// } /// \table_row3{ <b>`VideoPlayer.EndTime`</b>, /// \anchor VideoPlayer_EndTime /// _string_, -/// End date of the currently playing programme (PVR). +/// End date and time of the currently playing epg event or recording (PVR). /// } /// \table_row3{ <b>`VideoPlayer.NextTitle`</b>, /// \anchor VideoPlayer_NextTitle @@ -2138,6 +2127,7 @@ { "hassubtitles", VIDEOPLAYER_HASSUBTITLES }, { "subtitlesenabled", VIDEOPLAYER_SUBTITLESENABLED }, { "subtitleslanguage",VIDEOPLAYER_SUBTITLES_LANG }, + { "starttime", VIDEOPLAYER_STARTTIME }, { "endtime", VIDEOPLAYER_ENDTIME }, { "nexttitle", VIDEOPLAYER_NEXT_TITLE }, { "nextgenre", VIDEOPLAYER_NEXT_GENRE }, @@ -4397,6 +4387,11 @@ /// _string_, /// Returns the remaining time for currently playing epg event /// } +/// \table_row3{ <b>`PVR.EpgEventSeekTime`</b>, +/// \anchor PVR_EpgEventSeekTime +/// _string_, +/// Returns the time the user is seeking within the currently playing epg event +/// } /// \table_row3{ <b>`PVR.EpgEventFinishTime`</b>, /// \anchor PVR_EpgEventFinishTime /// _string_, @@ -4502,6 +4497,11 @@ /// _integer_, /// Returns the position of currently timeshifted title on TV as integer /// } +/// \table_row3{ <b>`PVR.TimeShiftOffset`</b>, +/// \anchor PVR_TimeShiftOffset +/// _integer_, +/// Returns the delta of timeshifted time to actual time +/// } /// \table_row3{ <b>`PVR.TVNowRecordingTitle`</b>, /// \anchor PVR_TVNowRecordingTitle /// _string_, @@ -4664,6 +4664,7 @@ { "epgeventelapsedtime", PVR_EPG_EVENT_ELAPSED_TIME }, { "epgeventremainingtime", PVR_EPG_EVENT_REMAINING_TIME }, { "epgeventfinishtime", PVR_EPG_EVENT_FINISH_TIME }, + { "epgeventseektime", PVR_EPG_EVENT_SEEK_TIME }, { "epgeventprogress", PVR_EPG_EVENT_PROGRESS }, { "actstreamclient", PVR_ACTUAL_STREAM_CLIENT }, { "actstreamdevice", PVR_ACTUAL_STREAM_DEVICE }, @@ -4684,6 +4685,7 @@ { "timeshiftend", PVR_TIMESHIFT_END_TIME }, { "timeshiftcur", PVR_TIMESHIFT_PLAY_TIME }, { "timeshiftprogress", PVR_TIMESHIFT_PROGRESS }, + { "timeshiftoffset", PVR_TIMESHIFT_OFFSET }, { "nowrecordingtitle", PVR_NOW_RECORDING_TITLE }, { "nowrecordingdatetime", PVR_NOW_RECORDING_DATETIME }, { "nowrecordingchannel", PVR_NOW_RECORDING_CHANNEL }, @@ -5590,10 +5592,13 @@ } else if (cat.name == "videoplayer") { - for (size_t i = 0; i < sizeof(player_times) / sizeof(infomap); i++) //! @todo remove these, they're repeats + if (prop.name != "starttime") // player.starttime is semantically different from videoplayer.starttime which has its own implementation! { - if (prop.name == player_times[i].str) - return AddMultiInfo(GUIInfo(player_times[i].val, TranslateTimeFormat(prop.param()))); + for (size_t i = 0; i < sizeof(player_times) / sizeof(infomap); i++) //! @todo remove these, they're repeats + { + if (prop.name == player_times[i].str) + return AddMultiInfo(GUIInfo(player_times[i].val, TranslateTimeFormat(prop.param()))); + } } if (prop.name == "content" && prop.num_params()) { @@ -6035,6 +6040,7 @@ case PVR_TIMESHIFT_START_TIME: case PVR_TIMESHIFT_END_TIME: case PVR_TIMESHIFT_PLAY_TIME: + case PVR_TIMESHIFT_OFFSET: case PVR_TV_NOW_RECORDING_TITLE: case PVR_TV_NOW_RECORDING_CHANNEL: case PVR_TV_NOW_RECORDING_CHAN_ICO: @@ -6053,6 +6059,9 @@ case PVR_RADIO_NEXT_RECORDING_DATETIME: CServiceBroker::GetPVRManager().TranslateCharInfo(info, strLabel); break; + case PVR_EPG_EVENT_SEEK_TIME: + CServiceBroker::GetPVRManager().GetSeekTimeLabel(g_application.GetAppPlayer().GetSeekHandler().GetSeekSize(), strLabel); + break; case PVR_CHANNEL_NUMBER_INPUT: strLabel = CServiceBroker::GetPVRManager().GUIActions()->GetChannelNumberInputHandler().GetChannelNumberAsString(); break; @@ -8810,7 +8819,7 @@ if (m_currentFile->IsPVR()) { std::string strValue; - if (CServiceBroker::GetPVRManager().GetVideoLabel(*m_currentFile, item, strValue)) + if (CServiceBroker::GetPVRManager().GetVideoLabel(m_currentFile, item, strValue)) return strValue; } @@ -9048,6 +9057,28 @@ return ""; } +int CGUIInfoManager::GetEpgEventProgress() const +{ + return std::lrintf(static_cast<float>(CServiceBroker::GetPVRManager().GetElapsedTime()) / CServiceBroker::GetPVRManager().GetTotalTime() * 100.0f); +} + +int CGUIInfoManager::GetEpgEventSeekPercent() const +{ + int seekSize = g_application.GetAppPlayer().GetSeekHandler().GetSeekSize(); + if (seekSize != 0) + { + float elapsedTime = static_cast<float>(CServiceBroker::GetPVRManager().GetElapsedTime()); + float totalTime = static_cast<float>(CServiceBroker::GetPVRManager().GetTotalTime()); + float percentPerSecond = 100.0f / totalTime; + float percent = elapsedTime / totalTime * 100.0f + percentPerSecond * seekSize; + return std::lrintf(percent); + } + else + { + return GetEpgEventProgress(); + } +} + void CGUIInfoManager::ResetCurrentItem() { m_currentFile->Reset(); @@ -9055,22 +9086,23 @@ m_currentMovieDuration = ""; } -void CGUIInfoManager::SetCurrentItem(const CFileItem &item) +void CGUIInfoManager::UpdateInfo(const CFileItem & item) { - CSetCurrentItemJob *job = new CSetCurrentItemJob(item); - CJobManager::GetInstance().AddJob(job, NULL); + m_currentFile->UpdateInfo(item); } -void CGUIInfoManager::SetCurrentItemJob(const CFileItemPtr item) +void CGUIInfoManager::SetCurrentItem(const CFileItem &item) { ResetCurrentItem(); - if (item->IsAudio()) - SetCurrentSong(*item); - else if (item->IsGame()) - SetCurrentGame(*item); + CFileItem newItem(item); + + if (newItem.IsAudio()) + SetCurrentSong(newItem); + else if (newItem.IsGame()) + SetCurrentGame(newItem); else - SetCurrentMovie(*item); + SetCurrentMovie(newItem); SetChanged(); NotifyObservers(ObservableMessageCurrentItem);
View file
_service:download_files:master.tar.gz/xbmc/GUIInfoManager.h
Changed
@@ -1,11 +1,3 @@ -/*! -\file GUIInfoManager.h -\brief -*/ - -#ifndef GUIINFOMANAGER_H_ -#define GUIINFOMANAGER_H_ - /* * Copyright (C) 2005-2013 Team XBMC * http://kodi.tv @@ -25,6 +17,7 @@ * <http://www.gnu.org/licenses/>. * */ +#pragma once #include "threads/CriticalSection.h" #include "guilib/IMsgTargetCallback.h" @@ -88,8 +81,6 @@ int m_data2; }; -class CSetCurrentItemJob; - /*! \ingroup strings \brief @@ -97,8 +88,6 @@ class CGUIInfoManager : public IMsgTargetCallback, public Observable, public KODI::MESSAGING::IMessageTarget { -friend CSetCurrentItemJob; - public: CGUIInfoManager(void); ~CGUIInfoManager(void) override; @@ -153,6 +142,7 @@ */ void SetCurrentItem(const CFileItem &item); void ResetCurrentItem(); + void UpdateInfo(const CFileItem &item); // Current song stuff /// \brief Retrieves tag info (if necessary) and fills in our current song path. void SetCurrentSong(CFileItem &item); @@ -186,6 +176,8 @@ int GetTotalPlayTime() const; float GetSeekPercent() const; std::string GetCurrentPlayTimeRemaining(TIME_FORMAT format) const; + int GetEpgEventProgress() const; + int GetEpgEventSeekPercent() const; bool GetDisplayAfterSeek(); void SetDisplayAfterSeek(unsigned int timeOut = 2500, int seekOffset = 0); @@ -285,8 +277,6 @@ int AddMultiInfo(const GUIInfo &info); int AddListItemProp(const std::string &str, int offset=0); - void SetCurrentItemJob(const CFileItemPtr item); - // Conditional string parameters are stored here std::vector<std::string> m_stringParameters; @@ -355,8 +345,4 @@ \brief */ extern CGUIInfoManager g_infoManager; -#endif - - -
View file
_service:download_files:master.tar.gz/xbmc/InfoScanner.h
Changed
@@ -52,7 +52,8 @@ URL_NFO = 2, //!< A URL to grab info from was found OVERRIDE_NFO = 3, //!< Override info was found COMBINED_NFO = 4, //!< A URL to grab info from + override info was found - ERROR_NFO = 5 //!< Error processing info + ERROR_NFO = 5, //!< Error processing info + TITLE_NFO = 6 //!< At least Title was read (and optionally the Year) }; //! \brief Empty destructor.
View file
_service:download_files:master.tar.gz/xbmc/addons/Scraper.cpp
Changed
@@ -440,6 +440,27 @@ if (IsNoop()) return scurlRet; + if (m_isPython) + { + std::stringstream str; + str << "plugin://" << ID() << "?action=NfoUrl&nfo=" + << CURL::Encode(sNfoContent); + CFileItemList items; + if (!XFILE::CDirectory::GetDirectory(str.str(), items)) + return scurlRet; + + if (items.Size() == 0) + return scurlRet; + if (items.Size() > 1) + CLog::Log(LOGWARNING, "%s: scraper returned multiple results; using first", __FUNCTION__); + + CScraperUrl::SUrlEntry surl; + surl.m_type = CScraperUrl::URL_TYPE_GENERAL; + surl.m_url = items[0]->GetPath(); + scurlRet.m_url.emplace_back(surl); + return scurlRet; + } + // scraper function takes contents of .nfo file, returns XML (see below) std::vector<std::string> vcsIn; vcsIn.push_back(sNfoContent); @@ -791,85 +812,8 @@ template<> void DetailsFromFileItem<CVideoInfoTag>(const CFileItem &item, CVideoInfoTag &tag) { - tag.SetTitle(item.GetLabel()); - tag.SetOriginalTitle(FromString(item, "video.original_title")); - tag.SetShowTitle(FromString(item, "video.show_title")); - tag.SetSortTitle(FromString(item, "video.sort_title")); - int nRatings = item.GetProperty("video.ratings").asInteger32(); - for (int i = 0; i < nRatings; ++i) - { - std::stringstream str; - str << "video.rating" << i + 1; - int votes = item.GetProperty(str.str() + ".votes").asInteger32(); - float rating = item.GetProperty(str.str() + ".value").asFloat(); - tag.SetRating(rating, votes, "default"); - } - tag.m_iUserRating = item.GetProperty("video.user_rating").asInteger32(); - tag.m_iTop250 = item.GetProperty("video.top250").asInteger32(); - tag.m_iSeason = item.GetProperty("video.season").asInteger32(); - tag.m_iEpisode = item.GetProperty("video.episode").asInteger32(); - tag.m_iTrack = item.GetProperty("video.track").asInteger32(); - tag.SetUniqueIDs({{"IMDB", FromString(item, "video.imdb_id")}}); - tag.m_iSpecialSortSeason = item.GetProperty("video.display_season").asInteger32(); - tag.m_iSpecialSortEpisode = item.GetProperty("video.display_episode").asInteger32(); - tag.SetPlotOutline(FromString(item, "video.plot_outline")); - tag.SetPlot(FromString(item, "video.plot")); - tag.SetTagLine(FromString(item, "video.tag_line")); - tag.m_duration = item.GetProperty("video.duration_minutes").asInteger32(); - tag.SetMPAARating(FromString(item, "video.mpaa")); - tag.SetYear(item.GetProperty("video.premiere_year").asInteger32()); - tag.SetStatus(FromString(item, "video.status")); - tag.SetProductionCode(FromString(item, "video.production_code")); - tag.m_firstAired.SetFromDBDate(FromString(item, "video.first_aired")); - tag.SetAlbum(FromString(item, "video.album")); - tag.SetTrailer(FromString(item, "video.trailer")); - int nThumbs = item.GetProperty("video.thumbs").asInteger32(); - ParseThumbs(tag.m_strPictureURL, item, nThumbs, "video.thumb"); - tag.SetGenre(FromArray(item, "video.genre", 1)); - tag.SetCountry(FromArray(item, "video.country", 1)); - tag.SetWritingCredits(FromArray(item, "video.writing_credits", 1)); - tag.SetDirector(FromArray(item, "video.director", 1)); - tag.SetShowLink(FromArray(item, "video.tvshow_links", 1)); - int nSeasons = item.GetProperty("video.seasons").asInteger32(); - for (int i = 0; i < nSeasons; ++i) - { - std::stringstream str; - str << "video.season" << i + 1; - tag.m_namedSeasons.insert(std::make_pair(i + 1, FromString(item, str.str() + ".name"))); - } - int nActors = item.GetProperty("video.actors").asInteger32(); - for (int i = 0; i < nActors; ++i) - { - std::stringstream str; - str << "video.actor" << i + 1; - SActorInfo actor; - actor.strName = FromString(item, str.str() + ".name"); - actor.strRole = FromString(item, str.str() + ".role"); - actor.order = item.GetProperty(str.str() + ".sort_order").asInteger32(); - std::string url = FromString(item, str.str() + ".thumb"); - if (!url.empty()) - { - auto aspect = item.GetProperty(str.str() + ".thumb_aspect").asInteger32(); - TiXmlElement thumb("thumb"); - thumb.SetAttribute("aspect", aspect); - TiXmlText text(url); - thumb.InsertEndChild(text); - actor.thumbUrl.ParseElement(&thumb); - } - tag.m_cast.push_back(actor); - } - - tag.SetSet(FromString(item, "video.set_name")); - tag.SetSetOverview(FromString(item, "video.set_overview")); - tag.SetTags(FromArray(item, "video.tags", 1)); - tag.SetStudio(FromArray(item, "video.studio", 1)); - tag.SetArtist(FromArray(item, "video.artist", 1)); - tag.m_strEpisodeGuide = - "<episodeguide>" + FromString(item, "video.episode_guide_url") + "</episodeguide>"; - int nFanart = item.GetProperty("video.fanarts").asInteger32(); - tag.m_fanart.m_xml = ParseFanart(item, nFanart, "video.fanart"); - tag.m_fanart.Unpack(); - tag.m_firstAired.SetFromDBDate(FromString(item, "video.date_added")); + if (item.HasVideoInfoTag()) + tag = std::move(*item.GetVideoInfoTag()); } template<class T> @@ -894,12 +838,21 @@ // fetch list of matching movies sorted by relevance (may be empty); // throws CScraperError on error; first called with fFirst set, then unset if first try fails std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, - const std::string &sMovie, + const std::string &movieTitle, int movieYear, bool fFirst) { // prepare parameters for URL creation - std::string sTitle, sTitleYear, sYear; - CUtil::CleanString(sMovie, sTitle, sTitleYear, sYear, true /*fRemoveExt*/, fFirst); + std::string sTitle, sYear; + if (movieYear < 0) + { + std::string sTitleYear; + CUtil::CleanString(movieTitle, sTitle, sTitleYear, sYear, true /*fRemoveExt*/, fFirst); + } + else + { + sTitle = movieTitle; + sYear = std::to_string( movieYear ); + } CLog::Log(LOGDEBUG, "%s: Searching for '%s' using %s scraper " @@ -1244,15 +1197,16 @@ for (int i = 0; i < items.Size(); ++i) { EPISODE ep; - ep.strTitle = items[i]->GetLabel(); - ep.iSeason = items[i]->GetProperty("video.season").asInteger32(); - ep.iEpisode = items[i]->GetProperty("video.episode").asInteger32(); - ep.iSubepisode = items[i]->GetProperty("video.sub_episode").asInteger32(); + const auto& tag = *items[i]->GetVideoInfoTag(); + ep.strTitle = tag.m_strTitle; + ep.iSeason = tag.m_iSeason; + ep.iEpisode = tag.m_iEpisode; + ep.cDate = tag.m_firstAired; + ep.iSubepisode = items[i]->GetProperty("video.sub_episode").asInteger(); CScraperUrl::SUrlEntry surl; surl.m_type = CScraperUrl::URL_TYPE_GENERAL; - surl.m_url = FromString(*items[i], "video.url"); + surl.m_url = items[i]->GetURL().Get(); ep.cScraperUrl.m_url.push_back(surl); - ep.cScraperUrl.strId = FromString(*items[i], "video.unique_id"); vcep.push_back(ep); } @@ -1448,7 +1402,7 @@ ADDON::TranslateContent(Content()).c_str(), Version().asString().c_str()); if (m_isPython) - return PythonDetails(ID(), "id", details.GetUniqueID("IMDB"), "getartwork", details); + return PythonDetails(ID(), "id", details.GetUniqueID(), "getartwork", details); std::vector<std::string> vcsIn; CScraperUrl scurl;
View file
_service:download_files:master.tar.gz/xbmc/addons/Scraper.h
Changed
@@ -139,7 +139,7 @@ CScraperUrl ResolveIDToUrl(const std::string &externalID); std::vector<CScraperUrl> FindMovie(XFILE::CCurlFile &fcurl, - const std::string &sMovie, bool fFirst); + const std::string &movieTitle, int movieYear, bool fFirst); std::vector<MUSIC_GRABBER::CMusicAlbumInfo> FindAlbum(XFILE::CCurlFile &fcurl, const std::string &sAlbum, const std::string &sArtist = ""); std::vector<MUSIC_GRABBER::CMusicArtistInfo> FindArtist(
View file
_service:download_files:master.tar.gz/xbmc/cores/AudioEngine/AESinkFactory.cpp
Changed
@@ -98,3 +98,12 @@ list.push_back(info); } } + +void CAESinkFactory::Cleanup() +{ + for (auto reg : m_AESinkRegEntry) + { + if (reg.second.cleanupFunc) + reg.second.cleanupFunc(); + } +}
View file
_service:download_files:master.tar.gz/xbmc/cores/AudioEngine/AESinkFactory.h
Changed
@@ -38,12 +38,14 @@ typedef IAESink* (*CreateSink)(std::string &device, AEAudioFormat &desiredFormat); typedef void (*Enumerate)(AEDeviceInfoList &list, bool force); +typedef void (*Cleanup)(); struct AESinkRegEntry { std::string sinkName; - CreateSink createFunc; - Enumerate enumerateFunc; + CreateSink createFunc = nullptr; + Enumerate enumerateFunc = nullptr; + Cleanup cleanupFunc = nullptr; }; class CAESinkFactory @@ -55,6 +57,7 @@ static void ParseDevice(std::string &device, std::string &driver); static IAESink *Create(std::string &device, AEAudioFormat &desiredFormat); static void EnumerateEx(std::vector<AESinkInfo> &list, bool force); + static void Cleanup(); protected: static std::map<std::string, AESinkRegEntry> m_AESinkRegEntry;
View file
_service:download_files:master.tar.gz/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
Changed
@@ -82,6 +82,8 @@ delete m_packer; m_packer = nullptr; + + CAESinkFactory::Cleanup(); } AEDeviceType CActiveAESink::GetDeviceType(const std::string &device)
View file
_service:download_files:master.tar.gz/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
Changed
@@ -116,6 +116,7 @@ entry.sinkName = "ALSA"; entry.createFunc = CAESinkALSA::Create; entry.enumerateFunc = CAESinkALSA::EnumerateDevicesEx; + entry.cleanupFunc = CAESinkALSA::Cleanup; AE::CAESinkFactory::RegisterSink(entry); } @@ -1665,6 +1666,14 @@ va_end(arg); } +void CAESinkALSA::Cleanup() +{ +#if HAVE_LIBUDEV + m_deviceMonitor.Stop(); +#endif + m_controlMonitor.Clear(); +} + #if HAVE_LIBUDEV CALSADeviceMonitor CAESinkALSA::m_deviceMonitor; // ARGH #endif
View file
_service:download_files:master.tar.gz/xbmc/cores/AudioEngine/Sinks/AESinkALSA.h
Changed
@@ -45,6 +45,7 @@ static void Register(); static IAESink* Create(std::string &device, AEAudioFormat &desiredFormat); static void EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false); + static void Cleanup(); bool Initialize(AEAudioFormat &format, std::string &device) override; void Deinitialize() override;
View file
_service:download_files:master.tar.gz/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
Changed
@@ -566,6 +566,7 @@ m_newProgram = m_program; m_displayTime = 0; m_dtsAtDisplayTime = DVD_NOPTS_VALUE; + m_startTime = 0; // seems to be a bug in ffmpeg, hls jumps back to start after a couple of seconds // this cures the issue @@ -866,9 +867,12 @@ if (!menu && m_pFormatContext->start_time != (int64_t)AV_NOPTS_VALUE) starttime = (double)m_pFormatContext->start_time / AV_TIME_BASE; + if (!m_streaminfo) + starttime = m_startTime; + if (!m_bSup) { - if (timestamp > starttime) + if (timestamp > starttime || !m_streaminfo) timestamp -= starttime; // allow for largest possible difference in pts and dts for a single packet else if (timestamp + 0.5f > starttime) @@ -977,7 +981,7 @@ if (pPacket) { - if(m_bAVI && stream->codecpar && stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) + if (m_bAVI && stream->codecpar && stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { // AVI's always have borked pts, specially if m_pFormatContext->flags includes // AVFMT_FLAG_GENPTS so always use dts @@ -2054,7 +2058,10 @@ if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (st->codecpar->extradata) + { + m_startTime = av_rescale(st->cur_dts, st->time_base.num, st->time_base.den); return true; + } hasVideo = true; } } @@ -2067,7 +2074,10 @@ if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (st->codecpar->extradata) + { + m_startTime = av_rescale(st->cur_dts, st->time_base.num, st->time_base.den); return true; + } hasVideo = true; } }
View file
_service:download_files:master.tar.gz/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.h
Changed
@@ -174,5 +174,6 @@ int m_displayTime = 0; double m_dtsAtDisplayTime; bool m_seekToKeyFrame = false; + double m_startTime = 0; };
View file
_service:download_files:master.tar.gz/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
Changed
@@ -195,20 +195,6 @@ return CServiceBroker::GetPVRManager().Clients()->GetStreamLength(); } -int CDVDInputStreamPVRManager::GetTotalTime() -{ - if (!m_isRecording) - return CServiceBroker::GetPVRManager().GetTotalTime(); - return 0; -} - -int CDVDInputStreamPVRManager::GetTime() -{ - if (!m_isRecording) - return CServiceBroker::GetPVRManager().GetStartTime(); - return 0; -} - bool CDVDInputStreamPVRManager::GetTimes(Times ×) { PVR_STREAM_TIMES streamTimes;
View file
_service:download_files:master.tar.gz/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamPVRManager.h
Changed
@@ -41,7 +41,6 @@ class CDVDInputStreamPVRManager : public CDVDInputStream , public CDVDInputStream::ITimes - , public CDVDInputStream::IDisplayTime , public CDVDInputStream::IDemux { public: @@ -63,11 +62,6 @@ CDVDInputStream::ITimes* GetITimes() override { return this; } bool GetTimes(Times ×) override; - // deprecated - CDVDInputStream::IDisplayTime* GetIDisplayTime() override { return this; } - int GetTotalTime() override; - int GetTime() override; - bool CanSeek() override; bool CanPause() override; void Pause(bool bPaused);
View file
_service:download_files:master.tar.gz/xbmc/cores/VideoPlayer/VideoPlayer.cpp
Changed
@@ -4878,6 +4878,7 @@ m_VideoPlayerVideo->SendMessage(new CDVDMsgBool(CDVDMsg::GENERAL_PAUSE, true), 1); m_clock.Pause(true); m_displayLost = true; + FlushRenderer(); } void CVideoPlayer::OnResetDisplay()
View file
_service:download_files:master.tar.gz/xbmc/dialogs/GUIDialogSeekBar.cpp
Changed
@@ -25,7 +25,8 @@ #include "GUIInfoManager.h" #include "SeekHandler.h" -#define POPUP_SEEK_PROGRESS 401 +#define POPUP_SEEK_PROGRESS 401 +#define POPUP_SEEK_EPG_EVENT_PROGRESS 402 CGUIDialogSeekBar::CGUIDialogSeekBar(void) : CGUIDialog(WINDOW_DIALOG_SEEK_BAR, "DialogSeekBar.xml", DialogModalityType::MODELESS) @@ -43,7 +44,8 @@ case GUI_MSG_WINDOW_DEINIT: return CGUIDialog::OnMessage(message); case GUI_MSG_ITEM_SELECT: - if (message.GetSenderId() == GetID() && message.GetControlId() == POPUP_SEEK_PROGRESS) + if (message.GetSenderId() == GetID() && + (message.GetControlId() == POPUP_SEEK_PROGRESS || message.GetControlId() == POPUP_SEEK_EPG_EVENT_PROGRESS)) return CGUIDialog::OnMessage(message); break; case GUI_MSG_REFRESH_TIMER: @@ -67,5 +69,12 @@ if (percent != m_lastPercent) CONTROL_SELECT_ITEM(POPUP_SEEK_PROGRESS, m_lastPercent = percent); + unsigned int epgEventPercent = g_application.GetAppPlayer().GetSeekHandler().InProgress() + ? g_infoManager.GetEpgEventSeekPercent() + : g_infoManager.GetEpgEventProgress(); + + if (epgEventPercent != m_lastEpgEventPercent) + CONTROL_SELECT_ITEM(POPUP_SEEK_EPG_EVENT_PROGRESS, m_lastEpgEventPercent = epgEventPercent); + CGUIDialog::FrameMove(); }
View file
_service:download_files:master.tar.gz/xbmc/dialogs/GUIDialogSeekBar.h
Changed
@@ -31,4 +31,5 @@ void FrameMove() override; private: unsigned int m_lastPercent = ~0U; + unsigned int m_lastEpgEventPercent = ~0U; };
View file
_service:download_files:master.tar.gz/xbmc/filesystem/VideoDatabaseDirectory.cpp
Changed
@@ -59,6 +59,10 @@ if (!strImage.empty() && g_TextureManager.HasTexture(strImage)) item->SetIconImage(strImage); } + if (item->GetVideoInfoTag()) + { + item->SetDynPath(item->GetVideoInfoTag()->GetPath()); + } } items.SetLabel(pNode->GetLocalizedName());
View file
_service:download_files:master.tar.gz/xbmc/guiinfo/GUIInfoLabels.h
Changed
@@ -529,7 +529,9 @@ #define PVR_CHANNEL_NUMBER_INPUT (PVR_STRINGS_START + 59) #define PVR_EPG_EVENT_REMAINING_TIME (PVR_STRINGS_START + 60) #define PVR_EPG_EVENT_FINISH_TIME (PVR_STRINGS_START + 61) -#define PVR_STRINGS_END PVR_EPG_EVENT_FINISH_TIME +#define PVR_TIMESHIFT_OFFSET (PVR_STRINGS_START + 62) +#define PVR_EPG_EVENT_SEEK_TIME (PVR_STRINGS_START + 63) +#define PVR_STRINGS_END PVR_EPG_EVENT_SEEK_TIME #define ADSP_CONDITIONS_START 1300 #define ADSP_IS_ACTIVE (ADSP_CONDITIONS_START)
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Addon.h
Changed
@@ -80,8 +80,7 @@ public: explicit Addon(const char* id = NULL); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Addon(); + ~Addon() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Control.h
Changed
@@ -78,8 +78,7 @@ iControlRight(0), pGUIControl(NULL) {} public: - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Control(); + ~Control() override; #ifndef SWIG virtual CGUIControl* Create(); @@ -674,8 +673,7 @@ class ControlSpin : public Control { public: - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~ControlSpin(); + ~ControlSpin() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcgui_control_spin @@ -799,8 +797,7 @@ long alignment = XBFONT_LEFT, bool hasPath = false, long angle = 0); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~ControlLabel(); + ~ControlLabel() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcgui_control_label @@ -1160,8 +1157,7 @@ long _itemTextYOffset = CONTROL_TEXT_OFFSET_Y, long _itemHeight = 27, long _space = 2, long _alignmentY = XBFONT_CENTER_Y); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~ControlList(); + ~ControlList() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcgui_control_list
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Dialog.h
Changed
@@ -60,8 +60,7 @@ public: inline Dialog() = default; - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Dialog(); + ~Dialog() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// @@ -603,14 +602,12 @@ bool open; protected: - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual void deallocating(); + void deallocating() override; public: DialogProgress() : dlg(NULL), open(false) {} - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~DialogProgress(); + ~DialogProgress() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// @@ -744,14 +741,12 @@ bool open; protected: - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual void deallocating(); + void deallocating() override; public: DialogBusy() : dlg(NULL), open(false) {} - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~DialogBusy(); + ~DialogBusy() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// @@ -854,14 +849,12 @@ bool open; protected: - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual void deallocating(); + void deallocating() override; public: DialogProgressBG() : dlg(NULL), handle(NULL), open(false) {} - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~DialogProgressBG(); + ~DialogProgressBG() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/File.h
Changed
@@ -71,8 +71,7 @@ file->Open(filepath, XFILE::READ_NO_CACHE); } - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - inline virtual ~File() { delete file; } + inline ~File() override { delete file; } #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/InfoTagMusic.h
Changed
@@ -62,8 +62,7 @@ explicit InfoTagMusic(const MUSIC_INFO::CMusicInfoTag& tag); #endif InfoTagMusic(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~InfoTagMusic(); + ~InfoTagMusic() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/InfoTagRadioRDS.h
Changed
@@ -64,8 +64,7 @@ explicit InfoTagRadioRDS(const PVR::CPVRRadioRDSInfoTagPtr tag); #endif InfoTagRadioRDS(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~InfoTagRadioRDS(); + ~InfoTagRadioRDS() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/InfoTagVideo.h
Changed
@@ -63,8 +63,7 @@ explicit InfoTagVideo(const CVideoInfoTag& tag); #endif InfoTagVideo(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~InfoTagVideo(); + ~InfoTagVideo() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Keyboard.h
Changed
@@ -75,8 +75,7 @@ #endif Keyboard(const String& line = emptyString, const String& heading = emptyString, bool hidden = false); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Keyboard(); + ~Keyboard() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/ListItem.cpp
Changed
@@ -746,10 +746,10 @@ GetVideoInfoTag()->m_fanart.Pack(); } - void ListItem::addAvailableThumb(std::string url, std::string aspect, std::string referrer, std::string cache, bool post, bool isgz, int season) + void ListItem::addAvailableArtwork(std::string url, std::string art_type, std::string referrer, std::string cache, bool post, bool isgz, int season) { XBMCAddonUtils::GuiLock lock(languageHook, m_offscreen); - GetVideoInfoTag()->m_strPictureURL.AddElement(url, aspect, referrer, cache, post, isgz, season); + GetVideoInfoTag()->m_strPictureURL.AddElement(url, art_type, referrer, cache, post, isgz, season); } void ListItem::addStreamInfo(const char* cType, const Properties& dictionary)
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/ListItem.h
Changed
@@ -106,8 +106,7 @@ } #endif - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~ListItem(); + ~ListItem() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// @@ -804,13 +803,13 @@ #ifdef DOXYGEN_SHOULD_USE_THIS /// /// \ingroup python_xbmcgui_listitem - /// @brief \python_func{ addAvailableThumb(images) } + /// @brief \python_func{ addAvailableArtwork(images) } ///----------------------------------------------------------------------- - /// @brief Add a thumb to available thumbs (needed for scrapers) + /// @brief Add an image to available artworks (needed for scrapers) /// /// @param url string (image path url) - /// @param aspect [opt] string (image type) - /// @param referrer [opt] string (referr url) + /// @param art_type string (image type) + /// @param referrer [opt] string (referrer url) /// @param cache [opt] string (filename in cache) /// @param post [opt] bool (use post to retrieve the image, default false) /// @param isgz [opt] bool (use gzip to retrieve the image, default false) @@ -822,13 +821,13 @@ /// **Example:** /// ~~~~~~~~~~~~~{.py} /// ... - /// listitem.addAvailableThumb(path_to_image_1, "1.77") + /// listitem.addAvailableArtwork(path_to_image_1, "thumb") /// ... /// ~~~~~~~~~~~~~ /// - addAvailableThumb(...); + addAvailableArtwork(...); #else - void addAvailableThumb(std::string url, std::string aspect = "", std::string referrer = "", std::string cache = "", bool post = false, bool isgz = false, int season = -1); + void addAvailableArtwork(std::string url, std::string art_type = "", std::string referrer = "", std::string cache = "", bool post = false, bool isgz = false, int season = -1); #endif #ifdef DOXYGEN_SHOULD_USE_THIS
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Monitor.h
Changed
@@ -317,8 +317,7 @@ #else bool abortRequested(); #endif - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Monitor(); + ~Monitor() override; }; /** @} */ }
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/PlayList.h
Changed
@@ -66,8 +66,7 @@ public: explicit PlayList(int playList); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~PlayList(); + ~PlayList() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Player.h
Changed
@@ -90,8 +90,7 @@ // construction of a Player needs to identify whether or not any // callbacks will be executed asynchronously or not. explicit Player(int playerCore = 0); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Player(void); + ~Player(void) override; #endif #ifdef DOXYGEN_SHOULD_USE_THIS
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/RenderCapture.h
Changed
@@ -59,8 +59,7 @@ m_width = 0; m_height = 0; } - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - inline virtual ~RenderCapture() + inline ~RenderCapture() override { g_application.GetAppPlayer().RenderCaptureRelease(m_captureId); delete [] m_buffer;
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/Window.h
Changed
@@ -267,8 +267,7 @@ public: explicit Window(int existingWindowId = -1); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~Window(); + ~Window() override; #ifndef SWIG SWIGHIDDENVIRTUAL bool OnMessage(CGUIMessage& message);
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/WindowDialog.h
Changed
@@ -64,8 +64,7 @@ { public: WindowDialog(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WindowDialog(); + ~WindowDialog() override; #ifndef SWIG SWIGHIDDENVIRTUAL bool OnMessage(CGUIMessage& message) override;
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/WindowXML.h
Changed
@@ -119,8 +119,7 @@ const String& defaultSkin = "Default", const String& defaultRes = "720p", bool isMedia = false); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WindowXML(); + ~WindowXML() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// @@ -539,8 +538,7 @@ const String& defaultSkin = "Default", const String& defaultRes = "720p"); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WindowXMLDialog(); + ~WindowXMLDialog() override; #ifndef SWIG SWIGHIDDENVIRTUAL bool OnMessage(CGUIMessage &message) override;
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/wsgi/WsgiErrorStream.h
Changed
@@ -45,8 +45,7 @@ { public: WsgiErrorStream(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WsgiErrorStream(); + ~WsgiErrorStream() override; #ifdef DOXYGEN_SHOULD_USE_THIS ///
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/wsgi/WsgiInputStream.h
Changed
@@ -34,8 +34,7 @@ { public: WsgiInputStreamIterator(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WsgiInputStreamIterator(); + ~WsgiInputStreamIterator() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcwsgi_WsgiInputStream @@ -116,8 +115,7 @@ { public: WsgiInputStream(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WsgiInputStream(); + ~WsgiInputStream() override; #if !defined SWIG && !defined DOXYGEN_SHOULD_SKIP_THIS WsgiInputStreamIterator* begin();
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/wsgi/WsgiResponse.h
Changed
@@ -45,8 +45,7 @@ { public: WsgiResponse(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WsgiResponse(); + ~WsgiResponse() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcwsgi_WsgiInputStreamIterator
View file
_service:download_files:master.tar.gz/xbmc/interfaces/legacy/wsgi/WsgiResponseBody.h
Changed
@@ -38,8 +38,7 @@ { public: WsgiResponseBody(); - //! @todo Switch to 'override' usage once 14.04 (Trusty) hits EOL. swig <3.0 doesn't understand C++11 - virtual ~WsgiResponseBody(); + ~WsgiResponseBody() override; #ifdef DOXYGEN_SHOULD_USE_THIS /// \ingroup python_xbmcwsgi_WsgiInputStreamIterator
View file
_service:download_files:master.tar.gz/xbmc/peripherals/Peripherals.cpp
Changed
@@ -106,6 +106,8 @@ void CPeripherals::Initialise() { + Clear(); + #if !defined(TARGET_DARWIN_IOS) CDirectory::Create("special://profile/peripheral_data");
View file
_service:download_files:master.tar.gz/xbmc/playlists/PlayList.cpp
Changed
@@ -463,23 +463,39 @@ { CFileItemPtr item = m_vecItems[position]; std::unique_ptr<CPlayList> playlist (CPlayListFactory::Create(*item.get())); - if ( NULL == playlist.get()) + if (playlist.get() == nullptr) return false; - if(!playlist->Load(item->GetPath())) + std::string path = item->GetDynPath(); + if (path.empty()) + path = item->GetPath(); + + if (!playlist->Load(path)) return false; // remove any item that points back to itself - for(int i = 0;i<playlist->size();i++) + for (int i = 0;i<playlist->size();i++) { - if(StringUtils::EqualsNoCase((*playlist)[i]->GetPath(), item->GetPath())) + if (StringUtils::EqualsNoCase((*playlist)[i]->GetPath(), path)) { playlist->Remove(i); i--; } } - if(playlist->size() <= 0) + // @todo + // never change original path (id) of a file item + // playlist items should be created with dynPath instead + if (!item->GetDynPath().empty()) + { + for (int i = 0;i<playlist->size();i++) + { + (*playlist)[i]->SetDynPath((*playlist)[i]->GetPath()); + (*playlist)[i]->SetPath(item->GetPath()); + } + } + + if (playlist->size() <= 0) return false; Remove(position);
View file
_service:download_files:master.tar.gz/xbmc/playlists/PlayListFactory.cpp
Changed
@@ -38,7 +38,7 @@ CPlayList* CPlayListFactory::Create(const CFileItem& item) { - if( item.IsInternetStream() ) + if (item.IsInternetStream()) { // Ensure the MIME type has been retrieved for http:// and shout:// streams if (item.GetMimeType().empty()) @@ -72,7 +72,11 @@ return new CPlayListWPL(); } - std::string extension = URIUtils::GetExtension(item.GetPath()); + std::string path = item.GetDynPath(); + if (path.empty()) + path = item.GetPath(); + + std::string extension = URIUtils::GetExtension(path); StringUtils::ToLower(extension); if (extension == ".m3u" || extension == ".strm")
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRGUIInfo.cpp
Changed
@@ -33,6 +33,7 @@ #include "threads/SingleLock.h" #include "utils/StringUtils.h" +#include "pvr/PVRItem.h" #include "pvr/PVRManager.h" #include "pvr/addons/PVRClients.h" #include "pvr/channels/PVRChannel.h" @@ -88,6 +89,7 @@ m_iTimeshiftStartTime = time_t(0); m_iTimeshiftEndTime = time_t(0); m_iTimeshiftPlayTime = time_t(0); + m_iTimeshiftOffset = 0; m_strTimeshiftStartTime.clear(); m_strTimeshiftEndTime.clear(); m_strTimeshiftPlayTime.clear(); @@ -227,6 +229,7 @@ bool bCanRecordPlayingChannel = bStarted && CServiceBroker::GetPVRManager().CanRecordOnPlayingChannel(); bool bIsRecordingPlayingChannel = bStarted && CServiceBroker::GetPVRManager().IsRecordingOnPlayingChannel(); std::string strPlayingTVGroup = (bStarted && bIsPlayingTV) ? CServiceBroker::GetPVRManager().GetPlayingGroup(false)->GroupName() : ""; + std::string strPlayingRadioGroup = (bStarted && bIsPlayingRadio) ? CServiceBroker::GetPVRManager().GetPlayingGroup(true)->GroupName() : ""; CSingleLock lock(m_critSection); m_strPlayingClientName = strPlayingClientName; @@ -240,6 +243,7 @@ m_bHasTVChannels = bHasTVChannels; m_bHasRadioChannels = bHasRadioChannels; m_strPlayingTVGroup = strPlayingTVGroup; + m_strPlayingRadioGroup = strPlayingRadioGroup; m_bCanRecordPlayingChannel = bCanRecordPlayingChannel; m_bIsRecordingPlayingChannel = bIsRecordingPlayingChannel; } @@ -258,6 +262,8 @@ m_iTimeshiftStartTime = 0; m_iTimeshiftEndTime = 0; m_iTimeshiftPlayTime = 0; + m_iLastTimeshiftUpdate = 0; + m_iTimeshiftOffset = 0; m_strTimeshiftStartTime.clear(); m_strTimeshiftEndTime.clear(); m_strTimeshiftPlayTime.clear(); @@ -266,17 +272,21 @@ } bool bIsTimeshifting = CServiceBroker::GetPVRManager().Clients()->IsTimeshifting(); + time_t now = std::time(nullptr); time_t iStartTime = CServiceBroker::GetDataCacheCore().GetStartTime(); time_t iPlayTime = CServiceBroker::GetDataCacheCore().GetPlayTime() / 1000; time_t iMinTime = bIsTimeshifting ? CServiceBroker::GetDataCacheCore().GetMinTime() / 1000 : 0; time_t iMaxTime = bIsTimeshifting ? CServiceBroker::GetDataCacheCore().GetMaxTime() / 1000 : 0; + bool bPlaying = CServiceBroker::GetDataCacheCore().GetSpeed() == 1.0; CSingleLock lock(m_critSection); + m_iLastTimeshiftUpdate = now; + if (!iStartTime) { if (m_iStartTime == 0) - iStartTime = std::time(nullptr); + iStartTime = now; else iStartTime = m_iStartTime; } @@ -288,15 +298,17 @@ if (m_iTimeshiftEndTime > m_iTimeshiftStartTime) { - // getstreamtimes api + // timeshifting supported m_iTimeshiftPlayTime = iStartTime + iPlayTime; } - else + else if (bPlaying) { - // legacy api - m_iTimeshiftPlayTime = std::time(nullptr); + // timeshifting not supported + m_iTimeshiftPlayTime = now - m_iTimeshiftOffset; } + m_iTimeshiftOffset = now - m_iTimeshiftPlayTime; + CDateTime tmp; tmp.SetFromUTCDateTime(m_iTimeshiftStartTime); m_strTimeshiftStartTime = tmp.GetAsLocalizedTime("", false); @@ -476,6 +488,9 @@ case PVR_TIMESHIFT_PLAY_TIME: CharInfoTimeshiftPlayTime(strValue); break; + case PVR_TIMESHIFT_OFFSET: + CharInfoTimeshiftOffset(strValue); + break; default: strValue.clear(); bReturn = false; @@ -564,14 +579,16 @@ if (dwInfo == PVR_EPG_EVENT_PROGRESS) { CPVREpgInfoTagPtr epgTag; - const CPVRChannelPtr channel = item.GetPVRChannelInfoTag(); if (channel) epgTag = channel->GetEPGNow(); if (!epgTag) epgTag = item.GetEPGInfoTag(); - if (epgTag) + + if (epgTag && epgTag != GetPlayingTag()) iReturn = std::lrintf(epgTag->ProgressPercentage()); + else + iReturn = std::lrintf(static_cast<float>(GetElapsedTime()) / m_iDuration * 100); } else if (dwInfo == PVR_ACTUAL_STREAM_SIG_PROGR) iReturn = (int) ((float) m_qualityInfo.iSignal / 0xFFFF * 100); @@ -593,59 +610,9 @@ return iReturn; } -#define GET_CURRENT_VIDEO_LABEL_WITH_CONDITION(value_getter_function, condition) \ - if (channel) \ - epgTag = channel->GetEPGNow(); \ - \ - if (epgTag && condition) \ - { \ - strValue = value_getter_function; \ - return true; \ - } \ - return false; \ - -#define GET_CURRENT_VIDEO_LABEL(value_getter_function) \ - GET_CURRENT_VIDEO_LABEL_WITH_CONDITION(value_getter_function, true) - -#define GET_CURRENT_VIDEO_LABEL_OR_DEFAULT(value_getter_function, default_value_getter_function) \ - if (channel) \ - epgTag = channel->GetEPGNow(); \ - \ - if (epgTag) \ - strValue = value_getter_function; \ - else \ - strValue = default_value_getter_function; \ - \ - return true; \ - -#define GET_NEXT_VIDEO_LABEL_WITH_CONDITION(value_getter_function, condition) \ - if (channel) \ - epgTag = channel->GetEPGNext(); \ - \ - if (epgTag && condition) \ - { \ - strValue = value_getter_function; \ - return true; \ - } \ - return false; \ - -#define GET_NEXT_VIDEO_LABEL(value_getter_function) \ - GET_NEXT_VIDEO_LABEL_WITH_CONDITION(value_getter_function, true) - -#define GET_NEXT_VIDEO_LABEL_OR_DEFAULT(value_getter_function, default_value_getter_function) \ - if (channel) \ - epgTag = channel->GetEPGNext(); \ - \ - if (epgTag) \ - strValue = value_getter_function; \ - else \ - strValue = default_value_getter_function; \ - \ - return true; \ - -bool CPVRGUIInfo::GetVideoLabel(const CFileItem &item, int iLabel, std::string &strValue) const -{ - const CPVRRecordingPtr recording(item.GetPVRRecordingInfoTag()); +bool CPVRGUIInfo::GetVideoLabel(const CFileItem *item, int iLabel, std::string &strValue) const +{ + const CPVRRecordingPtr recording(item->GetPVRRecordingInfoTag()); if (recording) { // Note: CPVRRecoding is derived from CVideoInfoTag. All base class properties will be handled @@ -687,176 +654,198 @@ } case VIDEOPLAYER_CHANNEL_GROUP: { - if (!recording->IsRadio()) - { - strValue = CServiceBroker::GetPVRManager().GetPlayingTVGroupName(); - return true; - } - break; + strValue = recording->IsRadio() ? m_strPlayingRadioGroup : m_strPlayingTVGroup; + return true; } } return false; } - CPVRChannelPtr channel(item.GetPVRChannelInfoTag()); - CPVREpgInfoTagPtr epgTag(item.GetEPGInfoTag()); + CPVREpgInfoTagPtr epgTag; + CPVRChannelPtr channel; + switch (iLabel)
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRGUIInfo.h
Changed
@@ -56,19 +56,29 @@ * @param strValue Will be filled with the requested label value. * @return True if the requested label value was set, false otherwise. */ - bool GetVideoLabel(const CFileItem &item, int iLabel, std::string &strValue) const; + bool GetVideoLabel(const CFileItem *item, int iLabel, std::string &strValue) const; /*! - * @brief Get the total duration of the currently playing LiveTV item. - * @return The total duration in milliseconds or NULL if no channel is playing. + * @brief Get a GUIInfoManager seek time label for the currently playing epg tag. + * @param iSeekSize The seconds to be seeked from the current playback position. + * @param strValue Will be filled with the requested label value. + * @return True if the label value was set, false otherwise. + */ + bool GetSeekTimeLabel(int iSeekSize, std::string &strValue) const; + + /*! + * @brief Get the total duration of the currently playing epg event or if no epg is + * available the current lenght in seconds of the playing Live TV stream. + * @return The total duration in seconds or 0 if no channel is playing. */ int GetDuration(void) const; /*! - * @brief Get the current position in milliseconds since the start of a LiveTV item. - * @return The position in milliseconds or NULL if no channel is playing. + * @brief Get the elapsed time since the start of the currently playing epg event or if + * no epg is available since the start of the playback of the current Live TV stream. + * @return The time in seconds or 0 if no channel is playing. */ - int GetPlayingTime(void) const; + int GetElapsedTime(void) const; /*! * @brief Clear the playing EPG tag. @@ -81,12 +91,6 @@ */ CPVREpgInfoTagPtr GetPlayingTag() const; - /*! - * @brief Get playing TV group. - * @return The currently playing TV group or NULL if no TV group is playing. - */ - std::string GetPlayingTVGroup(); - private: class TimerInfo { @@ -222,6 +226,7 @@ void CharInfoTimeshiftStartTime(std::string &strValue) const; void CharInfoTimeshiftEndTime(std::string &strValue) const; void CharInfoTimeshiftPlayTime(std::string &strValue) const; + void CharInfoTimeshiftOffset(std::string &strValue) const; /** @name GUIInfoManager data */ //@{ @@ -253,6 +258,7 @@ bool m_bCanRecordPlayingChannel; bool m_bIsRecordingPlayingChannel; std::string m_strPlayingTVGroup; + std::string m_strPlayingRadioGroup; //@} @@ -263,10 +269,12 @@ bool m_bHasTimeshiftData; bool m_bIsTimeshifting; + time_t m_iLastTimeshiftUpdate; time_t m_iStartTime; time_t m_iTimeshiftStartTime; time_t m_iTimeshiftEndTime; time_t m_iTimeshiftPlayTime; + unsigned int m_iTimeshiftOffset; std::string m_strTimeshiftStartTime; std::string m_strTimeshiftEndTime; std::string m_strTimeshiftPlayTime;
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRItem.cpp
Changed
@@ -54,6 +54,29 @@ return CPVREpgInfoTagPtr(); } + CPVREpgInfoTagPtr CPVRItem::GetNextEpgInfoTag() const + { + if (m_item->IsEPG()) + { + return m_item->GetEPGInfoTag()->GetNextEvent(); + } + else if (m_item->IsPVRChannel()) + { + return m_item->GetPVRChannelInfoTag()->GetEPGNext(); + } + else if (m_item->IsPVRTimer()) + { + const CPVREpgInfoTagPtr current = m_item->GetPVRTimerInfoTag()->GetEpgInfoTag(); + if (current) + return current->GetNextEvent(); + } + else + { + CLog::Log(LOGERROR, "CPVRItem - %s - unsupported item type!", __FUNCTION__); + } + return CPVREpgInfoTagPtr(); + } + CPVRChannelPtr CPVRItem::GetChannel() const { if (m_item->IsPVRChannel())
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRItem.h
Changed
@@ -35,6 +35,7 @@ explicit CPVRItem(const CFileItem *item) : m_item(item) {} CPVREpgInfoTagPtr GetEpgInfoTag() const; + CPVREpgInfoTagPtr GetNextEpgInfoTag() const; CPVRChannelPtr GetChannel() const; CPVRTimerInfoTagPtr GetTimerInfoTag() const; CPVRRecordingPtr GetRecording() const;
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRManager.cpp
Changed
@@ -804,9 +804,9 @@ return IsStarted() && m_guiInfo ? m_guiInfo->GetDuration() : 0; } -int CPVRManager::GetStartTime(void) const +int CPVRManager::GetElapsedTime(void) const { - return IsStarted() && m_guiInfo ? m_guiInfo->GetPlayingTime() : 0; + return IsStarted() && m_guiInfo ? m_guiInfo->GetElapsedTime() : 0; } bool CPVRManager::TranslateBoolInfo(DWORD dwInfo) const @@ -824,11 +824,16 @@ return IsStarted() && m_guiInfo ? m_guiInfo->TranslateIntInfo(item, dwInfo) : 0; } -bool CPVRManager::GetVideoLabel(const CFileItem &item, int iLabel, std::string &strValue) const +bool CPVRManager::GetVideoLabel(const CFileItem *item, int iLabel, std::string &strValue) const { return IsStarted() && m_guiInfo ? m_guiInfo->GetVideoLabel(item, iLabel, strValue) : false; } +bool CPVRManager::GetSeekTimeLabel(int iSeekSize, std::string &strValue) const +{ + return IsStarted() && m_guiInfo ? m_guiInfo->GetSeekTimeLabel(iSeekSize, strValue) : false; +} + bool CPVRManager::IsRecording(void) const { return IsStarted() && m_timers ? m_timers->IsRecording() : false; @@ -937,11 +942,6 @@ return m_bEpgsCreated; } -std::string CPVRManager::GetPlayingTVGroupName() -{ - return IsStarted() && m_guiInfo ? m_guiInfo->GetPlayingTVGroup() : ""; -} - void CPVRManager::UpdateLastWatched(const CPVRChannelPtr &channel) { time_t tNow;
View file
_service:download_files:master.tar.gz/xbmc/pvr/PVRManager.h
Changed
@@ -190,7 +190,15 @@ * @param strValue Will be filled with the requested label value. * @return True if the requested label value was set, false otherwise. */ - bool GetVideoLabel(const CFileItem &item, int iLabel, std::string &strValue) const; + bool GetVideoLabel(const CFileItem *item, int iLabel, std::string &strValue) const; + + /*! + * @brief Get a GUIInfoManager seek time label for the currently playing epg tag. + * @param iSeekSize The seconds to be seeked from the current playback position. + * @param strValue Will be filled with the requested label value. + * @return True if the label value was set, false otherwise. + */ + bool GetSeekTimeLabel(int iSeekSize, std::string &strValue) const; /*! * @brief Check if a TV channel, radio channel or recording is playing. @@ -389,16 +397,18 @@ void TriggerSearchMissingChannelIcons(void); /*! - * @brief Get the total duration of the currently playing LiveTV item. - * @return The total duration in milliseconds or NULL if no channel is playing. + * @brief Get the total duration of the currently playing epg event or if no epg is + * available the current lenght in seconds of the playing Live TV stream. + * @return The total duration in seconds or 0 if no channel is playing. */ int GetTotalTime(void) const; /*! - * @brief Get the current position in milliseconds since the start of a LiveTV item. - * @return The position in milliseconds or NULL if no channel is playing. + * @brief Get the elapsed time since the start of the currently playing epg event or if + * no epg is available since the start of the playback of the current Live TV stream. + * @return The time in seconds or 0 if no channel is playing. */ - int GetStartTime(void) const; + int GetElapsedTime(void) const; /*! * @brief Check whether names are still correct after the language settings changed. @@ -459,12 +469,6 @@ bool CreateChannelEpgs(void); /*! - * @brief get the name of the channel group of the current playing channel - * @return name of channel if tv channel is playing - */ - std::string GetPlayingTVGroupName(); - - /*! * @brief Signal a connection change of a client */ void ConnectionStateChange(CPVRClient *client, std::string connectString, PVR_CONNECTION_STATE state, std::string message);
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoDownloader.cpp
Changed
@@ -44,13 +44,13 @@ } // return value: 0 = we failed, -1 = we failed and reported an error, 1 = success -int CVideoInfoDownloader::InternalFindMovie(const std::string &strMovie, +int CVideoInfoDownloader::InternalFindMovie(const std::string &movieTitle, int movieYear, MOVIELIST& movielist, bool cleanChars /* = true */) { try { - movielist = m_info->FindMovie(*m_http, strMovie, cleanChars); + movielist = m_info->FindMovie(*m_http, movieTitle, movieYear, cleanChars); } catch (const ADDON::CScraperError &sce) { @@ -74,8 +74,8 @@ m_found = 0; if (m_state == FIND_MOVIE) { - if (!(m_found=FindMovie(m_strMovie, m_movieList))) - CLog::Log(LOGERROR, "%s: Error looking up item %s", __FUNCTION__, m_strMovie.c_str()); + if (!(m_found=FindMovie(m_movieTitle, m_movieYear, m_movieList))) + CLog::Log(LOGERROR, "%s: Error looking up item %s (%d)", __FUNCTION__, m_movieTitle.c_str(), m_movieYear); m_state = DO_NOTHING; return; } @@ -84,7 +84,7 @@ { // empty url when it's not supposed to be.. // this might happen if the previously scraped item was removed from the site (see ticket #10537) - CLog::Log(LOGERROR, "%s: Error getting details for %s due to an empty url", __FUNCTION__, m_strMovie.c_str()); + CLog::Log(LOGERROR, "%s: Error getting details for %s (%d) due to an empty url", __FUNCTION__, m_movieTitle.c_str(), m_movieYear); } else if (m_state == GET_DETAILS) { @@ -105,7 +105,7 @@ m_state = DO_NOTHING; } -int CVideoInfoDownloader::FindMovie(const std::string &strMovie, +int CVideoInfoDownloader::FindMovie(const std::string &movieTitle, int movieYear, MOVIELIST& movieList, CGUIDialogProgress *pProgress /* = NULL */) { @@ -114,7 +114,8 @@ if (pProgress) { // threaded version m_state = FIND_MOVIE; - m_strMovie = strMovie; + m_movieTitle = movieTitle; + m_movieYear = movieYear; m_found = 0; if (IsRunning()) StopThread(); @@ -137,11 +138,11 @@ } // unthreaded - int success = InternalFindMovie(strMovie, movieList); + int success = InternalFindMovie(movieTitle, movieYear, movieList); // NOTE: this might be improved by rescraping if the match quality isn't high? if (success == 1 && movieList.empty()) { // no results. try without cleaning chars like '.' and '_' - success = InternalFindMovie(strMovie, movieList, false); + success = InternalFindMovie(movieTitle, movieYear, movieList, false); } return success; }
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoDownloader.h
Changed
@@ -48,12 +48,13 @@ // threaded lookup functions /*! \brief Do a search for matching media items (possibly asynchronously) with our scraper - \param strMovie name of the media item to look for + \param movieTitle title of the media item to look for + \param movieYear year of the media item to look for (-1 if not known) \param movielist [out] list of results to fill. May be empty on success. \param pProgress progress bar to update as we go. If NULL we run on thread, if non-NULL we run off thread. \return 1 on success, -1 on a scraper-specific error, 0 on some other error */ - int FindMovie(const std::string& strMovie, MOVIELIST& movielist, CGUIDialogProgress *pProgress = NULL); + int FindMovie(const std::string& movieTitle, int movieYear, MOVIELIST& movielist, CGUIDialogProgress *pProgress = NULL); /*! \brief Fetch art URLs for an item with our scraper \param details the video info tag structure to fill with art. @@ -75,7 +76,8 @@ GET_EPISODE_DETAILS = 4 }; XFILE::CCurlFile* m_http; - std::string m_strMovie; + std::string m_movieTitle; + int m_movieYear; MOVIELIST m_movieList; CVideoInfoTag m_movieDetails; CScraperUrl m_url; @@ -88,6 +90,6 @@ void Process() override; void CloseThread(); - int InternalFindMovie(const std::string& strMovie, MOVIELIST& movielist, bool cleanChars = true); + int InternalFindMovie(const std::string& movieTitle, int movieYear, MOVIELIST& movielist, bool cleanChars = true); };
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoScanner.cpp
Changed
@@ -563,9 +563,17 @@ CScraperUrl url; int retVal = 0; + std::string movieTitle = pItem->GetMovieName(bDirNames); + int movieYear = -1; // hint that movie title was not found + if (result == CInfoScanner::TITLE_NFO) + { + CVideoInfoTag* tag = pItem->GetVideoInfoTag(); + movieTitle = tag->GetTitle(); + movieYear = tag->GetYear(); // movieYear is expected to be >= 0 + } if (pURL && !pURL->m_url.empty()) url = *pURL; - else if ((retVal = FindVideo(pItem->GetMovieName(bDirNames), info2, url, pDlgProgress)) <= 0) + else if ((retVal = FindVideo(movieTitle, movieYear, info2, url, pDlgProgress)) <= 0) return retVal < 0 ? INFO_CANCELLED : INFO_NOT_FOUND; CLog::Log(LOGDEBUG, @@ -639,9 +647,17 @@ CScraperUrl url; int retVal = 0; + std::string movieTitle = pItem->GetMovieName(bDirNames); + int movieYear = -1; // hint that movie title was not found + if (result == CInfoScanner::TITLE_NFO) + { + CVideoInfoTag* tag = pItem->GetVideoInfoTag(); + movieTitle = tag->GetTitle(); + movieYear = tag->GetYear(); // movieYear is expected to be >= 0 + } if (pURL && !pURL->m_url.empty()) url = *pURL; - else if ((retVal = FindVideo(pItem->GetMovieName(bDirNames), info2, url, pDlgProgress)) <= 0) + else if ((retVal = FindVideo(movieTitle, movieYear, info2, url, pDlgProgress)) <= 0) return retVal < 0 ? INFO_CANCELLED : INFO_NOT_FOUND; CLog::Log(LOGDEBUG, @@ -709,9 +725,17 @@ CScraperUrl url; int retVal = 0; + std::string movieTitle = pItem->GetMovieName(bDirNames); + int movieYear = -1; // hint that movie title was not found + if (result == CInfoScanner::TITLE_NFO) + { + CVideoInfoTag* tag = pItem->GetVideoInfoTag(); + movieTitle = tag->GetTitle(); + movieYear = tag->GetYear(); // movieYear is expected to be >= 0 + } if (pURL && !pURL->m_url.empty()) url = *pURL; - else if ((retVal = FindVideo(pItem->GetMovieName(bDirNames), info2, url, pDlgProgress)) <= 0) + else if ((retVal = FindVideo(movieTitle, movieYear, info2, url, pDlgProgress)) <= 0) return retVal < 0 ? INFO_CANCELLED : INFO_NOT_FOUND; CLog::Log(LOGDEBUG, @@ -1973,11 +1997,11 @@ return m_bStop; } - int CVideoInfoScanner::FindVideo(const std::string &videoName, const ScraperPtr &scraper, CScraperUrl &url, CGUIDialogProgress *progress) + int CVideoInfoScanner::FindVideo(const std::string &title, int year, const ScraperPtr &scraper, CScraperUrl &url, CGUIDialogProgress *progress) { MOVIELIST movielist; CVideoInfoDownloader imdb(scraper); - int returncode = imdb.FindMovie(videoName, movielist, progress); + int returncode = imdb.FindMovie(title, year, movielist, progress); if (returncode < 0 || (returncode == 0 && (m_bStop || !DownloadFailed(progress)))) { // scraper reported an error, or we had an error and user wants to cancel the scan m_bStop = true; @@ -1990,4 +2014,5 @@ } return 0; // didn't find anything } + }
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoScanner.h
Changed
@@ -131,13 +131,23 @@ bool ProgressCancelled(CGUIDialogProgress* progress, int heading, const std::string &line1); /*! \brief Find a url for the given video using the given scraper - \param videoName name of the video to lookup + \param title title of the video to lookup + \param year year of the video to lookup \param scraper scraper to use for the lookup \param url [out] returned url from the scraper \param progress CGUIDialogProgress bar \return >0 on success, <0 on failure (cancellation), and 0 on no info found */ - int FindVideo(const std::string &videoName, const ADDON::ScraperPtr &scraper, CScraperUrl &url, CGUIDialogProgress *progress); + int FindVideo(const std::string &title, int year, const ADDON::ScraperPtr &scraper, CScraperUrl &url, CGUIDialogProgress *progress); + + /*! \brief Find a url for the given video using the given scraper + \param item the video to lookup + \param scraper scraper to use for the lookup + \param url [out] returned url from the scraper + \param progress CGUIDialogProgress bar + \return >0 on success, <0 on failure (cancellation), and 0 on no info found + */ + int FindVideoUsingTag(CFileItem& item, const ADDON::ScraperPtr &scraper, CScraperUrl &url, CGUIDialogProgress *progress); /*! \brief Retrieve detailed information for an item from an online source, optionally supplemented with local data @todo sort out some better return codes.
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoTag.cpp
Changed
@@ -1314,6 +1314,11 @@ m_strTitle = Trim(std::move(title)); } +std::string const &CVideoInfoTag::GetTitle() +{ + return m_strTitle; +} + void CVideoInfoTag::SetSortTitle(std::string sortTitle) { m_strSortTitle = Trim(std::move(sortTitle));
View file
_service:download_files:master.tar.gz/xbmc/video/VideoInfoTag.h
Changed
@@ -136,6 +136,7 @@ void SetPlotOutline(std::string plotOutline); void SetTrailer(std::string trailer); void SetPlot(std::string plot); + std::string const &GetTitle(); void SetTitle(std::string title); void SetSortTitle(std::string sortTitle); void SetPictureURL(CScraperUrl &pictureURL);
View file
_service:download_files:master.tar.gz/xbmc/video/jobs/VideoLibraryRefreshingJob.cpp
Changed
@@ -155,7 +155,7 @@ // try to find a matching item MOVIELIST itemResultList; - int result = infoDownloader.FindMovie(itemTitle, itemResultList, GetProgressDialog()); + int result = infoDownloader.FindMovie(itemTitle, -1, itemResultList, GetProgressDialog()); // close the progress dialog MarkFinished();
View file
_service:download_files:master.tar.gz/xbmc/video/tags/VideoInfoTagLoaderFactory.cpp
Changed
@@ -41,7 +41,7 @@ delete nfo; if (CServiceBroker::GetSettings().GetBool(CSettings::SETTING_MYVIDEOS_USETAGS) && - (item.IsType(".mkv") || item.IsType(".mp4"))) + (item.IsType(".mkv") || item.IsType(".mp4") || item.IsType(".avi"))) { CVideoTagLoaderFFmpeg* ff = new CVideoTagLoaderFFmpeg(item, info, lookInFolder); if (ff->HasInfo())
View file
_service:download_files:master.tar.gz/xbmc/video/tags/VideoTagLoaderFFmpeg.cpp
Changed
@@ -123,7 +123,7 @@ avtag = av_dict_get(m_fctx->metadata, "TMDBURL", nullptr, AV_DICT_IGNORE_SUFFIX); if (!avtag) avtag = av_dict_get(m_fctx->metadata, "TITLE", nullptr, AV_DICT_IGNORE_SUFFIX); - } else if (m_item.IsType(".mp4")) + } else if (m_item.IsType(".mp4") || m_item.IsType(".avi")) avtag = av_dict_get(m_fctx->metadata, "title", nullptr, AV_DICT_IGNORE_SUFFIX); return avtag != nullptr; @@ -136,6 +136,8 @@ return LoadMKV(tag, art); else if (m_item.IsType(".mp4")) return LoadMP4(tag, art); + else if (m_item.IsType(".avi")) + return LoadAVI(tag, art); else return CInfoScanner::NO_NFO; @@ -201,13 +203,16 @@ hastag = true; } - return hastag ? CInfoScanner::FULL_NFO : CInfoScanner::NO_NFO; + return hastag ? CInfoScanner::TITLE_NFO : CInfoScanner::NO_NFO; } +// https://wiki.multimedia.cx/index.php/FFmpeg_Metadata CInfoScanner::INFO_TYPE CVideoTagLoaderFFmpeg::LoadMP4(CVideoInfoTag& tag, std::vector<EmbeddedArt>* art) { + bool hasfull = false; AVDictionaryEntry* avtag = nullptr; + // If either description or synopsis is found, assume user wants to use the tag info only while ((avtag = av_dict_get(m_fctx->metadata, "", avtag, AV_DICT_IGNORE_SUFFIX))) { if (strcmp(avtag->key, "title") == 0) @@ -219,9 +224,15 @@ else if (strcmp(avtag->key,"date") == 0) tag.SetYear(atoi(avtag->value)); else if (strcmp(avtag->key, "description") == 0) + { tag.SetPlotOutline(avtag->value); + hasfull = true; + } else if (strcmp(avtag->key, "synopsis") == 0) + { tag.SetPlot(avtag->value); + hasfull = true; + } else if (strcmp(avtag->key, "track") == 0) tag.m_iTrack = std::stoi(avtag->value); else if (strcmp(avtag->key, "album") == 0) @@ -244,5 +255,21 @@ tag.m_coverArt.emplace_back(EmbeddedArtInfo(size, "image/png", type)); } - return CInfoScanner::FULL_NFO; + return hasfull ? CInfoScanner::FULL_NFO : CInfoScanner::TITLE_NFO; +} + +// https://wiki.multimedia.cx/index.php/FFmpeg_Metadata#AVI +CInfoScanner::INFO_TYPE CVideoTagLoaderFFmpeg::LoadAVI(CVideoInfoTag& tag, + std::vector<EmbeddedArt>* art) +{ + AVDictionaryEntry* avtag = nullptr; + while ((avtag = av_dict_get(m_fctx->metadata, "", avtag, AV_DICT_IGNORE_SUFFIX))) + { + if (strcmp(avtag->key, "title") == 0) + tag.SetTitle(avtag->value); + else if (strcmp(avtag->key,"date") == 0) + tag.SetYear(atoi(avtag->value)); + } + + return CInfoScanner::TITLE_NFO; }
View file
_service:download_files:master.tar.gz/xbmc/video/tags/VideoTagLoaderFFmpeg.h
Changed
@@ -66,5 +66,8 @@ //! \brief Load tags from MP4 file. CInfoScanner::INFO_TYPE LoadMP4(CVideoInfoTag& tag, std::vector<EmbeddedArt>* art); + + //! \brief Load tags from AVI file. + CInfoScanner::INFO_TYPE LoadAVI(CVideoInfoTag& tag, std::vector<EmbeddedArt>* art); };
View file
_service:download_files:master.tar.gz/xbmc/windowing/OSScreenSaver.h
Changed
@@ -84,6 +84,16 @@ }; /** + * Dummy implementation of IOSScreenSaver + */ +class CDummyOSScreenSaver : public IOSScreenSaver +{ +public: + void Inhibit() override {} + void Uninhibit() override {} +}; + +/** * Manage the OS screen saver * * This class keeps track of a number of \ref COSScreenSaverInhibitor instances @@ -116,4 +126,4 @@ }; } -} \ No newline at end of file +}
View file
_service:download_files:master.tar.gz/xbmc/windowing/X11/WinSystemX11.cpp
Changed
@@ -612,9 +612,6 @@ { CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__); - // make sure renderer has no invalid references - KODI::MESSAGING::CApplicationMessenger::GetInstance().SendMsg(TMSG_RENDERER_FLUSH); - { CSingleLock lock(m_resourceSection); for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i) (*i)->OnLostDisplay();
View file
_service:download_files:master.tar.gz/xbmc/windowing/gbm/WinSystemGbm.cpp
Changed
@@ -19,7 +19,10 @@ */ #include "WinSystemGbm.h" - +#include "ServiceBroker.h" +#include "settings/DisplaySettings.h" +#include "settings/Settings.h" +#include "settings/lib/Setting.h" #include <string.h> #include "OptionalsReg.h" @@ -31,12 +34,15 @@ #include "../WinEventsLinux.h" #include "DRMAtomic.h" #include "DRMLegacy.h" +#include "messaging/ApplicationMessenger.h" + CWinSystemGbm::CWinSystemGbm() : m_DRM(nullptr), m_GBM(new CGBMUtils), m_nativeDisplay(nullptr), - m_nativeWindow(nullptr) + m_nativeWindow(nullptr), + m_delayDispReset(false) { std::string envSink; if (getenv("AE_SINK")) @@ -115,6 +121,9 @@ bool fullScreen, RESOLUTION_INFO& res) { + //Notify other subsystems that we change resolution + OnLostDevice(); + if(!m_DRM->SetMode(res)) { CLog::Log(LOGERROR, "CWinSystemGbm::%s - failed to set DRM mode", __FUNCTION__); @@ -127,7 +136,7 @@ return false; } - m_nativeWindow = m_GBM->m_surface; + m_nativeWindow = reinterpret_cast<EGLNativeWindowType>(m_GBM->m_surface); CLog::Log(LOGDEBUG, "CWinSystemGbm::%s - initialized GBM", __FUNCTION__); return true; @@ -188,6 +197,9 @@ bool CWinSystemGbm::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays) { + // Notify other subsystems that we will change resolution + OnLostDevice(); + if(!m_DRM->SetMode(res)) { CLog::Log(LOGERROR, "CWinSystemGbm::%s - failed to set DRM mode", __FUNCTION__); @@ -204,6 +216,13 @@ auto result = m_DRM->SetVideoMode(res, bo); m_GBM->ReleaseBuffer(); + int delay = CServiceBroker::GetSettings().GetInt("videoscreen.delayrefreshchange"); + if (delay > 0) + { + m_delayDispReset = true; + m_dispResetTimer.Set(delay * 100); + } + return result; } @@ -246,3 +265,14 @@ m_resources.erase(i); } } + +void CWinSystemGbm::OnLostDevice() +{ + CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__); + + { CSingleLock lock(m_resourceSection); + for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i) + (*i)->OnLostDisplay(); + } +} +
View file
_service:download_files:master.tar.gz/xbmc/windowing/gbm/WinSystemGbm.h
Changed
@@ -61,6 +61,8 @@ std::shared_ptr<CDRMUtils> m_DRM; protected: + void OnLostDevice(); + std::unique_ptr<CGBMUtils> m_GBM; EGLDisplay m_nativeDisplay; @@ -68,4 +70,7 @@ CCriticalSection m_resourceSection; std::vector<IDispResource*> m_resources; + + bool m_delayDispReset; + XbmcThreads::EndTime m_dispResetTimer; };
View file
_service:download_files:master.tar.gz/xbmc/windowing/gbm/WinSystemGbmGLESContext.cpp
Changed
@@ -136,6 +136,14 @@ CWinSystemGbm::SetFullScreen(fullScreen, res, blankOtherDisplays); CRenderSystemGLES::ResetRenderSystem(res.iWidth, res.iHeight); + if (!m_delayDispReset) + { + CSingleLock lock(m_resourceSection); + + for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i) + (*i)->OnResetDisplay(); + } + return true; } @@ -154,6 +162,15 @@ { CWinSystemGbm::WaitVBlank(); } + + if (m_delayDispReset && m_dispResetTimer.IsTimePast()) + { + m_delayDispReset = false; + CSingleLock lock(m_resourceSection); + + for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i) + (*i)->OnResetDisplay(); + } } void CWinSystemGbmGLESContext::delete_CVaapiProxy::operator()(CVaapiProxy *p) const
View file
_service:download_files:master.tar.gz/xbmc/windowing/wayland/WinSystemWayland.cpp
Changed
@@ -1467,7 +1467,7 @@ #endif CLog::LogF(LOGINFO, "No supported method for screen saver inhibition found"); - return nullptr; + return std::unique_ptr<IOSScreenSaver>(new CDummyOSScreenSaver); } std::string CWinSystemWayland::GetClipboardText()
View file
_service:download_files:master.tar.gz/xbmc/windowing/win10/WinSystemWin10.cpp
Changed
@@ -688,9 +688,6 @@ { CLog::Log(LOGDEBUG, "%s - notify display lost event", __FUNCTION__); - // make sure renderer has no invalid references - KODI::MESSAGING::CApplicationMessenger::GetInstance().SendMsg(TMSG_RENDERER_FLUSH); - { CSingleLock lock(m_resourceSection); for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
View file
_service:download_files:master.tar.gz/xbmc/windowing/windows/WinSystemWin32.cpp
Changed
@@ -1002,9 +1002,6 @@ { CLog::LogF(LOGDEBUG, "notify display lost event"); - // make sure renderer has no invalid references - KODI::MESSAGING::CApplicationMessenger::GetInstance().SendMsg(TMSG_RENDERER_FLUSH); - { CSingleLock lock(m_resourceSection); for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
View file
_service:download_files:master.tar.gz/xbmc/windows/GUIWindowLoginScreen.cpp
Changed
@@ -338,11 +338,10 @@ JSONRPC::CJSONRPC::Initialize(); - // Restart context menu manager - CServiceBroker::GetContextMenuManager().Init(); - - // restart PVR services - CServiceBroker::GetPVRManager().Init(); + if (!g_application.m_ServiceManager->InitStageThree()) + { + CLog::Log(LOGERROR, "CGUIWindowLoginScreen - Init3 failed"); + } CServiceBroker::GetFavouritesService().ReInit(profileManager.GetProfileUserDataFolder());
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.